From 00eef3b7f4a820f2d7e080fef1e6256bc9a1a073 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 14 Jan 2026 20:03:04 +0500 Subject: [PATCH 01/18] audit: add module --- app/app.go | 3 + app/app_config.go | 9 + proto/lumera/audit/module/v1/module.proto | 16 + proto/lumera/audit/v1/audit.proto | 73 + proto/lumera/audit/v1/genesis.proto | 17 + proto/lumera/audit/v1/params.proto | 21 + proto/lumera/audit/v1/query.proto | 38 + proto/lumera/audit/v1/tx.proto | 45 + x/audit/v1/README.md | 175 ++ x/audit/v1/keeper/abci.go | 121 + x/audit/v1/keeper/keeper.go | 56 + x/audit/v1/keeper/msg_server.go | 18 + x/audit/v1/keeper/msg_submit_audit_report.go | 157 ++ x/audit/v1/keeper/msg_update_params.go | 35 + x/audit/v1/keeper/params.go | 34 + x/audit/v1/keeper/query.go | 19 + x/audit/v1/keeper/query_audit_status.go | 26 + x/audit/v1/keeper/query_params.go | 13 + x/audit/v1/keeper/state.go | 105 + x/audit/v1/keeper/store.go | 11 + x/audit/v1/keeper/window.go | 182 ++ x/audit/v1/module/autocli.go | 47 + x/audit/v1/module/depinject.go | 66 + x/audit/v1/module/genesis.go | 27 + x/audit/v1/module/module.go | 110 + x/audit/v1/module/module.pb.go | 322 +++ x/audit/v1/module/simulation.go | 23 + x/audit/v1/types/audit.pb.go | 2298 ++++++++++++++++++ x/audit/v1/types/codec.go | 16 + x/audit/v1/types/errors.go | 16 + x/audit/v1/types/genesis.go | 15 + x/audit/v1/types/genesis.pb.go | 321 +++ x/audit/v1/types/keys.go | 57 + x/audit/v1/types/params.go | 145 ++ x/audit/v1/types/params.pb.go | 605 +++++ x/audit/v1/types/query.pb.go | 922 +++++++ x/audit/v1/types/query.pb.gw.go | 254 ++ x/audit/v1/types/tx.pb.go | 1078 ++++++++ 38 files changed, 7496 insertions(+) create mode 100644 proto/lumera/audit/module/v1/module.proto create mode 100644 proto/lumera/audit/v1/audit.proto create mode 100644 proto/lumera/audit/v1/genesis.proto create mode 100644 proto/lumera/audit/v1/params.proto create mode 100644 proto/lumera/audit/v1/query.proto create mode 100644 proto/lumera/audit/v1/tx.proto create mode 100644 x/audit/v1/README.md create mode 100644 x/audit/v1/keeper/abci.go create mode 100644 x/audit/v1/keeper/keeper.go create mode 100644 x/audit/v1/keeper/msg_server.go create mode 100644 x/audit/v1/keeper/msg_submit_audit_report.go create mode 100644 x/audit/v1/keeper/msg_update_params.go create mode 100644 x/audit/v1/keeper/params.go create mode 100644 x/audit/v1/keeper/query.go create mode 100644 x/audit/v1/keeper/query_audit_status.go create mode 100644 x/audit/v1/keeper/query_params.go create mode 100644 x/audit/v1/keeper/state.go create mode 100644 x/audit/v1/keeper/store.go create mode 100644 x/audit/v1/keeper/window.go create mode 100644 x/audit/v1/module/autocli.go create mode 100644 x/audit/v1/module/depinject.go create mode 100644 x/audit/v1/module/genesis.go create mode 100644 x/audit/v1/module/module.go create mode 100644 x/audit/v1/module/module.pb.go create mode 100644 x/audit/v1/module/simulation.go create mode 100644 x/audit/v1/types/audit.pb.go create mode 100644 x/audit/v1/types/codec.go create mode 100644 x/audit/v1/types/errors.go create mode 100644 x/audit/v1/types/genesis.go create mode 100644 x/audit/v1/types/genesis.pb.go create mode 100644 x/audit/v1/types/keys.go create mode 100644 x/audit/v1/types/params.go create mode 100644 x/audit/v1/types/params.pb.go create mode 100644 x/audit/v1/types/query.pb.go create mode 100644 x/audit/v1/types/query.pb.gw.go create mode 100644 x/audit/v1/types/tx.pb.go diff --git a/app/app.go b/app/app.go index 8059d22..9fce9bc 100644 --- a/app/app.go +++ b/app/app.go @@ -79,6 +79,7 @@ import ( upgrades "github.com/LumeraProtocol/lumera/app/upgrades" appParams "github.com/LumeraProtocol/lumera/app/upgrades/params" actionmodulekeeper "github.com/LumeraProtocol/lumera/x/action/v1/keeper" + auditmodulekeeper "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" claimmodulekeeper "github.com/LumeraProtocol/lumera/x/claim/keeper" lumeraidmodulekeeper "github.com/LumeraProtocol/lumera/x/lumeraid/keeper" sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" @@ -147,6 +148,7 @@ type App struct { LumeraidKeeper lumeraidmodulekeeper.Keeper ClaimKeeper claimmodulekeeper.Keeper SupernodeKeeper sntypes.SupernodeKeeper + AuditKeeper auditmodulekeeper.Keeper ActionKeeper actionmodulekeeper.Keeper // this line is used by starport scaffolding # stargate/app/keeperDeclaration @@ -248,6 +250,7 @@ func New( &app.LumeraidKeeper, &app.ClaimKeeper, &app.SupernodeKeeper, + &app.AuditKeeper, &app.ActionKeeper, // this line is used by starport scaffolding # stargate/app/keeperDefinition ); err != nil { diff --git a/app/app_config.go b/app/app_config.go index 3d7191c..93a44d4 100644 --- a/app/app_config.go +++ b/app/app_config.go @@ -37,6 +37,8 @@ import ( upgradetypes "cosmossdk.io/x/upgrade/types" actionmodulev1 "github.com/LumeraProtocol/lumera/x/action/v1/module" actionmoduletypes "github.com/LumeraProtocol/lumera/x/action/v1/types" + auditmodulev1 "github.com/LumeraProtocol/lumera/x/audit/v1/module" + auditmoduletypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" claimmodulev1 "github.com/LumeraProtocol/lumera/x/claim/module" claimmoduletypes "github.com/LumeraProtocol/lumera/x/claim/types" lumeraidmodulev1 "github.com/LumeraProtocol/lumera/x/lumeraid/module" @@ -117,6 +119,7 @@ var ( wasmtypes.ModuleName, claimmoduletypes.ModuleName, supernodemoduletypes.ModuleName, + auditmoduletypes.ModuleName, actionmoduletypes.ModuleName, // this line is used by starport scaffolding # stargate/app/initGenesis } @@ -145,6 +148,7 @@ var ( wasmtypes.ModuleName, claimmoduletypes.ModuleName, supernodemoduletypes.ModuleName, + auditmoduletypes.ModuleName, actionmoduletypes.ModuleName, // this line is used by starport scaffolding # stargate/app/beginBlockers } @@ -166,6 +170,7 @@ var ( wasmtypes.ModuleName, claimmoduletypes.ModuleName, supernodemoduletypes.ModuleName, + auditmoduletypes.ModuleName, actionmoduletypes.ModuleName, // this line is used by starport scaffolding # stargate/app/endBlockers } @@ -333,6 +338,10 @@ var ( Name: supernodemoduletypes.ModuleName, Config: appconfig.WrapAny(&supernodemodulev1.Module{}), }, + { + Name: auditmoduletypes.ModuleName, + Config: appconfig.WrapAny(&auditmodulev1.Module{}), + }, { Name: actionmoduletypes.ModuleName, Config: appconfig.WrapAny(&actionmodulev1.Module{}), diff --git a/proto/lumera/audit/module/v1/module.proto b/proto/lumera/audit/module/v1/module.proto new file mode 100644 index 0000000..e70f4f4 --- /dev/null +++ b/proto/lumera/audit/module/v1/module.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package lumera.audit.module.v1; + +option go_package = "x/audit/v1/module;audit"; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/LumeraProtocol/lumera/x/audit/v1" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/proto/lumera/audit/v1/audit.proto b/proto/lumera/audit/v1/audit.proto new file mode 100644 index 0000000..836e723 --- /dev/null +++ b/proto/lumera/audit/v1/audit.proto @@ -0,0 +1,73 @@ +syntax = "proto3"; +package lumera.audit.v1; + +option go_package = "x/audit/v1/types"; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +enum PortState { + PORT_STATE_UNKNOWN = 0; + PORT_STATE_OPEN = 1; + PORT_STATE_CLOSED = 2; +} + +message AuditSelfReport { + double cpu_usage_percent = 1; + double mem_usage_percent = 2; + double disk_usage_percent = 3; + + // Ordered like Params.required_open_ports. + repeated PortState inbound_port_states = 4; + + uint32 failed_actions_count = 5; +} + +message AuditPeerObservation { + string target_validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // Ordered like Params.required_open_ports. + repeated PortState port_states = 2; +} + +message AuditReport { + string reporter_validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 3; + int64 report_height = 4; + + AuditSelfReport self_report = 5 [(gogoproto.nullable) = false]; + repeated AuditPeerObservation peer_observations = 6; +} + +message AuditStatus { + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + uint64 last_reported_window_id = 2; + int64 last_report_height = 3; + + bool compliant = 4; + repeated string reasons = 5; + + // Summary reachability states (last evaluated window). + repeated PortState required_ports_state = 6; +} + +message PortEvidenceAggregate { + uint32 count = 1; + PortState first_state = 2; + bool conflict = 3; +} + +message WindowSnapshot { + uint64 window_id = 1; + int64 window_start_height = 2; + + bytes seed_bytes = 3; + + repeated string senders = 4 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + repeated string receivers = 5 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + uint32 k_window = 6; +} diff --git a/proto/lumera/audit/v1/genesis.proto b/proto/lumera/audit/v1/genesis.proto new file mode 100644 index 0000000..fe8818b --- /dev/null +++ b/proto/lumera/audit/v1/genesis.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package lumera.audit.v1; + +option go_package = "x/audit/v1/types"; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; + +import "lumera/audit/v1/params.proto"; + +// GenesisState defines the audit module's genesis state. +message GenesisState { + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} diff --git a/proto/lumera/audit/v1/params.proto b/proto/lumera/audit/v1/params.proto new file mode 100644 index 0000000..bceb0c7 --- /dev/null +++ b/proto/lumera/audit/v1/params.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +package lumera.audit.v1; + +option go_package = "x/audit/v1/types"; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; + +// Params defines the parameters for the audit module. +message Params { + option (gogoproto.equal) = true; + + uint64 reporting_window_blocks = 1; + uint64 missing_report_grace_blocks = 2; + + uint32 peer_quorum_reports = 3; + uint32 min_probe_targets_per_window = 4; + uint32 max_probe_targets_per_window = 5; + + repeated uint32 required_open_ports = 6; +} diff --git a/proto/lumera/audit/v1/query.proto b/proto/lumera/audit/v1/query.proto new file mode 100644 index 0000000..88a875b --- /dev/null +++ b/proto/lumera/audit/v1/query.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; +package lumera.audit.v1; + +option go_package = "x/audit/v1/types"; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos_proto/cosmos.proto"; + +import "lumera/audit/v1/params.proto"; +import "lumera/audit/v1/audit.proto"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/params"; + } + + rpc AuditStatus(QueryAuditStatusRequest) returns (QueryAuditStatusResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_status/{validator_address}"; + } +} + +message QueryParamsRequest {} + +message QueryParamsResponse { + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +message QueryAuditStatusRequest { + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +message QueryAuditStatusResponse { + AuditStatus status = 1 [(gogoproto.nullable) = false]; +} diff --git a/proto/lumera/audit/v1/tx.proto b/proto/lumera/audit/v1/tx.proto new file mode 100644 index 0000000..5191827 --- /dev/null +++ b/proto/lumera/audit/v1/tx.proto @@ -0,0 +1,45 @@ +syntax = "proto3"; +package lumera.audit.v1; + +option go_package = "x/audit/v1/types"; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; + +import "lumera/audit/v1/audit.proto"; +import "lumera/audit/v1/params.proto"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + rpc SubmitAuditReport(MsgSubmitAuditReport) returns (MsgSubmitAuditReportResponse); +} + +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "lumera/x/audit/v1/MsgUpdateParams"; + + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +message MsgUpdateParamsResponse {} + +message MsgSubmitAuditReport { + option (cosmos.msg.v1.signer) = "supernode_account"; + + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + + AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; + repeated AuditPeerObservation peer_observations = 4; +} + +message MsgSubmitAuditReportResponse {} diff --git a/x/audit/v1/README.md b/x/audit/v1/README.md new file mode 100644 index 0000000..e5e5e47 --- /dev/null +++ b/x/audit/v1/README.md @@ -0,0 +1,175 @@ +# Audit Module (v1) + +## Contents +1. [Abstract](#abstract) +2. [Overview](#overview) +3. [Genesis State Implementation](#genesis-state-implementation) +4. [Components](#components) +5. [State Transitions](#state-transitions) +6. [Messages](#messages) +7. [Queries](#queries) +8. [Events](#events) +9. [Parameters](#parameters) +10. [Client](#client) + +## Abstract + +The Audit module provides deterministic, window-based reporting and peer reachability observations for supernodes. It aggregates peer evidence per window and enforces minimum participation by postponing ACTIVE supernodes that fail to submit required reports after a grace period. + +## Overview + +High-level behavior: +- The chain advances in deterministic reporting windows derived from block height. +- At each window start, the module snapshots the ACTIVE set (senders) and the ACTIVE+POSTPONED set (receivers), plus a window seed. +- ACTIVE supernodes submit one report per window: + - self metrics (self-attested) + - peer reachability observations for deterministically assigned targets +- Peer observations are aggregated per `(window_id, target_validator_address, port_index)` using quorum + unanimity semantics. +- After the grace period, any ACTIVE sender in the window snapshot that did not submit a report is transitioned to POSTPONED. + +Note: this implementation currently focuses on windowing, deterministic assignment, evidence aggregation, and missing-report postponement. Resource threshold enforcement and POSTPONED recovery via peer consensus are not yet implemented. + +## Genesis State Implementation + +The Audit module genesis state only initializes module parameters: + +```protobuf +message GenesisState { + Params params = 1; +} +``` + +## Components + +### 1. Params + +Module parameters are defined in `proto/lumera/audit/v1/params.proto` and persisted under a module store key. + +Key fields: +- `reporting_window_blocks` +- `missing_report_grace_blocks` +- `peer_quorum_reports` +- `min_probe_targets_per_window` +- `max_probe_targets_per_window` +- `required_open_ports` + +### 2. Window Origin and Window IDs + +On first use, the module stores a `window_origin_height` and uses it to derive: +- `window_id` +- `window_start_height` +- `window_end_height` + +### 3. Window Snapshots + +At `window_start_height`, the module stores a `WindowSnapshot`: +- `seed_bytes` (from the block header hash) +- ordered `senders` (ACTIVE validator addresses) +- ordered `receivers` (ACTIVE + POSTPONED validator addresses) +- `k_window` (targets assigned per sender for the window) + +Snapshots make target assignment deterministic for the entire window, even if membership changes mid-window. + +### 4. Reports + +Reports are stored per `(window_id, reporter_validator_address)` and include: +- `supernode_account` +- `self_report` +- `peer_observations` + +Uniqueness is enforced (one report per reporter per window). + +### 5. Evidence Aggregates + +Evidence is aggregated per `(window_id, target_validator_address, port_index)` as: +- `count` of distinct probers contributing OPEN/CLOSED +- `first_state` (OPEN/CLOSED) +- `conflict` flag (true if any prober disagrees with first_state) + +Consensus state derivation: +- if `count < peer_quorum_reports` => `UNKNOWN` +- if `conflict == true` => `UNKNOWN` +- else => `first_state` + +### 6. Audit Status + +`AuditStatus` provides a compact, queryable view per validator: +- last reported window + height +- compliance flag and bounded reasons +- last-derived `required_ports_state` (ordered like `required_open_ports`) + +## State Transitions + +### Report submission + +On `MsgSubmitAuditReport`: +1. Resolve reporter validator address from `supernode_account` via `x/supernode`. +2. Validate window acceptance (from `window_start_height` until `window_end_height + grace`). +3. Enforce per-window uniqueness for the reporter. +4. If reporter is ACTIVE, validate peer observation targets match deterministic assignment from the window snapshot. +5. Persist the report and update evidence aggregates and `AuditStatus`. + +### Missing report enforcement + +After `missing_report_grace_blocks` past `window_end_height`, for the enforced window: +- For each sender in the window snapshot without a report, transition the corresponding supernode to POSTPONED and record `"missing_report"` in its `AuditStatus`. + +## Messages + +### MsgSubmitAuditReport + +Signed by `supernode_account`: + +```protobuf +message MsgSubmitAuditReport { + string supernode_account = 1; + uint64 window_id = 2; + AuditSelfReport self_report = 3; + repeated AuditPeerObservation peer_observations = 4; +} +``` + +### MsgUpdateParams + +Governance-authority-gated parameter update: + +```protobuf +message MsgUpdateParams { + string authority = 1; + Params params = 2; +} +``` + +## Queries + +### Params + +Returns current module params: +- gRPC: `Query/Params` +- REST: `GET /LumeraProtocol/lumera/audit/v1/params` + +### AuditStatus + +Returns `AuditStatus` for a validator: +- gRPC: `Query/AuditStatus` +- REST: `GET /LumeraProtocol/lumera/audit/v1/audit_status/{validator_address}` + +## Events + +The module currently emits the `x/supernode` postponement event when a sender misses a report window. Audit-specific events are not yet emitted. + +## Parameters + +Default values (as implemented in `x/audit/v1/types/params.go`): +- `reporting_window_blocks`: `400` +- `missing_report_grace_blocks`: `100` +- `peer_quorum_reports`: `3` +- `min_probe_targets_per_window`: `3` +- `max_probe_targets_per_window`: `5` +- `required_open_ports`: `[4444, 4445, 8002]` + +## Client + +- gRPC query service: `lumera.audit.v1.Query` +- gRPC msg service: `lumera.audit.v1.Msg` +- REST endpoints are defined via `google.api.http` annotations in `proto/lumera/audit/v1/query.proto`. diff --git a/x/audit/v1/keeper/abci.go b/x/audit/v1/keeper/abci.go new file mode 100644 index 0000000..9f102d3 --- /dev/null +++ b/x/audit/v1/keeper/abci.go @@ -0,0 +1,121 @@ +package keeper + +import ( + "context" + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" +) + +func (k Keeper) BeginBlocker(ctx context.Context) error { + sdkCtx := sdk.UnwrapSDKContext(ctx) + params := k.GetParams(ctx).WithDefaults() + + origin := k.getOrInitWindowOriginHeight(sdkCtx) + currentWindowID := k.windowIDAtHeight(origin, params, sdkCtx.BlockHeight()) + windowStart := k.windowStartHeight(origin, params, currentWindowID) + + // Only create the snapshot exactly at the window start height. + if sdkCtx.BlockHeight() != windowStart { + return nil + } + + return k.CreateWindowSnapshotIfNeeded(sdkCtx, currentWindowID, params) +} + +func (k Keeper) EndBlocker(ctx context.Context) error { + sdkCtx := sdk.UnwrapSDKContext(ctx) + params := k.GetParams(ctx).WithDefaults() + + origin := k.getOrInitWindowOriginHeight(sdkCtx) + height := sdkCtx.BlockHeight() + grace := int64(params.MissingReportGraceBlocks) + if height < origin+grace+1 { + return nil + } + + candidateHeight := height - grace - 1 + if candidateHeight < origin { + return nil + } + + windowToEnforce := k.windowIDAtHeight(origin, params, candidateHeight) + enforceHeight := k.windowEndHeight(origin, params, windowToEnforce) + grace + 1 + if height != enforceHeight { + return nil + } + + snap, found := k.GetWindowSnapshot(sdkCtx, windowToEnforce) + if !found { + // Snapshot missing means we cannot deterministically decide who was required to report. + return nil + } + + for _, sender := range snap.Senders { + if k.HasReport(sdkCtx, windowToEnforce, sender) { + continue + } + + if err := k.postponeSupernodeForMissingReport(sdkCtx, sender, windowToEnforce); err != nil { + return err + } + + status, ok := k.GetAuditStatus(sdkCtx, sender) + if !ok { + status = types.AuditStatus{ + ValidatorAddress: sender, + } + } + status.Compliant = false + status.Reasons = []string{"missing_report"} + if err := k.SetAuditStatus(sdkCtx, status); err != nil { + return err + } + } + + return nil +} + +func (k Keeper) postponeSupernodeForMissingReport(ctx sdk.Context, validatorAddress string, windowID uint64) error { + valAddr, err := sdk.ValAddressFromBech32(validatorAddress) + if err != nil { + return err + } + + sn, found := k.supernodeKeeper.QuerySuperNode(ctx, valAddr) + if !found { + return nil + } + if len(sn.States) == 0 { + return nil + } + + last := sn.States[len(sn.States)-1] + if last.State == sntypes.SuperNodeStatePostponed { + return nil + } + + sn.States = append(sn.States, &sntypes.SuperNodeStateRecord{ + State: sntypes.SuperNodeStatePostponed, + Height: ctx.BlockHeight(), + }) + + if err := k.supernodeKeeper.SetSuperNode(ctx, sn); err != nil { + return err + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + sntypes.EventTypeSupernodePostponed, + sdk.NewAttribute(sntypes.AttributeKeyValidatorAddress, sn.ValidatorAddress), + sdk.NewAttribute(sntypes.AttributeKeyOldState, last.State.String()), + sdk.NewAttribute(sntypes.AttributeKeyReason, fmt.Sprintf("audit missing report (window_id=%d)", windowID)), + ), + ) + + return nil +} + diff --git a/x/audit/v1/keeper/keeper.go b/x/audit/v1/keeper/keeper.go new file mode 100644 index 0000000..2cc6c0a --- /dev/null +++ b/x/audit/v1/keeper/keeper.go @@ -0,0 +1,56 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/core/address" + corestore "cosmossdk.io/core/store" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/codec" + + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" +) + +type Keeper struct { + cdc codec.BinaryCodec + addressCodec address.Codec + storeService corestore.KVStoreService + logger log.Logger + + // the address capable of executing a MsgUpdateParams message. Typically, this + // should be the x/gov module account. + authority []byte + + supernodeKeeper sntypes.SupernodeKeeper +} + +func NewKeeper( + cdc codec.BinaryCodec, + addressCodec address.Codec, + storeService corestore.KVStoreService, + logger log.Logger, + authority []byte, + supernodeKeeper sntypes.SupernodeKeeper, +) Keeper { + if _, err := addressCodec.BytesToString(authority); err != nil { + panic(fmt.Sprintf("invalid authority address: %s", err)) + } + + return Keeper{ + cdc: cdc, + addressCodec: addressCodec, + storeService: storeService, + logger: logger, + authority: authority, + supernodeKeeper: supernodeKeeper, + } +} + +func (k Keeper) GetAuthority() []byte { + return k.authority +} + +func (k Keeper) Logger() log.Logger { + return k.logger.With("module", "x/audit") +} + diff --git a/x/audit/v1/keeper/msg_server.go b/x/audit/v1/keeper/msg_server.go new file mode 100644 index 0000000..2fdb9ba --- /dev/null +++ b/x/audit/v1/keeper/msg_server.go @@ -0,0 +1,18 @@ +package keeper + +import "github.com/LumeraProtocol/lumera/x/audit/v1/types" + +type msgServer struct { + types.UnimplementedMsgServer + Keeper +} + +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{ + UnimplementedMsgServer: types.UnimplementedMsgServer{}, + Keeper: keeper, + } +} + +var _ types.MsgServer = msgServer{} + diff --git a/x/audit/v1/keeper/msg_submit_audit_report.go b/x/audit/v1/keeper/msg_submit_audit_report.go new file mode 100644 index 0000000..dcda878 --- /dev/null +++ b/x/audit/v1/keeper/msg_submit_audit_report.go @@ -0,0 +1,157 @@ +package keeper + +import ( + "context" + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" +) + +func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAuditReport) (*types.MsgSubmitAuditReportResponse, error) { + if req == nil { + return nil, errorsmod.Wrap(types.ErrInvalidSigner, "empty request") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + params := m.GetParams(ctx).WithDefaults() + origin := m.getOrInitWindowOriginHeight(sdkCtx) + + // Enforce window_id acceptance: allow submitting for a window until end+grace. + windowStart := m.windowStartHeight(origin, params, req.WindowId) + windowEnd := m.windowEndHeight(origin, params, req.WindowId) + graceEnd := windowEnd + int64(params.MissingReportGraceBlocks) + if sdkCtx.BlockHeight() < windowStart || sdkCtx.BlockHeight() > graceEnd { + return nil, errorsmod.Wrapf(types.ErrInvalidWindowID, "window_id not accepted at height %d", sdkCtx.BlockHeight()) + } + + sn, found, err := m.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.SupernodeAccount) + if err != nil { + return nil, err + } + if !found { + return nil, errorsmod.Wrap(types.ErrReporterNotFound, "unknown supernode_account") + } + + reporterValidator := sn.ValidatorAddress + if m.HasReport(sdkCtx, req.WindowId, reporterValidator) { + return nil, errorsmod.Wrap(types.ErrDuplicateReport, "report already submitted for this window") + } + + // Ensure the snapshot exists for deterministic assignment checks. + snap, hasSnap := m.GetWindowSnapshot(sdkCtx, req.WindowId) + if !hasSnap { + return nil, errorsmod.Wrap(types.ErrWindowSnapshotNotFound, "missing window snapshot") + } + + requiredPorts := params.RequiredOpenPorts + requiredPortsCount := len(requiredPorts) + for _, obs := range req.PeerObservations { + if len(obs.PortStates) != requiredPortsCount { + return nil, errorsmod.Wrapf(types.ErrInvalidPortStatesLength, "expected %d port states", requiredPortsCount) + } + } + + // Reporter state gating. + lastState := sntypes.SuperNodeStateUnspecified + if len(sn.States) > 0 { + lastState = sn.States[len(sn.States)-1].State + } + + switch lastState { + case sntypes.SuperNodeStateActive: + // Validate deterministic assignment only if the reporter is in the snapshot senders list. + expectedTargets, ok := assignedTargets(snap, reporterValidator) + if !ok { + // ACTIVE but not a sender for this window snapshot: reject peer observations. + if len(req.PeerObservations) != 0 { + return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "reporter not a sender for this window") + } + break + } + + if len(req.PeerObservations) != len(expectedTargets) { + return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "expected %d peer observations", len(expectedTargets)) + } + for i := range expectedTargets { + if req.PeerObservations[i].TargetValidatorAddress != expectedTargets[i] { + return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "peer observations must match assigned targets (order-sensitive)") + } + } + case sntypes.SuperNodeStatePostponed: + if len(req.PeerObservations) != 0 { + return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "postponed reporters must not submit peer observations") + } + default: + return nil, errorsmod.Wrap(types.ErrInvalidReporterState, fmt.Sprintf("unsupported reporter state: %s", lastState.String())) + } + + report := types.AuditReport{ + ReporterValidatorAddress: reporterValidator, + SupernodeAccount: req.SupernodeAccount, + WindowId: req.WindowId, + ReportHeight: sdkCtx.BlockHeight(), + SelfReport: req.SelfReport, + PeerObservations: req.PeerObservations, + } + + if err := m.SetReport(sdkCtx, report); err != nil { + return nil, err + } + + // Update reporter status (self-report tracking). + status, ok := m.GetAuditStatus(sdkCtx, reporterValidator) + if !ok { + status = types.AuditStatus{ + ValidatorAddress: reporterValidator, + } + } + status.LastReportedWindowId = req.WindowId + status.LastReportHeight = sdkCtx.BlockHeight() + status.Compliant = true + status.Reasons = nil + if err := m.SetAuditStatus(sdkCtx, status); err != nil { + return nil, err + } + + // Update evidence aggregates for targets. + for _, obs := range req.PeerObservations { + for portIdx, state := range obs.PortStates { + if state == types.PortState_PORT_STATE_UNKNOWN { + continue + } + + idx := uint32(portIdx) + agg, found := m.GetEvidenceAggregate(sdkCtx, req.WindowId, obs.TargetValidatorAddress, idx) + if !found { + agg = types.PortEvidenceAggregate{ + Count: 0, + FirstState: state, + Conflict: false, + } + } + + agg.Count++ + if agg.Count == 1 { + agg.FirstState = state + } else if state != agg.FirstState { + agg.Conflict = true + } + + if err := m.SetEvidenceAggregate(sdkCtx, req.WindowId, obs.TargetValidatorAddress, idx, agg); err != nil { + return nil, err + } + + consensus := consensusFromAggregate(agg, params.PeerQuorumReports) + if err := m.setRequiredPortsState(sdkCtx, obs.TargetValidatorAddress, requiredPortsCount, idx, consensus); err != nil { + return nil, err + } + } + } + + return &types.MsgSubmitAuditReportResponse{}, nil +} + diff --git a/x/audit/v1/keeper/msg_update_params.go b/x/audit/v1/keeper/msg_update_params.go new file mode 100644 index 0000000..3a06ac6 --- /dev/null +++ b/x/audit/v1/keeper/msg_update_params.go @@ -0,0 +1,35 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (m msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if req == nil { + return nil, errorsmod.Wrap(types.ErrInvalidSigner, "empty request") + } + + authority, err := m.addressCodec.BytesToString(m.authority) + if err != nil { + return nil, err + } + if req.Authority != authority { + return nil, errorsmod.Wrap(types.ErrInvalidSigner, "invalid authority") + } + + params := req.Params.WithDefaults() + if err := params.Validate(); err != nil { + return nil, err + } + + if err := m.SetParams(ctx, params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} + diff --git a/x/audit/v1/keeper/params.go b/x/audit/v1/keeper/params.go new file mode 100644 index 0000000..4283a20 --- /dev/null +++ b/x/audit/v1/keeper/params.go @@ -0,0 +1,34 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/runtime" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (k Keeper) GetParams(ctx context.Context) (params types.Params) { + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + bz := store.Get(types.ParamsKey) + if bz == nil { + return types.DefaultParams() + } + + k.cdc.MustUnmarshal(bz, ¶ms) + return params.WithDefaults() +} + +func (k Keeper) SetParams(ctx context.Context, params types.Params) error { + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + params = params.WithDefaults() + + bz, err := k.cdc.Marshal(¶ms) + if err != nil { + return err + } + + store.Set(types.ParamsKey, bz) + return nil +} + diff --git a/x/audit/v1/keeper/query.go b/x/audit/v1/keeper/query.go new file mode 100644 index 0000000..c38a9ea --- /dev/null +++ b/x/audit/v1/keeper/query.go @@ -0,0 +1,19 @@ +package keeper + +import "github.com/LumeraProtocol/lumera/x/audit/v1/types" + +type queryServer struct { + types.UnimplementedQueryServer + + k Keeper +} + +var _ types.QueryServer = queryServer{} + +func NewQueryServerImpl(k Keeper) types.QueryServer { + return queryServer{ + UnimplementedQueryServer: types.UnimplementedQueryServer{}, + k: k, + } +} + diff --git a/x/audit/v1/keeper/query_audit_status.go b/x/audit/v1/keeper/query_audit_status.go new file mode 100644 index 0000000..7a146f1 --- /dev/null +++ b/x/audit/v1/keeper/query_audit_status.go @@ -0,0 +1,26 @@ +package keeper + +import ( + "context" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (q queryServer) AuditStatus(ctx context.Context, req *types.QueryAuditStatusRequest) (*types.QueryAuditStatusResponse, error) { + if req == nil { + return &types.QueryAuditStatusResponse{Status: types.AuditStatus{}}, nil + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + status, found := q.k.GetAuditStatus(sdkCtx, req.ValidatorAddress) + if !found { + status = types.AuditStatus{ + ValidatorAddress: req.ValidatorAddress, + Compliant: true, + } + } + + return &types.QueryAuditStatusResponse{Status: status}, nil +} + diff --git a/x/audit/v1/keeper/query_params.go b/x/audit/v1/keeper/query_params.go new file mode 100644 index 0000000..32cff4c --- /dev/null +++ b/x/audit/v1/keeper/query_params.go @@ -0,0 +1,13 @@ +package keeper + +import ( + "context" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (q queryServer) Params(ctx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + params := q.k.GetParams(ctx).WithDefaults() + return &types.QueryParamsResponse{Params: params}, nil +} + diff --git a/x/audit/v1/keeper/state.go b/x/audit/v1/keeper/state.go new file mode 100644 index 0000000..9cb72a6 --- /dev/null +++ b/x/audit/v1/keeper/state.go @@ -0,0 +1,105 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (k Keeper) HasReport(ctx sdk.Context, windowID uint64, reporterValidatorAddress string) bool { + store := k.kvStore(ctx) + return store.Has(types.ReportKey(windowID, reporterValidatorAddress)) +} + +func (k Keeper) GetReport(ctx sdk.Context, windowID uint64, reporterValidatorAddress string) (types.AuditReport, bool) { + store := k.kvStore(ctx) + bz := store.Get(types.ReportKey(windowID, reporterValidatorAddress)) + if bz == nil { + return types.AuditReport{}, false + } + var r types.AuditReport + k.cdc.MustUnmarshal(bz, &r) + return r, true +} + +func (k Keeper) SetReport(ctx sdk.Context, r types.AuditReport) error { + store := k.kvStore(ctx) + bz, err := k.cdc.Marshal(&r) + if err != nil { + return err + } + store.Set(types.ReportKey(r.WindowId, r.ReporterValidatorAddress), bz) + return nil +} + +func (k Keeper) GetEvidenceAggregate(ctx sdk.Context, windowID uint64, targetValidatorAddress string, portIndex uint32) (types.PortEvidenceAggregate, bool) { + store := k.kvStore(ctx) + bz := store.Get(types.EvidenceKey(windowID, targetValidatorAddress, portIndex)) + if bz == nil { + return types.PortEvidenceAggregate{}, false + } + var a types.PortEvidenceAggregate + k.cdc.MustUnmarshal(bz, &a) + return a, true +} + +func (k Keeper) SetEvidenceAggregate(ctx sdk.Context, windowID uint64, targetValidatorAddress string, portIndex uint32, a types.PortEvidenceAggregate) error { + store := k.kvStore(ctx) + bz, err := k.cdc.Marshal(&a) + if err != nil { + return err + } + store.Set(types.EvidenceKey(windowID, targetValidatorAddress, portIndex), bz) + return nil +} + +func (k Keeper) GetAuditStatus(ctx sdk.Context, validatorAddress string) (types.AuditStatus, bool) { + store := k.kvStore(ctx) + bz := store.Get(types.AuditStatusKey(validatorAddress)) + if bz == nil { + return types.AuditStatus{}, false + } + var s types.AuditStatus + k.cdc.MustUnmarshal(bz, &s) + return s, true +} + +func (k Keeper) SetAuditStatus(ctx sdk.Context, s types.AuditStatus) error { + store := k.kvStore(ctx) + bz, err := k.cdc.Marshal(&s) + if err != nil { + return err + } + store.Set(types.AuditStatusKey(s.ValidatorAddress), bz) + return nil +} + +func consensusFromAggregate(a types.PortEvidenceAggregate, quorum uint32) types.PortState { + if a.Count < quorum { + return types.PortState_PORT_STATE_UNKNOWN + } + if a.Conflict { + return types.PortState_PORT_STATE_UNKNOWN + } + return a.FirstState +} + +func (k Keeper) setRequiredPortsState(ctx sdk.Context, validatorAddress string, requiredPortsCount int, portIndex uint32, state types.PortState) error { + status, found := k.GetAuditStatus(ctx, validatorAddress) + if !found { + status = types.AuditStatus{ + ValidatorAddress: validatorAddress, + Compliant: true, + } + } + + if len(status.RequiredPortsState) != requiredPortsCount { + status.RequiredPortsState = make([]types.PortState, requiredPortsCount) + } + + if int(portIndex) < len(status.RequiredPortsState) { + status.RequiredPortsState[portIndex] = state + } + + return k.SetAuditStatus(ctx, status) +} diff --git a/x/audit/v1/keeper/store.go b/x/audit/v1/keeper/store.go new file mode 100644 index 0000000..bebc560 --- /dev/null +++ b/x/audit/v1/keeper/store.go @@ -0,0 +1,11 @@ +package keeper + +import ( + "github.com/cosmos/cosmos-sdk/runtime" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (k Keeper) kvStore(ctx sdk.Context) storetypes.KVStore { + return runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) +} diff --git a/x/audit/v1/keeper/window.go b/x/audit/v1/keeper/window.go new file mode 100644 index 0000000..433824c --- /dev/null +++ b/x/audit/v1/keeper/window.go @@ -0,0 +1,182 @@ +package keeper + +import ( + "encoding/binary" + "sort" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" +) + +func (k Keeper) getOrInitWindowOriginHeight(ctx sdk.Context) int64 { + store := k.kvStore(ctx) + bz := store.Get(types.WindowOriginHeightKey()) + if len(bz) == 8 { + return int64(binary.BigEndian.Uint64(bz)) + } + + origin := ctx.BlockHeight() + out := make([]byte, 8) + binary.BigEndian.PutUint64(out, uint64(origin)) + store.Set(types.WindowOriginHeightKey(), out) + return origin +} + +func (k Keeper) windowStartHeight(origin int64, params types.Params, windowID uint64) int64 { + return origin + int64(windowID)*int64(params.ReportingWindowBlocks) +} + +func (k Keeper) windowEndHeight(origin int64, params types.Params, windowID uint64) int64 { + return k.windowStartHeight(origin, params, windowID) + int64(params.ReportingWindowBlocks) - 1 +} + +func (k Keeper) windowIDAtHeight(origin int64, params types.Params, height int64) uint64 { + if height < origin { + return 0 + } + return uint64((height - origin) / int64(params.ReportingWindowBlocks)) +} + +func computeKWindow(params types.Params, sendersCount, receiversCount int) uint32 { + if sendersCount <= 0 || receiversCount <= 1 { + return 0 + } + + a := uint64(sendersCount) + n := uint64(receiversCount) + q := uint64(params.PeerQuorumReports) + + kNeeded := (q*n + a - 1) / a + + kMin := uint64(params.MinProbeTargetsPerWindow) + kMax := uint64(params.MaxProbeTargetsPerWindow) + if kNeeded < kMin { + kNeeded = kMin + } + if kNeeded > kMax { + kNeeded = kMax + } + + // Avoid self + no duplicates. + if kNeeded > n-1 { + kNeeded = n - 1 + } + + return uint32(kNeeded) +} + +func (k Keeper) GetWindowSnapshot(ctx sdk.Context, windowID uint64) (types.WindowSnapshot, bool) { + store := k.kvStore(ctx) + bz := store.Get(types.WindowSnapshotKey(windowID)) + if bz == nil { + return types.WindowSnapshot{}, false + } + var snap types.WindowSnapshot + k.cdc.MustUnmarshal(bz, &snap) + return snap, true +} + +func (k Keeper) SetWindowSnapshot(ctx sdk.Context, snap types.WindowSnapshot) error { + store := k.kvStore(ctx) + bz, err := k.cdc.Marshal(&snap) + if err != nil { + return err + } + store.Set(types.WindowSnapshotKey(snap.WindowId), bz) + return nil +} + +func (k Keeper) CreateWindowSnapshotIfNeeded(ctx sdk.Context, windowID uint64, params types.Params) error { + if _, found := k.GetWindowSnapshot(ctx, windowID); found { + return nil + } + + active, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStateActive) + if err != nil { + return err + } + receiversSN, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStateActive, sntypes.SuperNodeStatePostponed) + if err != nil { + return err + } + + senders := make([]string, 0, len(active)) + for _, sn := range active { + senders = append(senders, sn.ValidatorAddress) + } + receivers := make([]string, 0, len(receiversSN)) + for _, sn := range receiversSN { + receivers = append(receivers, sn.ValidatorAddress) + } + + sort.Strings(senders) + sort.Strings(receivers) + + snap := types.WindowSnapshot{ + WindowId: windowID, + WindowStartHeight: ctx.BlockHeight(), + SeedBytes: ctx.HeaderHash(), + Senders: senders, + Receivers: receivers, + KWindow: computeKWindow(params, len(senders), len(receivers)), + } + + return k.SetWindowSnapshot(ctx, snap) +} + +func assignedTargets(snapshot types.WindowSnapshot, senderValidatorAddress string) ([]string, bool) { + kWindow := int(snapshot.KWindow) + if kWindow == 0 || len(snapshot.Receivers) == 0 { + return []string{}, true + } + + senderIndex := -1 + for i, s := range snapshot.Senders { + if s == senderValidatorAddress { + senderIndex = i + break + } + } + if senderIndex < 0 { + return nil, false + } + + seed := snapshot.SeedBytes + if len(seed) < 8 { + return nil, false + } + offsetU64 := binary.BigEndian.Uint64(seed[:8]) + n := len(snapshot.Receivers) + offset := int(offsetU64 % uint64(n)) + + seen := make(map[int]struct{}, kWindow) + out := make([]string, 0, kWindow) + + for j := 0; j < kWindow; j++ { + slot := senderIndex*kWindow + j + candidate := (offset + slot) % n + + tries := 0 + for tries < n { + if snapshot.Receivers[candidate] != senderValidatorAddress { + if _, ok := seen[candidate]; !ok { + break + } + } + candidate = (candidate + 1) % n + tries++ + } + + if tries >= n { + break + } + + seen[candidate] = struct{}{} + out = append(out, snapshot.Receivers[candidate]) + } + + return out, true +} + diff --git a/x/audit/v1/module/autocli.go b/x/audit/v1/module/autocli.go new file mode 100644 index 0000000..6f616f1 --- /dev/null +++ b/x/audit/v1/module/autocli.go @@ -0,0 +1,47 @@ +package audit + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: types.Query_serviceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Shows the parameters of the module", + }, + { + RpcMethod: "AuditStatus", + Use: "audit-status [validator-address]", + Short: "Query audit status for a validator", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "validator_address"}}, + }, + // this line is used by ignite scaffolding # autocli/query + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: types.Msg_serviceDesc.ServiceName, + EnhanceCustomCommand: true, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "UpdateParams", + Skip: true, + }, + { + RpcMethod: "SubmitAuditReport", + Use: "submit-audit-report [window-id] [self-report-json]", + Short: "Submit an audit report (peer observations encoded in JSON via flags)", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "window_id"}, {ProtoField: "self_report"}}, + }, + // this line is used by ignite scaffolding # autocli/tx + }, + }, + } +} + diff --git a/x/audit/v1/module/depinject.go b/x/audit/v1/module/depinject.go new file mode 100644 index 0000000..353d84b --- /dev/null +++ b/x/audit/v1/module/depinject.go @@ -0,0 +1,66 @@ +package audit + +import ( + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/depinject/appconfig" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/codec" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" +) + +var _ depinject.OnePerModuleType = AppModule{} + +func (AppModule) IsOnePerModuleType() {} + +func init() { + appconfig.Register( + &Module{}, + appconfig.Provide(ProvideModule), + ) +} + +type ModuleInputs struct { + depinject.In + + Config *Module + StoreService store.KVStoreService + Cdc codec.Codec + AddressCodec address.Codec + Logger log.Logger + + SupernodeKeeper sntypes.SupernodeKeeper +} + +type ModuleOutputs struct { + depinject.Out + + AuditKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + + k := keeper.NewKeeper( + in.Cdc, + in.AddressCodec, + in.StoreService, + in.Logger, + authority, + in.SupernodeKeeper, + ) + + m := NewAppModule(in.Cdc, k) + + return ModuleOutputs{AuditKeeper: k, Module: m} +} diff --git a/x/audit/v1/module/genesis.go b/x/audit/v1/module/genesis.go new file mode 100644 index 0000000..890eeb8 --- /dev/null +++ b/x/audit/v1/module/genesis.go @@ -0,0 +1,27 @@ +package audit + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { + if err := genState.Validate(); err != nil { + panic(fmt.Sprintf("failed to validate genesis state: %s", err)) + } + + if err := k.SetParams(ctx, genState.Params); err != nil { + panic(err) + } +} + +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { + genesis := types.DefaultGenesis() + genesis.Params = k.GetParams(ctx) + return genesis +} + diff --git a/x/audit/v1/module/module.go b/x/audit/v1/module/module.go new file mode 100644 index 0000000..55dd006 --- /dev/null +++ b/x/audit/v1/module/module.go @@ -0,0 +1,110 @@ +package audit + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/appmodule" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasInvariants = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) +) + +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +func (a AppModuleBasic) RegisterInterfaces(reg codectypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper +} + +func NewAppModule(cdc codec.Codec, keeper keeper.Keeper) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + } +} + +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper)) +} + +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + InitGenesis(ctx, am.keeper, genState) +} + +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := ExportGenesis(ctx, am.keeper) + return cdc.MustMarshalJSON(genState) +} + +func (AppModule) ConsensusVersion() uint64 { return types.ConsensusVersion } + +func (am AppModule) BeginBlock(ctx context.Context) error { + return am.keeper.BeginBlocker(ctx) +} + +func (am AppModule) EndBlock(ctx context.Context) error { + return am.keeper.EndBlocker(ctx) +} + +func (am AppModule) IsAppModule() {} + diff --git a/x/audit/v1/module/module.pb.go b/x/audit/v1/module/module.pb.go new file mode 100644 index 0000000..604f48f --- /dev/null +++ b/x/audit/v1/module/module.pb.go @@ -0,0 +1,322 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/module/v1/module.proto + +package audit + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Module is the config object for the module. +type Module struct { + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (m *Module) Reset() { *m = Module{} } +func (m *Module) String() string { return proto.CompactTextString(m) } +func (*Module) ProtoMessage() {} +func (*Module) Descriptor() ([]byte, []int) { + return fileDescriptor_b5091c38baca1bc9, []int{0} +} +func (m *Module) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Module) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Module.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 *Module) XXX_Merge(src proto.Message) { + xxx_messageInfo_Module.Merge(m, src) +} +func (m *Module) XXX_Size() int { + return m.Size() +} +func (m *Module) XXX_DiscardUnknown() { + xxx_messageInfo_Module.DiscardUnknown(m) +} + +var xxx_messageInfo_Module proto.InternalMessageInfo + +func (m *Module) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func init() { + proto.RegisterType((*Module)(nil), "lumera.audit.module.v1.Module") +} + +func init() { + proto.RegisterFile("lumera/audit/module/v1/module.proto", fileDescriptor_b5091c38baca1bc9) +} + +var fileDescriptor_b5091c38baca1bc9 = []byte{ + // 199 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xce, 0x29, 0xcd, 0x4d, + 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0xcf, 0xcd, 0x4f, 0x29, 0xcd, 0x49, 0xd5, + 0x2f, 0x33, 0x84, 0xb2, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0xc4, 0x20, 0x8a, 0xf4, 0xc0, + 0x8a, 0xf4, 0xa0, 0x52, 0x65, 0x86, 0x52, 0x0a, 0xc9, 0xf9, 0xc5, 0xb9, 0xf9, 0xc5, 0xfa, 0x89, + 0x05, 0x05, 0xfa, 0x65, 0x86, 0x89, 0x39, 0x05, 0x19, 0x89, 0xa8, 0x3a, 0x95, 0xa2, 0xb9, 0xd8, + 0x7c, 0xc1, 0x7c, 0x21, 0x19, 0x2e, 0xce, 0xc4, 0xd2, 0x92, 0x8c, 0xfc, 0xa2, 0xcc, 0x92, 0x4a, + 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x84, 0x80, 0x95, 0xf1, 0xae, 0x03, 0xd3, 0x6e, 0x31, + 0xea, 0x72, 0x69, 0xa7, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xfb, 0x80, + 0x2d, 0x0d, 0x00, 0x99, 0x93, 0x9c, 0x9f, 0xa3, 0x0f, 0x75, 0x68, 0x05, 0xd4, 0xa9, 0x65, 0x86, + 0x4e, 0x86, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, + 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0x25, 0x8e, 0x50, 0x05, + 0x75, 0x8f, 0x35, 0x98, 0x9f, 0xc4, 0x06, 0x76, 0x96, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xf4, + 0x2a, 0x4c, 0xf4, 0xf7, 0x00, 0x00, 0x00, +} + +func (m *Module) 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 *Module) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Module) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintModule(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintModule(dAtA []byte, offset int, v uint64) int { + offset -= sovModule(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Module) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovModule(uint64(l)) + } + return n +} + +func sovModule(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozModule(x uint64) (n int) { + return sovModule(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Module) 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 ErrIntOverflowModule + } + 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: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModule + } + 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 ErrInvalidLengthModule + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModule + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModule(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModule + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipModule(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowModule + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowModule + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowModule + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthModule + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupModule + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthModule + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthModule = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowModule = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupModule = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/audit/v1/module/simulation.go b/x/audit/v1/module/simulation.go new file mode 100644 index 0000000..1696bbb --- /dev/null +++ b/x/audit/v1/module/simulation.go @@ -0,0 +1,23 @@ +package audit + +import ( + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" +) + +// GenerateGenesisState creates a default GenState of the module. +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + genState := types.GenesisState{ + Params: types.DefaultParams(), + } + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&genState) +} + +// RegisterStoreDecoder registers a decoder. +func (AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} + +// WeightedOperations returns empty operations. +func (AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { + return nil +} diff --git a/x/audit/v1/types/audit.pb.go b/x/audit/v1/types/audit.pb.go new file mode 100644 index 0000000..c6a3732 --- /dev/null +++ b/x/audit/v1/types/audit.pb.go @@ -0,0 +1,2298 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/v1/audit.proto + +package types + +import ( + encoding_binary "encoding/binary" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type PortState int32 + +const ( + PortState_PORT_STATE_UNKNOWN PortState = 0 + PortState_PORT_STATE_OPEN PortState = 1 + PortState_PORT_STATE_CLOSED PortState = 2 +) + +var PortState_name = map[int32]string{ + 0: "PORT_STATE_UNKNOWN", + 1: "PORT_STATE_OPEN", + 2: "PORT_STATE_CLOSED", +} + +var PortState_value = map[string]int32{ + "PORT_STATE_UNKNOWN": 0, + "PORT_STATE_OPEN": 1, + "PORT_STATE_CLOSED": 2, +} + +func (x PortState) String() string { + return proto.EnumName(PortState_name, int32(x)) +} + +func (PortState) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0613fff850c07858, []int{0} +} + +type AuditSelfReport struct { + CpuUsagePercent float64 `protobuf:"fixed64,1,opt,name=cpu_usage_percent,json=cpuUsagePercent,proto3" json:"cpu_usage_percent,omitempty"` + MemUsagePercent float64 `protobuf:"fixed64,2,opt,name=mem_usage_percent,json=memUsagePercent,proto3" json:"mem_usage_percent,omitempty"` + DiskUsagePercent float64 `protobuf:"fixed64,3,opt,name=disk_usage_percent,json=diskUsagePercent,proto3" json:"disk_usage_percent,omitempty"` + // Ordered like Params.required_open_ports. + InboundPortStates []PortState `protobuf:"varint,4,rep,packed,name=inbound_port_states,json=inboundPortStates,proto3,enum=lumera.audit.v1.PortState" json:"inbound_port_states,omitempty"` + FailedActionsCount uint32 `protobuf:"varint,5,opt,name=failed_actions_count,json=failedActionsCount,proto3" json:"failed_actions_count,omitempty"` +} + +func (m *AuditSelfReport) Reset() { *m = AuditSelfReport{} } +func (m *AuditSelfReport) String() string { return proto.CompactTextString(m) } +func (*AuditSelfReport) ProtoMessage() {} +func (*AuditSelfReport) Descriptor() ([]byte, []int) { + return fileDescriptor_0613fff850c07858, []int{0} +} +func (m *AuditSelfReport) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditSelfReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuditSelfReport.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 *AuditSelfReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditSelfReport.Merge(m, src) +} +func (m *AuditSelfReport) XXX_Size() int { + return m.Size() +} +func (m *AuditSelfReport) XXX_DiscardUnknown() { + xxx_messageInfo_AuditSelfReport.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditSelfReport proto.InternalMessageInfo + +func (m *AuditSelfReport) GetCpuUsagePercent() float64 { + if m != nil { + return m.CpuUsagePercent + } + return 0 +} + +func (m *AuditSelfReport) GetMemUsagePercent() float64 { + if m != nil { + return m.MemUsagePercent + } + return 0 +} + +func (m *AuditSelfReport) GetDiskUsagePercent() float64 { + if m != nil { + return m.DiskUsagePercent + } + return 0 +} + +func (m *AuditSelfReport) GetInboundPortStates() []PortState { + if m != nil { + return m.InboundPortStates + } + return nil +} + +func (m *AuditSelfReport) GetFailedActionsCount() uint32 { + if m != nil { + return m.FailedActionsCount + } + return 0 +} + +type AuditPeerObservation struct { + TargetValidatorAddress string `protobuf:"bytes,1,opt,name=target_validator_address,json=targetValidatorAddress,proto3" json:"target_validator_address,omitempty"` + // Ordered like Params.required_open_ports. + PortStates []PortState `protobuf:"varint,2,rep,packed,name=port_states,json=portStates,proto3,enum=lumera.audit.v1.PortState" json:"port_states,omitempty"` +} + +func (m *AuditPeerObservation) Reset() { *m = AuditPeerObservation{} } +func (m *AuditPeerObservation) String() string { return proto.CompactTextString(m) } +func (*AuditPeerObservation) ProtoMessage() {} +func (*AuditPeerObservation) Descriptor() ([]byte, []int) { + return fileDescriptor_0613fff850c07858, []int{1} +} +func (m *AuditPeerObservation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditPeerObservation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuditPeerObservation.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 *AuditPeerObservation) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditPeerObservation.Merge(m, src) +} +func (m *AuditPeerObservation) XXX_Size() int { + return m.Size() +} +func (m *AuditPeerObservation) XXX_DiscardUnknown() { + xxx_messageInfo_AuditPeerObservation.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditPeerObservation proto.InternalMessageInfo + +func (m *AuditPeerObservation) GetTargetValidatorAddress() string { + if m != nil { + return m.TargetValidatorAddress + } + return "" +} + +func (m *AuditPeerObservation) GetPortStates() []PortState { + if m != nil { + return m.PortStates + } + return nil +} + +type AuditReport struct { + ReporterValidatorAddress string `protobuf:"bytes,1,opt,name=reporter_validator_address,json=reporterValidatorAddress,proto3" json:"reporter_validator_address,omitempty"` + SupernodeAccount string `protobuf:"bytes,2,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` + WindowId uint64 `protobuf:"varint,3,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + ReportHeight int64 `protobuf:"varint,4,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` + SelfReport AuditSelfReport `protobuf:"bytes,5,opt,name=self_report,json=selfReport,proto3" json:"self_report"` + PeerObservations []*AuditPeerObservation `protobuf:"bytes,6,rep,name=peer_observations,json=peerObservations,proto3" json:"peer_observations,omitempty"` +} + +func (m *AuditReport) Reset() { *m = AuditReport{} } +func (m *AuditReport) String() string { return proto.CompactTextString(m) } +func (*AuditReport) ProtoMessage() {} +func (*AuditReport) Descriptor() ([]byte, []int) { + return fileDescriptor_0613fff850c07858, []int{2} +} +func (m *AuditReport) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuditReport.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 *AuditReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditReport.Merge(m, src) +} +func (m *AuditReport) XXX_Size() int { + return m.Size() +} +func (m *AuditReport) XXX_DiscardUnknown() { + xxx_messageInfo_AuditReport.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditReport proto.InternalMessageInfo + +func (m *AuditReport) GetReporterValidatorAddress() string { + if m != nil { + return m.ReporterValidatorAddress + } + return "" +} + +func (m *AuditReport) GetSupernodeAccount() string { + if m != nil { + return m.SupernodeAccount + } + return "" +} + +func (m *AuditReport) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +func (m *AuditReport) GetReportHeight() int64 { + if m != nil { + return m.ReportHeight + } + return 0 +} + +func (m *AuditReport) GetSelfReport() AuditSelfReport { + if m != nil { + return m.SelfReport + } + return AuditSelfReport{} +} + +func (m *AuditReport) GetPeerObservations() []*AuditPeerObservation { + if m != nil { + return m.PeerObservations + } + return nil +} + +type AuditStatus struct { + ValidatorAddress string `protobuf:"bytes,1,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + LastReportedWindowId uint64 `protobuf:"varint,2,opt,name=last_reported_window_id,json=lastReportedWindowId,proto3" json:"last_reported_window_id,omitempty"` + LastReportHeight int64 `protobuf:"varint,3,opt,name=last_report_height,json=lastReportHeight,proto3" json:"last_report_height,omitempty"` + Compliant bool `protobuf:"varint,4,opt,name=compliant,proto3" json:"compliant,omitempty"` + Reasons []string `protobuf:"bytes,5,rep,name=reasons,proto3" json:"reasons,omitempty"` + // Summary reachability states (last evaluated window). + RequiredPortsState []PortState `protobuf:"varint,6,rep,packed,name=required_ports_state,json=requiredPortsState,proto3,enum=lumera.audit.v1.PortState" json:"required_ports_state,omitempty"` +} + +func (m *AuditStatus) Reset() { *m = AuditStatus{} } +func (m *AuditStatus) String() string { return proto.CompactTextString(m) } +func (*AuditStatus) ProtoMessage() {} +func (*AuditStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_0613fff850c07858, []int{3} +} +func (m *AuditStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuditStatus.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 *AuditStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditStatus.Merge(m, src) +} +func (m *AuditStatus) XXX_Size() int { + return m.Size() +} +func (m *AuditStatus) XXX_DiscardUnknown() { + xxx_messageInfo_AuditStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditStatus proto.InternalMessageInfo + +func (m *AuditStatus) GetValidatorAddress() string { + if m != nil { + return m.ValidatorAddress + } + return "" +} + +func (m *AuditStatus) GetLastReportedWindowId() uint64 { + if m != nil { + return m.LastReportedWindowId + } + return 0 +} + +func (m *AuditStatus) GetLastReportHeight() int64 { + if m != nil { + return m.LastReportHeight + } + return 0 +} + +func (m *AuditStatus) GetCompliant() bool { + if m != nil { + return m.Compliant + } + return false +} + +func (m *AuditStatus) GetReasons() []string { + if m != nil { + return m.Reasons + } + return nil +} + +func (m *AuditStatus) GetRequiredPortsState() []PortState { + if m != nil { + return m.RequiredPortsState + } + return nil +} + +type PortEvidenceAggregate struct { + Count uint32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + FirstState PortState `protobuf:"varint,2,opt,name=first_state,json=firstState,proto3,enum=lumera.audit.v1.PortState" json:"first_state,omitempty"` + Conflict bool `protobuf:"varint,3,opt,name=conflict,proto3" json:"conflict,omitempty"` +} + +func (m *PortEvidenceAggregate) Reset() { *m = PortEvidenceAggregate{} } +func (m *PortEvidenceAggregate) String() string { return proto.CompactTextString(m) } +func (*PortEvidenceAggregate) ProtoMessage() {} +func (*PortEvidenceAggregate) Descriptor() ([]byte, []int) { + return fileDescriptor_0613fff850c07858, []int{4} +} +func (m *PortEvidenceAggregate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PortEvidenceAggregate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PortEvidenceAggregate.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 *PortEvidenceAggregate) XXX_Merge(src proto.Message) { + xxx_messageInfo_PortEvidenceAggregate.Merge(m, src) +} +func (m *PortEvidenceAggregate) XXX_Size() int { + return m.Size() +} +func (m *PortEvidenceAggregate) XXX_DiscardUnknown() { + xxx_messageInfo_PortEvidenceAggregate.DiscardUnknown(m) +} + +var xxx_messageInfo_PortEvidenceAggregate proto.InternalMessageInfo + +func (m *PortEvidenceAggregate) GetCount() uint32 { + if m != nil { + return m.Count + } + return 0 +} + +func (m *PortEvidenceAggregate) GetFirstState() PortState { + if m != nil { + return m.FirstState + } + return PortState_PORT_STATE_UNKNOWN +} + +func (m *PortEvidenceAggregate) GetConflict() bool { + if m != nil { + return m.Conflict + } + return false +} + +type WindowSnapshot struct { + WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + WindowStartHeight int64 `protobuf:"varint,2,opt,name=window_start_height,json=windowStartHeight,proto3" json:"window_start_height,omitempty"` + SeedBytes []byte `protobuf:"bytes,3,opt,name=seed_bytes,json=seedBytes,proto3" json:"seed_bytes,omitempty"` + Senders []string `protobuf:"bytes,4,rep,name=senders,proto3" json:"senders,omitempty"` + Receivers []string `protobuf:"bytes,5,rep,name=receivers,proto3" json:"receivers,omitempty"` + KWindow uint32 `protobuf:"varint,6,opt,name=k_window,json=kWindow,proto3" json:"k_window,omitempty"` +} + +func (m *WindowSnapshot) Reset() { *m = WindowSnapshot{} } +func (m *WindowSnapshot) String() string { return proto.CompactTextString(m) } +func (*WindowSnapshot) ProtoMessage() {} +func (*WindowSnapshot) Descriptor() ([]byte, []int) { + return fileDescriptor_0613fff850c07858, []int{5} +} +func (m *WindowSnapshot) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WindowSnapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_WindowSnapshot.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 *WindowSnapshot) XXX_Merge(src proto.Message) { + xxx_messageInfo_WindowSnapshot.Merge(m, src) +} +func (m *WindowSnapshot) XXX_Size() int { + return m.Size() +} +func (m *WindowSnapshot) XXX_DiscardUnknown() { + xxx_messageInfo_WindowSnapshot.DiscardUnknown(m) +} + +var xxx_messageInfo_WindowSnapshot proto.InternalMessageInfo + +func (m *WindowSnapshot) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +func (m *WindowSnapshot) GetWindowStartHeight() int64 { + if m != nil { + return m.WindowStartHeight + } + return 0 +} + +func (m *WindowSnapshot) GetSeedBytes() []byte { + if m != nil { + return m.SeedBytes + } + return nil +} + +func (m *WindowSnapshot) GetSenders() []string { + if m != nil { + return m.Senders + } + return nil +} + +func (m *WindowSnapshot) GetReceivers() []string { + if m != nil { + return m.Receivers + } + return nil +} + +func (m *WindowSnapshot) GetKWindow() uint32 { + if m != nil { + return m.KWindow + } + return 0 +} + +func init() { + proto.RegisterEnum("lumera.audit.v1.PortState", PortState_name, PortState_value) + proto.RegisterType((*AuditSelfReport)(nil), "lumera.audit.v1.AuditSelfReport") + proto.RegisterType((*AuditPeerObservation)(nil), "lumera.audit.v1.AuditPeerObservation") + proto.RegisterType((*AuditReport)(nil), "lumera.audit.v1.AuditReport") + proto.RegisterType((*AuditStatus)(nil), "lumera.audit.v1.AuditStatus") + proto.RegisterType((*PortEvidenceAggregate)(nil), "lumera.audit.v1.PortEvidenceAggregate") + proto.RegisterType((*WindowSnapshot)(nil), "lumera.audit.v1.WindowSnapshot") +} + +func init() { proto.RegisterFile("lumera/audit/v1/audit.proto", fileDescriptor_0613fff850c07858) } + +var fileDescriptor_0613fff850c07858 = []byte{ + // 871 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x6e, 0x1b, 0x37, + 0x10, 0xd6, 0x4a, 0xfe, 0x91, 0x46, 0x49, 0x2c, 0xd1, 0x4a, 0xb2, 0x91, 0x1b, 0x55, 0x55, 0x51, + 0x40, 0x30, 0x12, 0xb9, 0x71, 0xd1, 0x53, 0x0e, 0x85, 0x9c, 0x1a, 0x4d, 0xdb, 0x40, 0x12, 0x56, + 0x4e, 0x03, 0xb4, 0x07, 0x82, 0xde, 0x1d, 0xad, 0x17, 0x96, 0x96, 0x5b, 0x92, 0xab, 0x34, 0x2f, + 0xd0, 0x73, 0x2f, 0x45, 0x5f, 0xa3, 0x87, 0x3c, 0x84, 0x8f, 0x41, 0x4e, 0x3d, 0x15, 0x85, 0xfd, + 0x22, 0x05, 0xc9, 0x95, 0x64, 0x6f, 0x8a, 0x26, 0x80, 0x2f, 0x02, 0xe7, 0xfb, 0xbe, 0x19, 0x91, + 0xdf, 0x0c, 0xb9, 0xb0, 0x33, 0x4d, 0x67, 0x28, 0xd8, 0x1e, 0x4b, 0x83, 0x48, 0xed, 0xcd, 0x1f, + 0xd9, 0x45, 0x2f, 0x11, 0x5c, 0x71, 0xb2, 0x65, 0xc9, 0x9e, 0xc5, 0xe6, 0x8f, 0x9a, 0x75, 0x36, + 0x8b, 0x62, 0xbe, 0x67, 0x7e, 0xad, 0xa6, 0x79, 0xcf, 0xe7, 0x72, 0xc6, 0x25, 0x35, 0xd1, 0x9e, + 0x0d, 0x32, 0xaa, 0x11, 0xf2, 0x90, 0x5b, 0x5c, 0xaf, 0x2c, 0xda, 0xf9, 0xbd, 0x08, 0x5b, 0x7d, + 0x5d, 0x70, 0x8c, 0xd3, 0x89, 0x87, 0x09, 0x17, 0x8a, 0xec, 0x42, 0xdd, 0x4f, 0x52, 0x9a, 0x4a, + 0x16, 0x22, 0x4d, 0x50, 0xf8, 0x18, 0x2b, 0xd7, 0x69, 0x3b, 0x5d, 0xc7, 0xdb, 0xf2, 0x93, 0xf4, + 0xb9, 0xc6, 0x47, 0x16, 0xd6, 0xda, 0x19, 0xce, 0x72, 0xda, 0xa2, 0xd5, 0xce, 0x70, 0x76, 0x45, + 0xfb, 0x00, 0x48, 0x10, 0xc9, 0xd3, 0x9c, 0xb8, 0x64, 0xc4, 0x35, 0xcd, 0x5c, 0x51, 0x7f, 0x07, + 0xdb, 0x51, 0x7c, 0xcc, 0xd3, 0x38, 0xa0, 0x7a, 0x57, 0x54, 0x2a, 0xa6, 0x50, 0xba, 0x6b, 0xed, + 0x52, 0xf7, 0xd6, 0x7e, 0xb3, 0x97, 0x33, 0xa3, 0x37, 0xe2, 0x42, 0x8d, 0xb5, 0xc4, 0xab, 0x67, + 0x69, 0x4b, 0x44, 0x92, 0xcf, 0xa1, 0x31, 0x61, 0xd1, 0x14, 0x03, 0xca, 0x7c, 0x15, 0xf1, 0x58, + 0x52, 0x9f, 0xa7, 0xb1, 0x72, 0xd7, 0xdb, 0x4e, 0xf7, 0xa6, 0x47, 0x2c, 0xd7, 0xb7, 0xd4, 0x13, + 0xcd, 0x74, 0xfe, 0x74, 0xa0, 0x61, 0x7c, 0x19, 0x21, 0x8a, 0xe1, 0xb1, 0x44, 0x31, 0x67, 0x9a, + 0x26, 0x3f, 0x81, 0xab, 0x98, 0x08, 0x51, 0xd1, 0x39, 0x9b, 0x46, 0x01, 0x53, 0x5c, 0x50, 0x16, + 0x04, 0x02, 0xa5, 0x34, 0x1e, 0x55, 0x0e, 0x3e, 0x79, 0xfb, 0xfa, 0xe1, 0xfd, 0xcc, 0xfa, 0x1f, + 0x16, 0x9a, 0xbe, 0x95, 0x8c, 0x95, 0x88, 0xe2, 0xd0, 0xbb, 0x63, 0x4b, 0xe4, 0x59, 0xf2, 0x18, + 0xaa, 0x97, 0xcf, 0x5a, 0x7c, 0xef, 0x59, 0x21, 0x59, 0x1e, 0xb2, 0xf3, 0x47, 0x09, 0xaa, 0x66, + 0xcb, 0x59, 0x1b, 0x29, 0x34, 0x85, 0x59, 0xa1, 0xb8, 0xce, 0x5e, 0xdd, 0x45, 0x91, 0x77, 0x76, + 0xfb, 0x14, 0xea, 0x32, 0x4d, 0x50, 0xc4, 0x3c, 0x40, 0xca, 0x7c, 0x6b, 0x69, 0xd1, 0xd4, 0xdd, + 0x79, 0xfb, 0xfa, 0xe1, 0xdd, 0xac, 0x6e, 0xdf, 0xf7, 0xaf, 0x56, 0xac, 0x2d, 0xb3, 0xfa, 0x36, + 0x89, 0xec, 0x40, 0xe5, 0x65, 0x14, 0x07, 0xfc, 0x25, 0x8d, 0x02, 0x33, 0x10, 0x6b, 0x5e, 0xd9, + 0x02, 0xdf, 0x06, 0xe4, 0x53, 0xb8, 0x69, 0xb7, 0x40, 0x4f, 0x30, 0x0a, 0x4f, 0x94, 0xbb, 0xd6, + 0x76, 0xba, 0x25, 0xef, 0x86, 0x05, 0x9f, 0x1a, 0x8c, 0x7c, 0x03, 0x55, 0x89, 0xd3, 0x09, 0xb5, + 0xa0, 0x69, 0x6c, 0x75, 0xbf, 0xfd, 0x8e, 0x73, 0xb9, 0x51, 0x3f, 0x58, 0x3b, 0xfb, 0xfb, 0xe3, + 0x82, 0x07, 0x72, 0x35, 0xfc, 0x1e, 0xd4, 0x13, 0x44, 0x41, 0xf9, 0xaa, 0xe7, 0xd2, 0xdd, 0x68, + 0x97, 0xba, 0xd5, 0xfd, 0xcf, 0xfe, 0xbb, 0x5c, 0x6e, 0x42, 0xbc, 0x5a, 0x72, 0x15, 0x90, 0x9d, + 0xb3, 0x62, 0xd6, 0x19, 0xdd, 0xa9, 0x54, 0x92, 0x01, 0xd4, 0xaf, 0xd1, 0x90, 0xda, 0x3c, 0xdf, + 0x88, 0x2f, 0xe1, 0xee, 0x94, 0x49, 0x95, 0x1d, 0x1e, 0x03, 0xba, 0x32, 0xb3, 0x68, 0xcc, 0x6c, + 0x68, 0xda, 0xcb, 0xd8, 0x17, 0x0b, 0x63, 0x1f, 0x00, 0xb9, 0x94, 0xb6, 0x70, 0xb7, 0x64, 0xdc, + 0xad, 0xad, 0x32, 0x32, 0x87, 0x3f, 0x82, 0x8a, 0xcf, 0x67, 0xc9, 0x34, 0x62, 0xb1, 0x6d, 0x41, + 0xd9, 0x5b, 0x01, 0xc4, 0x85, 0x4d, 0x81, 0x4c, 0x6a, 0xb3, 0xd6, 0xdb, 0xa5, 0x6e, 0xc5, 0x5b, + 0x84, 0xe4, 0x19, 0x34, 0x04, 0xfe, 0x9c, 0x46, 0x02, 0xed, 0x45, 0x96, 0x76, 0xba, 0x8d, 0xa7, + 0xff, 0x3f, 0xdc, 0x64, 0x91, 0xa7, 0x21, 0x69, 0xb0, 0xce, 0xaf, 0x0e, 0xdc, 0xd6, 0xe1, 0xe1, + 0x3c, 0x0a, 0x30, 0xf6, 0xb1, 0x1f, 0x86, 0x02, 0x43, 0xa6, 0x90, 0x34, 0x60, 0xdd, 0x4e, 0xa0, + 0x63, 0x2e, 0xb5, 0x0d, 0xf4, 0x8d, 0x9a, 0x44, 0x42, 0x66, 0x57, 0xca, 0xd8, 0xf1, 0x9e, 0x1b, + 0x65, 0xe4, 0x66, 0x4d, 0x9a, 0x50, 0xf6, 0x79, 0x3c, 0x99, 0x46, 0xbe, 0xb5, 0xa5, 0xec, 0x2d, + 0x63, 0xfd, 0x70, 0xde, 0xb2, 0x4e, 0x8e, 0x63, 0x96, 0xc8, 0x13, 0x9e, 0x9b, 0x62, 0x27, 0x37, + 0xc5, 0x3d, 0xd8, 0xce, 0x48, 0xa9, 0xd8, 0xca, 0xed, 0xa2, 0x71, 0xbb, 0x6e, 0xa9, 0xb1, 0x66, + 0x32, 0xbb, 0xef, 0x03, 0x48, 0xc4, 0x80, 0x1e, 0xbf, 0xd2, 0x2f, 0x81, 0xfe, 0xf7, 0x1b, 0x5e, + 0x45, 0x23, 0x07, 0x1a, 0x20, 0x8f, 0x61, 0x53, 0x62, 0x1c, 0xa0, 0xb0, 0x2f, 0xe2, 0x07, 0x0d, + 0xce, 0x22, 0x83, 0x7c, 0x05, 0x15, 0x81, 0x3e, 0x46, 0x73, 0x9d, 0xbe, 0xfe, 0xa1, 0xe9, 0xab, + 0x1c, 0x72, 0x0f, 0xca, 0xa7, 0xd9, 0x90, 0xb9, 0x1b, 0xc6, 0xee, 0xcd, 0x53, 0x6b, 0xc6, 0xee, + 0x10, 0x2a, 0x4b, 0x33, 0xc9, 0x1d, 0x20, 0xa3, 0xa1, 0x77, 0x44, 0xc7, 0x47, 0xfd, 0xa3, 0x43, + 0xfa, 0x7c, 0xf0, 0xfd, 0x60, 0xf8, 0x62, 0x50, 0x2b, 0x90, 0x6d, 0xd8, 0xba, 0x84, 0x0f, 0x47, + 0x87, 0x83, 0x9a, 0x43, 0x6e, 0x43, 0xfd, 0x12, 0xf8, 0xe4, 0xd9, 0x70, 0x7c, 0xf8, 0x75, 0xad, + 0x78, 0xb0, 0x7b, 0x76, 0xde, 0x72, 0xde, 0x9c, 0xb7, 0x9c, 0x7f, 0xce, 0x5b, 0xce, 0x6f, 0x17, + 0xad, 0xc2, 0x9b, 0x8b, 0x56, 0xe1, 0xaf, 0x8b, 0x56, 0xe1, 0xc7, 0xda, 0x2f, 0xab, 0x0f, 0xa5, + 0x7a, 0x95, 0xa0, 0x3c, 0xde, 0x30, 0x1f, 0xb5, 0x2f, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x15, + 0x00, 0xd5, 0x42, 0x48, 0x07, 0x00, 0x00, +} + +func (m *AuditSelfReport) 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 *AuditSelfReport) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditSelfReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.FailedActionsCount != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.FailedActionsCount)) + i-- + dAtA[i] = 0x28 + } + if len(m.InboundPortStates) > 0 { + dAtA2 := make([]byte, len(m.InboundPortStates)*10) + var j1 int + for _, num := range m.InboundPortStates { + for num >= 1<<7 { + dAtA2[j1] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j1++ + } + dAtA2[j1] = uint8(num) + j1++ + } + i -= j1 + copy(dAtA[i:], dAtA2[:j1]) + i = encodeVarintAudit(dAtA, i, uint64(j1)) + i-- + dAtA[i] = 0x22 + } + if m.DiskUsagePercent != 0 { + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.DiskUsagePercent)))) + i-- + dAtA[i] = 0x19 + } + if m.MemUsagePercent != 0 { + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.MemUsagePercent)))) + i-- + dAtA[i] = 0x11 + } + if m.CpuUsagePercent != 0 { + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.CpuUsagePercent)))) + i-- + dAtA[i] = 0x9 + } + return len(dAtA) - i, nil +} + +func (m *AuditPeerObservation) 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 *AuditPeerObservation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditPeerObservation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PortStates) > 0 { + dAtA4 := make([]byte, len(m.PortStates)*10) + var j3 int + for _, num := range m.PortStates { + for num >= 1<<7 { + dAtA4[j3] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j3++ + } + dAtA4[j3] = uint8(num) + j3++ + } + i -= j3 + copy(dAtA[i:], dAtA4[:j3]) + i = encodeVarintAudit(dAtA, i, uint64(j3)) + i-- + dAtA[i] = 0x12 + } + if len(m.TargetValidatorAddress) > 0 { + i -= len(m.TargetValidatorAddress) + copy(dAtA[i:], m.TargetValidatorAddress) + i = encodeVarintAudit(dAtA, i, uint64(len(m.TargetValidatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AuditReport) 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 *AuditReport) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PeerObservations) > 0 { + for iNdEx := len(m.PeerObservations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PeerObservations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintAudit(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + { + size, err := m.SelfReport.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintAudit(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if m.ReportHeight != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.ReportHeight)) + i-- + dAtA[i] = 0x20 + } + if m.WindowId != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x18 + } + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintAudit(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0x12 + } + if len(m.ReporterValidatorAddress) > 0 { + i -= len(m.ReporterValidatorAddress) + copy(dAtA[i:], m.ReporterValidatorAddress) + i = encodeVarintAudit(dAtA, i, uint64(len(m.ReporterValidatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AuditStatus) 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 *AuditStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.RequiredPortsState) > 0 { + dAtA7 := make([]byte, len(m.RequiredPortsState)*10) + var j6 int + for _, num := range m.RequiredPortsState { + for num >= 1<<7 { + dAtA7[j6] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j6++ + } + dAtA7[j6] = uint8(num) + j6++ + } + i -= j6 + copy(dAtA[i:], dAtA7[:j6]) + i = encodeVarintAudit(dAtA, i, uint64(j6)) + i-- + dAtA[i] = 0x32 + } + if len(m.Reasons) > 0 { + for iNdEx := len(m.Reasons) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Reasons[iNdEx]) + copy(dAtA[i:], m.Reasons[iNdEx]) + i = encodeVarintAudit(dAtA, i, uint64(len(m.Reasons[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if m.Compliant { + i-- + if m.Compliant { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if m.LastReportHeight != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.LastReportHeight)) + i-- + dAtA[i] = 0x18 + } + if m.LastReportedWindowId != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.LastReportedWindowId)) + i-- + dAtA[i] = 0x10 + } + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintAudit(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PortEvidenceAggregate) 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 *PortEvidenceAggregate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PortEvidenceAggregate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Conflict { + i-- + if m.Conflict { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if m.FirstState != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.FirstState)) + i-- + dAtA[i] = 0x10 + } + if m.Count != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *WindowSnapshot) 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 *WindowSnapshot) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WindowSnapshot) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.KWindow != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.KWindow)) + i-- + dAtA[i] = 0x30 + } + if len(m.Receivers) > 0 { + for iNdEx := len(m.Receivers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Receivers[iNdEx]) + copy(dAtA[i:], m.Receivers[iNdEx]) + i = encodeVarintAudit(dAtA, i, uint64(len(m.Receivers[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if len(m.Senders) > 0 { + for iNdEx := len(m.Senders) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Senders[iNdEx]) + copy(dAtA[i:], m.Senders[iNdEx]) + i = encodeVarintAudit(dAtA, i, uint64(len(m.Senders[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if len(m.SeedBytes) > 0 { + i -= len(m.SeedBytes) + copy(dAtA[i:], m.SeedBytes) + i = encodeVarintAudit(dAtA, i, uint64(len(m.SeedBytes))) + i-- + dAtA[i] = 0x1a + } + if m.WindowStartHeight != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.WindowStartHeight)) + i-- + dAtA[i] = 0x10 + } + if m.WindowId != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintAudit(dAtA []byte, offset int, v uint64) int { + offset -= sovAudit(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AuditSelfReport) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CpuUsagePercent != 0 { + n += 9 + } + if m.MemUsagePercent != 0 { + n += 9 + } + if m.DiskUsagePercent != 0 { + n += 9 + } + if len(m.InboundPortStates) > 0 { + l = 0 + for _, e := range m.InboundPortStates { + l += sovAudit(uint64(e)) + } + n += 1 + sovAudit(uint64(l)) + l + } + if m.FailedActionsCount != 0 { + n += 1 + sovAudit(uint64(m.FailedActionsCount)) + } + return n +} + +func (m *AuditPeerObservation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TargetValidatorAddress) + if l > 0 { + n += 1 + l + sovAudit(uint64(l)) + } + if len(m.PortStates) > 0 { + l = 0 + for _, e := range m.PortStates { + l += sovAudit(uint64(e)) + } + n += 1 + sovAudit(uint64(l)) + l + } + return n +} + +func (m *AuditReport) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ReporterValidatorAddress) + if l > 0 { + n += 1 + l + sovAudit(uint64(l)) + } + l = len(m.SupernodeAccount) + if l > 0 { + n += 1 + l + sovAudit(uint64(l)) + } + if m.WindowId != 0 { + n += 1 + sovAudit(uint64(m.WindowId)) + } + if m.ReportHeight != 0 { + n += 1 + sovAudit(uint64(m.ReportHeight)) + } + l = m.SelfReport.Size() + n += 1 + l + sovAudit(uint64(l)) + if len(m.PeerObservations) > 0 { + for _, e := range m.PeerObservations { + l = e.Size() + n += 1 + l + sovAudit(uint64(l)) + } + } + return n +} + +func (m *AuditStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovAudit(uint64(l)) + } + if m.LastReportedWindowId != 0 { + n += 1 + sovAudit(uint64(m.LastReportedWindowId)) + } + if m.LastReportHeight != 0 { + n += 1 + sovAudit(uint64(m.LastReportHeight)) + } + if m.Compliant { + n += 2 + } + if len(m.Reasons) > 0 { + for _, s := range m.Reasons { + l = len(s) + n += 1 + l + sovAudit(uint64(l)) + } + } + if len(m.RequiredPortsState) > 0 { + l = 0 + for _, e := range m.RequiredPortsState { + l += sovAudit(uint64(e)) + } + n += 1 + sovAudit(uint64(l)) + l + } + return n +} + +func (m *PortEvidenceAggregate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Count != 0 { + n += 1 + sovAudit(uint64(m.Count)) + } + if m.FirstState != 0 { + n += 1 + sovAudit(uint64(m.FirstState)) + } + if m.Conflict { + n += 2 + } + return n +} + +func (m *WindowSnapshot) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.WindowId != 0 { + n += 1 + sovAudit(uint64(m.WindowId)) + } + if m.WindowStartHeight != 0 { + n += 1 + sovAudit(uint64(m.WindowStartHeight)) + } + l = len(m.SeedBytes) + if l > 0 { + n += 1 + l + sovAudit(uint64(l)) + } + if len(m.Senders) > 0 { + for _, s := range m.Senders { + l = len(s) + n += 1 + l + sovAudit(uint64(l)) + } + } + if len(m.Receivers) > 0 { + for _, s := range m.Receivers { + l = len(s) + n += 1 + l + sovAudit(uint64(l)) + } + } + if m.KWindow != 0 { + n += 1 + sovAudit(uint64(m.KWindow)) + } + return n +} + +func sovAudit(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozAudit(x uint64) (n int) { + return sovAudit(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *AuditSelfReport) 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 ErrIntOverflowAudit + } + 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: AuditSelfReport: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuditSelfReport: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field CpuUsagePercent", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.CpuUsagePercent = float64(math.Float64frombits(v)) + case 2: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field MemUsagePercent", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.MemUsagePercent = float64(math.Float64frombits(v)) + case 3: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field DiskUsagePercent", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.DiskUsagePercent = float64(math.Float64frombits(v)) + case 4: + if wireType == 0 { + var v PortState + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.InboundPortStates = append(m.InboundPortStates, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthAudit + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + if elementCount != 0 && len(m.InboundPortStates) == 0 { + m.InboundPortStates = make([]PortState, 0, elementCount) + } + for iNdEx < postIndex { + var v PortState + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.InboundPortStates = append(m.InboundPortStates, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field InboundPortStates", wireType) + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailedActionsCount", wireType) + } + m.FailedActionsCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.FailedActionsCount |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipAudit(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAudit + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuditPeerObservation) 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 ErrIntOverflowAudit + } + 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: AuditPeerObservation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuditPeerObservation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + 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 ErrInvalidLengthAudit + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType == 0 { + var v PortState + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PortStates = append(m.PortStates, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthAudit + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + if elementCount != 0 && len(m.PortStates) == 0 { + m.PortStates = make([]PortState, 0, elementCount) + } + for iNdEx < postIndex { + var v PortState + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PortStates = append(m.PortStates, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field PortStates", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipAudit(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAudit + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuditReport) 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 ErrIntOverflowAudit + } + 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: AuditReport: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuditReport: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReporterValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + 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 ErrInvalidLengthAudit + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ReporterValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + 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 ErrInvalidLengthAudit + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReportHeight", wireType) + } + m.ReportHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ReportHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SelfReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthAudit + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SelfReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerObservations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthAudit + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerObservations = append(m.PeerObservations, &AuditPeerObservation{}) + if err := m.PeerObservations[len(m.PeerObservations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAudit(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAudit + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuditStatus) 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 ErrIntOverflowAudit + } + 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: AuditStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuditStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + 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 ErrInvalidLengthAudit + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastReportedWindowId", wireType) + } + m.LastReportedWindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastReportedWindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastReportHeight", wireType) + } + m.LastReportHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastReportHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Compliant", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Compliant = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reasons", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + 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 ErrInvalidLengthAudit + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reasons = append(m.Reasons, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType == 0 { + var v PortState + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequiredPortsState = append(m.RequiredPortsState, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthAudit + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + if elementCount != 0 && len(m.RequiredPortsState) == 0 { + m.RequiredPortsState = make([]PortState, 0, elementCount) + } + for iNdEx < postIndex { + var v PortState + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequiredPortsState = append(m.RequiredPortsState, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field RequiredPortsState", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipAudit(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAudit + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PortEvidenceAggregate) 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 ErrIntOverflowAudit + } + 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: PortEvidenceAggregate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PortEvidenceAggregate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Count |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FirstState", wireType) + } + m.FirstState = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.FirstState |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Conflict", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Conflict = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipAudit(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAudit + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WindowSnapshot) 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 ErrIntOverflowAudit + } + 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: WindowSnapshot: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WindowSnapshot: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowStartHeight", wireType) + } + m.WindowStartHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowStartHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SeedBytes", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAudit + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SeedBytes = append(m.SeedBytes[:0], dAtA[iNdEx:postIndex]...) + if m.SeedBytes == nil { + m.SeedBytes = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Senders", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + 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 ErrInvalidLengthAudit + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Senders = append(m.Senders, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receivers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + 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 ErrInvalidLengthAudit + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAudit + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receivers = append(m.Receivers, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field KWindow", wireType) + } + m.KWindow = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAudit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.KWindow |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipAudit(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAudit + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipAudit(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAudit + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAudit + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAudit + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthAudit + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupAudit + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthAudit + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthAudit = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowAudit = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupAudit = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/audit/v1/types/codec.go b/x/audit/v1/types/codec.go new file mode 100644 index 0000000..6138ffc --- /dev/null +++ b/x/audit/v1/types/codec.go @@ -0,0 +1,16 @@ +package types + +import ( + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateParams{}, + &MsgSubmitAuditReport{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &Msg_serviceDesc) +} diff --git a/x/audit/v1/types/errors.go b/x/audit/v1/types/errors.go new file mode 100644 index 0000000..2793e30 --- /dev/null +++ b/x/audit/v1/types/errors.go @@ -0,0 +1,16 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +var ( + ErrInvalidSigner = errorsmod.Register(ModuleName, 1, "invalid signer") + ErrInvalidWindowID = errorsmod.Register(ModuleName, 2, "invalid window id") + ErrWindowSnapshotNotFound = errorsmod.Register(ModuleName, 3, "window snapshot not found") + ErrDuplicateReport = errorsmod.Register(ModuleName, 4, "duplicate report") + ErrInvalidPeerObservations = errorsmod.Register(ModuleName, 5, "invalid peer observations") + ErrInvalidPortStatesLength = errorsmod.Register(ModuleName, 6, "invalid port states length") + ErrReporterNotFound = errorsmod.Register(ModuleName, 7, "reporter supernode not found") + ErrInvalidReporterState = errorsmod.Register(ModuleName, 8, "invalid reporter state") +) diff --git a/x/audit/v1/types/genesis.go b/x/audit/v1/types/genesis.go new file mode 100644 index 0000000..cfb540d --- /dev/null +++ b/x/audit/v1/types/genesis.go @@ -0,0 +1,15 @@ +package types + +const ( + ConsensusVersion = 1 +) + +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + } +} + +func (gs GenesisState) Validate() error { + return gs.Params.Validate() +} diff --git a/x/audit/v1/types/genesis.pb.go b/x/audit/v1/types/genesis.pb.go new file mode 100644 index 0000000..fc928dd --- /dev/null +++ b/x/audit/v1/types/genesis.pb.go @@ -0,0 +1,321 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/v1/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the audit module's genesis state. +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_a433cb4f206fdbad, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.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 *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "lumera.audit.v1.GenesisState") +} + +func init() { proto.RegisterFile("lumera/audit/v1/genesis.proto", fileDescriptor_a433cb4f206fdbad) } + +var fileDescriptor_a433cb4f206fdbad = []byte{ + // 190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcd, 0x29, 0xcd, 0x4d, + 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0x2f, 0x33, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, + 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x48, 0xeb, 0x81, 0xa5, + 0xf5, 0xca, 0x0c, 0xa5, 0x04, 0x13, 0x73, 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x44, 0x8d, 0x94, + 0x48, 0x7a, 0x7e, 0x7a, 0x3e, 0x98, 0xa9, 0x0f, 0x62, 0x41, 0x45, 0x65, 0xd0, 0x0d, 0x2e, 0x48, + 0x2c, 0x4a, 0xcc, 0x85, 0x9a, 0xab, 0xe4, 0xc5, 0xc5, 0xe3, 0x0e, 0xb1, 0x28, 0xb8, 0x24, 0xb1, + 0x24, 0x55, 0xc8, 0x8a, 0x8b, 0x0d, 0x22, 0x2f, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xae, + 0x87, 0x66, 0xb1, 0x5e, 0x00, 0x58, 0xda, 0x89, 0xf3, 0xc4, 0x3d, 0x79, 0x86, 0x15, 0xcf, 0x37, + 0x68, 0x31, 0x06, 0x41, 0x75, 0x38, 0x69, 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, + 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, + 0x43, 0x94, 0x40, 0x05, 0xc2, 0xfa, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0xf5, 0xc6, + 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xca, 0xc9, 0xb9, 0xdd, 0xf7, 0x00, 0x00, 0x00, +} + +func (m *GenesisState) 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 *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) 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 ErrIntOverflowGenesis + } + 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: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go new file mode 100644 index 0000000..586fb91 --- /dev/null +++ b/x/audit/v1/types/keys.go @@ -0,0 +1,57 @@ +package types + +import "encoding/binary" + +const ( + ModuleName = "audit" + + StoreKey = ModuleName + MemStoreKey = "mem_audit" +) + +var ( + ParamsKey = []byte("p_audit") + + windowOriginHeightKey = []byte{0x01} + + windowSnapshotPrefix = []byte{0x10} + reportPrefix = []byte{0x11} + evidencePrefix = []byte{0x12} + statusPrefix = []byte{0x13} +) + +func WindowOriginHeightKey() []byte { + return windowOriginHeightKey +} + +func WindowSnapshotKey(windowID uint64) []byte { + key := make([]byte, 0, len(windowSnapshotPrefix)+8) + key = append(key, windowSnapshotPrefix...) + key = binary.BigEndian.AppendUint64(key, windowID) + return key +} + +func ReportKey(windowID uint64, reporterValidatorAddress string) []byte { + key := make([]byte, 0, len(reportPrefix)+8+len(reporterValidatorAddress)) + key = append(key, reportPrefix...) + key = binary.BigEndian.AppendUint64(key, windowID) + key = append(key, reporterValidatorAddress...) + return key +} + +func EvidenceKey(windowID uint64, targetValidatorAddress string, portIndex uint32) []byte { + key := make([]byte, 0, len(evidencePrefix)+8+len(targetValidatorAddress)+1+4) + key = append(key, evidencePrefix...) + key = binary.BigEndian.AppendUint64(key, windowID) + key = append(key, targetValidatorAddress...) + key = append(key, 0x00) + key = binary.BigEndian.AppendUint32(key, portIndex) + return key +} + +func AuditStatusKey(validatorAddress string) []byte { + key := make([]byte, 0, len(statusPrefix)+len(validatorAddress)) + key = append(key, statusPrefix...) + key = append(key, validatorAddress...) + return key +} diff --git a/x/audit/v1/types/params.go b/x/audit/v1/types/params.go new file mode 100644 index 0000000..0b172fc --- /dev/null +++ b/x/audit/v1/types/params.go @@ -0,0 +1,145 @@ +package types + +import ( + "fmt" + "sort" + + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +var _ paramtypes.ParamSet = (*Params)(nil) + +var ( + KeyReportingWindowBlocks = []byte("ReportingWindowBlocks") + KeyMissingReportGraceBlocks = []byte("MissingReportGraceBlocks") + KeyPeerQuorumReports = []byte("PeerQuorumReports") + KeyMinProbeTargetsPerWindow = []byte("MinProbeTargetsPerWindow") + KeyMaxProbeTargetsPerWindow = []byte("MaxProbeTargetsPerWindow") + KeyRequiredOpenPorts = []byte("RequiredOpenPorts") +) + +var ( + DefaultReportingWindowBlocks = uint64(400) + DefaultMissingReportGraceBlocks = uint64(100) + DefaultPeerQuorumReports = uint32(3) + DefaultMinProbeTargetsPerWindow = uint32(3) + DefaultMaxProbeTargetsPerWindow = uint32(5) + DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} +) + +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +func NewParams( + reportingWindowBlocks uint64, + missingReportGraceBlocks uint64, + peerQuorumReports uint32, + minProbeTargetsPerWindow uint32, + maxProbeTargetsPerWindow uint32, + requiredOpenPorts []uint32, +) Params { + return Params{ + ReportingWindowBlocks: reportingWindowBlocks, + MissingReportGraceBlocks: missingReportGraceBlocks, + PeerQuorumReports: peerQuorumReports, + MinProbeTargetsPerWindow: minProbeTargetsPerWindow, + MaxProbeTargetsPerWindow: maxProbeTargetsPerWindow, + RequiredOpenPorts: requiredOpenPorts, + } +} + +func DefaultParams() Params { + return NewParams( + DefaultReportingWindowBlocks, + DefaultMissingReportGraceBlocks, + DefaultPeerQuorumReports, + DefaultMinProbeTargetsPerWindow, + DefaultMaxProbeTargetsPerWindow, + append([]uint32(nil), DefaultRequiredOpenPorts...), + ) +} + +func (p Params) WithDefaults() Params { + if p.ReportingWindowBlocks == 0 { + p.ReportingWindowBlocks = DefaultReportingWindowBlocks + } + if p.MissingReportGraceBlocks == 0 { + p.MissingReportGraceBlocks = DefaultMissingReportGraceBlocks + } + if p.PeerQuorumReports == 0 { + p.PeerQuorumReports = DefaultPeerQuorumReports + } + if p.MinProbeTargetsPerWindow == 0 { + p.MinProbeTargetsPerWindow = DefaultMinProbeTargetsPerWindow + } + if p.MaxProbeTargetsPerWindow == 0 { + p.MaxProbeTargetsPerWindow = DefaultMaxProbeTargetsPerWindow + } + if len(p.RequiredOpenPorts) == 0 { + p.RequiredOpenPorts = append([]uint32(nil), DefaultRequiredOpenPorts...) + } + return p +} + +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair(KeyReportingWindowBlocks, &p.ReportingWindowBlocks, validateUint64), + paramtypes.NewParamSetPair(KeyMissingReportGraceBlocks, &p.MissingReportGraceBlocks, validateUint64), + paramtypes.NewParamSetPair(KeyPeerQuorumReports, &p.PeerQuorumReports, validateUint32), + paramtypes.NewParamSetPair(KeyMinProbeTargetsPerWindow, &p.MinProbeTargetsPerWindow, validateUint32), + paramtypes.NewParamSetPair(KeyMaxProbeTargetsPerWindow, &p.MaxProbeTargetsPerWindow, validateUint32), + paramtypes.NewParamSetPair(KeyRequiredOpenPorts, &p.RequiredOpenPorts, validateUint32Slice), + } +} + +func (p Params) Validate() error { + p = p.WithDefaults() + + if p.ReportingWindowBlocks == 0 { + return fmt.Errorf("reporting_window_blocks must be > 0") + } + if p.PeerQuorumReports == 0 { + return fmt.Errorf("peer_quorum_reports must be > 0") + } + if p.MinProbeTargetsPerWindow > p.MaxProbeTargetsPerWindow { + return fmt.Errorf("min_probe_targets_per_window must be <= max_probe_targets_per_window") + } + if len(p.RequiredOpenPorts) == 0 { + return fmt.Errorf("required_open_ports must not be empty") + } + + ports := append([]uint32(nil), p.RequiredOpenPorts...) + sort.Slice(ports, func(i, j int) bool { return ports[i] < ports[j] }) + for i := 1; i < len(ports); i++ { + if ports[i] == ports[i-1] { + return fmt.Errorf("required_open_ports must be unique") + } + } + + return nil +} + +func validateUint64(v interface{}) error { + _, ok := v.(uint64) + if !ok { + return fmt.Errorf("invalid parameter type: %T", v) + } + return nil +} + +func validateUint32(v interface{}) error { + _, ok := v.(uint32) + if !ok { + return fmt.Errorf("invalid parameter type: %T", v) + } + return nil +} + +func validateUint32Slice(v interface{}) error { + _, ok := v.([]uint32) + if !ok { + return fmt.Errorf("invalid parameter type: %T", v) + } + return nil +} diff --git a/x/audit/v1/types/params.pb.go b/x/audit/v1/types/params.pb.go new file mode 100644 index 0000000..00ac19c --- /dev/null +++ b/x/audit/v1/types/params.pb.go @@ -0,0 +1,605 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/v1/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the audit module. +type Params struct { + ReportingWindowBlocks uint64 `protobuf:"varint,1,opt,name=reporting_window_blocks,json=reportingWindowBlocks,proto3" json:"reporting_window_blocks,omitempty"` + MissingReportGraceBlocks uint64 `protobuf:"varint,2,opt,name=missing_report_grace_blocks,json=missingReportGraceBlocks,proto3" json:"missing_report_grace_blocks,omitempty"` + PeerQuorumReports uint32 `protobuf:"varint,3,opt,name=peer_quorum_reports,json=peerQuorumReports,proto3" json:"peer_quorum_reports,omitempty"` + MinProbeTargetsPerWindow uint32 `protobuf:"varint,4,opt,name=min_probe_targets_per_window,json=minProbeTargetsPerWindow,proto3" json:"min_probe_targets_per_window,omitempty"` + MaxProbeTargetsPerWindow uint32 `protobuf:"varint,5,opt,name=max_probe_targets_per_window,json=maxProbeTargetsPerWindow,proto3" json:"max_probe_targets_per_window,omitempty"` + RequiredOpenPorts []uint32 `protobuf:"varint,6,rep,packed,name=required_open_ports,json=requiredOpenPorts,proto3" json:"required_open_ports,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_3788ca0fc7eb9d86, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetReportingWindowBlocks() uint64 { + if m != nil { + return m.ReportingWindowBlocks + } + return 0 +} + +func (m *Params) GetMissingReportGraceBlocks() uint64 { + if m != nil { + return m.MissingReportGraceBlocks + } + return 0 +} + +func (m *Params) GetPeerQuorumReports() uint32 { + if m != nil { + return m.PeerQuorumReports + } + return 0 +} + +func (m *Params) GetMinProbeTargetsPerWindow() uint32 { + if m != nil { + return m.MinProbeTargetsPerWindow + } + return 0 +} + +func (m *Params) GetMaxProbeTargetsPerWindow() uint32 { + if m != nil { + return m.MaxProbeTargetsPerWindow + } + return 0 +} + +func (m *Params) GetRequiredOpenPorts() []uint32 { + if m != nil { + return m.RequiredOpenPorts + } + return nil +} + +func init() { + proto.RegisterType((*Params)(nil), "lumera.audit.v1.Params") +} + +func init() { proto.RegisterFile("lumera/audit/v1/params.proto", fileDescriptor_3788ca0fc7eb9d86) } + +var fileDescriptor_3788ca0fc7eb9d86 = []byte{ + // 336 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xbf, 0x4a, 0x03, 0x41, + 0x10, 0xc6, 0x73, 0x49, 0x4c, 0x71, 0x20, 0x9a, 0x8b, 0xe2, 0x11, 0xc3, 0x19, 0xac, 0x82, 0xc5, + 0x1d, 0x41, 0xb0, 0x10, 0xb4, 0x48, 0x63, 0xe9, 0x19, 0x04, 0xc1, 0x66, 0xd9, 0x24, 0xc3, 0xb1, + 0x98, 0xfd, 0x93, 0xd9, 0xbb, 0x24, 0xbe, 0x85, 0x8f, 0xe0, 0xe3, 0x58, 0xa6, 0xb4, 0x94, 0x04, + 0xc1, 0xc7, 0x90, 0xdd, 0xbd, 0x68, 0xa3, 0xcd, 0x32, 0xec, 0xef, 0xfb, 0x0d, 0x1f, 0x8c, 0xdf, + 0x99, 0x16, 0x1c, 0x90, 0x26, 0xb4, 0x98, 0xb0, 0x3c, 0x99, 0xf7, 0x13, 0x45, 0x91, 0x72, 0x1d, + 0x2b, 0x94, 0xb9, 0x0c, 0xf6, 0x1c, 0x8d, 0x2d, 0x8d, 0xe7, 0xfd, 0x76, 0x93, 0x72, 0x26, 0x64, + 0x62, 0x5f, 0x97, 0x69, 0x1f, 0x64, 0x32, 0x93, 0x76, 0x4c, 0xcc, 0xe4, 0x7e, 0x4f, 0x3f, 0xab, + 0x7e, 0x23, 0xb5, 0xab, 0x82, 0x0b, 0xff, 0x08, 0x41, 0x49, 0xcc, 0x99, 0xc8, 0xc8, 0x82, 0x89, + 0x89, 0x5c, 0x90, 0xd1, 0x54, 0x8e, 0x9f, 0x74, 0xe8, 0x75, 0xbd, 0x5e, 0x7d, 0x78, 0xf8, 0x83, + 0x1f, 0x2c, 0x1d, 0x58, 0x18, 0x5c, 0xf9, 0xc7, 0x9c, 0x69, 0x6d, 0x2c, 0x17, 0x20, 0x19, 0xd2, + 0x31, 0x6c, 0xdd, 0xaa, 0x75, 0xc3, 0x32, 0x32, 0xb4, 0x89, 0x1b, 0x13, 0x28, 0xf5, 0xd8, 0x6f, + 0x29, 0x00, 0x24, 0xb3, 0x42, 0x62, 0xc1, 0xcb, 0x15, 0x3a, 0xac, 0x75, 0xbd, 0xde, 0xee, 0xb0, + 0x69, 0xd0, 0x9d, 0x25, 0xce, 0xd4, 0xc1, 0xb5, 0xdf, 0xe1, 0x4c, 0x10, 0x85, 0x72, 0x04, 0x24, + 0xa7, 0x98, 0x41, 0xae, 0x89, 0x02, 0x2c, 0x2b, 0x87, 0x75, 0x2b, 0x86, 0x9c, 0x89, 0xd4, 0x44, + 0xee, 0x5d, 0x22, 0x05, 0x74, 0xa5, 0xad, 0x4f, 0x97, 0xff, 0xfb, 0x3b, 0xa5, 0x4f, 0x97, 0x7f, + 0xfb, 0xb1, 0xdf, 0x42, 0x98, 0x15, 0x0c, 0x61, 0x42, 0xa4, 0x02, 0x41, 0x5c, 0xdf, 0x46, 0xb7, + 0x66, 0xfa, 0x6e, 0xd1, 0xad, 0x02, 0x91, 0x1a, 0x70, 0x59, 0xff, 0x7a, 0x3d, 0xf1, 0x06, 0x67, + 0x6f, 0xeb, 0xc8, 0x5b, 0xad, 0x23, 0xef, 0x63, 0x1d, 0x79, 0x2f, 0x9b, 0xa8, 0xb2, 0xda, 0x44, + 0x95, 0xf7, 0x4d, 0x54, 0x79, 0xdc, 0x5f, 0xfe, 0x1e, 0x35, 0x7f, 0x56, 0xa0, 0x47, 0x0d, 0x7b, + 0x9a, 0xf3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0x6e, 0x88, 0x53, 0xf4, 0x01, 0x00, 0x00, +} + +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ReportingWindowBlocks != that1.ReportingWindowBlocks { + return false + } + if this.MissingReportGraceBlocks != that1.MissingReportGraceBlocks { + return false + } + if this.PeerQuorumReports != that1.PeerQuorumReports { + return false + } + if this.MinProbeTargetsPerWindow != that1.MinProbeTargetsPerWindow { + return false + } + if this.MaxProbeTargetsPerWindow != that1.MaxProbeTargetsPerWindow { + return false + } + if len(this.RequiredOpenPorts) != len(that1.RequiredOpenPorts) { + return false + } + for i := range this.RequiredOpenPorts { + if this.RequiredOpenPorts[i] != that1.RequiredOpenPorts[i] { + return false + } + } + return true +} +func (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.RequiredOpenPorts) > 0 { + dAtA2 := make([]byte, len(m.RequiredOpenPorts)*10) + var j1 int + for _, num := range m.RequiredOpenPorts { + for num >= 1<<7 { + dAtA2[j1] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j1++ + } + dAtA2[j1] = uint8(num) + j1++ + } + i -= j1 + copy(dAtA[i:], dAtA2[:j1]) + i = encodeVarintParams(dAtA, i, uint64(j1)) + i-- + dAtA[i] = 0x32 + } + if m.MaxProbeTargetsPerWindow != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MaxProbeTargetsPerWindow)) + i-- + dAtA[i] = 0x28 + } + if m.MinProbeTargetsPerWindow != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MinProbeTargetsPerWindow)) + i-- + dAtA[i] = 0x20 + } + if m.PeerQuorumReports != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.PeerQuorumReports)) + i-- + dAtA[i] = 0x18 + } + if m.MissingReportGraceBlocks != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MissingReportGraceBlocks)) + i-- + dAtA[i] = 0x10 + } + if m.ReportingWindowBlocks != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ReportingWindowBlocks)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ReportingWindowBlocks != 0 { + n += 1 + sovParams(uint64(m.ReportingWindowBlocks)) + } + if m.MissingReportGraceBlocks != 0 { + n += 1 + sovParams(uint64(m.MissingReportGraceBlocks)) + } + if m.PeerQuorumReports != 0 { + n += 1 + sovParams(uint64(m.PeerQuorumReports)) + } + if m.MinProbeTargetsPerWindow != 0 { + n += 1 + sovParams(uint64(m.MinProbeTargetsPerWindow)) + } + if m.MaxProbeTargetsPerWindow != 0 { + n += 1 + sovParams(uint64(m.MaxProbeTargetsPerWindow)) + } + if len(m.RequiredOpenPorts) > 0 { + l = 0 + for _, e := range m.RequiredOpenPorts { + l += sovParams(uint64(e)) + } + n += 1 + sovParams(uint64(l)) + l + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) 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 ErrIntOverflowParams + } + 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: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReportingWindowBlocks", wireType) + } + m.ReportingWindowBlocks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ReportingWindowBlocks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MissingReportGraceBlocks", wireType) + } + m.MissingReportGraceBlocks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MissingReportGraceBlocks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerQuorumReports", wireType) + } + m.PeerQuorumReports = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PeerQuorumReports |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinProbeTargetsPerWindow", wireType) + } + m.MinProbeTargetsPerWindow = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinProbeTargetsPerWindow |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxProbeTargetsPerWindow", wireType) + } + m.MaxProbeTargetsPerWindow = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxProbeTargetsPerWindow |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType == 0 { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequiredOpenPorts = append(m.RequiredOpenPorts, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.RequiredOpenPorts) == 0 { + m.RequiredOpenPorts = make([]uint32, 0, elementCount) + } + for iNdEx < postIndex { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequiredOpenPorts = append(m.RequiredOpenPorts, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field RequiredOpenPorts", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/audit/v1/types/query.pb.go b/x/audit/v1/types/query.pb.go new file mode 100644 index 0000000..88c9f4e --- /dev/null +++ b/x/audit/v1/types/query.pb.go @@ -0,0 +1,922 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/v1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type QueryParamsRequest struct { +} + +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_e98945621bbc9485, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.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 *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +type QueryParamsResponse struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +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_e98945621bbc9485, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.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 *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +type QueryAuditStatusRequest struct { + ValidatorAddress string `protobuf:"bytes,1,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` +} + +func (m *QueryAuditStatusRequest) Reset() { *m = QueryAuditStatusRequest{} } +func (m *QueryAuditStatusRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAuditStatusRequest) ProtoMessage() {} +func (*QueryAuditStatusRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{2} +} +func (m *QueryAuditStatusRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAuditStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAuditStatusRequest.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 *QueryAuditStatusRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAuditStatusRequest.Merge(m, src) +} +func (m *QueryAuditStatusRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAuditStatusRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAuditStatusRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAuditStatusRequest proto.InternalMessageInfo + +func (m *QueryAuditStatusRequest) GetValidatorAddress() string { + if m != nil { + return m.ValidatorAddress + } + return "" +} + +type QueryAuditStatusResponse struct { + Status AuditStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status"` +} + +func (m *QueryAuditStatusResponse) Reset() { *m = QueryAuditStatusResponse{} } +func (m *QueryAuditStatusResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAuditStatusResponse) ProtoMessage() {} +func (*QueryAuditStatusResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{3} +} +func (m *QueryAuditStatusResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAuditStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAuditStatusResponse.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 *QueryAuditStatusResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAuditStatusResponse.Merge(m, src) +} +func (m *QueryAuditStatusResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAuditStatusResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAuditStatusResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAuditStatusResponse proto.InternalMessageInfo + +func (m *QueryAuditStatusResponse) GetStatus() AuditStatus { + if m != nil { + return m.Status + } + return AuditStatus{} +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "lumera.audit.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "lumera.audit.v1.QueryParamsResponse") + proto.RegisterType((*QueryAuditStatusRequest)(nil), "lumera.audit.v1.QueryAuditStatusRequest") + proto.RegisterType((*QueryAuditStatusResponse)(nil), "lumera.audit.v1.QueryAuditStatusResponse") +} + +func init() { proto.RegisterFile("lumera/audit/v1/query.proto", fileDescriptor_e98945621bbc9485) } + +var fileDescriptor_e98945621bbc9485 = []byte{ + // 432 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xce, 0x29, 0xcd, 0x4d, + 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0x2f, 0x33, 0xd4, 0x2f, 0x2c, 0x4d, 0x2d, + 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x48, 0xea, 0x81, 0x25, 0xf5, 0xca, + 0x0c, 0xa5, 0x04, 0x13, 0x73, 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x44, 0x8d, 0x94, 0x48, 0x7a, + 0x7e, 0x7a, 0x3e, 0x98, 0xa9, 0x0f, 0x62, 0x41, 0x45, 0x65, 0xd2, 0xf3, 0xf3, 0xd3, 0x73, 0x52, + 0xf5, 0x13, 0x0b, 0x32, 0xf5, 0x13, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, 0xf3, 0xf3, 0x8a, + 0xa1, 0xb2, 0x92, 0xc9, 0xf9, 0xc5, 0xb9, 0xf9, 0xc5, 0xf1, 0x10, 0x6d, 0x10, 0x0e, 0x4c, 0x23, + 0xba, 0x7b, 0x0a, 0x12, 0x8b, 0x12, 0x73, 0x61, 0xb2, 0x18, 0xae, 0x85, 0xb8, 0x0c, 0x2c, 0xa9, + 0x24, 0xc2, 0x25, 0x14, 0x08, 0x72, 0x7c, 0x00, 0x58, 0x47, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, + 0x89, 0x52, 0x20, 0x97, 0x30, 0x8a, 0x68, 0x71, 0x41, 0x7e, 0x5e, 0x71, 0xaa, 0x90, 0x15, 0x17, + 0x1b, 0xc4, 0x64, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x71, 0x3d, 0x34, 0xbf, 0xea, 0x41, + 0x34, 0x38, 0x71, 0x9e, 0xb8, 0x27, 0xcf, 0xb0, 0xe2, 0xf9, 0x06, 0x2d, 0xc6, 0x20, 0xa8, 0x0e, + 0xa5, 0x4c, 0x2e, 0x71, 0xb0, 0x91, 0x8e, 0x20, 0xa5, 0xc1, 0x25, 0x89, 0x25, 0xa5, 0x30, 0xdb, + 0x84, 0xfc, 0xb8, 0x04, 0xcb, 0x12, 0x73, 0x32, 0x53, 0x12, 0x4b, 0xf2, 0x8b, 0xe2, 0x13, 0x53, + 0x52, 0x8a, 0x52, 0x8b, 0x21, 0x36, 0x70, 0x3a, 0x29, 0x5e, 0xda, 0xa2, 0x2b, 0x0b, 0xf5, 0x6b, + 0x18, 0x4c, 0x8d, 0x23, 0x44, 0x49, 0x70, 0x49, 0x51, 0x66, 0x5e, 0x7a, 0x90, 0x40, 0x19, 0x9a, + 0xb8, 0x52, 0x18, 0x97, 0x04, 0xa6, 0x55, 0x08, 0x2f, 0x14, 0x83, 0x45, 0xa0, 0x5e, 0x90, 0xc1, + 0xf0, 0x02, 0x92, 0x2e, 0x27, 0x16, 0x90, 0x3f, 0x82, 0xa0, 0x3a, 0x8c, 0xf6, 0x30, 0x71, 0xb1, + 0x82, 0x0d, 0x16, 0x6a, 0x66, 0xe4, 0x62, 0x83, 0x78, 0x55, 0x48, 0x19, 0xc3, 0x00, 0xcc, 0xf0, + 0x94, 0x52, 0xc1, 0xaf, 0x08, 0xe2, 0x36, 0x25, 0xbd, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x69, 0x08, + 0xa9, 0xe9, 0xfb, 0x80, 0x55, 0x07, 0x80, 0x62, 0x28, 0x39, 0x3f, 0x47, 0x1f, 0x7b, 0xf4, 0x0a, + 0xad, 0x61, 0xe4, 0xe2, 0x46, 0x72, 0xad, 0x90, 0x06, 0x76, 0x5b, 0x30, 0x43, 0x5c, 0x4a, 0x93, + 0x08, 0x95, 0x50, 0x47, 0x79, 0x80, 0x1d, 0xe5, 0x24, 0xe4, 0x40, 0xc8, 0x51, 0x60, 0x46, 0x3c, + 0x24, 0xa8, 0xf4, 0xab, 0x31, 0x22, 0xb4, 0xd6, 0x49, 0xeb, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, + 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, + 0x8f, 0xe5, 0x18, 0xa2, 0x04, 0x2a, 0x10, 0xc6, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, + 0x53, 0xa7, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xd4, 0xc4, 0x77, 0xae, 0x6a, 0x03, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + AuditStatus(ctx context.Context, in *QueryAuditStatusRequest, opts ...grpc.CallOption) (*QueryAuditStatusResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AuditStatus(ctx context.Context, in *QueryAuditStatusRequest, opts ...grpc.CallOption) (*QueryAuditStatusResponse, error) { + out := new(QueryAuditStatusResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/AuditStatus", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + AuditStatus(context.Context, *QueryAuditStatusRequest) (*QueryAuditStatusResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) AuditStatus(ctx context.Context, req *QueryAuditStatusRequest) (*QueryAuditStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AuditStatus not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AuditStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAuditStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AuditStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/AuditStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AuditStatus(ctx, req.(*QueryAuditStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var Query_serviceDesc = _Query_serviceDesc +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "lumera.audit.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "AuditStatus", + Handler: _Query_AuditStatus_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "lumera/audit/v1/query.proto", +} + +func (m *QueryParamsRequest) 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 *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) 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 *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.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 *QueryAuditStatusRequest) 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 *QueryAuditStatusRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditStatusResponse) 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 *QueryAuditStatusResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.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 encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAuditStatusRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAuditStatusResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Status.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) 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: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: 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 *QueryParamsResponse) 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: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryAuditStatusRequest) 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: QueryAuditStatusRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAuditStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = 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 *QueryAuditStatusResponse) 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: QueryAuditStatusResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAuditStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/audit/v1/types/query.pb.gw.go b/x/audit/v1/types/query.pb.gw.go new file mode 100644 index 0000000..4cf76f3 --- /dev/null +++ b/x/audit/v1/types/query.pb.gw.go @@ -0,0 +1,254 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: lumera/audit/v1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_AuditStatus_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAuditStatusRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["validator_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "validator_address") + } + + protoReq.ValidatorAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "validator_address", err) + } + + msg, err := client.AuditStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AuditStatus_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAuditStatusRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["validator_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "validator_address") + } + + protoReq.ValidatorAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "validator_address", err) + } + + msg, err := server.AuditStatus(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_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_Params_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_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AuditStatus_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_AuditStatus_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_AuditStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_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_Params_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_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AuditStatus_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_AuditStatus_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_AuditStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AuditStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_status", "validator_address"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_AuditStatus_0 = runtime.ForwardResponseMessage +) diff --git a/x/audit/v1/types/tx.pb.go b/x/audit/v1/types/tx.pb.go new file mode 100644 index 0000000..13bc77d --- /dev/null +++ b/x/audit/v1/types/tx.pb.go @@ -0,0 +1,1078 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/v1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type MsgUpdateParams struct { + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_4b5ba410ad359f63, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.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 *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4b5ba410ad359f63, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.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 *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + +type MsgSubmitAuditReport struct { + SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` + WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + SelfReport AuditSelfReport `protobuf:"bytes,3,opt,name=self_report,json=selfReport,proto3" json:"self_report"` + PeerObservations []*AuditPeerObservation `protobuf:"bytes,4,rep,name=peer_observations,json=peerObservations,proto3" json:"peer_observations,omitempty"` +} + +func (m *MsgSubmitAuditReport) Reset() { *m = MsgSubmitAuditReport{} } +func (m *MsgSubmitAuditReport) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitAuditReport) ProtoMessage() {} +func (*MsgSubmitAuditReport) Descriptor() ([]byte, []int) { + return fileDescriptor_4b5ba410ad359f63, []int{2} +} +func (m *MsgSubmitAuditReport) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSubmitAuditReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSubmitAuditReport.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 *MsgSubmitAuditReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitAuditReport.Merge(m, src) +} +func (m *MsgSubmitAuditReport) XXX_Size() int { + return m.Size() +} +func (m *MsgSubmitAuditReport) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitAuditReport.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSubmitAuditReport proto.InternalMessageInfo + +func (m *MsgSubmitAuditReport) GetSupernodeAccount() string { + if m != nil { + return m.SupernodeAccount + } + return "" +} + +func (m *MsgSubmitAuditReport) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +func (m *MsgSubmitAuditReport) GetSelfReport() AuditSelfReport { + if m != nil { + return m.SelfReport + } + return AuditSelfReport{} +} + +func (m *MsgSubmitAuditReport) GetPeerObservations() []*AuditPeerObservation { + if m != nil { + return m.PeerObservations + } + return nil +} + +type MsgSubmitAuditReportResponse struct { +} + +func (m *MsgSubmitAuditReportResponse) Reset() { *m = MsgSubmitAuditReportResponse{} } +func (m *MsgSubmitAuditReportResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitAuditReportResponse) ProtoMessage() {} +func (*MsgSubmitAuditReportResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4b5ba410ad359f63, []int{3} +} +func (m *MsgSubmitAuditReportResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSubmitAuditReportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSubmitAuditReportResponse.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 *MsgSubmitAuditReportResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitAuditReportResponse.Merge(m, src) +} +func (m *MsgSubmitAuditReportResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSubmitAuditReportResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitAuditReportResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSubmitAuditReportResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgUpdateParams)(nil), "lumera.audit.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "lumera.audit.v1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgSubmitAuditReport)(nil), "lumera.audit.v1.MsgSubmitAuditReport") + proto.RegisterType((*MsgSubmitAuditReportResponse)(nil), "lumera.audit.v1.MsgSubmitAuditReportResponse") +} + +func init() { proto.RegisterFile("lumera/audit/v1/tx.proto", fileDescriptor_4b5ba410ad359f63) } + +var fileDescriptor_4b5ba410ad359f63 = []byte{ + // 524 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x31, 0x6f, 0xda, 0x40, + 0x14, 0xc6, 0x09, 0x8d, 0xca, 0x51, 0x29, 0x60, 0xa1, 0xe2, 0x98, 0xc8, 0xa5, 0x48, 0x91, 0x10, + 0x12, 0xb6, 0x42, 0xab, 0x0e, 0x6c, 0xb0, 0xb4, 0x1d, 0x50, 0x23, 0xa3, 0x2e, 0x59, 0x2c, 0x63, + 0x5f, 0x5c, 0x4b, 0xd8, 0x67, 0xdd, 0x3b, 0x93, 0x64, 0xab, 0x3a, 0x76, 0xea, 0xcf, 0xe8, 0x88, + 0xaa, 0x6c, 0xfd, 0x03, 0x19, 0xa3, 0x74, 0xe9, 0x54, 0x55, 0x30, 0xf0, 0x37, 0x2a, 0xdf, 0x99, + 0x50, 0x6c, 0xa4, 0x76, 0x41, 0xc7, 0xfb, 0xde, 0xf7, 0xbe, 0xef, 0x7d, 0x77, 0x46, 0xca, 0x34, + 0x0e, 0x30, 0xb5, 0x0d, 0x3b, 0x76, 0x7d, 0x66, 0xcc, 0x4e, 0x0d, 0x76, 0xa5, 0x47, 0x94, 0x30, + 0x22, 0x1f, 0x0a, 0x44, 0xe7, 0x88, 0x3e, 0x3b, 0x55, 0xab, 0x76, 0xe0, 0x87, 0xc4, 0xe0, 0xbf, + 0xa2, 0x47, 0xad, 0x79, 0xc4, 0x23, 0xfc, 0x68, 0x24, 0xa7, 0xb4, 0x5a, 0x77, 0x08, 0x04, 0x04, + 0x8c, 0x00, 0xbc, 0x64, 0x62, 0x00, 0x5e, 0x0a, 0x1c, 0x09, 0xc0, 0x12, 0x0c, 0xf1, 0x27, 0x85, + 0x1a, 0x59, 0x1f, 0x42, 0x56, 0x80, 0xc7, 0x59, 0x30, 0xb2, 0xa9, 0x1d, 0xa4, 0xd4, 0xd6, 0x77, + 0x09, 0x1d, 0x8e, 0xc0, 0x7b, 0x1f, 0xb9, 0x36, 0xc3, 0x67, 0x1c, 0x91, 0x5f, 0xa1, 0x92, 0x1d, + 0xb3, 0x0f, 0x84, 0xfa, 0xec, 0x5a, 0x91, 0x9a, 0x52, 0xbb, 0x34, 0x54, 0xee, 0x6f, 0xba, 0xb5, + 0x54, 0x73, 0xe0, 0xba, 0x14, 0x03, 0x8c, 0x19, 0xf5, 0x43, 0xcf, 0xdc, 0xb4, 0xca, 0x7d, 0x74, + 0x20, 0x66, 0x2b, 0x7b, 0x4d, 0xa9, 0x5d, 0xee, 0xd5, 0xf5, 0x4c, 0x0a, 0xba, 0x10, 0x18, 0x96, + 0x6e, 0x7f, 0x3d, 0x2b, 0x7c, 0x5d, 0xcd, 0x3b, 0x92, 0x99, 0x32, 0xfa, 0x2f, 0x3f, 0xad, 0xe6, + 0x9d, 0xcd, 0xac, 0xcf, 0xab, 0x79, 0xe7, 0x79, 0x6a, 0xfc, 0x6a, 0x63, 0x3d, 0xe3, 0xb4, 0x75, + 0x84, 0xea, 0x99, 0x92, 0x89, 0x21, 0x22, 0x21, 0xe0, 0xd6, 0xb7, 0x3d, 0x54, 0x1b, 0x81, 0x37, + 0x8e, 0x27, 0x81, 0xcf, 0x06, 0xc9, 0x00, 0x13, 0x47, 0x84, 0x32, 0xf9, 0x0d, 0xaa, 0x42, 0x1c, + 0x61, 0x1a, 0x12, 0x17, 0x5b, 0xb6, 0xe3, 0x90, 0x38, 0x64, 0xe9, 0x96, 0x8d, 0xfb, 0x9b, 0x6e, + 0x7d, 0xbd, 0xa5, 0xe3, 0x6c, 0x2f, 0x5a, 0x79, 0x60, 0x0d, 0x04, 0x49, 0x6e, 0xa0, 0xd2, 0xa5, + 0x1f, 0xba, 0xe4, 0xd2, 0xf2, 0x5d, 0xbe, 0x72, 0xd1, 0x7c, 0x2c, 0x0a, 0x6f, 0x5d, 0xf9, 0x35, + 0x2a, 0x03, 0x9e, 0x5e, 0x58, 0x94, 0xab, 0x2a, 0xfb, 0x3c, 0x91, 0x66, 0x2e, 0x11, 0xee, 0x6c, + 0x8c, 0xa7, 0x17, 0xc2, 0xdd, 0xb0, 0x98, 0x44, 0x63, 0x22, 0x78, 0xa8, 0xc8, 0x26, 0xaa, 0x46, + 0x18, 0x53, 0x8b, 0x4c, 0x00, 0xd3, 0x99, 0xcd, 0x7c, 0x12, 0x82, 0x52, 0x6c, 0xee, 0xb7, 0xcb, + 0xbd, 0x93, 0xdd, 0xe3, 0xce, 0x30, 0xa6, 0xef, 0x36, 0xdd, 0x66, 0x25, 0xda, 0x2e, 0x40, 0xff, + 0x69, 0x92, 0x76, 0x3e, 0x86, 0x96, 0x86, 0x8e, 0x77, 0x65, 0xb6, 0x0e, 0xb5, 0xf7, 0x43, 0x42, + 0xfb, 0x23, 0xf0, 0xe4, 0x73, 0xf4, 0x64, 0xeb, 0xc5, 0xe4, 0xf7, 0xca, 0x5c, 0x8b, 0xda, 0xfe, + 0x57, 0xc7, 0x5a, 0x43, 0xf6, 0x51, 0x35, 0x7f, 0x69, 0x27, 0xbb, 0xe8, 0xb9, 0x36, 0xb5, 0xfb, + 0x5f, 0x6d, 0x6b, 0x29, 0xf5, 0xd1, 0xc7, 0xe4, 0x0d, 0x0e, 0x3b, 0xb7, 0x0b, 0x4d, 0xba, 0x5b, + 0x68, 0xd2, 0xef, 0x85, 0x26, 0x7d, 0x59, 0x6a, 0x85, 0xbb, 0xa5, 0x56, 0xf8, 0xb9, 0xd4, 0x0a, + 0xe7, 0x95, 0xbf, 0xde, 0x1e, 0xbb, 0x8e, 0x30, 0x4c, 0x0e, 0xf8, 0x67, 0xf3, 0xe2, 0x4f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xe5, 0x27, 0xd3, 0xc2, 0xfb, 0x03, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + SubmitAuditReport(ctx context.Context, in *MsgSubmitAuditReport, opts ...grpc.CallOption) (*MsgSubmitAuditReportResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SubmitAuditReport(ctx context.Context, in *MsgSubmitAuditReport, opts ...grpc.CallOption) (*MsgSubmitAuditReportResponse, error) { + out := new(MsgSubmitAuditReportResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Msg/SubmitAuditReport", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + SubmitAuditReport(context.Context, *MsgSubmitAuditReport) (*MsgSubmitAuditReportResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} +func (*UnimplementedMsgServer) SubmitAuditReport(ctx context.Context, req *MsgSubmitAuditReport) (*MsgSubmitAuditReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SubmitAuditReport not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SubmitAuditReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSubmitAuditReport) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SubmitAuditReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Msg/SubmitAuditReport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SubmitAuditReport(ctx, req.(*MsgSubmitAuditReport)) + } + return interceptor(ctx, in, info, handler) +} + +var Msg_serviceDesc = _Msg_serviceDesc +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "lumera.audit.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + { + MethodName: "SubmitAuditReport", + Handler: _Msg_SubmitAuditReport_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "lumera/audit/v1/tx.proto", +} + +func (m *MsgUpdateParams) 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 *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) 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 *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgSubmitAuditReport) 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 *MsgSubmitAuditReport) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSubmitAuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PeerObservations) > 0 { + for iNdEx := len(m.PeerObservations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PeerObservations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + { + size, err := m.SelfReport.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.WindowId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x10 + } + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintTx(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSubmitAuditReportResponse) 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 *MsgSubmitAuditReportResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSubmitAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgSubmitAuditReport) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SupernodeAccount) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.WindowId != 0 { + n += 1 + sovTx(uint64(m.WindowId)) + } + l = m.SelfReport.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.PeerObservations) > 0 { + for _, e := range m.PeerObservations { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgSubmitAuditReportResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgUpdateParams) 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: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", 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.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *MsgUpdateParamsResponse) 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: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: 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 *MsgSubmitAuditReport) 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: MsgSubmitAuditReport: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSubmitAuditReport: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", 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.SupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SelfReport", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SelfReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerObservations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerObservations = append(m.PeerObservations, &AuditPeerObservation{}) + if err := m.PeerObservations[len(m.PeerObservations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *MsgSubmitAuditReportResponse) 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: MsgSubmitAuditReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSubmitAuditReportResponse: 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 skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) From d537fab6fafb653de3221cd73c604765107103e6 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Tue, 27 Jan 2026 16:05:24 +0500 Subject: [PATCH 02/18] audit : Reafactor & cleanup --- AuditSpec.md | 275 ++ config.yml | 2 +- docs/static/openapi.yml | 2 +- proto/lumera/audit/v1/audit.proto | 45 +- proto/lumera/audit/v1/params.proto | 1 - proto/lumera/audit/v1/query.proto | 86 +- .../audit_missing_report_enforcement_test.go | 62 + .../audit_submit_and_query_test.go | 58 + tests/systemtests/audit_test_helpers_test.go | 357 ++ x/audit/v1/README.md | 96 +- x/audit/v1/keeper/abci.go | 95 +- .../assignment/DETERMINISTIC_ASSIGNMENT.md | 119 + x/audit/v1/keeper/assignment/assignment.go | 127 + x/audit/v1/keeper/keeper.go | 11 +- x/audit/v1/keeper/msg_server.go | 1 - x/audit/v1/keeper/msg_submit_audit_report.go | 130 +- x/audit/v1/keeper/msg_update_params.go | 1 - x/audit/v1/keeper/params.go | 1 - x/audit/v1/keeper/query.go | 1 - x/audit/v1/keeper/query_audit_report.go | 24 + .../keeper/query_audit_reports_by_reporter.go | 52 + x/audit/v1/keeper/query_audit_status.go | 26 - x/audit/v1/keeper/query_current_window.go | 35 + x/audit/v1/keeper/query_params.go | 1 - x/audit/v1/keeper/query_self_reports.go | 64 + x/audit/v1/keeper/query_supernode_reports.go | 97 + x/audit/v1/keeper/state.go | 79 +- x/audit/v1/keeper/store.go | 2 +- x/audit/v1/keeper/window.go | 123 +- x/audit/v1/module/autocli.go | 34 +- x/audit/v1/module/genesis.go | 1 - x/audit/v1/module/module.go | 1 - x/audit/v1/types/audit.pb.go | 933 +---- x/audit/v1/types/errors.go | 17 +- x/audit/v1/types/keys.go | 141 +- x/audit/v1/types/params.go | 46 +- x/audit/v1/types/params.pb.go | 79 +- x/audit/v1/types/query.pb.go | 3300 +++++++++++++++-- x/audit/v1/types/query.pb.gw.go | 488 ++- 39 files changed, 5251 insertions(+), 1762 deletions(-) create mode 100644 AuditSpec.md create mode 100644 tests/systemtests/audit_missing_report_enforcement_test.go create mode 100644 tests/systemtests/audit_submit_and_query_test.go create mode 100644 tests/systemtests/audit_test_helpers_test.go create mode 100644 x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md create mode 100644 x/audit/v1/keeper/assignment/assignment.go create mode 100644 x/audit/v1/keeper/query_audit_report.go create mode 100644 x/audit/v1/keeper/query_audit_reports_by_reporter.go delete mode 100644 x/audit/v1/keeper/query_audit_status.go create mode 100644 x/audit/v1/keeper/query_current_window.go create mode 100644 x/audit/v1/keeper/query_self_reports.go create mode 100644 x/audit/v1/keeper/query_supernode_reports.go diff --git a/AuditSpec.md b/AuditSpec.md new file mode 100644 index 0000000..7a3dc46 --- /dev/null +++ b/AuditSpec.md @@ -0,0 +1,275 @@ +# Audit Module Specification (audit/v1) + +This document specifies the `audit/v1` on-chain contract: protobuf shapes, windowing, snapshots, and report storage/query surfaces. + +## Contents +1. Abstract +2. Overview +3. Reporting Windows +4. Parameters +5. Data Types (audit/v1) +6. Messages (tx) +7. Queries +8. On-Chain State +11. Out of Scope +12. Events + + + +## 1. Abstract +The Audit module (`x/audit/v1`) provides deterministic, window-based reporting for supernodes: +- ACTIVE supernodes submit one audit report per window, containing a self report and optional peer reachability observations. +- At the start of each window, the module persists a `WindowSnapshot` that serves as the minimal source-of-truth for the prober → targets mapping for that window. + +## 2. Overview +### 2.1 Roles +- **Probers**: ACTIVE supernodes at the window start height. +- **Targets**: ACTIVE + POSTPONED supernodes at the window start height. +- Reports are submitted by the registered **supernode account** (`supernode_account`) for a supernode, and the module resolves the corresponding supernode record via `x/supernode` when needed for validation. +- All audit state is scoped to a single supernode account (and to a window where applicable); there is no chain-global “single audit status”. + +Assumption: +- `supernode_account` is treated as the stable identifier for audit storage and queries. + +### 2.2 High-level flow (per window) +1) The chain derives `window_id` from block height and a stored `origin_height`. +2) At `window_start_height`, the module stores a `WindowSnapshot` containing the per-window prober → targets mapping (`assignments`). +3) Each reporter submits `MsgSubmitAuditReport` for a specific `window_id` during the acceptance period. +4) The module stores the report. + +### Summary +- Time is divided into fixed-size **reporting windows** (a set number of blocks). Window IDs/boundaries are derived deterministically from block height and a one-time **origin height** stored on first use. +- At the **first block of each window**, the chain writes a **window snapshot** that freezes, for that window: + - the **prober → targets mapping** (`assignments`) +- Each supernode can submit **at most one report per window**. A report is signed by the supernode account and stored under `supernode_account`. +- A report contains self metrics plus optional peer observations. Peer observations include port states aligned by index to `required_open_ports` (position `i` refers to the `i`th configured port). +- A report is **accepted** only if: + - the chain is within the window’s acceptance period (window start through window end) + - the reporter has not already submitted a report for that window +- When accepted, the chain stores the report as-is. +- Penalties and aggregation are intentionally out-of-scope for the current implementation. + +## 3. Reporting Windows +Window sizing is block-based and deterministic. The module stores an `origin_height` once and uses it to derive window boundaries. + +### 3.1 Window origin +`origin_height` is stored in module state on first use and remains fixed for the lifetime of the chain. + +### 3.2 Window derivation +Let: +- `origin = origin_height` +- `W = reporting_window_blocks` +- `H = current block height` + +Then: +- `window_id = floor((H - origin) / W)` for `H >= origin` (else `0`) +- `window_start_height(window_id) = origin + window_id * W` +- `window_end_height(window_id) = window_start_height(window_id) + W - 1` + +### 3.3 Report acceptance period +A report for `window_id` is accepted only when the current height is within: +- `[window_start_height(window_id), window_end_height(window_id)]` + +Outside this range, `MsgSubmitAuditReport` is rejected. + +## 4. Parameters +Parameters are represented by the `Params` message. + +Default values: +- `reporting_window_blocks` (uint64): `400` +- `peer_quorum_reports` (uint32): `3` +- `min_probe_targets_per_window` (uint32): `3` +- `max_probe_targets_per_window` (uint32): `5` +- `required_open_ports` (repeated uint32): `[4444, 4445, 8002]` + +## 5. Data Types (audit/v1) +The module defines its reachability types under `audit/v1`. + +### 5.1 PortState +```protobuf +enum PortState { + PORT_STATE_UNKNOWN = 0; + PORT_STATE_OPEN = 1; + PORT_STATE_CLOSED = 2; +} +``` + +### 5.2 AuditSelfReport +Self metrics are self-attested and stored as provided by the reporter. + +```protobuf +message AuditSelfReport { + double cpu_usage_percent = 1; + double mem_usage_percent = 2; + double disk_usage_percent = 3; + + // inbound_port_states[i] refers to required_open_ports[i] for the window. + repeated PortState inbound_port_states = 4; + + uint32 failed_actions_count = 5; +} +``` + +Note: the current implementation does not validate `inbound_port_states` length; it is stored as provided by the reporter. + +### 5.3 AuditPeerObservation +Peer port states are index-aligned: `port_states[i]` refers to `required_open_ports[i]` for the window. + +```protobuf +message AuditPeerObservation { + string target_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + repeated PortState port_states = 2; // port_states[i] refers to required_open_ports[i] for the window +} +``` + +### 5.4 AuditReport +Reports are stored per `(window_id, supernode_account)` and are immutable once accepted. + +```protobuf +message AuditReport { + // Primary identity for audit storage and queries. + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + int64 report_height = 3; + + AuditSelfReport self_report = 4 [(gogoproto.nullable) = false]; + repeated AuditPeerObservation peer_observations = 5; +} +``` + +### 5.8 WindowSnapshot +`WindowSnapshot` stores the minimal per-window source-of-truth for the prober → targets mapping. + +```protobuf +message ProberTargets { + string prober_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + repeated string target_supernode_accounts = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; +} + +message WindowSnapshot { + uint64 window_id = 1; + int64 window_start_height = 2; + repeated ProberTargets assignments = 3; +} +``` + +## 6. Messages (tx) +### 6.1 Msg service +```protobuf +service Msg { + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + rpc SubmitAuditReport(MsgSubmitAuditReport) returns (MsgSubmitAuditReportResponse); +} +``` + +### 6.2 MsgUpdateParams +Parameters are updated by the module authority (governance by default). + +```protobuf +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + Params params = 2 [(gogoproto.nullable) = false]; +} +``` + +### 6.3 MsgSubmitAuditReport +Reports are signed by `supernode_account` and applied to the supernode identified by that account. + +```protobuf +message MsgSubmitAuditReport { + option (cosmos.msg.v1.signer) = "supernode_account"; + + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + + AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; + repeated AuditPeerObservation peer_observations = 4; +} +``` + +### 6.4 Message validation rules +On `MsgSubmitAuditReport`: +1) Reject if current height is outside the acceptance period for `window_id` (section 3.3). +2) Resolve reporter supernode from `supernode_account` via `x/supernode`; reject if not found. +3) Reject duplicates: at most one report per `(window_id, supernode_account)`. + +## 7. Queries +```protobuf +service Query { + rpc Params(QueryParamsRequest) returns (QueryParamsResponse); + rpc CurrentWindow(QueryCurrentWindowRequest) returns (QueryCurrentWindowResponse); + + rpc AuditReport(QueryAuditReportRequest) returns (QueryAuditReportResponse); + rpc AuditReportsByReporter(QueryAuditReportsByReporterRequest) returns (QueryAuditReportsByReporterResponse); + + rpc SupernodeReports(QuerySupernodeReportsRequest) returns (QuerySupernodeReportsResponse); + rpc SelfReports(QuerySelfReportsRequest) returns (QuerySelfReportsResponse); +} + +message QueryParamsRequest {} +message QueryParamsResponse { Params params = 1 [(gogoproto.nullable) = false]; } + +message QueryCurrentWindowRequest {} +message QueryCurrentWindowResponse { + uint64 window_id = 1; + int64 window_start_height = 2; + int64 window_end_height = 3; +} + +message QueryAuditReportRequest { + uint64 window_id = 1; + string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; +} +message QueryAuditReportResponse { AuditReport report = 1 [(gogoproto.nullable) = false]; } + +message QueryAuditReportsByReporterRequest { + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + // pagination omitted in this spec; implementations may add pagination. +} +message QueryAuditReportsByReporterResponse { repeated AuditReport reports = 1; } + +message QuerySupernodeReportsRequest { + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + // pagination omitted in this spec; implementations may add pagination. +} + +message SupernodeReport { + string reporter_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + int64 report_height = 3; + repeated PortState port_states = 4; +} + +message QuerySupernodeReportsResponse { repeated SupernodeReport reports = 1; } + +message QuerySelfReportsRequest { + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + // pagination omitted in this spec; implementations may add pagination. +} + +message SelfReport { + uint64 window_id = 1; + int64 report_height = 2; + AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; +} + +message QuerySelfReportsResponse { repeated SelfReport reports = 1; } +``` + +## 8. On-Chain State +This section describes the minimum state persisted by the module: +- `origin_height` (int64) stored once. +- `WindowSnapshot` stored per `window_id`. +- `AuditReport` stored per `(window_id, supernode_account)`. + +State growth considerations: +- State must remain bounded. The module MAY prune per-window state (`WindowSnapshot`, `AuditReport`) for any `window_id` once the acceptance period for that window has ended (section 3.3). +- Current implementation note: pruning is not yet implemented; per-window state accumulates over time. + +## 11. Out of Scope +This specification does not define penalties or participation requirements for audit reports in its current scope. + +## 12. Events +The current implementation does not emit audit-specific events. diff --git a/config.yml b/config.yml index a7f0f55..f4c85b0 100644 --- a/config.yml +++ b/config.yml @@ -55,7 +55,7 @@ genesis: max_processing_time: 1h0m0s expiration_duration: 24h0m0s claim: - total_claimable_amount: '18749999991853' + total_claimable_amount: '18749999981413' params: claim_end_time: '1767225600' # Jan 1 2026, 00:00:00 crisis: diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index 11e5de3..5e9075e 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1 +1 @@ -{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin11","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin16","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin24","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the x/auth module\nparameters. The authority defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","operationId":"FeegrantMsg_Exec","parameters":[{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Grant":{"post":{"tags":["Msg"],"summary":"Grant grants the provided authorization to the grantee on the granter's\naccount with the provided expiration time. If there is already a grant\nfor the given (granter, grantee, Authorization) triple, then the grant\nwill be overwritten.","operationId":"FeegrantMsg_Grant","parameters":[{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Revoke":{"post":{"tags":["Msg"],"summary":"Revoke revokes any authorization corresponding to the provided method name on the\ngranter's account that has been granted to the grantee.","operationId":"FeegrantMsg_Revoke","parameters":[{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.autocli.v1.Query/AppOptions":{"post":{"tags":["Query"],"summary":"AppOptions returns the autocli options for all of the modules in an app.","operationId":"FeegrantQuery_AppOptions","parameters":[{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/MultiSend":{"post":{"tags":["Msg"],"summary":"MultiSend defines a method for sending coins from some accounts to other accounts.","operationId":"FeegrantMsg_MultiSend","parameters":[{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method for sending coins from one account to another account.","operationId":"FeegrantMsg_Send","parameters":[{"description":"MsgSend represents a message to send coins from one account to another.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/SetSendEnabled":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"SetSendEnabled is a governance operation for setting the SendEnabled flag\non any number of Denoms. Only the entries to add or update should be\nincluded. Entries that already exist in the store, but that aren't\nincluded in this message, will be left unchanged.","operationId":"FeegrantMsg_SetSendEnabled","parameters":[{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabled"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin94","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/AuthorizeCircuitBreaker":{"post":{"tags":["Msg"],"summary":"AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another\naccount's circuit breaker permissions.","operationId":"FeegrantMsg_AuthorizeCircuitBreaker","parameters":[{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/ResetCircuitBreaker":{"post":{"tags":["Msg"],"summary":"ResetCircuitBreaker resumes processing of Msg's in the state machine that\nhave been been paused using TripCircuitBreaker.","operationId":"FeegrantMsg_ResetCircuitBreaker","parameters":[{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/TripCircuitBreaker":{"post":{"tags":["Msg"],"summary":"TripCircuitBreaker pauses processing of Msg's in the state machine.","operationId":"FeegrantMsg_TripCircuitBreaker","parameters":[{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.consensus.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin107","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin109","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/VerifyInvariant":{"post":{"tags":["Msg"],"summary":"VerifyInvariant defines a method to verify a particular invariant.","operationId":"FeegrantMsg_VerifyInvariant","parameters":[{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/distribution module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"FeegrantMsg_CommunityPoolSpend","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/DepositValidatorRewardsPool":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"FeegrantMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"FeegrantMsg_FundCommunityPool","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress":{"post":{"tags":["Msg"],"summary":"SetWithdrawAddress defines a method to change the withdraw address\nfor a delegator (or validator self-delegation).","operationId":"FeegrantMsg_SetWithdrawAddress","parameters":[{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin120","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward":{"post":{"tags":["Msg"],"summary":"WithdrawDelegatorReward defines a method to withdraw rewards of delegator\nfrom a single validator.","operationId":"FeegrantMsg_WithdrawDelegatorReward","parameters":[{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission":{"post":{"tags":["Msg"],"summary":"WithdrawValidatorCommission defines a method to withdraw the\nfull commission to the validator address.","operationId":"FeegrantMsg_WithdrawValidatorCommission","parameters":[{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evidence.v1beta1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or\ncounterfactual signing.","operationId":"FeegrantMsg_SubmitEvidence","parameters":[{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/GrantAllowance":{"post":{"tags":["Msg"],"summary":"GrantAllowance grants fee allowance to the grantee on the granter's\naccount with the provided expiration time.","operationId":"FeegrantMsg_GrantAllowance","parameters":[{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/PruneAllowances":{"post":{"description":"Since cosmos-sdk 0.50","tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"FeegrantMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowances"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/RevokeAllowance":{"post":{"tags":["Msg"],"summary":"RevokeAllowance revokes any fee allowance of granter's account that\nhas been granted to the grantee.","operationId":"FeegrantMsg_RevokeAllowance","parameters":[{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/CancelProposal":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"FeegrantMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"FeegrantMsg_Deposit","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/ExecLegacyContent":{"post":{"tags":["Msg"],"summary":"ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal\nto execute a legacy content-based proposal.","operationId":"FeegrantMsg_ExecLegacyContent","parameters":[{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContent"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given the messages.","operationId":"FeegrantMsg_SubmitProposal","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin133","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"FeegrantMsg_Vote","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"FeegrantMsg_VoteWeighted","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"FeegrantMsg_DepositMixin137","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given a content.","operationId":"FeegrantMsg_SubmitProposalMixin137","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"FeegrantMsg_VoteMixin137","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/VoteWeighted":{"post":{"description":"Since: cosmos-sdk 0.43","tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"FeegrantMsg_VoteWeightedMixin137","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroup":{"post":{"tags":["Msg"],"summary":"CreateGroup creates a new group with an admin account address, a list of members and some optional metadata.","operationId":"FeegrantMsg_CreateGroup","parameters":[{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupPolicy creates a new group policy using given DecisionPolicy.","operationId":"FeegrantMsg_CreateGroupPolicy","parameters":[{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupWithPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupWithPolicy creates a new group with policy.","operationId":"FeegrantMsg_CreateGroupWithPolicy","parameters":[{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec executes a proposal.","operationId":"FeegrantMsg_ExecMixin141","parameters":[{"description":"MsgExec is the Msg/Exec request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/LeaveGroup":{"post":{"tags":["Msg"],"summary":"LeaveGroup allows a group member to leave the group.","operationId":"FeegrantMsg_LeaveGroup","parameters":[{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal submits a new proposal.","operationId":"FeegrantMsg_SubmitProposalMixin141","parameters":[{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupAdmin updates the group admin with given group id and previous admin address.","operationId":"FeegrantMsg_UpdateGroupAdmin","parameters":[{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMembers":{"post":{"tags":["Msg"],"summary":"UpdateGroupMembers updates the group members with given group id and admin address.","operationId":"FeegrantMsg_UpdateGroupMembers","parameters":[{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembers"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupMetadata updates the group metadata with given group id and admin address.","operationId":"FeegrantMsg_UpdateGroupMetadata","parameters":[{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyAdmin updates a group policy admin.","operationId":"FeegrantMsg_UpdateGroupPolicyAdmin","parameters":[{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyDecisionPolicy":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated.","operationId":"FeegrantMsg_UpdateGroupPolicyDecisionPolicy","parameters":[{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyMetadata updates a group policy metadata.","operationId":"FeegrantMsg_UpdateGroupPolicyMetadata","parameters":[{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote allows a voter to vote on a proposal.","operationId":"FeegrantMsg_VoteMixin141","parameters":[{"description":"MsgVote is the Msg/Vote request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/WithdrawProposal":{"post":{"tags":["Msg"],"summary":"WithdrawProposal withdraws a proposal.","operationId":"FeegrantMsg_WithdrawProposal","parameters":[{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.mint.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/mint module\nparameters. The authority is defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParamsMixin146","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.nft.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method to send a nft from one account to another account.","operationId":"FeegrantMsg_SendMixin152","parameters":[{"description":"MsgSend represents a message to send a nft from one account to another account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/Unjail":{"post":{"tags":["Msg"],"summary":"Unjail defines a method for unjailing a jailed validator, thus returning\nthem into the bonded validator set, so they can begin receiving provisions\nand rewards again.","operationId":"FeegrantMsg_Unjail","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjail"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjailResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/slashing module\nparameters. The authority defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParamsMixin159","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/BeginRedelegate":{"post":{"tags":["Msg"],"summary":"BeginRedelegate defines a method for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","operationId":"FeegrantMsg_BeginRedelegate","parameters":[{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"FeegrantMsg_CancelUnbondingDelegation","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegation"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CreateValidator":{"post":{"tags":["Msg"],"summary":"CreateValidator defines a method for creating a new validator.","operationId":"FeegrantMsg_CreateValidator","parameters":[{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Delegate":{"post":{"tags":["Msg"],"summary":"Delegate defines a method for performing a delegation of coins\nfrom a delegator to a validator.","operationId":"FeegrantMsg_Delegate","parameters":[{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/EditValidator":{"post":{"tags":["Msg"],"summary":"EditValidator defines a method for editing an existing validator.","operationId":"FeegrantMsg_EditValidator","parameters":[{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Undelegate":{"post":{"tags":["Msg"],"summary":"Undelegate defines a method for performing an undelegation from a\ndelegate and a validator.","operationId":"FeegrantMsg_Undelegate","parameters":[{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines an operation for updating the x/staking module\nparameters.\nSince: cosmos-sdk 0.47","operationId":"FeegrantMsg_UpdateParamsMixin164","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenCommit":{"post":{"tags":["ABCIListenerService"],"summary":"ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit","operationId":"FeegrantABCIListenerService_ListenCommit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenFinalizeBlock":{"post":{"tags":["ABCIListenerService"],"summary":"ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock","operationId":"FeegrantABCIListenerService_ListenFinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/CancelUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"FeegrantMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"FeegrantMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"FeegrantMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"FeegrantMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreateVestingAccount":{"post":{"tags":["Msg"],"summary":"CreateVestingAccount defines a method that enables creating a vesting\naccount.","operationId":"FeegrantMsg_CreateVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/account_info/{address}":{"get":{"description":"Since: cosmos-sdk 0.47","tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"FeegrantQuery_AccountInfo","parameters":[{"type":"string","description":"address is the account address string.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.43","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"FeegrantQuery_Accounts","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account details based on address.","operationId":"FeegrantQuery_Account","parameters":[{"type":"string","description":"address defines the address to query for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/address_by_id/{id}":{"get":{"description":"Since: cosmos-sdk 0.46.2","tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"FeegrantQuery_AccountAddressByID","parameters":[{"type":"string","format":"int64","description":"Deprecated, use account_id instead\n\nid is the account number of the address to be queried. This field\nshould have been an uint64 (like all account numbers), and will be\nupdated to uint64 in a future version of the auth query.","name":"id","in":"path","required":true},{"type":"string","format":"uint64","description":"account_id is the account number of the address to be queried.\n\nSince: cosmos-sdk 0.47","name":"account_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountAddressByIDResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"FeegrantQuery_Bech32Prefix","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.Bech32PrefixResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_bytes}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"FeegrantQuery_AddressBytesToString","parameters":[{"type":"string","format":"byte","name":"address_bytes","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressBytesToStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_string}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"FeegrantQuery_AddressStringToBytes","parameters":[{"type":"string","name":"address_string","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressStringToBytesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"FeegrantQuery_ModuleAccounts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts/{name}":{"get":{"tags":["Query"],"summary":"ModuleAccountByName returns the module account info by module name","operationId":"FeegrantQuery_ModuleAccountByName","parameters":[{"type":"string","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountByNameResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters.","operationId":"FeegrantQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants":{"get":{"tags":["Query"],"summary":"Returns list of `Authorization`, granted to the grantee by the granter.","operationId":"FeegrantQuery_Grants","parameters":[{"type":"string","name":"granter","in":"query"},{"type":"string","name":"grantee","in":"query"},{"type":"string","description":"Optional, msg_type_url, when set, will query only grants matching given msg type.","name":"msg_type_url","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/grantee/{grantee}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"FeegrantQuery_GranteeGrants","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranteeGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/granter/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"FeegrantQuery_GranterGrants","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranterGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"AllBalances queries the balance of all coins for a single account.","operationId":"FeegrantQuery_AllBalances","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"boolean","description":"resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.\n\nSince: cosmos-sdk 0.50","name":"resolve_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryAllBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}/by_denom":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a single coin for a single account.","operationId":"FeegrantQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners/{denom}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"FeegrantQuery_DenomOwners","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners_by_query":{"get":{"description":"Since: cosmos-sdk 0.50.3","tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"FeegrantQuery_DenomOwnersByQuery","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata":{"get":{"tags":["Query"],"summary":"DenomsMetadata queries the client metadata for all registered coin\ndenominations.","operationId":"FeegrantQuery_DenomsMetadata","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomsMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata/{denom}":{"get":{"tags":["Query"],"summary":"DenomMetadata queries the client metadata of a given coin denomination.","operationId":"FeegrantQuery_DenomMetadata","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata_by_query_string":{"get":{"tags":["Query"],"summary":"DenomMetadataByQueryString queries the client metadata of a given coin denomination.","operationId":"FeegrantQuery_DenomMetadataByQueryString","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/bank module.","operationId":"FeegrantQuery_ParamsMixin93","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/send_enabled":{"get":{"description":"This query only returns denominations that have specific SendEnabled settings.\nAny denomination that does not have a specific setting will use the default\nparams.default_send_enabled, and will not be returned by this query.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"FeegrantQuery_SendEnabled","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"denoms is the specific denoms you want look up. Leave empty to get all entries.","name":"denoms","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"FeegrantQuery_SpendableBalances","parameters":[{"type":"string","description":"address is the address to query spendable balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"FeegrantQuery_SpendableBalanceByDenom","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"TotalSupply queries the total supply of all coins.","operationId":"FeegrantQuery_TotalSupply","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryTotalSupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SupplyOf queries the supply of a single coin.","operationId":"FeegrantQuery_SupplyOf","parameters":[{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySupplyOfResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/config":{"get":{"tags":["Service"],"summary":"Config queries for the operator configuration.","operationId":"FeegrantService_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.ConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/status":{"get":{"tags":["Service"],"summary":"Status queries for the node status.","operationId":"FeegrantService_Status","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.StatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/authn":{"get":{"tags":["ReflectionService"],"summary":"GetAuthnDescriptor returns information on how to authenticate transactions in the application\nNOTE: this RPC is still experimental and might be subject to breaking changes or removal in\nfuture releases of the cosmos-sdk.","operationId":"FeegrantReflectionService_GetAuthnDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/chain":{"get":{"tags":["ReflectionService"],"summary":"GetChainDescriptor returns the description of the chain","operationId":"FeegrantReflectionService_GetChainDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/codec":{"get":{"tags":["ReflectionService"],"summary":"GetCodecDescriptor returns the descriptor of the codec of the application","operationId":"FeegrantReflectionService_GetCodecDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/configuration":{"get":{"tags":["ReflectionService"],"summary":"GetConfigurationDescriptor returns the descriptor for the sdk.Config of the application","operationId":"FeegrantReflectionService_GetConfigurationDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/query_services":{"get":{"tags":["ReflectionService"],"summary":"GetQueryServicesDescriptor returns the available gRPC queryable services of the application","operationId":"FeegrantReflectionService_GetQueryServicesDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/tx_descriptor":{"get":{"tags":["ReflectionService"],"summary":"GetTxDescriptor returns information on the used transaction object and available msgs that can be used","operationId":"FeegrantReflectionService_GetTxDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces":{"get":{"tags":["ReflectionService"],"summary":"ListAllInterfaces lists all the interfaces registered in the interface\nregistry.","operationId":"FeegrantReflectionService_ListAllInterfaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListAllInterfacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces/{interface_name}/implementations":{"get":{"tags":["ReflectionService"],"summary":"ListImplementations list all the concrete types that implement a given\ninterface.","operationId":"FeegrantReflectionService_ListImplementations","parameters":[{"type":"string","description":"interface_name defines the interface to query the implementations for.","name":"interface_name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListImplementationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/abci_query":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Service"],"summary":"ABCIQuery defines a query handler that supports ABCI queries directly to the\napplication, bypassing Tendermint completely. The ABCI query must contain\na valid and supported path, including app, custom, p2p, and store.","operationId":"FeegrantService_ABCIQuery","parameters":[{"type":"string","format":"byte","name":"data","in":"query"},{"type":"string","name":"path","in":"query"},{"type":"string","format":"int64","name":"height","in":"query"},{"type":"boolean","name":"prove","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ABCIQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/latest":{"get":{"tags":["Service"],"summary":"GetLatestBlock returns the latest block.","operationId":"FeegrantService_GetLatestBlock","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/{height}":{"get":{"tags":["Service"],"summary":"GetBlockByHeight queries block for given height.","operationId":"FeegrantService_GetBlockByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/node_info":{"get":{"tags":["Service"],"summary":"GetNodeInfo queries the current node info.","operationId":"FeegrantService_GetNodeInfo","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetNodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/syncing":{"get":{"tags":["Service"],"summary":"GetSyncing queries node syncing.","operationId":"FeegrantService_GetSyncing","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetSyncingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/latest":{"get":{"tags":["Service"],"summary":"GetLatestValidatorSet queries latest validator-set.","operationId":"FeegrantService_GetLatestValidatorSet","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/{height}":{"get":{"tags":["Service"],"summary":"GetValidatorSetByHeight queries validator-set at a given height.","operationId":"FeegrantService_GetValidatorSetByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"FeegrantQuery_AccountsMixin103","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"FeegrantQuery_AccountMixin103","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/disable_list":{"get":{"tags":["Query"],"summary":"DisabledList returns a list of disabled message urls","operationId":"FeegrantQuery_DisabledList","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.DisabledListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/consensus/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/consensus module.","operationId":"FeegrantQuery_ParamsMixin106","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"FeegrantQuery_CommunityPool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards":{"get":{"tags":["Query"],"summary":"DelegationTotalRewards queries the total rewards accrued by each\nvalidator.","operationId":"FeegrantQuery_DelegationTotalRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}":{"get":{"tags":["Query"],"summary":"DelegationRewards queries the total rewards accrued by a delegation.","operationId":"FeegrantQuery_DelegationRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true},{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators":{"get":{"tags":["Query"],"summary":"DelegatorValidators queries the validators of a delegator.","operationId":"FeegrantQuery_DelegatorValidators","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address":{"get":{"tags":["Query"],"summary":"DelegatorWithdrawAddress queries withdraw address of a delegator.","operationId":"FeegrantQuery_DelegatorWithdrawAddress","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries params of the distribution module.","operationId":"FeegrantQuery_ParamsMixin119","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}":{"get":{"tags":["Query"],"summary":"ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator","operationId":"FeegrantQuery_ValidatorDistributionInfo","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/commission":{"get":{"tags":["Query"],"summary":"ValidatorCommission queries accumulated commission for a validator.","operationId":"FeegrantQuery_ValidatorCommission","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards":{"get":{"tags":["Query"],"summary":"ValidatorOutstandingRewards queries rewards of a validator address.","operationId":"FeegrantQuery_ValidatorOutstandingRewards","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes":{"get":{"tags":["Query"],"summary":"ValidatorSlashes queries slash events of a validator.","operationId":"FeegrantQuery_ValidatorSlashes","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true},{"type":"string","format":"uint64","description":"starting_height defines the optional starting height to query the slashes.","name":"starting_height","in":"query"},{"type":"string","format":"uint64","description":"starting_height defines the optional ending height to query the slashes.","name":"ending_height","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorSlashesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence":{"get":{"tags":["Query"],"summary":"AllEvidence queries all evidence.","operationId":"FeegrantQuery_AllEvidence","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryAllEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence/{hash}":{"get":{"tags":["Query"],"summary":"Evidence queries evidence based on evidence hash.","operationId":"FeegrantQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.\n\nSince: cosmos-sdk 0.47","name":"hash","in":"path","required":true},{"type":"string","format":"byte","description":"evidence_hash defines the hash of the requested evidence.\nDeprecated: Use hash, a HEX encoded string, instead.","name":"evidence_hash","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}":{"get":{"tags":["Query"],"summary":"Allowance returns granted allwance to the grantee by the granter.","operationId":"FeegrantQuery_Allowance","parameters":[{"type":"string","description":"granter is the address of the user granting an allowance of their funds.","name":"granter","in":"path","required":true},{"type":"string","description":"grantee is the address of the user being granted an allowance of another user's funds.","name":"grantee","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowances/{grantee}":{"get":{"tags":["Query"],"summary":"Allowances returns all the grants for the given grantee address.","operationId":"FeegrantQuery_Allowances","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/issued/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"FeegrantQuery_AllowancesByGranter","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/constitution":{"get":{"tags":["Query"],"summary":"Constitution queries the chain's constitution.","operationId":"FeegrantQuery_Constitution","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryConstitutionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"FeegrantQuery_ParamsMixin132","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"FeegrantQuery_Proposals","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"FeegrantQuery_Proposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"FeegrantQuery_Deposits","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositAddr.","operationId":"FeegrantQuery_Deposit","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"FeegrantQuery_TallyResult","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"FeegrantQuery_Votes","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"FeegrantQuery_Vote","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"FeegrantQuery_ParamsMixin136","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"FeegrantQuery_ProposalsMixin136","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"FeegrantQuery_ProposalMixin136","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"FeegrantQuery_DepositsMixin136","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositor address.","operationId":"FeegrantQuery_DepositMixin136","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"FeegrantQuery_TallyResultMixin136","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"FeegrantQuery_VotesMixin136","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"FeegrantQuery_VoteMixin136","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_info/{group_id}":{"get":{"tags":["Query"],"summary":"GroupInfo queries group info based on group id.","operationId":"FeegrantQuery_GroupInfo","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_members/{group_id}":{"get":{"tags":["Query"],"summary":"GroupMembers queries members of a group by group id.","operationId":"FeegrantQuery_GroupMembers","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByAdmin queries group policies by admin address.","operationId":"FeegrantQuery_GroupPoliciesByAdmin","parameters":[{"type":"string","description":"admin is the admin address of the group policy.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_group/{group_id}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByGroup queries group policies by group id.","operationId":"FeegrantQuery_GroupPoliciesByGroup","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group policy's group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policy_info/{address}":{"get":{"tags":["Query"],"summary":"GroupPolicyInfo queries group policy info based on account address of group policy.","operationId":"FeegrantQuery_GroupPolicyInfo","parameters":[{"type":"string","description":"address is the account address of the group policy.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPolicyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups":{"get":{"description":"Since: cosmos-sdk 0.47.1","tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"FeegrantQuery_Groups","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupsByAdmin queries groups by admin address.","operationId":"FeegrantQuery_GroupsByAdmin","parameters":[{"type":"string","description":"admin is the account address of a group's admin.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_member/{address}":{"get":{"tags":["Query"],"summary":"GroupsByMember queries groups by member address.","operationId":"FeegrantQuery_GroupsByMember","parameters":[{"type":"string","description":"address is the group member address.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByMemberResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries a proposal based on proposal id.","operationId":"FeegrantQuery_ProposalMixin140","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult returns the tally result of a proposal. If the proposal is\nstill in voting period, then this query computes the current tally state,\nwhich might not be final. On the other hand, if the proposal is final,\nthen it simply returns the `final_tally_result` state stored in the\nproposal itself.","operationId":"FeegrantQuery_TallyResultMixin140","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique id of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals_by_group_policy/{address}":{"get":{"tags":["Query"],"summary":"ProposalsByGroupPolicy queries proposals based on account address of group policy.","operationId":"FeegrantQuery_ProposalsByGroupPolicy","parameters":[{"type":"string","description":"address is the account address of the group policy related to proposals.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalsByGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}":{"get":{"tags":["Query"],"summary":"VoteByProposalVoter queries a vote by proposal id and voter.","operationId":"FeegrantQuery_VoteByProposalVoter","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVoteByProposalVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"VotesByProposal queries a vote by proposal id.","operationId":"FeegrantQuery_VotesByProposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_voter/{voter}":{"get":{"tags":["Query"],"summary":"VotesByVoter queries a vote by voter.","operationId":"FeegrantQuery_VotesByVoter","parameters":[{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/annual_provisions":{"get":{"tags":["Query"],"summary":"AnnualProvisions current minting annual provisions value.","operationId":"FeegrantQuery_AnnualProvisions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryAnnualProvisionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/inflation":{"get":{"tags":["Query"],"summary":"Inflation returns the current minting inflation value.","operationId":"FeegrantQuery_Inflation","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryInflationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of minting parameters.","operationId":"FeegrantQuery_ParamsMixin145","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/balance/{owner}/{class_id}":{"get":{"tags":["Query"],"summary":"Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721","operationId":"FeegrantQuery_BalanceMixin151","parameters":[{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"path","required":true},{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes":{"get":{"tags":["Query"],"summary":"Classes queries all NFT classes","operationId":"FeegrantQuery_Classes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes/{class_id}":{"get":{"tags":["Query"],"summary":"Class queries an NFT class based on its id","operationId":"FeegrantQuery_Class","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts":{"get":{"tags":["Query"],"summary":"NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in\nERC721Enumerable","operationId":"FeegrantQuery_NFTs","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"query"},{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"NFT queries an NFT based on its class and id.","operationId":"FeegrantQuery_NFT","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/owner/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721","operationId":"FeegrantQuery_Owner","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryOwnerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/supply/{class_id}":{"get":{"tags":["Query"],"summary":"Supply queries the number of NFTs from the given class, same as totalSupply of ERC721.","operationId":"FeegrantQuery_Supply","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QuerySupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries a specific parameter of a module, given its subspace and\nkey.","operationId":"FeegrantQuery_ParamsMixin154","parameters":[{"type":"string","description":"subspace defines the module to query the parameter for.","name":"subspace","in":"query"},{"type":"string","description":"key defines the key of the parameter in the subspace.","name":"key","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/subspaces":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"FeegrantQuery_Subspaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QuerySubspacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of slashing module","operationId":"FeegrantQuery_ParamsMixin157","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos":{"get":{"tags":["Query"],"summary":"SigningInfos queries signing info of all validators","operationId":"FeegrantQuery_SigningInfos","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos/{cons_address}":{"get":{"tags":["Query"],"summary":"SigningInfo queries the signing info of given cons address","operationId":"FeegrantQuery_SigningInfo","parameters":[{"type":"string","description":"cons_address is the address to query signing info of","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegations/{delegator_addr}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorDelegations queries all delegations of a given delegator address.","operationId":"FeegrantQuery_DelegatorDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Redelegations queries redelegations of given address.","operationId":"FeegrantQuery_Redelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"src_validator_addr defines the validator address to redelegate from.","name":"src_validator_addr","in":"query"},{"type":"string","description":"dst_validator_addr defines the validator address to redelegate to.","name":"dst_validator_addr","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryRedelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorUnbondingDelegations queries all unbonding delegations of a given\ndelegator address.","operationId":"FeegrantQuery_DelegatorUnbondingDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorValidators queries all validators info for given delegator\naddress.","operationId":"FeegrantQuery_DelegatorValidatorsMixin162","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"DelegatorValidator queries validator info for given delegator validator\npair.","operationId":"FeegrantQuery_DelegatorValidator","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/historical_info/{height}":{"get":{"tags":["Query"],"summary":"HistoricalInfo queries the historical info for given height.","operationId":"FeegrantQuery_HistoricalInfo","parameters":[{"type":"string","format":"int64","description":"height defines at which height to query the historical info.","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryHistoricalInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the staking parameters.","operationId":"FeegrantQuery_ParamsMixin162","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/pool":{"get":{"tags":["Query"],"summary":"Pool queries the pool info.","operationId":"FeegrantQuery_Pool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Validators queries all validators that match the given status.","operationId":"FeegrantQuery_Validators","parameters":[{"type":"string","description":"status enables to query for validators matching a given status.","name":"status","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"Validator queries validator info for given validator address.","operationId":"FeegrantQuery_Validator","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorDelegations queries delegate info for given validator.","operationId":"FeegrantQuery_ValidatorDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}":{"get":{"tags":["Query"],"summary":"Delegation queries delegate info for given validator delegator pair.","operationId":"FeegrantQuery_Delegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation":{"get":{"tags":["Query"],"summary":"UnbondingDelegation queries unbonding info for given validator delegator\npair.","operationId":"FeegrantQuery_UnbondingDelegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorUnbondingDelegations queries unbonding delegations of a validator.","operationId":"FeegrantQuery_ValidatorUnbondingDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"FeegrantService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"FeegrantService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"FeegrantService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"FeegrantService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/simulate":{"post":{"tags":["Service"],"summary":"Simulate simulates executing a transaction for estimating gas usage.","operationId":"FeegrantService_Simulate","parameters":[{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs":{"get":{"tags":["Service"],"summary":"GetTxsEvent fetches txs by event.","operationId":"FeegrantService_GetTxsEvent","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"events is the list of transaction event type.\nDeprecated post v0.47.x: use query instead, which should contain a valid\nevents query.","name":"events","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"],"type":"string","default":"ORDER_BY_UNSPECIFIED","description":" - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","name":"order_by","in":"query"},{"type":"string","format":"uint64","description":"page is the page number to query, starts at 1. If not provided, will\ndefault to first page.","name":"page","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"limit","in":"query"},{"type":"string","description":"query defines the transaction event query that is proxied to Tendermint's\nTxSearch RPC method. The query must be valid.\n\nSince cosmos-sdk 0.50","name":"query","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}},"post":{"tags":["Service"],"summary":"BroadcastTx broadcast transaction.","operationId":"FeegrantService_BroadcastTx","parameters":[{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/block/{height}":{"get":{"description":"Since: cosmos-sdk 0.45.2","tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"FeegrantService_GetBlockWithTxs","parameters":[{"type":"string","format":"int64","description":"height is the height of the block to query.","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetBlockWithTxsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/{hash}":{"get":{"tags":["Service"],"summary":"GetTx fetches a tx by hash.","operationId":"FeegrantService_GetTx","parameters":[{"type":"string","description":"hash is the tx hash to query, encoded as a hex string.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/applied_plan/{name}":{"get":{"tags":["Query"],"summary":"AppliedPlan queries a previously applied upgrade plan by its name.","operationId":"FeegrantQuery_AppliedPlan","parameters":[{"type":"string","description":"name is the name of the applied plan to query for.","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAppliedPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/authority":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"FeegrantQuery_Authority","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAuthorityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/current_plan":{"get":{"tags":["Query"],"summary":"CurrentPlan queries the current upgrade plan.","operationId":"FeegrantQuery_CurrentPlan","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryCurrentPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/module_versions":{"get":{"description":"Since: cosmos-sdk 0.43","tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"FeegrantQuery_ModuleVersions","parameters":[{"type":"string","description":"module_name is a field to query a specific module\nconsensus version from state. Leaving this empty will\nfetch the full list of module versions from state","name":"module_name","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryModuleVersionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries the consensus state that will serve\nas a trusted kernel for the next version of this chain. It will only be\nstored at the last height of this chain.\nUpgradedConsensusState RPC not supported with legacy querier\nThis rpc is deprecated now that IBC has its own replacement\n(https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)","operationId":"FeegrantQuery_UpgradedConsensusState","parameters":[{"type":"string","format":"int64","description":"last height of the current chain must be sent in request\nas this is the height under which next consensus state is stored","name":"last_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/AddCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"AddCodeUploadParamsAddresses defines a governance operation for\nadding addresses to code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_AddCodeUploadParamsAddresses","parameters":[{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ClearAdmin":{"post":{"tags":["Msg"],"summary":"ClearAdmin removes any admin stored for a smart contract","operationId":"WasmMsg_ClearAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ExecuteContract":{"post":{"tags":["Msg"],"summary":"Execute submits the given message data to a smart contract","operationId":"WasmMsg_ExecuteContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract":{"post":{"tags":["Msg"],"summary":"InstantiateContract creates a new smart contract instance for the given\n code id.","operationId":"WasmMsg_InstantiateContract","parameters":[{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract2":{"post":{"tags":["Msg"],"summary":"InstantiateContract2 creates a new smart contract instance for the given\n code id with a predictable address","operationId":"WasmMsg_InstantiateContract2","parameters":[{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"Migrate runs a code upgrade/ downgrade for a smart contract","operationId":"WasmMsg_MigrateContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/PinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"PinCodes defines a governance operation for pinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_PinCodes","parameters":[{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/RemoveCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"RemoveCodeUploadParamsAddresses defines a governance operation for\nremoving addresses from code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_RemoveCodeUploadParamsAddresses","parameters":[{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndInstantiateContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"StoreAndInstantiateContract defines a governance operation for storing\nand instantiating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndInstantiateContract","parameters":[{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndMigrateContract":{"post":{"description":"Since: 0.42","tags":["Msg"],"summary":"StoreAndMigrateContract defines a governance operation for storing\nand migrating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndMigrateContract","parameters":[{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode to submit Wasm code to the system","operationId":"WasmMsg_StoreCode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/SudoContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"SudoContract defines a governance operation for calling sudo\non a contract. The authority is defined in the keeper.","operationId":"WasmMsg_SudoContract","parameters":[{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UnpinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UnpinCodes defines a governance operation for unpinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_UnpinCodes","parameters":[{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateAdmin":{"post":{"tags":["Msg"],"summary":"UpdateAdmin sets a new admin for a smart contract","operationId":"WasmMsg_UpdateAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateContractLabel":{"post":{"description":"Since: 0.43","tags":["Msg"],"summary":"UpdateContractLabel sets a new label for a smart contract","operationId":"WasmMsg_UpdateContractLabel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateInstantiateConfig":{"post":{"tags":["Msg"],"summary":"UpdateInstantiateConfig updates instantiate config for a smart contract","operationId":"WasmMsg_UpdateInstantiateConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateParams":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/wasm\nmodule parameters. The authority is defined in the keeper.","operationId":"WasmMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code":{"get":{"tags":["Query"],"summary":"Codes gets the metadata for all stored wasm codes","operationId":"WasmQuery_Codes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code-info/{code_id}":{"get":{"tags":["Query"],"summary":"CodeInfo gets the metadata for a single wasm code","operationId":"WasmQuery_CodeInfo","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}":{"get":{"tags":["Query"],"summary":"Code gets the binary code and metadata for a single wasm code","operationId":"WasmQuery_Code","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}/contracts":{"get":{"tags":["Query"],"summary":"ContractsByCode lists all smart contracts for a code id","operationId":"WasmQuery_ContractsByCode","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/params":{"get":{"tags":["Query"],"summary":"Params gets the module params","operationId":"WasmQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/pinned":{"get":{"tags":["Query"],"summary":"PinnedCodes gets the pinned code ids","operationId":"WasmQuery_PinnedCodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryPinnedCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/build_address":{"get":{"tags":["Query"],"summary":"BuildAddress builds a contract address","operationId":"WasmQuery_BuildAddress","parameters":[{"type":"string","description":"CodeHash is the hash of the code","name":"code_hash","in":"query"},{"type":"string","description":"CreatorAddress is the address of the contract instantiator","name":"creator_address","in":"query"},{"type":"string","description":"Salt is a hex encoded salt","name":"salt","in":"query"},{"type":"string","format":"byte","description":"InitArgs are optional json encoded init args to be used in contract address\nbuilding if provided","name":"init_args","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryBuildAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}":{"get":{"tags":["Query"],"summary":"ContractInfo gets the contract meta data","operationId":"WasmQuery_ContractInfo","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/history":{"get":{"tags":["Query"],"summary":"ContractHistory gets the contract code history","operationId":"WasmQuery_ContractHistory","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractHistoryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}":{"get":{"tags":["Query"],"summary":"RawContractState gets single key from the raw store data of a contract","operationId":"WasmQuery_RawContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryRawContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}":{"get":{"tags":["Query"],"summary":"SmartContractState get smart query result from the contract","operationId":"WasmQuery_SmartContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"QueryData contains the query data passed to the contract","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QuerySmartContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/state":{"get":{"tags":["Query"],"summary":"AllContractState gets all raw store data for a single contract","operationId":"WasmQuery_AllContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryAllContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contracts/creator/{creator_address}":{"get":{"tags":["Query"],"summary":"ContractsByCreator gets the contracts by creator","operationId":"WasmQuery_ContractsByCreator","parameters":[{"type":"string","description":"CreatorAddress is the address of contract creator","name":"creator_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/wasm-limits-config":{"get":{"tags":["Query"],"summary":"WasmLimitsConfig gets the configured limits for static validation of Wasm\nfiles, encoded in JSON.","operationId":"WasmQuery_WasmLimitsConfig","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/RegisterInterchainAccount":{"post":{"tags":["Msg"],"summary":"RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount.","operationId":"ControllerMsg_RegisterInterchainAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/SendTx":{"post":{"tags":["Msg"],"summary":"SendTx defines a rpc handler for MsgSendTx.","operationId":"ControllerMsg_SendTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/ModuleQuerySafe":{"post":{"tags":["Msg"],"summary":"ModuleQuerySafe defines a rpc handler for MsgModuleQuerySafe.","operationId":"ControllerMsg_ModuleQuerySafe","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin35","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/Transfer":{"post":{"tags":["Msg"],"summary":"Transfer defines a rpc handler method for MsgTransfer.","operationId":"ControllerMsg_Transfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin46","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_Acknowledgement","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseConfirm":{"post":{"tags":["Msg"],"summary":"ChannelCloseConfirm defines a rpc handler method for\nMsgChannelCloseConfirm.","operationId":"ControllerMsg_ChannelCloseConfirm","parameters":[{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseInit":{"post":{"tags":["Msg"],"summary":"ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit.","operationId":"ControllerMsg_ChannelCloseInit","parameters":[{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenAck":{"post":{"tags":["Msg"],"summary":"ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck.","operationId":"ControllerMsg_ChannelOpenAck","parameters":[{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenConfirm":{"post":{"tags":["Msg"],"summary":"ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm.","operationId":"ControllerMsg_ChannelOpenConfirm","parameters":[{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenInit":{"post":{"tags":["Msg"],"summary":"ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit.","operationId":"ControllerMsg_ChannelOpenInit","parameters":[{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenTry":{"post":{"tags":["Msg"],"summary":"ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry.","operationId":"ControllerMsg_ChannelOpenTry","parameters":[{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacket","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_Timeout","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/TimeoutOnClose":{"post":{"tags":["Msg"],"summary":"TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose.","operationId":"ControllerMsg_TimeoutOnClose","parameters":[{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnCloseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_AcknowledgementMixin54","parameters":[{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacketMixin54","parameters":[{"description":"MsgRecvPacket receives an incoming IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/SendPacket":{"post":{"tags":["Msg"],"summary":"SendPacket defines a rpc handler method for MsgSendPacket.","operationId":"ControllerMsg_SendPacket","parameters":[{"description":"MsgSendPacket sends an outgoing IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_TimeoutMixin54","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/CreateClient":{"post":{"tags":["Msg"],"summary":"CreateClient defines a rpc handler method for MsgCreateClient.","operationId":"ControllerMsg_CreateClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/DeleteClientCreator":{"post":{"tags":["Msg"],"summary":"DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator.","operationId":"ControllerMsg_DeleteClientCreator","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/IBCSoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade.","operationId":"ControllerMsg_IBCSoftwareUpgrade","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/RecoverClient":{"post":{"tags":["Msg"],"summary":"RecoverClient defines a rpc handler method for MsgRecoverClient.","operationId":"ControllerMsg_RecoverClient","parameters":[{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/SubmitMisbehaviour":{"post":{"tags":["Msg"],"summary":"SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.","operationId":"ControllerMsg_SubmitMisbehaviour","parameters":[{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviour"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviourResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClient":{"post":{"tags":["Msg"],"summary":"UpdateClient defines a rpc handler method for MsgUpdateClient.","operationId":"ControllerMsg_UpdateClient","parameters":[{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClientParams":{"post":{"tags":["Msg"],"summary":"UpdateClientParams defines a rpc handler method for MsgUpdateParams.","operationId":"ControllerMsg_UpdateClientParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpgradeClient":{"post":{"tags":["Msg"],"summary":"UpgradeClient defines a rpc handler method for MsgUpgradeClient.","operationId":"ControllerMsg_UpgradeClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/RegisterCounterparty":{"post":{"tags":["Msg"],"summary":"RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty.","operationId":"ControllerMsg_RegisterCounterparty","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterparty"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterpartyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/UpdateClientConfig":{"post":{"tags":["Msg"],"summary":"UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig.","operationId":"ControllerMsg_UpdateClientConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenAck":{"post":{"tags":["Msg"],"summary":"ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck.","operationId":"ControllerMsg_ConnectionOpenAck","parameters":[{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenConfirm":{"post":{"tags":["Msg"],"summary":"ConnectionOpenConfirm defines a rpc handler method for\nMsgConnectionOpenConfirm.","operationId":"ControllerMsg_ConnectionOpenConfirm","parameters":[{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenInit":{"post":{"tags":["Msg"],"summary":"ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit.","operationId":"ControllerMsg_ConnectionOpenInit","parameters":[{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenTry":{"post":{"tags":["Msg"],"summary":"ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry.","operationId":"ControllerMsg_ConnectionOpenTry","parameters":[{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/UpdateConnectionParams":{"post":{"tags":["Msg"],"summary":"UpdateConnectionParams defines a rpc handler method for\nMsgUpdateParams.","operationId":"ControllerMsg_UpdateConnectionParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"MigrateContract defines a rpc handler method for MsgMigrateContract.","operationId":"ControllerMsg_MigrateContract","parameters":[{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/RemoveChecksum":{"post":{"tags":["Msg"],"summary":"RemoveChecksum defines a rpc handler method for MsgRemoveChecksum.","operationId":"ControllerMsg_RemoveChecksum","parameters":[{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode defines a rpc handler method for MsgStoreCode.","operationId":"ControllerMsg_StoreCode","parameters":[{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"InterchainAccount returns the interchain account address for a given owner address on a given connection","operationId":"ControllerQuery_InterchainAccount","parameters":[{"type":"string","name":"owner","in":"path","required":true},{"type":"string","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA controller submodule.","operationId":"ControllerQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/host/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA host submodule.","operationId":"ControllerQuery_ParamsMixin34","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address":{"get":{"tags":["Query"],"summary":"EscrowAddress returns the escrow address for a particular port and channel id.","operationId":"ControllerQuery_EscrowAddress","parameters":[{"type":"string","description":"unique channel identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"unique port identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryEscrowAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denom_hashes/{trace}":{"get":{"tags":["Query"],"summary":"DenomHash queries a denomination hash information.","operationId":"ControllerQuery_DenomHash","parameters":[{"pattern":".+","type":"string","description":"The denomination trace ([port_id]/[channel_id])+/[denom]","name":"trace","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomHashResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms":{"get":{"tags":["Query"],"summary":"Denoms queries all denominations","operationId":"ControllerQuery_Denoms","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms/{hash}":{"get":{"tags":["Query"],"summary":"Denom queries a denomination","operationId":"ControllerQuery_Denom","parameters":[{"pattern":".+","type":"string","description":"hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ibc-transfer module.","operationId":"ControllerQuery_ParamsMixin43","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/total_escrow/{denom}":{"get":{"tags":["Query"],"summary":"TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.","operationId":"ControllerQuery_TotalEscrowForDenom","parameters":[{"pattern":".+","type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels":{"get":{"tags":["Query"],"summary":"Channels queries all the IBC channels of a chain.","operationId":"ControllerQuery_Channels","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}":{"get":{"tags":["Query"],"summary":"Channel queries an IBC Channel.","operationId":"ControllerQuery_Channel","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state":{"get":{"tags":["Query"],"summary":"ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.","operationId":"ControllerQuery_ChannelClientState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ChannelConsensusState queries for the consensus state for the channel\nassociated with the provided channel identifiers.","operationId":"ControllerQuery_ChannelConsensusState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"revision number of the consensus state","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"revision height of the consensus state","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence":{"get":{"tags":["Query"],"summary":"NextSequenceReceive returns the next receive sequence for a given channel.","operationId":"ControllerQuery_NextSequenceReceive","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceReceiveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSend","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all the packet acknowledgements associated\nwith a channel.","operationId":"ControllerQuery_PacketAcknowledgements","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored packet acknowledgement hash.","operationId":"ControllerQuery_PacketAcknowledgement","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments returns all the packet commitments hashes associated\nwith a channel.","operationId":"ControllerQuery_PacketCommitments","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated\nwith a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcks","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a\nchannel and sequences.","operationId":"ControllerQuery_UnreceivedPackets","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"packet_commitment_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitment","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries if a given packet sequence has been received on the\nqueried chain","operationId":"ControllerQuery_PacketReceipt","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/connections/{connection}/channels":{"get":{"tags":["Query"],"summary":"ConnectionChannels queries all the channels associated with a connection\nend.","operationId":"ControllerQuery_ConnectionChannels","parameters":[{"type":"string","description":"connection unique identifier","name":"connection","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryConnectionChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSendMixin53","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all packet acknowledgements associated with a channel.","operationId":"ControllerQuery_PacketAcknowledgementsMixin53","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored acknowledgement commitment hash.","operationId":"ControllerQuery_PacketAcknowledgementMixin53","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentsMixin53","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcksMixin53","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedPacketsMixin53","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentMixin53","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries a stored packet receipt.","operationId":"ControllerQuery_PacketReceiptMixin53","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_creator/{client_id}":{"get":{"tags":["Query"],"summary":"ClientCreator queries the creator of a given client.","operationId":"ControllerQuery_ClientCreator","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states":{"get":{"tags":["Query"],"summary":"ClientStates queries all the IBC light clients of a chain.","operationId":"ControllerQuery_ClientStates","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states/{client_id}":{"get":{"tags":["Query"],"summary":"ClientState queries an IBC light client.","operationId":"ControllerQuery_ClientState","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_status/{client_id}":{"get":{"tags":["Query"],"summary":"Status queries the status of an IBC client.","operationId":"ControllerQuery_ClientStatus","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}":{"get":{"tags":["Query"],"summary":"ConsensusStates queries all the consensus state associated with a given\nclient.","operationId":"ControllerQuery_ConsensusStates","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/heights":{"get":{"tags":["Query"],"summary":"ConsensusStateHeights queries the height of every consensus states associated with a given client.","operationId":"ControllerQuery_ConsensusStateHeights","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateHeightsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConsensusState queries a consensus state associated with a client state at\na given height.","operationId":"ControllerQuery_ConsensusState","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision number","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision height","name":"revision_height","in":"path","required":true},{"type":"boolean","description":"latest_height overrides the height field and queries the latest stored\nConsensusState","name":"latest_height","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/params":{"get":{"tags":["Query"],"summary":"ClientParams queries all parameters of the ibc client submodule.","operationId":"ControllerQuery_ClientParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_client_states":{"get":{"tags":["Query"],"summary":"UpgradedClientState queries an Upgraded IBC light client.","operationId":"ControllerQuery_UpgradedClientState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_consensus_states":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries an Upgraded IBC consensus state.","operationId":"ControllerQuery_UpgradedConsensusState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/verify_membership":{"post":{"tags":["Query"],"summary":"VerifyMembership queries an IBC light client for proof verification of a value at a given key path.","operationId":"ControllerQuery_VerifyMembership","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/config/{client_id}":{"get":{"tags":["Query"],"summary":"Config queries the IBC client v2 configuration for a given client.","operationId":"ControllerQuery_Config","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/counterparty_info/{client_id}":{"get":{"tags":["Query"],"summary":"CounterpartyInfo queries an IBC light counter party info.","operationId":"ControllerQuery_CounterpartyInfo","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryCounterpartyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/client_connections/{client_id}":{"get":{"tags":["Query"],"summary":"ClientConnections queries the connection paths associated with a client\nstate.","operationId":"ControllerQuery_ClientConnections","parameters":[{"type":"string","description":"client identifier associated with a connection","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryClientConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections":{"get":{"tags":["Query"],"summary":"Connections queries all the IBC connections of a chain.","operationId":"ControllerQuery_Connections","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"Connection queries an IBC connection end.","operationId":"ControllerQuery_Connection","parameters":[{"type":"string","description":"connection unique identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/client_state":{"get":{"tags":["Query"],"summary":"ConnectionClientState queries the client state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionClientState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConnectionConsensusState queries the consensus state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionConsensusState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/params":{"get":{"tags":["Query"],"summary":"ConnectionParams queries all parameters of the ibc connection submodule.","operationId":"ControllerQuery_ConnectionParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums":{"get":{"tags":["Query"],"summary":"Get all Wasm checksums","operationId":"ControllerQuery_Checksums","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryChecksumsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums/{checksum}/code":{"get":{"tags":["Query"],"summary":"Get Wasm code for given checksum","operationId":"ControllerQuery_Code","parameters":[{"type":"string","description":"checksum is a hex encoded string of the code stored.","name":"checksum","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin12","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin17","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin28","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ApplySnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestApplySnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/CheckTx":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_CheckTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCheckTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCheckTx"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Commit":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Commit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCommit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Echo":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Echo","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestEcho"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseEcho"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ExtendVote":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ExtendVote","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestExtendVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseExtendVote"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/FinalizeBlock":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_FinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Flush":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Flush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFlush"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFlush"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Info":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Info","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInfo"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInfo"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/InitChain":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_InitChain","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInitChain"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInitChain"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ListSnapshots":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ListSnapshots","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestListSnapshots"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseListSnapshots"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/LoadSnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_LoadSnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestLoadSnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseLoadSnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/OfferSnapshot":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_OfferSnapshot","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestOfferSnapshot"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/PrepareProposal":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_PrepareProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestPrepareProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponsePrepareProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ProcessProposal":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ProcessProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestProcessProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Query":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Query","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestQuery"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseQuery"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/VerifyVoteExtension":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_VerifyVoteExtension","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestVerifyVoteExtension"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.auth.v1beta1.AddressBytesToStringResponse":{"description":"AddressBytesToStringResponse is the response type for AddressString rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_bytes":{"type":"string","format":"byte"}}},"cosmos.auth.v1beta1.BaseAccount":{"description":"BaseAccount defines a base account type. It contains all the necessary fields\nfor basic account functionality. Any custom account type should extend this\ntype for additional functionality (e.g. vesting).","type":"object","properties":{"account_number":{"type":"string","format":"uint64"},"address":{"type":"string"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"sequence":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.Bech32PrefixResponse":{"description":"Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/auth parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.auth.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.auth.v1beta1.Params":{"description":"Params defines the parameters for the auth module.","type":"object","properties":{"max_memo_characters":{"type":"string","format":"uint64"},"sig_verify_cost_ed25519":{"type":"string","format":"uint64"},"sig_verify_cost_secp256k1":{"type":"string","format":"uint64"},"tx_sig_limit":{"type":"string","format":"uint64"},"tx_size_cost_per_byte":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.QueryAccountAddressByIDResponse":{"description":"Since: cosmos-sdk 0.46.2","type":"object","title":"QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method","properties":{"account_address":{"type":"string"}}},"cosmos.auth.v1beta1.QueryAccountInfoResponse":{"description":"QueryAccountInfoResponse is the Query/AccountInfo response type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"info":{"description":"info is the account info which is represented by BaseAccount.","$ref":"#/definitions/cosmos.auth.v1beta1.BaseAccount"}}},"cosmos.auth.v1beta1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"account":{"description":"account defines the account of the corresponding address.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryAccountsResponse":{"description":"QueryAccountsResponse is the response type for the Query/Accounts RPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"accounts":{"type":"array","title":"accounts are the existing accounts","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.auth.v1beta1.QueryModuleAccountByNameResponse":{"description":"QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method.","type":"object","properties":{"account":{"$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryModuleAccountsResponse":{"description":"QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.auth.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.authz.v1beta1.Grant":{"description":"Grant gives permissions to execute\nthe provide method with expiration time.","type":"object","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time","title":"time when the grant will expire and will be pruned. If null, then the grant\ndoesn't have a time expiration (other conditions in `authorization`\nmay apply to invalidate the grant)"}}},"cosmos.authz.v1beta1.GrantAuthorization":{"type":"object","title":"GrantAuthorization extends a grant with both the addresses of the grantee and granter.\nIt is used in genesis.proto and query.proto","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgExec":{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","type":"object","properties":{"grantee":{"type":"string"},"msgs":{"description":"Execute Msg.\nThe x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg))\ntriple and validate it.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.authz.v1beta1.MsgExecResponse":{"description":"MsgExecResponse defines the Msg/MsgExecResponse response type.","type":"object","properties":{"results":{"type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.authz.v1beta1.MsgGrant":{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","type":"object","properties":{"grant":{"$ref":"#/definitions/cosmos.authz.v1beta1.Grant"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgGrantResponse":{"description":"MsgGrantResponse defines the Msg/MsgGrant response type.","type":"object"},"cosmos.authz.v1beta1.MsgRevoke":{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","type":"object","properties":{"grantee":{"type":"string"},"granter":{"type":"string"},"msg_type_url":{"type":"string"}}},"cosmos.authz.v1beta1.MsgRevokeResponse":{"description":"MsgRevokeResponse defines the Msg/MsgRevokeResponse response type.","type":"object"},"cosmos.authz.v1beta1.QueryGranteeGrantsResponse":{"description":"QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted to the grantee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGranterGrantsResponse":{"description":"QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGrantsResponse":{"description":"QueryGrantsResponse is the response type for the Query/Authorizations RPC method.","type":"object","properties":{"grants":{"description":"authorizations is a list of grants granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.autocli.v1.AppOptionsRequest":{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","type":"object"},"cosmos.autocli.v1.AppOptionsResponse":{"description":"AppOptionsResponse is the RemoteInfoService/AppOptions response type.","type":"object","properties":{"module_options":{"description":"module_options is a map of module name to autocli module options.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ModuleOptions"}}}},"cosmos.autocli.v1.FlagOptions":{"description":"FlagOptions are options for flags generated from rpc request fields.\nBy default, all request fields are configured as flags based on the\nkebab-case name of the field. Fields can be turned into positional arguments\ninstead by using RpcCommandOptions.positional_args.","type":"object","properties":{"default_value":{"description":"default_value is the default value as text.","type":"string"},"deprecated":{"description":"deprecated is the usage text to show if this flag is deprecated.","type":"string"},"hidden":{"type":"boolean","title":"hidden hides the flag from help/usage text"},"name":{"description":"name is an alternate name to use for the field flag.","type":"string"},"shorthand":{"description":"shorthand is a one-letter abbreviated flag.","type":"string"},"shorthand_deprecated":{"description":"shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated.","type":"string"},"usage":{"description":"usage is the help message.","type":"string"}}},"cosmos.autocli.v1.ModuleOptions":{"description":"ModuleOptions describes the CLI options for a Cosmos SDK module.","type":"object","properties":{"query":{"description":"query describes the queries commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"},"tx":{"description":"tx describes the tx commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}},"cosmos.autocli.v1.PositionalArgDescriptor":{"description":"PositionalArgDescriptor describes a positional argument.","type":"object","properties":{"proto_field":{"description":"proto_field specifies the proto field to use as the positional arg. Any\nfields used as positional args will not have a flag generated.","type":"string"},"varargs":{"description":"varargs makes a positional parameter a varargs parameter. This can only be\napplied to last positional parameter and the proto_field must a repeated\nfield.","type":"boolean"}}},"cosmos.autocli.v1.RpcCommandOptions":{"description":"RpcCommandOptions specifies options for commands generated from protobuf\nrpc methods.","type":"object","properties":{"alias":{"description":"alias is an array of aliases that can be used instead of the first word in Use.","type":"array","items":{"type":"string"}},"deprecated":{"description":"deprecated defines, if this command is deprecated and should print this string when used.","type":"string"},"example":{"description":"example is examples of how to use the command.","type":"string"},"flag_options":{"description":"flag_options are options for flags generated from rpc request fields.\nBy default all request fields are configured as flags. They can\nalso be configured as positional args instead using positional_args.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.FlagOptions"}},"long":{"description":"long is the long message shown in the 'help \u003cthis-command\u003e' output.","type":"string"},"positional_args":{"description":"positional_args specifies positional arguments for the command.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.PositionalArgDescriptor"}},"rpc_method":{"description":"rpc_method is short name of the protobuf rpc method that this command is\ngenerated from.","type":"string"},"short":{"description":"short is the short description shown in the 'help' output.","type":"string"},"skip":{"description":"skip specifies whether to skip this rpc method when generating commands.","type":"boolean"},"suggest_for":{"description":"suggest_for is an array of command names for which this command will be suggested -\nsimilar to aliases but only suggests.","type":"array","items":{"type":"string"}},"use":{"description":"use is the one-line usage method. It also allows specifying an alternate\nname for the command as the first word of the usage text.\n\nBy default the name of an rpc command is the kebab-case short name of the\nrpc method.","type":"string"},"version":{"description":"version defines the version for this command. If this value is non-empty and the command does not\ndefine a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\nwill print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\ncommand does not define one.","type":"string"}}},"cosmos.autocli.v1.ServiceCommandDescriptor":{"description":"ServiceCommandDescriptor describes a CLI command based on a protobuf service.","type":"object","properties":{"rpc_command_options":{"description":"rpc_command_options are options for commands generated from rpc methods.\nIf no options are specified for a given rpc method on the service, a\ncommand will be generated for that method with the default options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.RpcCommandOptions"}},"service":{"description":"service is the fully qualified name of the protobuf service to build\nthe command from. It can be left empty if sub_commands are used instead\nwhich may be the case if a module provides multiple tx and/or query services.","type":"string"},"sub_commands":{"description":"sub_commands is a map of optional sub-commands for this command based on\ndifferent protobuf services. The map key is used as the name of the\nsub-command.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}}},"cosmos.bank.v1beta1.DenomOwner":{"description":"DenomOwner defines structure representing an account that owns or holds a\nparticular denominated token. It contains the account address and account\nbalance of the denominated token.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address":{"description":"address defines the address that owns a particular denomination.","type":"string"},"balance":{"description":"balance is the balance of the denominated coin for an account.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.DenomUnit":{"description":"DenomUnit represents a struct that describes a given\ndenomination unit of the basic token.","type":"object","properties":{"aliases":{"type":"array","title":"aliases is a list of string aliases for the given denom","items":{"type":"string"}},"denom":{"description":"denom represents the string name of the given denom unit (e.g uatom).","type":"string"},"exponent":{"description":"exponent represents power of 10 exponent that one must\nraise the base_denom to in order to equal the given DenomUnit's denom\n1 denom = 10^exponent base_denom\n(e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\nexponent = 6, thus: 1 atom = 10^6 uatom).","type":"integer","format":"int64"}}},"cosmos.bank.v1beta1.Input":{"description":"Input models transaction input.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Metadata":{"description":"Metadata represents a struct that describes\na basic token.","type":"object","properties":{"base":{"description":"base represents the base denom (should be the DenomUnit with exponent = 0).","type":"string"},"denom_units":{"type":"array","title":"denom_units represents the list of DenomUnit's for a given coin","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomUnit"}},"description":{"type":"string"},"display":{"description":"display indicates the suggested denom that should be\ndisplayed in clients.","type":"string"},"name":{"description":"Since: cosmos-sdk 0.43","type":"string","title":"name defines the name of the token (eg: Cosmos Atom)"},"symbol":{"description":"symbol is the token symbol usually shown on exchanges (eg: ATOM). This can\nbe the same as the display.\n\nSince: cosmos-sdk 0.43","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"},"uri_hash":{"description":"URIHash is a sha256 hash of a document pointed by URI. It's used to verify that\nthe document didn't change. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"}}},"cosmos.bank.v1beta1.MsgMultiSend":{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","type":"object","properties":{"inputs":{"description":"Inputs, despite being `repeated`, only allows one sender input. This is\nchecked in MsgMultiSend's ValidateBasic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Input"}},"outputs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Output"}}}},"cosmos.bank.v1beta1.MsgMultiSendResponse":{"description":"MsgMultiSendResponse defines the Msg/MultiSend response type.","type":"object"},"cosmos.bank.v1beta1.MsgSend":{"description":"MsgSend represents a message to send coins from one account to another.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.bank.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.bank.v1beta1.MsgSetSendEnabled":{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module.","type":"string"},"send_enabled":{"description":"send_enabled is the list of entries to add or update.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}},"use_default_for":{"description":"use_default_for is a list of denoms that should use the params.default_send_enabled value.\nDenoms listed here will have their SendEnabled entries deleted.\nIf a denom is included that doesn't have a SendEnabled entry,\nit will be ignored.","type":"array","items":{"type":"string"}}}},"cosmos.bank.v1beta1.MsgSetSendEnabledResponse":{"description":"MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/bank parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.Output":{"description":"Output models transaction outputs.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Params":{"description":"Params defines the parameters for the bank module.","type":"object","properties":{"default_send_enabled":{"type":"boolean"},"send_enabled":{"description":"Deprecated: Use of SendEnabled in params is deprecated.\nFor genesis, use the newly added send_enabled field in the genesis object.\nStorage, lookup, and manipulation of this information is now in the keeper.\n\nAs of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QueryAllBalancesResponse":{"description":"QueryAllBalancesResponse is the response type for the Query/AllBalances RPC\nmethod.","type":"object","properties":{"balances":{"description":"balances is the balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse":{"description":"QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC\nmethod. Identical with QueryDenomMetadataResponse but receives denom as query string in request.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomMetadataResponse":{"description":"QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC\nmethod.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse":{"description":"QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query.\n\nSince: cosmos-sdk 0.50.3","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomOwnersResponse":{"description":"QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomsMetadataResponse":{"description":"QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC\nmethod.","type":"object","properties":{"metadatas":{"description":"metadata provides the client information for all the registered tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/bank parameters.","type":"object","properties":{"params":{"description":"params provides the parameters of the bank module.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.QuerySendEnabledResponse":{"description":"QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response. This field is only\npopulated if the denoms field in the request is empty.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"send_enabled":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse":{"description":"QuerySpendableBalanceByDenomResponse defines the gRPC response structure for\nquerying an account's spendable balance for a specific denom.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QuerySpendableBalancesResponse":{"description":"QuerySpendableBalancesResponse defines the gRPC response structure for querying\nan account's spendable balances.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"balances":{"description":"balances is the spendable balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QuerySupplyOfResponse":{"description":"QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method.","type":"object","properties":{"amount":{"description":"amount is the supply of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryTotalSupplyResponse":{"type":"object","title":"QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC\nmethod","properties":{"pagination":{"description":"pagination defines the pagination in the response.\n\nSince: cosmos-sdk 0.43","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supply":{"type":"array","title":"supply is the supply of the coins","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.SendEnabled":{"description":"SendEnabled maps coin denom to a send_enabled status (whether a denom is\nsendable).","type":"object","properties":{"denom":{"type":"string"},"enabled":{"type":"boolean"}}},"cosmos.base.abci.v1beta1.ABCIMessageLog":{"description":"ABCIMessageLog defines a structure containing an indexed tx ABCI message log.","type":"object","properties":{"events":{"description":"Events contains a slice of Event objects that were emitted during some\nexecution.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.StringEvent"}},"log":{"type":"string"},"msg_index":{"type":"integer","format":"int64"}}},"cosmos.base.abci.v1beta1.Attribute":{"description":"Attribute defines an attribute wrapper where the key and value are\nstrings instead of raw bytes.","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"cosmos.base.abci.v1beta1.GasInfo":{"description":"GasInfo defines tx execution gas context.","type":"object","properties":{"gas_used":{"description":"GasUsed is the amount of gas actually consumed.","type":"string","format":"uint64"},"gas_wanted":{"description":"GasWanted is the maximum units of work we allow this tx to perform.","type":"string","format":"uint64"}}},"cosmos.base.abci.v1beta1.Result":{"description":"Result is the union of ResponseFormat and ResponseCheckTx.","type":"object","properties":{"data":{"description":"Data is any data returned from message or handler execution. It MUST be\nlength prefixed in order to separate data from multiple message executions.\nDeprecated. This field is still populated, but prefer msg_response instead\nbecause it also contains the Msg response typeURL.","type":"string","format":"byte"},"events":{"description":"Events contains a slice of Event objects that were emitted during message\nor handler execution.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"log":{"description":"Log contains the log information from message or handler execution.","type":"string"},"msg_responses":{"description":"msg_responses contains the Msg handler responses type packed in Anys.\n\nSince: cosmos-sdk 0.46","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.base.abci.v1beta1.StringEvent":{"description":"StringEvent defines en Event object wrapper where all the attributes\ncontain key/value pairs that are strings instead of raw bytes.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.Attribute"}},"type":{"type":"string"}}},"cosmos.base.abci.v1beta1.TxResponse":{"description":"TxResponse defines a structure containing relevant tx data and metadata. The\ntags are stringified and the log is JSON decoded.","type":"object","properties":{"code":{"description":"Response code.","type":"integer","format":"int64"},"codespace":{"type":"string","title":"Namespace for the Code"},"data":{"description":"Result bytes, if any.","type":"string"},"events":{"description":"Events defines all the events emitted by processing a transaction. Note,\nthese events include those emitted by processing all the messages and those\nemitted from the ante. Whereas Logs contains the events, with\nadditional metadata, emitted only by processing the messages.\n\nSince: cosmos-sdk 0.42.11, 0.44.5, 0.45","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"description":"Amount of gas consumed by transaction.","type":"string","format":"int64"},"gas_wanted":{"description":"Amount of gas requested for transaction.","type":"string","format":"int64"},"height":{"type":"string","format":"int64","title":"The block height"},"info":{"description":"Additional information. May be non-deterministic.","type":"string"},"logs":{"description":"The output of the application's logger (typed). May be non-deterministic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.ABCIMessageLog"}},"raw_log":{"description":"The output of the application's logger (raw string). May be\nnon-deterministic.","type":"string"},"timestamp":{"description":"Time of the previous block. For heights \u003e 1, it's the weighted median of\nthe timestamps of the valid votes in the block.LastCommit. For height == 1,\nit's genesis time.","type":"string"},"tx":{"description":"The request transaction bytes.","$ref":"#/definitions/google.protobuf.Any"},"txhash":{"description":"The transaction hash.","type":"string"}}},"cosmos.base.node.v1beta1.ConfigResponse":{"description":"ConfigResponse defines the response structure for the Config gRPC query.","type":"object","properties":{"halt_height":{"type":"string","format":"uint64"},"minimum_gas_price":{"type":"string"},"pruning_interval":{"type":"string"},"pruning_keep_recent":{"type":"string"}}},"cosmos.base.node.v1beta1.StatusResponse":{"description":"StateResponse defines the response structure for the status of a node.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"app hash of the current block"},"earliest_store_height":{"type":"string","format":"uint64","title":"earliest block height available in the store"},"height":{"type":"string","format":"uint64","title":"current block height"},"timestamp":{"type":"string","format":"date-time","title":"block height timestamp"},"validator_hash":{"type":"string","format":"byte","title":"validator hash provided by the consensus header"}}},"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.reflection.v1beta1.ListAllInterfacesResponse":{"description":"ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC.","type":"object","properties":{"interface_names":{"description":"interface_names is an array of all the registered interfaces.","type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v1beta1.ListImplementationsResponse":{"description":"ListImplementationsResponse is the response type of the ListImplementations\nRPC.","type":"object","properties":{"implementation_message_names":{"type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v2alpha1.AuthnDescriptor":{"type":"object","title":"AuthnDescriptor provides information on how to sign transactions without relying\non the online RPCs GetTxMetadata and CombineUnsignedTxAndSignatures","properties":{"sign_modes":{"type":"array","title":"sign_modes defines the supported signature algorithm","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.SigningModeDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ChainDescriptor":{"type":"object","title":"ChainDescriptor describes chain information of the application","properties":{"id":{"type":"string","title":"id is the chain id"}}},"cosmos.base.reflection.v2alpha1.CodecDescriptor":{"type":"object","title":"CodecDescriptor describes the registered interfaces and provides metadata information on the types","properties":{"interfaces":{"type":"array","title":"interfaces is a list of the registerted interfaces descriptors","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ConfigurationDescriptor":{"type":"object","title":"ConfigurationDescriptor contains metadata information on the sdk.Config","properties":{"bech32_account_address_prefix":{"type":"string","title":"bech32_account_address_prefix is the account address prefix"}}},"cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse":{"type":"object","title":"GetAuthnDescriptorResponse is the response returned by the GetAuthnDescriptor RPC","properties":{"authn":{"title":"authn describes how to authenticate to the application when sending transactions","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.AuthnDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse":{"type":"object","title":"GetChainDescriptorResponse is the response returned by the GetChainDescriptor RPC","properties":{"chain":{"title":"chain describes application chain information","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ChainDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse":{"type":"object","title":"GetCodecDescriptorResponse is the response returned by the GetCodecDescriptor RPC","properties":{"codec":{"title":"codec describes the application codec such as registered interfaces and implementations","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.CodecDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse":{"type":"object","title":"GetConfigurationDescriptorResponse is the response returned by the GetConfigurationDescriptor RPC","properties":{"config":{"title":"config describes the application's sdk.Config","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ConfigurationDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse":{"type":"object","title":"GetQueryServicesDescriptorResponse is the response returned by the GetQueryServicesDescriptor RPC","properties":{"queries":{"title":"queries provides information on the available queryable services","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServicesDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse":{"type":"object","title":"GetTxDescriptorResponse is the response returned by the GetTxDescriptor RPC","properties":{"tx":{"title":"tx provides information on msgs that can be forwarded to the application\nalongside the accepted transaction protobuf type","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.TxDescriptor"}}},"cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor":{"type":"object","title":"InterfaceAcceptingMessageDescriptor describes a protobuf message which contains\nan interface represented as a google.protobuf.Any","properties":{"field_descriptor_names":{"type":"array","title":"field_descriptor_names is a list of the protobuf name (not fullname) of the field\nwhich contains the interface as google.protobuf.Any (the interface is the same, but\nit can be in multiple fields of the same proto message)","items":{"type":"string"}},"fullname":{"type":"string","title":"fullname is the protobuf fullname of the type containing the interface"}}},"cosmos.base.reflection.v2alpha1.InterfaceDescriptor":{"type":"object","title":"InterfaceDescriptor describes the implementation of an interface","properties":{"fullname":{"type":"string","title":"fullname is the name of the interface"},"interface_accepting_messages":{"type":"array","title":"interface_accepting_messages contains information regarding the proto messages which contain the interface as\ngoogle.protobuf.Any field","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor"}},"interface_implementers":{"type":"array","title":"interface_implementers is a list of the descriptors of the interface implementers","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor"}}}},"cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor":{"type":"object","title":"InterfaceImplementerDescriptor describes an interface implementer","properties":{"fullname":{"type":"string","title":"fullname is the protobuf queryable name of the interface implementer"},"type_url":{"type":"string","title":"type_url defines the type URL used when marshalling the type as any\nthis is required so we can provide type safe google.protobuf.Any marshalling and\nunmarshalling, making sure that we don't accept just 'any' type\nin our interface fields"}}},"cosmos.base.reflection.v2alpha1.MsgDescriptor":{"type":"object","title":"MsgDescriptor describes a cosmos-sdk message that can be delivered with a transaction","properties":{"msg_type_url":{"description":"msg_type_url contains the TypeURL of a sdk.Msg.","type":"string"}}},"cosmos.base.reflection.v2alpha1.QueryMethodDescriptor":{"type":"object","title":"QueryMethodDescriptor describes a queryable method of a query service\nno other info is provided beside method name and tendermint queryable path\nbecause it would be redundant with the grpc reflection service","properties":{"full_query_path":{"type":"string","title":"full_query_path is the path that can be used to query\nthis method via tendermint abci.Query"},"name":{"type":"string","title":"name is the protobuf name (not fullname) of the method"}}},"cosmos.base.reflection.v2alpha1.QueryServiceDescriptor":{"type":"object","title":"QueryServiceDescriptor describes a cosmos-sdk queryable service","properties":{"fullname":{"type":"string","title":"fullname is the protobuf fullname of the service descriptor"},"is_module":{"type":"boolean","title":"is_module describes if this service is actually exposed by an application's module"},"methods":{"type":"array","title":"methods provides a list of query service methods","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryMethodDescriptor"}}}},"cosmos.base.reflection.v2alpha1.QueryServicesDescriptor":{"type":"object","title":"QueryServicesDescriptor contains the list of cosmos-sdk queriable services","properties":{"query_services":{"type":"array","title":"query_services is a list of cosmos-sdk QueryServiceDescriptor","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServiceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.SigningModeDescriptor":{"type":"object","title":"SigningModeDescriptor provides information on a signing flow of the application\nNOTE(fdymylja): here we could go as far as providing an entire flow on how\nto sign a message given a SigningModeDescriptor, but it's better to think about\nthis another time","properties":{"authn_info_provider_method_fullname":{"type":"string","title":"authn_info_provider_method_fullname defines the fullname of the method to call to get\nthe metadata required to authenticate using the provided sign_modes"},"name":{"type":"string","title":"name defines the unique name of the signing mode"},"number":{"type":"integer","format":"int32","title":"number is the unique int32 identifier for the sign_mode enum"}}},"cosmos.base.reflection.v2alpha1.TxDescriptor":{"type":"object","title":"TxDescriptor describes the accepted transaction type","properties":{"fullname":{"description":"fullname is the protobuf fullname of the raw transaction type (for instance the tx.Tx type)\nit is not meant to support polymorphism of transaction types, it is supposed to be used by\nreflection clients to understand if they can handle a specific transaction type in an application.","type":"string"},"msgs":{"type":"array","title":"msgs lists the accepted application messages (sdk.Msg)","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.MsgDescriptor"}}}},"cosmos.base.tendermint.v1beta1.ABCIQueryResponse":{"description":"ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query.\n\nNote: This type is a duplicate of the ResponseQuery proto type defined in\nTendermint.","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"type":"string","title":"nondeterministic"},"proof_ops":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOps"},"value":{"type":"string","format":"byte"}}},"cosmos.base.tendermint.v1beta1.Block":{"description":"Block is tendermint type Block, with the Header proposer address\nfield converted to bech32 string.","type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse":{"description":"GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestBlockResponse":{"description":"GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse":{"description":"GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.GetNodeInfoResponse":{"description":"GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method.","type":"object","properties":{"application_version":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.VersionInfo"},"default_node_info":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfo"}}},"cosmos.base.tendermint.v1beta1.GetSyncingResponse":{"description":"GetSyncingResponse is the response type for the Query/GetSyncing RPC method.","type":"object","properties":{"syncing":{"type":"boolean"}}},"cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse":{"description":"GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.Header":{"description":"Header defines the structure of a Tendermint block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"description":"proposer_address is the original block proposer address, formatted as a Bech32 string.\nIn Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\nfor better UX.\n\noriginal proposer of the block","type":"string"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"cosmos.base.tendermint.v1beta1.Module":{"type":"object","title":"Module is the type for VersionInfo","properties":{"path":{"type":"string","title":"module path"},"sum":{"type":"string","title":"checksum"},"version":{"type":"string","title":"module version"}}},"cosmos.base.tendermint.v1beta1.ProofOp":{"description":"ProofOp defines an operation used for calculating Merkle root. The data could\nbe arbitrary format, providing necessary data for example neighbouring node\nhash.\n\nNote: This type is a duplicate of the ProofOp proto type defined in Tendermint.","type":"object","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"cosmos.base.tendermint.v1beta1.ProofOps":{"description":"ProofOps is Merkle proof defined by the list of ProofOps.\n\nNote: This type is a duplicate of the ProofOps proto type defined in Tendermint.","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOp"}}}},"cosmos.base.tendermint.v1beta1.Validator":{"description":"Validator is the type for the validator-set.","type":"object","properties":{"address":{"type":"string"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"voting_power":{"type":"string","format":"int64"}}},"cosmos.base.tendermint.v1beta1.VersionInfo":{"description":"VersionInfo is the type for the GetNodeInfoResponse message.","type":"object","properties":{"app_name":{"type":"string"},"build_deps":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Module"}},"build_tags":{"type":"string"},"cosmos_sdk_version":{"type":"string","title":"Since: cosmos-sdk 0.43"},"git_commit":{"type":"string"},"go_version":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.base.v1beta1.DecCoin":{"description":"DecCoin defines a token with a denomination and a decimal amount.\n\nNOTE: The amount field is an Dec which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.circuit.v1.AccountResponse":{"description":"AccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"permission":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.AccountsResponse":{"description":"AccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.circuit.v1.GenesisAccountPermissions"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.circuit.v1.DisabledListResponse":{"description":"DisabledListResponse is the response type for the Query/DisabledList RPC method.","type":"object","properties":{"disabled_list":{"type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.GenesisAccountPermissions":{"type":"object","title":"GenesisAccountPermissions is the account permissions for the circuit breaker in genesis","properties":{"address":{"type":"string"},"permissions":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreaker":{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","type":"object","properties":{"grantee":{"description":"grantee is the account authorized with the provided permissions.","type":"string"},"granter":{"description":"granter is the granter of the circuit breaker permissions and must have\nLEVEL_SUPER_ADMIN.","type":"string"},"permissions":{"description":"permissions are the circuit breaker permissions that the grantee receives.\nThese will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can\nbe specified to revoke all permissions.","$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse":{"description":"MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgResetCircuitBreaker":{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip or reset the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of Msg type URLs to resume processing. If\nit is left empty all Msg processing for type URLs that the account is\nauthorized to trip will resume.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgResetCircuitBreakerResponse":{"description":"MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgTripCircuitBreaker":{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of type URLs to immediately stop processing.\nIF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY.\nThis value is validated against the authority's permissions and if the\nauthority does not have permissions to trip the specified msg type URLs\n(or all URLs), the operation will fail.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgTripCircuitBreakerResponse":{"description":"MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.Permissions":{"description":"Permissions are the permissions that an account has to trip\nor reset the circuit breaker.","type":"object","properties":{"level":{"description":"level is the level of permissions granted to this account.","$ref":"#/definitions/cosmos.circuit.v1.Permissions.Level"},"limit_type_urls":{"description":"limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type\nURLs that the account can trip. It is an error to use limit_type_urls with\na level other than LEVEL_SOME_MSGS.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.Permissions.Level":{"description":"Level is the permission level.\n\n - LEVEL_NONE_UNSPECIFIED: LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit\nbreaker permissions.\n - LEVEL_SOME_MSGS: LEVEL_SOME_MSGS indicates that the account will have permission to\ntrip or reset the circuit breaker for some Msg type URLs. If this level\nis chosen, a non-empty list of Msg type URLs must be provided in\nlimit_type_urls.\n - LEVEL_ALL_MSGS: LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit\nbreaker for Msg's of all type URLs.\n - LEVEL_SUPER_ADMIN: LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker\nactions and can grant permissions to other accounts.","type":"string","default":"LEVEL_NONE_UNSPECIFIED","enum":["LEVEL_NONE_UNSPECIFIED","LEVEL_SOME_MSGS","LEVEL_ALL_MSGS","LEVEL_SUPER_ADMIN"]},"cosmos.consensus.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"abci":{"title":"Since: cosmos-sdk 0.50","$ref":"#/definitions/tendermint.types.ABCIParams"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"block":{"description":"params defines the x/consensus parameters to update.\nVersionsParams is not included in this Msg because it is tracked\nsepararately in x/upgrade.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"}}},"cosmos.consensus.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.consensus.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/consensus parameters.","type":"object","properties":{"params":{"description":"params are the tendermint consensus params stored in the consensus module.\nPlease note that `params.version` is not populated in this response, it is\ntracked separately in the x/upgrade module.","$ref":"#/definitions/tendermint.types.ConsensusParams"}}},"cosmos.crisis.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"constant_fee":{"description":"constant_fee defines the x/crisis parameter.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.crisis.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.crisis.v1beta1.MsgVerifyInvariant":{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","type":"object","properties":{"invariant_module_name":{"description":"name of the invariant module.","type":"string"},"invariant_route":{"description":"invariant_route is the msg's invariant route.","type":"string"},"sender":{"description":"sender is the account address of private key to send coins to fee collector account.","type":"string"}}},"cosmos.crisis.v1beta1.MsgVerifyInvariantResponse":{"description":"MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type.","type":"object"},"cosmos.crypto.multisig.v1beta1.CompactBitArray":{"description":"CompactBitArray is an implementation of a space efficient bit array.\nThis is used to ensure that the encoded data takes up a minimal amount of\nspace after proto encoding.\nThis is not thread safe, and is not intended for concurrent usage.","type":"object","properties":{"elems":{"type":"string","format":"byte"},"extra_bits_stored":{"type":"integer","format":"int64"}}},"cosmos.distribution.v1beta1.DelegationDelegatorReward":{"description":"DelegationDelegatorReward represents the properties\nof a delegator's delegation reward.","type":"object","properties":{"reward":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse":{"description":"MsgDepositValidatorRewardsPoolResponse defines the response to executing a\nMsgDepositValidatorRewardsPool message.\n\nSince: cosmos-sdk 0.50","type":"object"},"cosmos.distribution.v1beta1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.distribution.v1beta1.MsgSetWithdrawAddress":{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","type":"object","properties":{"delegator_address":{"type":"string"},"withdraw_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse":{"description":"MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response\ntype.","type":"object"},"cosmos.distribution.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/distribution parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward":{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse":{"description":"MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward\nresponse type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission":{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","type":"object","properties":{"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse":{"description":"MsgWithdrawValidatorCommissionResponse defines the\nMsg/WithdrawValidatorCommission response type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.Params":{"description":"Params defines the set of params for the distribution module.","type":"object","properties":{"base_proposer_reward":{"description":"Deprecated: The base_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"bonus_proposer_reward":{"description":"Deprecated: The bonus_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"community_tax":{"type":"string"},"withdraw_addr_enabled":{"type":"boolean"}}},"cosmos.distribution.v1beta1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationRewardsResponse":{"description":"QueryDelegationRewardsResponse is the response type for the\nQuery/DelegationRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines the rewards accrued by a delegation.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse":{"description":"QueryDelegationTotalRewardsResponse is the response type for the\nQuery/DelegationTotalRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines all the rewards accrued by a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.DelegationDelegatorReward"}},"total":{"description":"total defines the sum of all the rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is the response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"validators":{"description":"validators defines the validators a delegator is delegating for.","type":"array","items":{"type":"string"}}}},"cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse":{"description":"QueryDelegatorWithdrawAddressResponse is the response type for the\nQuery/DelegatorWithdrawAddress RPC method.","type":"object","properties":{"withdraw_address":{"description":"withdraw_address defines the delegator address to query for.","type":"string"}}},"cosmos.distribution.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.QueryValidatorCommissionResponse":{"type":"object","title":"QueryValidatorCommissionResponse is the response type for the\nQuery/ValidatorCommission RPC method","properties":{"commission":{"description":"commission defines the commission the validator received.","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorAccumulatedCommission"}}},"cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse":{"description":"QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method.","type":"object","properties":{"commission":{"description":"commission defines the commission the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"operator_address":{"description":"operator_address defines the validator operator address.","type":"string"},"self_bond_rewards":{"description":"self_bond_rewards defines the self delegations rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse":{"description":"QueryValidatorOutstandingRewardsResponse is the response type for the\nQuery/ValidatorOutstandingRewards RPC method.","type":"object","properties":{"rewards":{"$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorOutstandingRewards"}}},"cosmos.distribution.v1beta1.QueryValidatorSlashesResponse":{"description":"QueryValidatorSlashesResponse is the response type for the\nQuery/ValidatorSlashes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"slashes":{"description":"slashes defines the slashes the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorSlashEvent"}}}},"cosmos.distribution.v1beta1.ValidatorAccumulatedCommission":{"description":"ValidatorAccumulatedCommission represents accumulated commission\nfor a validator kept as a running counter, can be withdrawn at any time.","type":"object","properties":{"commission":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorOutstandingRewards":{"description":"ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\nfor a validator inexpensive to track, allows simple sanity checks.","type":"object","properties":{"rewards":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorSlashEvent":{"description":"ValidatorSlashEvent represents a validator slash event.\nHeight is implicit within the store key.\nThis is needed to calculate appropriate amount of staking tokens\nfor delegations which are withdrawn after a slash has occurred.","type":"object","properties":{"fraction":{"type":"string"},"validator_period":{"type":"string","format":"uint64"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidence":{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","type":"object","properties":{"evidence":{"description":"evidence defines the evidence of misbehavior.","$ref":"#/definitions/google.protobuf.Any"},"submitter":{"description":"submitter is the signer account address of evidence.","type":"string"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse":{"description":"MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.","type":"object","properties":{"hash":{"description":"hash defines the hash of the evidence.","type":"string","format":"byte"}}},"cosmos.evidence.v1beta1.QueryAllEvidenceResponse":{"description":"QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC\nmethod.","type":"object","properties":{"evidence":{"description":"evidence returns all evidences.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.evidence.v1beta1.QueryEvidenceResponse":{"description":"QueryEvidenceResponse is the response type for the Query/Evidence RPC method.","type":"object","properties":{"evidence":{"description":"evidence returns the requested evidence.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.feegrant.v1beta1.Grant":{"type":"object","title":"Grant is stored in the KVStore to record a grant with full context","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowance":{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","type":"object","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse":{"description":"MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgPruneAllowances":{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","type":"object","properties":{"pruner":{"description":"pruner is the address of the user pruning expired allowances.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse":{"description":"MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type.\n\nSince cosmos-sdk 0.50","type":"object"},"cosmos.feegrant.v1beta1.MsgRevokeAllowance":{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","type":"object","properties":{"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse":{"description":"MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.QueryAllowanceResponse":{"description":"QueryAllowanceResponse is the response type for the Query/Allowance RPC method.","type":"object","properties":{"allowance":{"description":"allowance is a allowance granted for grantee by granter.","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}}},"cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse":{"description":"QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"allowances":{"description":"allowances that have been issued by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.feegrant.v1beta1.QueryAllowancesResponse":{"description":"QueryAllowancesResponse is the response type for the Query/Allowances RPC method.","type":"object","properties":{"allowances":{"description":"allowances are allowance's granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1.MsgCancelProposal":{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1.MsgCancelProposalResponse":{"description":"MsgCancelProposalResponse defines the response structure for executing a\nMsgCancelProposal message.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"canceled_height":{"description":"canceled_height defines the block height at which the proposal is canceled.","type":"string","format":"uint64"},"canceled_time":{"description":"canceled_time is the time when proposal is canceled.","type":"string","format":"date-time"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1.MsgExecLegacyContent":{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","type":"object","properties":{"authority":{"description":"authority must be the gov module address.","type":"string"},"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.gov.v1.MsgExecLegacyContentResponse":{"description":"MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type.","type":"object"},"cosmos.gov.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited or not"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"messages":{"description":"messages are the arbitrary messages to be executed if proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.gov.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/gov parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.gov.v1.Params"}}},"cosmos.gov.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.gov.v1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the Vote.","type":"string"},"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the VoteWeighted.","type":"string"},"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1.Params":{"description":"Params defines the parameters for the x/gov module.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"burn_proposal_deposit_prevote":{"type":"boolean","title":"burn deposits if the proposal does not enter voting period"},"burn_vote_quorum":{"type":"boolean","title":"burn deposits if a proposal does not meet quorum"},"burn_vote_veto":{"type":"boolean","title":"burn deposits if quorum with vote type no_veto is met"},"expedited_min_deposit":{"description":"Minimum expedited deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"expedited_threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.67.\n\nSince: cosmos-sdk 0.50","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.\n\nSince: cosmos-sdk 0.50","type":"string"},"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"min_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value minimum that must be met when making a deposit.\nDefault value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be\nrequired.\n\nSince: cosmos-sdk 0.50","type":"string"},"min_initial_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value that must be paid at proposal submission.","type":"string"},"proposal_cancel_dest":{"description":"The address which will receive (proposal_cancel_ratio * deposit) proposal deposits.\nIf empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned.\n\nSince: cosmos-sdk 0.50","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.\n\nSince: cosmos-sdk 0.50","type":"string"},"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\n considered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\n vetoed. Default value: 1/3.","type":"string"},"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"description":"Since: cosmos-sdk 0.50","type":"string","title":"failed_reason defines the reason why the proposal failed"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"},"id":{"description":"id defines the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages are the arbitrary messages to be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/gov#proposal-3"},"proposer":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"proposer is the address of the proposal sumbitter"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1.QueryConstitutionResponse":{"type":"object","title":"QueryConstitutionResponse is the response type for the Query/Constitution RPC method","properties":{"constitution":{"type":"string"}}},"cosmos.gov.v1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1.Deposit"}}},"cosmos.gov.v1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"Deprecated: Prefer to use `params` instead.\ndeposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1.DepositParams"},"params":{"description":"params defines all the paramaters of x/gov module.\n\nSince: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.gov.v1.Params"},"tally_params":{"description":"Deprecated: Prefer to use `params` instead.\ntally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1.TallyParams"},"voting_params":{"description":"Deprecated: Prefer to use `params` instead.\nvoting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1.VotingParams"}}},"cosmos.gov.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"description":"proposal is the requested governance proposal.","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}},"cosmos.gov.v1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}}},"cosmos.gov.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"}}},"cosmos.gov.v1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1.Vote"}}},"cosmos.gov.v1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Vote"}}}},"cosmos.gov.v1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string"}}},"cosmos.gov.v1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the number of abstain votes on a proposal.","type":"string"},"no_count":{"description":"no_count is the number of no votes on a proposal.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the number of no with veto votes on a proposal.","type":"string"},"yes_count":{"description":"yes_count is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.gov.v1beta1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1beta1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1beta1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1beta1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1beta1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.\n\nSince: cosmos-sdk 0.43","type":"object"},"cosmos.gov.v1beta1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1beta1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1beta1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1beta1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}}},"cosmos.gov.v1beta1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"deposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.DepositParams"},"tally_params":{"description":"tally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyParams"},"voting_params":{"description":"voting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1beta1.VotingParams"}}},"cosmos.gov.v1beta1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}},"cosmos.gov.v1beta1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}}},"cosmos.gov.v1beta1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"}}},"cosmos.gov.v1beta1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}},"cosmos.gov.v1beta1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}}},"cosmos.gov.v1beta1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string","format":"byte"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string","format":"byte"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string","format":"byte"}}},"cosmos.gov.v1beta1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain":{"description":"abstain is the number of abstain votes on a proposal.","type":"string"},"no":{"description":"no is the number of no votes on a proposal.","type":"string"},"no_with_veto":{"description":"no_with_veto is the number of no with veto votes on a proposal.","type":"string"},"yes":{"description":"yes is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1beta1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"option":{"description":"Deprecated: Prefer to use `options` instead. This field is set in queries\nif and only if `len(options) == 1` and that option has weight 1. In all\nother cases, this field will default to VOTE_OPTION_UNSPECIFIED.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"options":{"description":"options is the weighted vote options.\n\nSince: cosmos-sdk 0.43","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1beta1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1beta1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1beta1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.group.v1.Exec":{"description":"Exec defines modes of execution of a proposal on creation or on new vote.\n\n - EXEC_UNSPECIFIED: An empty value means that there should be a separate\nMsgExec request for the proposal to execute.\n - EXEC_TRY: Try to execute the proposal immediately.\nIf the proposal is not allowed per the DecisionPolicy,\nthe proposal will still be open and could\nbe executed at a later point.","type":"string","default":"EXEC_UNSPECIFIED","enum":["EXEC_UNSPECIFIED","EXEC_TRY"]},"cosmos.group.v1.GroupInfo":{"description":"GroupInfo represents the high-level on-chain information for a group.","type":"object","properties":{"admin":{"description":"admin is the account address of the group's admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group was created.","type":"string","format":"date-time"},"id":{"description":"id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata to attached to the group.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1"},"total_weight":{"description":"total_weight is the sum of the group members' weights.","type":"string"},"version":{"type":"string","format":"uint64","title":"version is used to track changes to a group's membership structure that\nwould break existing proposals. Whenever any members weight is changed,\nor any member is added or removed this version is incremented and will\ncause proposals based on older versions of this group to fail"}}},"cosmos.group.v1.GroupMember":{"description":"GroupMember represents the relationship between a group and a member.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member":{"description":"member is the member data.","$ref":"#/definitions/cosmos.group.v1.Member"}}},"cosmos.group.v1.GroupPolicyInfo":{"description":"GroupPolicyInfo represents the high-level on-chain information for a group policy.","type":"object","properties":{"address":{"description":"address is the account address of group policy.","type":"string"},"admin":{"description":"admin is the account address of the group admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group policy was created.","type":"string","format":"date-time"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the group policy.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#decision-policy-1"},"version":{"description":"version is used to track changes to a group's GroupPolicyInfo structure that\nwould create a different result on a running proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.Member":{"description":"Member represents a group member with an account address,\nnon-zero weight, metadata and added_at timestamp.","type":"object","properties":{"added_at":{"description":"added_at is a timestamp specifying when a member was added.","type":"string","format":"date-time"},"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MemberRequest":{"description":"MemberRequest represents a group member to be used in Msg server requests.\nContrary to `Member`, it doesn't have any `added_at` field\nsince this field cannot be set as part of requests.","type":"object","properties":{"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MsgCreateGroup":{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}},"metadata":{"description":"metadata is any arbitrary metadata to attached to the group.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicy":{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is any arbitrary metadata attached to the group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicyResponse":{"description":"MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type.","type":"object","properties":{"address":{"description":"address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupResponse":{"description":"MsgCreateGroupResponse is the Msg/CreateGroup response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgCreateGroupWithPolicy":{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group and group policy admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_metadata":{"description":"group_metadata is any arbitrary metadata attached to the group.","type":"string"},"group_policy_as_admin":{"description":"group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group\nand group policy admin.","type":"boolean"},"group_policy_metadata":{"description":"group_policy_metadata is any arbitrary metadata attached to the group policy.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgCreateGroupWithPolicyResponse":{"description":"MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group with policy.","type":"string","format":"uint64"},"group_policy_address":{"description":"group_policy_address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgExec":{"description":"MsgExec is the Msg/Exec request type.","type":"object","properties":{"executor":{"description":"executor is the account address used to execute the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgExecResponse":{"description":"MsgExecResponse is the Msg/Exec request type.","type":"object","properties":{"result":{"description":"result is the final result of the proposal execution.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"}}},"cosmos.group.v1.MsgLeaveGroup":{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","type":"object","properties":{"address":{"description":"address is the account address of the group member.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgLeaveGroupResponse":{"description":"MsgLeaveGroupResponse is the Msg/LeaveGroup response type.","type":"object"},"cosmos.group.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","type":"object","properties":{"exec":{"description":"exec defines the mode of execution of the proposal,\nwhether it should be executed immediately on creation or not.\nIf so, proposers signatures are considered as Yes votes.","$ref":"#/definitions/cosmos.group.v1.Exec"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposers":{"description":"proposers are the account addresses of the proposers.\nProposers signatures will be counted as yes votes.","type":"array","items":{"type":"string"}},"summary":{"description":"summary is the summary of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.group.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse is the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgUpdateGroupAdmin":{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the current account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"new_admin":{"description":"new_admin is the group new admin account address.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupAdminResponse":{"description":"MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMembers":{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member_updates":{"description":"member_updates is the list of members to update,\nset weight to 0 to remove a member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgUpdateGroupMembersResponse":{"description":"MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMetadata":{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is the updated group's metadata.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupMetadataResponse":{"description":"MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyAdmin":{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of the group policy.","type":"string"},"new_admin":{"description":"new_admin is the new group policy admin.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse":{"description":"MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy":{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy is the updated group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse":{"description":"MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyMetadata":{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"metadata":{"description":"metadata is the group policy metadata to be updated.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse":{"description":"MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type.","type":"object"},"cosmos.group.v1.MsgVote":{"description":"MsgVote is the Msg/Vote request type.","type":"object","properties":{"exec":{"description":"exec defines whether the proposal should be executed\nimmediately after voting or not.","$ref":"#/definitions/cosmos.group.v1.Exec"},"metadata":{"description":"metadata is any arbitrary metadata attached to the vote.","type":"string"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter account address.","type":"string"}}},"cosmos.group.v1.MsgVoteResponse":{"description":"MsgVoteResponse is the Msg/Vote response type.","type":"object"},"cosmos.group.v1.MsgWithdrawProposal":{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","type":"object","properties":{"address":{"description":"address is the admin of the group policy or one of the proposer of the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgWithdrawProposalResponse":{"description":"MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type.","type":"object"},"cosmos.group.v1.Proposal":{"description":"Proposal defines a group proposal. Any member of a group can submit a proposal\nfor a group policy to decide upon.\nA proposal consists of a set of `sdk.Msg`s that will be executed if the proposal\npasses as well as some optional metadata associated with the proposal.","type":"object","properties":{"executor_result":{"description":"executor_result is the final result of the proposal execution. Initial value is NotRun.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"},"final_tally_result":{"description":"final_tally_result contains the sums of all weighted votes for this\nproposal for each vote option. It is empty at submission, and only\npopulated after tallying, at voting period end or at proposal execution,\nwhichever happens first.","$ref":"#/definitions/cosmos.group.v1.TallyResult"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"group_policy_version":{"description":"group_policy_version tracks the version of the group policy at proposal submission.\nWhen a decision policy is changed, existing proposals from previous policy\nversions will become invalid with the `ABORTED` status.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"group_version":{"description":"group_version tracks the version of the group at proposal submission.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"id":{"description":"id is the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#proposal-4"},"proposers":{"description":"proposers are the account addresses of the proposers.","type":"array","items":{"type":"string"}},"status":{"description":"status represents the high level position in the life cycle of the proposal. Initial value is Submitted.","$ref":"#/definitions/cosmos.group.v1.ProposalStatus"},"submit_time":{"description":"submit_time is a timestamp specifying when a proposal was submitted.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"voting_period_end":{"description":"voting_period_end is the timestamp before which voting must be done.\nUnless a successful MsgExec is called before (to execute a proposal whose\ntally is successful before the voting period ends), tallying will be done\nat this point, and the `final_tally_result`and `status` fields will be\naccordingly updated.","type":"string","format":"date-time"}}},"cosmos.group.v1.ProposalExecutorResult":{"description":"ProposalExecutorResult defines types of proposal executor results.\n\n - PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED: An empty value is not allowed.\n - PROPOSAL_EXECUTOR_RESULT_NOT_RUN: We have not yet run the executor.\n - PROPOSAL_EXECUTOR_RESULT_SUCCESS: The executor was successful and proposed action updated state.\n - PROPOSAL_EXECUTOR_RESULT_FAILURE: The executor returned an error and proposed action didn't update state.","type":"string","default":"PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","enum":["PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","PROPOSAL_EXECUTOR_RESULT_NOT_RUN","PROPOSAL_EXECUTOR_RESULT_SUCCESS","PROPOSAL_EXECUTOR_RESULT_FAILURE"]},"cosmos.group.v1.ProposalStatus":{"description":"ProposalStatus defines proposal statuses.\n\n - PROPOSAL_STATUS_UNSPECIFIED: An empty value is invalid and not allowed.\n - PROPOSAL_STATUS_SUBMITTED: Initial status of a proposal when submitted.\n - PROPOSAL_STATUS_ACCEPTED: Final status of a proposal when the final tally is done and the outcome\npasses the group policy's decision policy.\n - PROPOSAL_STATUS_REJECTED: Final status of a proposal when the final tally is done and the outcome\nis rejected by the group policy's decision policy.\n - PROPOSAL_STATUS_ABORTED: Final status of a proposal when the group policy is modified before the\nfinal tally.\n - PROPOSAL_STATUS_WITHDRAWN: A proposal can be withdrawn before the voting start time by the owner.\nWhen this happens the final status is Withdrawn.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_SUBMITTED","PROPOSAL_STATUS_ACCEPTED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_ABORTED","PROPOSAL_STATUS_WITHDRAWN"]},"cosmos.group.v1.QueryGroupInfoResponse":{"description":"QueryGroupInfoResponse is the Query/GroupInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupInfo of the group.","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}}},"cosmos.group.v1.QueryGroupMembersResponse":{"description":"QueryGroupMembersResponse is the Query/GroupMembersResponse response type.","type":"object","properties":{"members":{"description":"members are the members of the group with given group_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupMember"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByAdminResponse":{"description":"QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info with provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByGroupResponse":{"description":"QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info associated with the provided group.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPolicyInfoResponse":{"description":"QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupPolicyInfo of the group policy.","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}}},"cosmos.group.v1.QueryGroupsByAdminResponse":{"description":"QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsByMemberResponse":{"description":"QueryGroupsByMemberResponse is the Query/GroupsByMember response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided group member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsResponse":{"description":"QueryGroupsResponse is the Query/Groups response type.\n\nSince: cosmos-sdk 0.47.1","type":"object","properties":{"groups":{"description":"`groups` is all the groups present in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the Query/Proposal response type.","type":"object","properties":{"proposal":{"description":"proposal is the proposal info.","$ref":"#/definitions/cosmos.group.v1.Proposal"}}},"cosmos.group.v1.QueryProposalsByGroupPolicyResponse":{"description":"QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals are the proposals with given group policy.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Proposal"}}}},"cosmos.group.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the Query/TallyResult response type.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.group.v1.TallyResult"}}},"cosmos.group.v1.QueryVoteByProposalVoterResponse":{"description":"QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type.","type":"object","properties":{"vote":{"description":"vote is the vote with given proposal_id and voter.","$ref":"#/definitions/cosmos.group.v1.Vote"}}},"cosmos.group.v1.QueryVotesByProposalResponse":{"description":"QueryVotesByProposalResponse is the Query/VotesByProposal response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes for given proposal_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.QueryVotesByVoterResponse":{"description":"QueryVotesByVoterResponse is the Query/VotesByVoter response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes by given voter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.TallyResult":{"description":"TallyResult represents the sum of weighted votes for each vote option.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the weighted sum of abstainers.","type":"string"},"no_count":{"description":"no_count is the weighted sum of no votes.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the weighted sum of veto.","type":"string"},"yes_count":{"description":"yes_count is the weighted sum of yes votes.","type":"string"}}},"cosmos.group.v1.Vote":{"type":"object","title":"Vote represents a vote for a proposal.string metadata","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"submit_time":{"description":"submit_time is the timestamp when the vote was submitted.","type":"string","format":"date-time"},"voter":{"description":"voter is the account address of the voter.","type":"string"}}},"cosmos.group.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will\nreturn an error.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.mint.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.mint.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.mint.v1beta1.Params":{"description":"Params defines the parameters for the x/mint module.","type":"object","properties":{"blocks_per_year":{"type":"string","format":"uint64","title":"expected blocks per year"},"goal_bonded":{"type":"string","title":"goal of percent bonded atoms"},"inflation_max":{"type":"string","title":"maximum inflation rate"},"inflation_min":{"type":"string","title":"minimum inflation rate"},"inflation_rate_change":{"type":"string","title":"maximum annual change in inflation rate"},"mint_denom":{"type":"string","title":"type of coin to mint"}}},"cosmos.mint.v1beta1.QueryAnnualProvisionsResponse":{"description":"QueryAnnualProvisionsResponse is the response type for the\nQuery/AnnualProvisions RPC method.","type":"object","properties":{"annual_provisions":{"description":"annual_provisions is the current minting annual provisions value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryInflationResponse":{"description":"QueryInflationResponse is the response type for the Query/Inflation RPC\nmethod.","type":"object","properties":{"inflation":{"description":"inflation is the current minting inflation value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.nft.v1beta1.Class":{"description":"Class defines the class of the nft type.","type":"object","properties":{"data":{"title":"data is the app specific metadata of the NFT class. Optional","$ref":"#/definitions/google.protobuf.Any"},"description":{"type":"string","title":"description is a brief description of nft classification. Optional"},"id":{"type":"string","title":"id defines the unique identifier of the NFT classification, similar to the contract address of ERC721"},"name":{"type":"string","title":"name defines the human-readable name of the NFT classification. Optional"},"symbol":{"type":"string","title":"symbol is an abbreviated name for nft classification. Optional"},"uri":{"type":"string","title":"uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri. Optional"}}},"cosmos.nft.v1beta1.MsgSend":{"description":"MsgSend represents a message to send a nft from one account to another account.","type":"object","properties":{"class_id":{"type":"string","title":"class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721"},"id":{"type":"string","title":"id defines the unique identification of nft"},"receiver":{"type":"string","title":"receiver is the receiver address of nft"},"sender":{"type":"string","title":"sender is the address of the owner of nft"}}},"cosmos.nft.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.nft.v1beta1.NFT":{"description":"NFT defines the NFT.","type":"object","properties":{"class_id":{"type":"string","title":"class_id associated with the NFT, similar to the contract address of ERC721"},"data":{"title":"data is an app specific data of the NFT. Optional","$ref":"#/definitions/google.protobuf.Any"},"id":{"type":"string","title":"id is a unique identifier of the NFT"},"uri":{"type":"string","title":"uri for the NFT metadata stored off chain"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri"}}},"cosmos.nft.v1beta1.QueryBalanceResponse":{"type":"object","title":"QueryBalanceResponse is the response type for the Query/Balance RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs of a given class owned by the owner"}}},"cosmos.nft.v1beta1.QueryClassResponse":{"type":"object","title":"QueryClassResponse is the response type for the Query/Class RPC method","properties":{"class":{"description":"class defines the class of the nft type.","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}}},"cosmos.nft.v1beta1.QueryClassesResponse":{"type":"object","title":"QueryClassesResponse is the response type for the Query/Classes RPC method","properties":{"classes":{"description":"class defines the class of the nft type.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryNFTResponse":{"type":"object","title":"QueryNFTResponse is the response type for the Query/NFT RPC method","properties":{"nft":{"title":"owner is the owner address of the nft","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}}},"cosmos.nft.v1beta1.QueryNFTsResponse":{"type":"object","title":"QueryNFTsResponse is the response type for the Query/NFTs RPC methods","properties":{"nfts":{"type":"array","title":"NFT defines the NFT","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryOwnerResponse":{"type":"object","title":"QueryOwnerResponse is the response type for the Query/Owner RPC method","properties":{"owner":{"type":"string","title":"owner is the owner address of the nft"}}},"cosmos.nft.v1beta1.QuerySupplyResponse":{"type":"object","title":"QuerySupplyResponse is the response type for the Query/Supply RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs from the given class"}}},"cosmos.params.v1beta1.ParamChange":{"description":"ParamChange defines an individual parameter change, for use in\nParameterChangeProposal.","type":"object","properties":{"key":{"type":"string"},"subspace":{"type":"string"},"value":{"type":"string"}}},"cosmos.params.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"param":{"description":"param defines the queried parameter.","$ref":"#/definitions/cosmos.params.v1beta1.ParamChange"}}},"cosmos.params.v1beta1.QuerySubspacesResponse":{"description":"QuerySubspacesResponse defines the response types for querying for all\nregistered subspaces and all keys for a subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"subspaces":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.params.v1beta1.Subspace"}}}},"cosmos.params.v1beta1.Subspace":{"description":"Subspace defines a parameter subspace name and all the keys that exist for\nthe subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjail":{"type":"object","title":"MsgUnjail defines the Msg/Unjail request type","properties":{"validator_addr":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjailResponse":{"type":"object","title":"MsgUnjailResponse defines the Msg/Unjail response type"},"cosmos.slashing.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/slashing parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.slashing.v1beta1.Params":{"description":"Params represents the parameters used for by the slashing module.","type":"object","properties":{"downtime_jail_duration":{"type":"string"},"min_signed_per_window":{"type":"string","format":"byte"},"signed_blocks_window":{"type":"string","format":"int64"},"slash_fraction_double_sign":{"type":"string","format":"byte"},"slash_fraction_downtime":{"type":"string","format":"byte"}}},"cosmos.slashing.v1beta1.QueryParamsResponse":{"type":"object","title":"QueryParamsResponse is the response type for the Query/Params RPC method","properties":{"params":{"$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.QuerySigningInfoResponse":{"type":"object","title":"QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC\nmethod","properties":{"val_signing_info":{"title":"val_signing_info is the signing info of requested val cons address","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}}},"cosmos.slashing.v1beta1.QuerySigningInfosResponse":{"type":"object","title":"QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC\nmethod","properties":{"info":{"type":"array","title":"info is the signing info of all validators","items":{"type":"object","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.slashing.v1beta1.ValidatorSigningInfo":{"description":"ValidatorSigningInfo defines a validator's signing info for monitoring their\nliveness activity.","type":"object","properties":{"address":{"type":"string"},"index_offset":{"description":"Index which is incremented every time a validator is bonded in a block and\n_may_ have signed a pre-commit or not. This in conjunction with the\nsigned_blocks_window param determines the index in the missed block bitmap.","type":"string","format":"int64"},"jailed_until":{"description":"Timestamp until which the validator is jailed due to liveness downtime.","type":"string","format":"date-time"},"missed_blocks_counter":{"description":"A counter of missed (unsigned) blocks. It is used to avoid unnecessary\nreads in the missed block bitmap.","type":"string","format":"int64"},"start_height":{"type":"string","format":"int64","title":"Height at which validator was first a candidate OR was un-jailed"},"tombstoned":{"description":"Whether or not a validator has been tombstoned (killed out of validator\nset). It is set once the validator commits an equivocation or for any other\nconfigured misbehavior.","type":"boolean"}}},"cosmos.staking.v1beta1.BondStatus":{"description":"BondStatus is the status of a validator.\n\n - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.","type":"string","default":"BOND_STATUS_UNSPECIFIED","enum":["BOND_STATUS_UNSPECIFIED","BOND_STATUS_UNBONDED","BOND_STATUS_UNBONDING","BOND_STATUS_BONDED"]},"cosmos.staking.v1beta1.Commission":{"description":"Commission defines commission parameters for a given validator.","type":"object","properties":{"commission_rates":{"description":"commission_rates defines the initial commission rates to be used for creating a validator.","$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"update_time":{"description":"update_time is the last time the commission rate was changed.","type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.CommissionRates":{"description":"CommissionRates defines the initial commission rates to be used for creating\na validator.","type":"object","properties":{"max_change_rate":{"description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction.","type":"string"},"max_rate":{"description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction.","type":"string"},"rate":{"description":"rate is the commission rate charged to delegators, as a fraction.","type":"string"}}},"cosmos.staking.v1beta1.Delegation":{"description":"Delegation represents the bond with tokens held by an account. It is\nowned by one delegator, and is associated with the voting power of one\nvalidator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"shares":{"description":"shares define the delegation shares received.","type":"string"},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.DelegationResponse":{"description":"DelegationResponse is equivalent to Delegation except that it contains a\nbalance in addition to shares which is more suitable for client responses.","type":"object","properties":{"balance":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Delegation"}}},"cosmos.staking.v1beta1.Description":{"description":"Description defines a validator description.","type":"object","properties":{"details":{"description":"details define other optional details.","type":"string"},"identity":{"description":"identity defines an optional identity signature (ex. UPort or Keybase).","type":"string"},"moniker":{"description":"moniker defines a human-readable name for the validator.","type":"string"},"security_contact":{"description":"security_contact defines an optional email for security contact.","type":"string"},"website":{"description":"website defines an optional website link.","type":"string"}}},"cosmos.staking.v1beta1.HistoricalInfo":{"description":"HistoricalInfo contains header and validator information for a given block.\nIt is stored as part of staking module's state, which persists the `n` most\nrecent HistoricalInfo\n(`n` is set by the staking module's `historical_entries` parameter).","type":"object","properties":{"header":{"$ref":"#/definitions/tendermint.types.Header"},"valset":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgBeginRedelegateResponse":{"description":"MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegation":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator","properties":{"amount":{"title":"amount is always less than or equal to unbonding delegation entry balance","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegationResponse"},"cosmos.staking.v1beta1.MsgCreateValidator":{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","type":"object","properties":{"commission":{"$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"delegator_address":{"description":"Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated.\nThe validator address bytes and delegator address bytes refer to the same account while creating validator (defer\nonly in bech32 notation).","type":"string"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"pubkey":{"$ref":"#/definitions/google.protobuf.Any"},"validator_address":{"type":"string"},"value":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.staking.v1beta1.MsgCreateValidatorResponse":{"description":"MsgCreateValidatorResponse defines the Msg/CreateValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgDelegate":{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgDelegateResponse":{"description":"MsgDelegateResponse defines the Msg/Delegate response type.","type":"object"},"cosmos.staking.v1beta1.MsgEditValidator":{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","type":"object","properties":{"commission_rate":{"type":"string","title":"We pass a reference to the new commission rate and min self delegation as\nit's not mandatory to update. If not updated, the deserialized rate will be\nzero with no way to distinguish if an update was intended.\nREF: #2373"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgEditValidatorResponse":{"description":"MsgEditValidatorResponse defines the Msg/EditValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgUndelegate":{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgUndelegateResponse":{"description":"MsgUndelegateResponse defines the Msg/Undelegate response type.","type":"object","properties":{"amount":{"description":"Since: cosmos-sdk 0.50","title":"amount returns the amount of undelegated coins","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/staking parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.staking.v1beta1.Params":{"description":"Params defines the parameters for the x/staking module.","type":"object","properties":{"bond_denom":{"description":"bond_denom defines the bondable coin denomination.","type":"string"},"historical_entries":{"description":"historical_entries is the number of historical entries to persist.","type":"integer","format":"int64"},"max_entries":{"description":"max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio).","type":"integer","format":"int64"},"max_validators":{"description":"max_validators is the maximum number of validators.","type":"integer","format":"int64"},"min_commission_rate":{"type":"string","title":"min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators"},"unbonding_time":{"description":"unbonding_time is the time duration of unbonding.","type":"string"}}},"cosmos.staking.v1beta1.Pool":{"description":"Pool is used for tracking bonded and not-bonded token supply of the bond\ndenomination.","type":"object","properties":{"bonded_tokens":{"type":"string"},"not_bonded_tokens":{"type":"string"}}},"cosmos.staking.v1beta1.QueryDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/Delegation RPC method.","type":"object","properties":{"delegation_response":{"description":"delegation_responses defines the delegation info of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse":{"description":"QueryDelegatorDelegationsResponse is response type for the\nQuery/DelegatorDelegations RPC method.","type":"object","properties":{"delegation_responses":{"description":"delegation_responses defines all the delegations' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse":{"description":"QueryUnbondingDelegatorDelegationsResponse is response type for the\nQuery/UnbondingDelegatorDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorResponse":{"description":"QueryDelegatorValidatorResponse response type for the\nQuery/DelegatorValidator RPC method.","type":"object","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators defines the validators' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.QueryHistoricalInfoResponse":{"description":"QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC\nmethod.","type":"object","properties":{"hist":{"description":"hist defines the historical info at the given height.","$ref":"#/definitions/cosmos.staking.v1beta1.HistoricalInfo"}}},"cosmos.staking.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.QueryPoolResponse":{"description":"QueryPoolResponse is response type for the Query/Pool RPC method.","type":"object","properties":{"pool":{"description":"pool defines the pool info.","$ref":"#/definitions/cosmos.staking.v1beta1.Pool"}}},"cosmos.staking.v1beta1.QueryRedelegationsResponse":{"description":"QueryRedelegationsResponse is response type for the Query/Redelegations RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"redelegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationResponse"}}}},"cosmos.staking.v1beta1.QueryUnbondingDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/UnbondingDelegation\nRPC method.","type":"object","properties":{"unbond":{"description":"unbond defines the unbonding information of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}},"cosmos.staking.v1beta1.QueryValidatorDelegationsResponse":{"type":"object","title":"QueryValidatorDelegationsResponse is response type for the\nQuery/ValidatorDelegations RPC method","properties":{"delegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryValidatorResponse":{"type":"object","title":"QueryValidatorResponse is response type for the Query/Validator RPC method","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse":{"description":"QueryValidatorUnbondingDelegationsResponse is response type for the\nQuery/ValidatorUnbondingDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryValidatorsResponse":{"type":"object","title":"QueryValidatorsResponse is response type for the Query/Validators RPC method","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators contains all the queried validators.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.Redelegation":{"description":"Redelegation contains the list of a particular delegator's redelegating bonds\nfrom a particular source validator to a particular destination validator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the bech32-encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the redelegation entries.\n\nredelegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}},"validator_dst_address":{"description":"validator_dst_address is the validator redelegation destination operator address.","type":"string"},"validator_src_address":{"description":"validator_src_address is the validator redelegation source operator address.","type":"string"}}},"cosmos.staking.v1beta1.RedelegationEntry":{"description":"RedelegationEntry defines a redelegation object with relevant metadata.","type":"object","properties":{"completion_time":{"description":"completion_time defines the unix time for redelegation completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height defines the height which the redelegation took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the initial balance when redelegation started.","type":"string"},"shares_dst":{"description":"shares_dst is the amount of destination-validator shares created by redelegation.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.RedelegationEntryResponse":{"description":"RedelegationEntryResponse is equivalent to a RedelegationEntry except that it\ncontains a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"balance":{"type":"string"},"redelegation_entry":{"$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}}},"cosmos.staking.v1beta1.RedelegationResponse":{"description":"RedelegationResponse is equivalent to a Redelegation except that its entries\ncontain a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntryResponse"}},"redelegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Redelegation"}}},"cosmos.staking.v1beta1.UnbondingDelegation":{"description":"UnbondingDelegation stores all of a single delegator's unbonding bonds\nfor a single validator in an time-ordered list.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the unbonding delegation entries.\n\nunbonding delegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegationEntry"}},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.UnbondingDelegationEntry":{"description":"UnbondingDelegationEntry defines an unbonding object with relevant metadata.","type":"object","properties":{"balance":{"description":"balance defines the tokens to receive at completion.","type":"string"},"completion_time":{"description":"completion_time is the unix time for unbonding completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the tokens initially scheduled to receive at completion.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.Validator":{"description":"Validator defines a validator, together with the total amount of the\nValidator's bond shares and their exchange rate to coins. Slashing results in\na decrease in the exchange rate, allowing correct calculation of future\nundelegations without iterating over delegators. When coins are delegated to\nthis validator, the validator is credited with a delegation whose number of\nbond shares is based on the amount of coins delegated divided by the current\nexchange rate. Voting power can be calculated as total bonded shares\nmultiplied by exchange rate.","type":"object","properties":{"commission":{"description":"commission defines the commission parameters.","$ref":"#/definitions/cosmos.staking.v1beta1.Commission"},"consensus_pubkey":{"description":"consensus_pubkey is the consensus public key of the validator, as a Protobuf Any.","$ref":"#/definitions/google.protobuf.Any"},"delegator_shares":{"description":"delegator_shares defines total shares issued to a validator's delegators.","type":"string"},"description":{"description":"description defines the description terms for the validator.","$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"jailed":{"description":"jailed defined whether the validator has been jailed from bonded status or not.","type":"boolean"},"min_self_delegation":{"description":"min_self_delegation is the validator's self declared minimum self delegation.\n\nSince: cosmos-sdk 0.46","type":"string"},"operator_address":{"description":"operator_address defines the address of the validator's operator; bech encoded in JSON.","type":"string"},"status":{"description":"status is the validator status (bonded/unbonding/unbonded).","$ref":"#/definitions/cosmos.staking.v1beta1.BondStatus"},"tokens":{"description":"tokens define the delegated tokens (incl. self-delegation).","type":"string"},"unbonding_height":{"description":"unbonding_height defines, if unbonding, the height at which this validator has begun unbonding.","type":"string","format":"int64"},"unbonding_ids":{"type":"array","title":"list of unbonding ids, each uniquely identifing an unbonding of this validator","items":{"type":"string","format":"uint64"}},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"strictly positive if this validator's unbonding has been stopped by external modules"},"unbonding_time":{"description":"unbonding_time defines, if unbonding, the min time for the validator to complete unbonding.","type":"string","format":"date-time"}}},"cosmos.store.streaming.abci.ListenCommitRequest":{"type":"object","title":"ListenCommitRequest is the request type for the ListenCommit RPC method","properties":{"block_height":{"type":"string","format":"int64","title":"explicitly pass in block height as ResponseCommit does not contain this info"},"change_set":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.store.v1beta1.StoreKVPair"}},"res":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}}},"cosmos.store.streaming.abci.ListenCommitResponse":{"type":"object","title":"ListenCommitResponse is the response type for the ListenCommit RPC method"},"cosmos.store.streaming.abci.ListenFinalizeBlockRequest":{"type":"object","title":"ListenEndBlockRequest is the request type for the ListenEndBlock RPC method","properties":{"req":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"},"res":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}}},"cosmos.store.streaming.abci.ListenFinalizeBlockResponse":{"type":"object","title":"ListenEndBlockResponse is the response type for the ListenEndBlock RPC method"},"cosmos.store.v1beta1.StoreKVPair":{"description":"Since: cosmos-sdk 0.43","type":"object","title":"StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes)\nIt optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and\nDeletes","properties":{"delete":{"type":"boolean","title":"true indicates a delete operation, false indicates a set operation"},"key":{"type":"string","format":"byte"},"store_key":{"type":"string","title":"the store key for the KVStore this pair originates from"},"value":{"type":"string","format":"byte"}}},"cosmos.tx.signing.v1beta1.SignMode":{"description":"SignMode represents a signing mode with its own security guarantees.\n\nThis enum should be considered a registry of all known sign modes\nin the Cosmos ecosystem. Apps are not expected to support all known\nsign modes. Apps that would like to support custom sign modes are\nencouraged to open a small PR against this file to add a new case\nto this SignMode enum describing their sign mode so that different\napps have a consistent version of this enum.\n\n - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\nrejected.\n - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\nverified with raw bytes from Tx.\n - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\nhuman-readable textual representation on top of the binary representation\nfrom SIGN_MODE_DIRECT.\n\nSince: cosmos-sdk 0.50\n - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\nSignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\nrequire signers signing over other signers' `signer_info`.\n\nSince: cosmos-sdk 0.46\n - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\nAmino JSON and will be removed in the future.\n - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\nSDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\nCurrently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\nbut is not implemented on the SDK by default. To enable EIP-191, you need\nto pass a custom `TxConfig` that has an implementation of\n`SignModeHandler` for EIP-191. The SDK may decide to fully support\nEIP-191 in the future.\n\nSince: cosmos-sdk 0.45.2","type":"string","default":"SIGN_MODE_UNSPECIFIED","enum":["SIGN_MODE_UNSPECIFIED","SIGN_MODE_DIRECT","SIGN_MODE_TEXTUAL","SIGN_MODE_DIRECT_AUX","SIGN_MODE_LEGACY_AMINO_JSON","SIGN_MODE_EIP_191"]},"cosmos.tx.v1beta1.AuthInfo":{"description":"AuthInfo describes the fee and signer modes that are used to sign a\ntransaction.","type":"object","properties":{"fee":{"description":"Fee is the fee and gas limit for the transaction. The first signer is the\nprimary signer and the one which pays the fee. The fee can be calculated\nbased on the cost of evaluating the body and doing signature verification\nof the signers. This can be estimated via simulation.","$ref":"#/definitions/cosmos.tx.v1beta1.Fee"},"signer_infos":{"description":"signer_infos defines the signing modes for the required signers. The number\nand order of elements must match the required signers from TxBody's\nmessages. The first element is the primary signer and the one which pays\nthe fee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.SignerInfo"}},"tip":{"description":"Tip is the optional tip used for transactions fees paid in another denom.\n\nThis field is ignored if the chain didn't enable tips, i.e. didn't add the\n`TipDecorator` in its posthandler.\n\nSince: cosmos-sdk 0.46","$ref":"#/definitions/cosmos.tx.v1beta1.Tip"}}},"cosmos.tx.v1beta1.BroadcastMode":{"description":"BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\nmethod.\n\n - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\nBROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits\nfor a CheckTx execution response only.\n - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client\nreturns immediately.","type":"string","default":"BROADCAST_MODE_UNSPECIFIED","enum":["BROADCAST_MODE_UNSPECIFIED","BROADCAST_MODE_BLOCK","BROADCAST_MODE_SYNC","BROADCAST_MODE_ASYNC"]},"cosmos.tx.v1beta1.BroadcastTxRequest":{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","type":"object","properties":{"mode":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastMode"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.BroadcastTxResponse":{"description":"BroadcastTxResponse is the response type for the\nService.BroadcastTx method.","type":"object","properties":{"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.Fee":{"description":"Fee includes the amount of coins paid in fees and the maximum\ngas to be used by the transaction. The ratio yields an effective \"gasprice\",\nwhich must be above some miminum to be accepted into the mempool.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of coins to be paid as a fee","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"gas_limit":{"type":"string","format":"uint64","title":"gas_limit is the maximum gas that can be used in transaction processing\nbefore an out of gas error occurs"},"granter":{"type":"string","title":"if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used\nto pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\nnot support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees.\nthe payer must be a tx signer (and thus have signed this field in AuthInfo).\nsetting this field does *not* change the ordering of required signers for the transaction.","type":"string"}}},"cosmos.tx.v1beta1.GetBlockWithTxsResponse":{"description":"GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs\nmethod.\n\nSince: cosmos-sdk 0.45.2","type":"object","properties":{"block":{"$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"pagination":{"description":"pagination defines a pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"txs":{"description":"txs are the transactions in the block.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.GetTxResponse":{"description":"GetTxResponse is the response type for the Service.GetTx method.","type":"object","properties":{"tx":{"description":"tx is the queried transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.GetTxsEventResponse":{"description":"GetTxsEventResponse is the response type for the Service.TxsByEvents\nRPC method.","type":"object","properties":{"pagination":{"description":"pagination defines a pagination for the response.\nDeprecated post v0.46.x: use total instead.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64","title":"total is total number of results available"},"tx_responses":{"description":"tx_responses is the list of queried TxResponses.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}},"txs":{"description":"txs is the list of queried transactions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.ModeInfo":{"description":"ModeInfo describes the signing mode of a single or nested multisig signer.","type":"object","properties":{"multi":{"title":"multi represents a nested multisig signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi"},"single":{"title":"single represents a single signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Single"}}},"cosmos.tx.v1beta1.ModeInfo.Multi":{"type":"object","title":"Multi is the mode info for a multisig public key","properties":{"bitarray":{"title":"bitarray specifies which keys within the multisig are signing","$ref":"#/definitions/cosmos.crypto.multisig.v1beta1.CompactBitArray"},"mode_infos":{"type":"array","title":"mode_infos is the corresponding modes of the signers of the multisig\nwhich could include nested multisig public keys","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"}}}},"cosmos.tx.v1beta1.ModeInfo.Single":{"type":"object","title":"Single is the mode info for a single signer. It is structured as a message\nto allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\nfuture","properties":{"mode":{"title":"mode is the signing mode of the single signer","$ref":"#/definitions/cosmos.tx.signing.v1beta1.SignMode"}}},"cosmos.tx.v1beta1.OrderBy":{"description":"- ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","type":"string","title":"OrderBy defines the sorting order","default":"ORDER_BY_UNSPECIFIED","enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"]},"cosmos.tx.v1beta1.SignerInfo":{"description":"SignerInfo describes the public key and signing mode of a single top-level\nsigner.","type":"object","properties":{"mode_info":{"title":"mode_info describes the signing mode of the signer and is a nested\nstructure to support nested multisig pubkey's","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"},"public_key":{"description":"public_key is the public key of the signer. It is optional for accounts\nthat already exist in state. If unset, the verifier can use the required \\\nsigner address for this position and lookup the public key.","$ref":"#/definitions/google.protobuf.Any"},"sequence":{"description":"sequence is the sequence of the account, which describes the\nnumber of committed transactions signed by a given address. It is used to\nprevent replay attacks.","type":"string","format":"uint64"}}},"cosmos.tx.v1beta1.SimulateRequest":{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to simulate.\nDeprecated. Send raw tx bytes instead.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_bytes":{"description":"tx_bytes is the raw transaction.\n\nSince: cosmos-sdk 0.43","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.SimulateResponse":{"description":"SimulateResponse is the response type for the\nService.SimulateRPC method.","type":"object","properties":{"gas_info":{"description":"gas_info is the information about gas used in the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.GasInfo"},"result":{"description":"result is the result of the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.Result"}}},"cosmos.tx.v1beta1.Tip":{"description":"Tip is the tip used for meta-transactions.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of the tip","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"tipper":{"type":"string","title":"tipper is the address of the account paying for the tip"}}},"cosmos.tx.v1beta1.Tx":{"description":"Tx is the standard type used for broadcasting transactions.","type":"object","properties":{"auth_info":{"title":"auth_info is the authorization related content of the transaction,\nspecifically signers, signer modes and fee","$ref":"#/definitions/cosmos.tx.v1beta1.AuthInfo"},"body":{"title":"body is the processable content of the transaction","$ref":"#/definitions/cosmos.tx.v1beta1.TxBody"},"signatures":{"description":"signatures is a list of signatures that matches the length and order of\nAuthInfo's signer_infos to allow connecting signature meta information like\npublic key and signing mode by position.","type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.tx.v1beta1.TxBody":{"description":"TxBody is the body of a transaction that all signers sign over.","type":"object","properties":{"extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, the transaction will be rejected","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"memo":{"description":"memo is any arbitrary note/comment to be added to the transaction.\nWARNING: in clients, any publicly exposed text should not be called memo,\nbut should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).","type":"string"},"messages":{"description":"messages is a list of messages to be executed. The required signers of\nthose messages define the number and order of elements in AuthInfo's\nsigner_infos and Tx's signatures. Each required signer address is added to\nthe list only the first time it occurs.\nBy convention, the first required signer (usually from the first message)\nis referred to as the primary signer and pays the fee for the whole\ntransaction.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"non_critical_extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, they will be ignored","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"timeout_height":{"type":"string","format":"uint64","title":"timeout is the block height after which this transaction will not\nbe processed by the chain"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeAminoResponse":{"description":"TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeResponse":{"description":"TxDecodeResponse is the response type for the\nService.TxDecode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the decoded transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeAminoRequest":{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxEncodeRequest":{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the transaction to encode.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeResponse":{"description":"TxEncodeResponse is the response type for the\nService.TxEncode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the encoded transaction bytes.","type":"string","format":"byte"}}},"cosmos.upgrade.v1beta1.ModuleVersion":{"description":"ModuleVersion specifies a module and its consensus version.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"name":{"type":"string","title":"name of the app module"},"version":{"type":"string","format":"uint64","title":"consensus version of the app module"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgrade":{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse":{"description":"MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"plan":{"description":"plan is the upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse":{"description":"MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.Plan":{"description":"Plan specifies information about a planned upgrade and when it should occur.","type":"object","properties":{"height":{"description":"The height at which the upgrade must be performed.","type":"string","format":"int64"},"info":{"type":"string","title":"Any application specific upgrade info to be included on-chain\nsuch as a git commit that validators could automatically upgrade to"},"name":{"description":"Sets the name for the upgrade. This name will be used by the upgraded\nversion of the software to apply any special \"on-upgrade\" commands during\nthe first BeginBlock method after the upgrade is applied. It is also used\nto detect whether a software version can handle a given upgrade. If no\nupgrade handler with this name has been set in the software, it will be\nassumed that the software is out-of-date when the upgrade Time or Height is\nreached and the software will exit.","type":"string"},"time":{"description":"Deprecated: Time based upgrades have been deprecated. Time based upgrade logic\nhas been removed from the SDK.\nIf this field is not empty, an error will be thrown.","type":"string","format":"date-time"},"upgraded_client_state":{"description":"Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been\nmoved to the IBC module in the sub module 02-client.\nIf this field is not empty, an error will be thrown.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.upgrade.v1beta1.QueryAppliedPlanResponse":{"description":"QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC\nmethod.","type":"object","properties":{"height":{"description":"height is the block height at which the plan was applied.","type":"string","format":"int64"}}},"cosmos.upgrade.v1beta1.QueryAuthorityResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"QueryAuthorityResponse is the response type for Query/Authority","properties":{"address":{"type":"string"}}},"cosmos.upgrade.v1beta1.QueryCurrentPlanResponse":{"description":"QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC\nmethod.","type":"object","properties":{"plan":{"description":"plan is the current upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.QueryModuleVersionsResponse":{"description":"QueryModuleVersionsResponse is the response type for the Query/ModuleVersions\nRPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"module_versions":{"description":"module_versions is a list of module names with their consensus versions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.upgrade.v1beta1.ModuleVersion"}}}},"cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState\nRPC method.","type":"object","properties":{"upgraded_consensus_state":{"type":"string","format":"byte","title":"Since: cosmos-sdk 0.43"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"from_address":{"type":"string"},"start_time":{"description":"start of vesting as unix time (in seconds).","type":"string","format":"int64"},"to_address":{"type":"string"},"vesting_periods":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.vesting.v1beta1.Period"}}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount\nresponse type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse":{"description":"MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreateVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"delayed":{"type":"boolean"},"end_time":{"description":"end of vesting as unix time (in seconds).","type":"string","format":"int64"},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type.","type":"object"},"cosmos.vesting.v1beta1.Period":{"description":"Period defines a length of time and amount of coins that will vest.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"length":{"description":"Period duration in seconds.","type":"string","format":"int64"}}},"cosmwasm.wasm.v1.AbsoluteTxPosition":{"description":"AbsoluteTxPosition is a unique transaction position that allows for global\nordering of transactions.","type":"object","properties":{"block_height":{"type":"string","format":"uint64","title":"BlockHeight is the block the contract was created at"},"tx_index":{"type":"string","format":"uint64","title":"TxIndex is a monotonic counter within the block (actual transaction index,\nor gas consumed)"}}},"cosmwasm.wasm.v1.AccessConfig":{"description":"AccessConfig access control type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.AccessType":{"description":"- ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty value\n - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses","type":"string","title":"AccessType permission types","default":"ACCESS_TYPE_UNSPECIFIED","enum":["ACCESS_TYPE_UNSPECIFIED","ACCESS_TYPE_NOBODY","ACCESS_TYPE_EVERYBODY","ACCESS_TYPE_ANY_OF_ADDRESSES"]},"cosmwasm.wasm.v1.CodeInfoResponse":{"type":"object","title":"CodeInfoResponse contains code meta data from CodeInfo","properties":{"code_id":{"type":"string","format":"uint64","title":"id for legacy support"},"creator":{"type":"string"},"data_hash":{"type":"string","format":"byte"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.ContractCodeHistoryEntry":{"description":"ContractCodeHistoryEntry metadata to a contract.","type":"object","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"msg":{"type":"string","format":"byte"},"operation":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryOperationType"},"updated":{"description":"Updated Tx position when the operation was executed.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"}}},"cosmwasm.wasm.v1.ContractCodeHistoryOperationType":{"description":"- CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data","type":"string","title":"ContractCodeHistoryOperationType actions that caused a code change","default":"CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","enum":["CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT","CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE","CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS"]},"cosmwasm.wasm.v1.ContractInfo":{"type":"object","title":"ContractInfo stores a WASM contract instance","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored Wasm code"},"created":{"description":"Created Tx position when the contract was instantiated.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"},"creator":{"type":"string","title":"Creator address who initially instantiated the contract"},"extension":{"description":"Extension is an extension point to store custom metadata within the\npersistence model.","$ref":"#/definitions/google.protobuf.Any"},"ibc2_port_id":{"type":"string"},"ibc_port_id":{"type":"string"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"}}},"cosmwasm.wasm.v1.Model":{"type":"object","title":"Model is a struct that holds a KV pair","properties":{"key":{"type":"string","format":"byte","title":"hex-encode key to read it better (this is often ascii)"},"value":{"type":"string","format":"byte","title":"base64-encode raw value"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses":{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse":{"description":"MsgAddCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgAddCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgClearAdmin":{"type":"object","title":"MsgClearAdmin removes any admin stored for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgClearAdminResponse":{"type":"object","title":"MsgClearAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgExecuteContract":{"type":"object","title":"MsgExecuteContract submits the given message data to a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on execution","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgExecuteContractResponse":{"description":"MsgExecuteContractResponse returns execution result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContract":{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2":{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"fix_msg":{"type":"boolean","title":"FixMsg include the msg value into the hash for the predictable address.\nDefault is false"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"salt":{"description":"Salt is an arbitrary value provided by the sender. Size can be 1 to 64.","type":"string","format":"byte"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2Response":{"type":"object","title":"MsgInstantiateContract2Response return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContractResponse":{"type":"object","title":"MsgInstantiateContractResponse return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgMigrateContract":{"type":"object","title":"MsgMigrateContract runs a code upgrade/ downgrade for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the new WASM code"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgMigrateContractResponse":{"description":"MsgMigrateContractResponse returns contract migration result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains same raw bytes returned as data from the wasm contract.\n(May be empty)"}}},"cosmwasm.wasm.v1.MsgPinCodes":{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the new WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgPinCodesResponse":{"description":"MsgPinCodesResponse defines the response structure for executing a\nMsgPinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses":{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse":{"description":"MsgRemoveCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgRemoveCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContract":{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"authority":{"description":"Authority is the address of the governance account.","type":"string"},"builder":{"type":"string","title":"Builder is the docker image used to build the code deterministically, used\nfor smart contract verification"},"code_hash":{"type":"string","format":"byte","title":"CodeHash is the SHA256 sum of the code outputted by builder, used for smart\ncontract verification"},"funds":{"type":"array","title":"Funds coins that are transferred from the authority account to the contract\non instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"source":{"type":"string","title":"Source is the URL where the code is hosted"},"unpin_code":{"description":"UnpinCode code on upload, optional. As default the uploaded contract is\npinned to cache.","type":"boolean"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse":{"description":"MsgStoreAndInstantiateContractResponse defines the response structure\nfor executing a MsgStoreAndInstantiateContract message.\n\nSince: 0.40","type":"object","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContract":{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse":{"description":"MsgStoreAndMigrateContractResponse defines the response structure\nfor executing a MsgStoreAndMigrateContract message.\n\nSince: 0.42","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreCode":{"type":"object","title":"MsgStoreCode submit Wasm code to the system","properties":{"instantiate_permission":{"title":"InstantiatePermission access control to apply on contract creation,\noptional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreCodeResponse":{"description":"MsgStoreCodeResponse returns store result data.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"}}},"cosmwasm.wasm.v1.MsgSudoContract":{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract as sudo"}}},"cosmwasm.wasm.v1.MsgSudoContractResponse":{"description":"MsgSudoContractResponse defines the response structure for executing a\nMsgSudoContract message.\n\nSince: 0.40","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgUnpinCodes":{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgUnpinCodesResponse":{"description":"MsgUnpinCodesResponse defines the response structure for executing a\nMsgUnpinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgUpdateAdmin":{"type":"object","title":"MsgUpdateAdmin sets a new admin for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_admin":{"type":"string","title":"NewAdmin address to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateAdminResponse":{"type":"object","title":"MsgUpdateAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateContractLabel":{"type":"object","title":"MsgUpdateContractLabel sets a new label for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_label":{"type":"string","title":"NewLabel string to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateContractLabelResponse":{"type":"object","title":"MsgUpdateContractLabelResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfig":{"type":"object","title":"MsgUpdateInstantiateConfig updates instantiate config for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the stored WASM code"},"new_instantiate_permission":{"title":"NewInstantiatePermission is the new access control","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse":{"type":"object","title":"MsgUpdateInstantiateConfigResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/wasm parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.Params":{"description":"Params defines the set of wasm parameters.","type":"object","properties":{"code_upload_access":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"instantiate_default_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.QueryAllContractStateResponse":{"type":"object","title":"QueryAllContractStateResponse is the response type for the\nQuery/AllContractState RPC method","properties":{"models":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.Model"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryBuildAddressResponse":{"description":"QueryBuildAddressResponse is the response type for the Query/BuildAddress RPC\nmethod.","type":"object","properties":{"address":{"type":"string","title":"Address is the contract address"}}},"cosmwasm.wasm.v1.QueryCodeInfoResponse":{"type":"object","title":"QueryCodeInfoResponse is the response type for the Query/CodeInfo RPC method","properties":{"checksum":{"type":"string","format":"byte"},"code_id":{"type":"string","format":"uint64"},"creator":{"type":"string"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.QueryCodeResponse":{"type":"object","title":"QueryCodeResponse is the response type for the Query/Code RPC method","properties":{"code_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"},"data":{"type":"string","format":"byte"}}},"cosmwasm.wasm.v1.QueryCodesResponse":{"type":"object","title":"QueryCodesResponse is the response type for the Query/Codes RPC method","properties":{"code_infos":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractHistoryResponse":{"type":"object","title":"QueryContractHistoryResponse is the response type for the\nQuery/ContractHistory RPC method","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryEntry"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractInfoResponse":{"type":"object","title":"QueryContractInfoResponse is the response type for the Query/ContractInfo RPC\nmethod","properties":{"address":{"type":"string","title":"address is the address of the contract"},"contract_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractInfo"}}},"cosmwasm.wasm.v1.QueryContractsByCodeResponse":{"type":"object","title":"QueryContractsByCodeResponse is the response type for the\nQuery/ContractsByCode RPC method","properties":{"contracts":{"type":"array","title":"contracts are a set of contract addresses","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractsByCreatorResponse":{"description":"QueryContractsByCreatorResponse is the response type for the\nQuery/ContractsByCreator RPC method.","type":"object","properties":{"contract_addresses":{"type":"array","title":"ContractAddresses result set","items":{"type":"string"}},"pagination":{"description":"Pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.QueryPinnedCodesResponse":{"type":"object","title":"QueryPinnedCodesResponse is the response type for the\nQuery/PinnedCodes RPC method","properties":{"code_ids":{"type":"array","items":{"type":"string","format":"uint64"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryRawContractStateResponse":{"type":"object","title":"QueryRawContractStateResponse is the response type for the\nQuery/RawContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the raw store data"}}},"cosmwasm.wasm.v1.QuerySmartContractStateResponse":{"type":"object","title":"QuerySmartContractStateResponse is the response type for the\nQuery/SmartContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the json data returned from the smart contract"}}},"cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse":{"description":"QueryWasmLimitsConfigResponse is the response type for the\nQuery/WasmLimitsConfig RPC method. It contains the JSON encoded limits for\nstatic validation of Wasm files.","type":"object","properties":{"config":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount":{"type":"object","title":"MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount","properties":{"connection_id":{"type":"string"},"ordering":{"$ref":"#/definitions/ibc.core.channel.v1.Order"},"owner":{"type":"string"},"version":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse":{"type":"object","title":"MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTx":{"type":"object","title":"MsgSendTx defines the payload for Msg/SendTx","properties":{"connection_id":{"type":"string"},"owner":{"type":"string"},"packet_data":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.InterchainAccountPacketData"},"relative_timeout":{"description":"Relative timeout timestamp provided will be added to the current block time during transaction execution.\nThe timeout timestamp must be non-zero.","type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse":{"type":"object","title":"MsgSendTxResponse defines the response for MsgSendTx","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/controller parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.controller.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the controller submodule.","type":"object","properties":{"controller_enabled":{"description":"controller_enabled enables or disables the controller submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse":{"description":"QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method.","type":"object","properties":{"address":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe":{"type":"object","title":"MsgModuleQuerySafe defines the payload for Msg/ModuleQuerySafe","properties":{"requests":{"description":"requests defines the module safe queries to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryRequest"}},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse":{"type":"object","title":"MsgModuleQuerySafeResponse defines the response for Msg/ModuleQuerySafe","properties":{"height":{"type":"string","format":"uint64","title":"height at which the responses were queried"},"responses":{"type":"array","title":"protobuf encoded responses for each query","items":{"type":"string","format":"byte"}}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/host parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.host.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the host submodule.","type":"object","properties":{"allow_messages":{"description":"allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain.","type":"array","items":{"type":"string"}},"host_enabled":{"description":"host_enabled enables or disables the host submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.host.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.QueryRequest":{"description":"QueryRequest defines the parameters for a particular query request\nby an interchain account.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"data defines the payload of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"},"path":{"type":"string","title":"path defines the path of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"}}},"ibc.applications.interchain_accounts.v1.InterchainAccountPacketData":{"description":"InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.","type":"object","properties":{"data":{"type":"string","format":"byte"},"memo":{"type":"string"},"type":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.Type"}}},"ibc.applications.interchain_accounts.v1.Type":{"description":"- TYPE_UNSPECIFIED: Default zero value enumeration\n - TYPE_EXECUTE_TX: Execute a transaction on an interchain accounts host chain","type":"string","title":"Type defines a classification of message issued from a controller chain to its associated interchain accounts\nhost","default":"TYPE_UNSPECIFIED","enum":["TYPE_UNSPECIFIED","TYPE_EXECUTE_TX"]},"ibc.applications.transfer.v1.Denom":{"description":"Denom holds the base denom of a Token and a trace of the chains it was sent through.","type":"object","properties":{"base":{"type":"string","title":"the base token denomination"},"trace":{"type":"array","title":"the trace of the token","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Hop"}}}},"ibc.applications.transfer.v1.Hop":{"type":"object","title":"Hop defines a port ID, channel ID pair specifying a unique \"hop\" in a trace","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.transfer.v1.MsgTransfer":{"type":"object","title":"MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between\nICS20 enabled chains. See ICS Spec here:\nhttps://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures","properties":{"encoding":{"type":"string","title":"optional encoding"},"memo":{"type":"string","title":"optional memo"},"receiver":{"type":"string","title":"the recipient address on the destination chain"},"sender":{"type":"string","title":"the sender address"},"source_channel":{"type":"string","title":"the channel by which the packet will be sent"},"source_port":{"type":"string","title":"the port on which the packet will be sent"},"timeout_height":{"description":"Timeout height relative to the current block height.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted.","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"description":"Timeout timestamp in absolute nanoseconds since unix epoch.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set.","type":"string","format":"uint64"},"token":{"title":"token to be transferred","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.applications.transfer.v1.MsgTransferResponse":{"description":"MsgTransferResponse defines the Msg/Transfer response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64","title":"sequence number of the transfer packet sent"}}},"ibc.applications.transfer.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"params":{"description":"params defines the transfer parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.transfer.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibc.applications.transfer.v1.Params":{"description":"Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false.","type":"object","properties":{"receive_enabled":{"description":"receive_enabled enables or disables all cross-chain token transfers to this\nchain.","type":"boolean"},"send_enabled":{"description":"send_enabled enables or disables all cross-chain token transfers from this\nchain.","type":"boolean"}}},"ibc.applications.transfer.v1.QueryDenomHashResponse":{"description":"QueryDenomHashResponse is the response type for the Query/DenomHash RPC\nmethod.","type":"object","properties":{"hash":{"description":"hash (in hex format) of the denomination trace information.","type":"string"}}},"ibc.applications.transfer.v1.QueryDenomResponse":{"description":"QueryDenomResponse is the response type for the Query/Denom RPC\nmethod.","type":"object","properties":{"denom":{"description":"denom returns the requested denomination.","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}}},"ibc.applications.transfer.v1.QueryDenomsResponse":{"description":"QueryDenomsResponse is the response type for the Query/Denoms RPC\nmethod.","type":"object","properties":{"denoms":{"description":"denoms returns all denominations.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.applications.transfer.v1.QueryEscrowAddressResponse":{"description":"QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.","type":"object","properties":{"escrow_address":{"type":"string","title":"the escrow account address"}}},"ibc.applications.transfer.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"}}},"ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse":{"description":"QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.core.channel.v1.Channel":{"description":"Channel defines pipeline for exactly-once packet delivery between specific\nmodules on separate blockchains, which has at least one end capable of\nsending packets and one end capable of receiving packets.","type":"object","properties":{"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.Counterparty":{"type":"object","title":"Counterparty defines a channel end counterparty","properties":{"channel_id":{"type":"string","title":"channel end on the counterparty chain"},"port_id":{"description":"port on the counterparty chain which owns the other end of the channel.","type":"string"}}},"ibc.core.channel.v1.IdentifiedChannel":{"description":"IdentifiedChannel defines a channel with additional port and channel\nidentifier fields.","type":"object","properties":{"channel_id":{"type":"string","title":"channel identifier"},"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"port_id":{"type":"string","title":"port identifier"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.MsgAcknowledgement":{"type":"object","title":"MsgAcknowledgement receives incoming IBC acknowledgement","properties":{"acknowledgement":{"type":"string","format":"byte"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgChannelCloseConfirm":{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseConfirmResponse":{"description":"MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelCloseInit":{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseInitResponse":{"description":"MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenAck":{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"counterparty_channel_id":{"type":"string"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenAckResponse":{"description":"MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenConfirm":{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenConfirmResponse":{"description":"MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenInit":{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","type":"object","properties":{"channel":{"$ref":"#/definitions/ibc.core.channel.v1.Channel"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenInitResponse":{"description":"MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTry":{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","type":"object","properties":{"channel":{"description":"NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC.","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"previous_channel_id":{"description":"Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC.","type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTryResponse":{"description":"MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacket":{"type":"object","title":"MsgRecvPacket receives incoming IBC packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnClose":{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","type":"object","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_close":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnCloseResponse":{"description":"MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.Order":{"description":"- ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\nwhich they were sent.\n - ORDER_ORDERED: packets are delivered exactly in the order which they were sent","type":"string","title":"Order defines if a channel is ORDERED or UNORDERED","default":"ORDER_NONE_UNSPECIFIED","enum":["ORDER_NONE_UNSPECIFIED","ORDER_UNORDERED","ORDER_ORDERED"]},"ibc.core.channel.v1.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"data":{"type":"string","format":"byte","title":"actual opaque bytes transferred directly to the application module"},"destination_channel":{"description":"identifies the channel end on the receiving chain.","type":"string"},"destination_port":{"description":"identifies the port on the receiving chain.","type":"string"},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_channel":{"description":"identifies the channel end on the sending chain.","type":"string"},"source_port":{"description":"identifies the port on the sending chain.","type":"string"},"timeout_height":{"title":"block height after which the packet times out","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"type":"string","format":"uint64","title":"block timestamp (in nanoseconds) after which the packet times out"}}},"ibc.core.channel.v1.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"channel_id":{"description":"channel unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"port_id":{"description":"channel port identifier.","type":"string"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v1.QueryChannelClientStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelConsensusStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelResponse":{"description":"QueryChannelResponse is the response type for the Query/Channel RPC method.\nBesides the Channel end, it includes a proof and the height from which the\nproof was retrieved.","type":"object","properties":{"channel":{"title":"channel associated with the request identifiers","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelsResponse":{"description":"QueryChannelsResponse is the response type for the Query/Channels RPC method.","type":"object","properties":{"channels":{"description":"list of stored channels of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryConnectionChannelsResponse":{"type":"object","title":"QueryConnectionChannelsResponse is the Response type for the\nQuery/QueryConnectionChannels RPC method","properties":{"channels":{"description":"list of channels associated with a connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryNextSequenceReceiveResponse":{"type":"object","title":"QuerySequenceResponse is the response type for the\nQuery/QueryNextSequenceReceiveResponse RPC method","properties":{"next_sequence_receive":{"type":"string","format":"uint64","title":"next sequence receive number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the request type for the\nQuery/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementResponse":{"type":"object","title":"QueryPacketAcknowledgementResponse defines the client query response for a\npacket which also includes a proof and the height from which the\nproof was retrieved","properties":{"acknowledgement":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketCommitmentResponse":{"type":"object","title":"QueryPacketCommitmentResponse defines the client query response for a packet\nwhich also includes a proof and the height from which the proof was\nretrieved","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketCommitmentsResponse":{"type":"object","title":"QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method","properties":{"commitments":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketReceiptResponse":{"type":"object","title":"QueryPacketReceiptResponse defines the client query response for a packet\nreceipt which also includes a proof, and the height from which the proof was\nretrieved","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v1.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.channel.v1.State":{"description":"State defines if a channel is in one of the following states:\nCLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A channel has just started the opening handshake.\n - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n - STATE_OPEN: A channel has completed the handshake. Open channels are\nready to send and receive packets.\n - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\npackets.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN","STATE_CLOSED"]},"ibc.core.channel.v2.Acknowledgement":{"description":"Acknowledgement contains a list of all ack results associated with a single packet.\nIn the case of a successful receive, the acknowledgement will contain an app acknowledgement\nfor each application that received a payload in the same order that the payloads were sent\nin the packet.\nIf the receive is not successful, the acknowledgement will contain a single app acknowledgment\nwhich will be a constant error acknowledgment as defined by the IBC v2 protocol.","type":"object","properties":{"app_acknowledgements":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.channel.v2.MsgAcknowledgement":{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","type":"object","properties":{"acknowledgement":{"$ref":"#/definitions/ibc.core.channel.v2.Acknowledgement"},"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgRecvPacket":{"description":"MsgRecvPacket receives an incoming IBC packet.","type":"object","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgSendPacket":{"description":"MsgSendPacket sends an outgoing IBC packet.","type":"object","properties":{"payloads":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"signer":{"type":"string"},"source_client":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgSendPacketResponse":{"description":"MsgSendPacketResponse defines the Msg/SendPacket response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"destination_client":{"description":"identifies the receiving client on the receiving chain.","type":"string"},"payloads":{"description":"a list of payloads, each one for a specific application.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_client":{"description":"identifies the sending client on the sending chain.","type":"string"},"timeout_timestamp":{"description":"timeout timestamp in seconds after which the packet times out.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"client_id":{"description":"client unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.Payload":{"type":"object","title":"Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes)","properties":{"destination_port":{"description":"specifies the destination port of the packet.","type":"string"},"encoding":{"description":"the encoding used for the provided value.","type":"string"},"source_port":{"description":"specifies the source port of the packet.","type":"string"},"value":{"description":"the raw bytes for the payload.","type":"string","format":"byte"},"version":{"description":"version of the specified application.","type":"string"}}},"ibc.core.channel.v2.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementResponse":{"description":"QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method.","type":"object","properties":{"acknowledgement":{"type":"string","format":"byte","title":"acknowledgement associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketCommitmentResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketCommitmentsResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitments":{"description":"collection of packet commitments for the requested channel identifier.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"description":"query block height.","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"description":"pagination response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketReceiptResponse":{"description":"QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method.","type":"object","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence or absence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v2.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.client.v1.ConsensusStateWithHeight":{"description":"ConsensusStateWithHeight defines a consensus state with an additional height\nfield.","type":"object","properties":{"consensus_state":{"title":"consensus state","$ref":"#/definitions/google.protobuf.Any"},"height":{"title":"consensus state height","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.Height":{"description":"Normally the RevisionHeight is incremented at each height while keeping\nRevisionNumber the same. However some consensus algorithms may choose to\nreset the height in certain conditions e.g. hard forks, state-machine\nbreaking changes In these cases, the RevisionNumber is incremented so that\nheight continues to be monitonically increasing even as the RevisionHeight\ngets reset\n\nPlease note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag.\nThis enforces the Go json marshaller to always emit zero values for both revision_number and revision_height.","type":"object","title":"Height is a monotonically increasing data type\nthat can be compared against another Height for the purposes of updating and\nfreezing clients","properties":{"revision_height":{"type":"string","format":"uint64","title":"the height within the given revision"},"revision_number":{"type":"string","format":"uint64","title":"the revision that the client is currently on"}}},"ibc.core.client.v1.IdentifiedClientState":{"description":"IdentifiedClientState defines a client state with an additional client\nidentifier field.","type":"object","properties":{"client_id":{"type":"string","title":"client identifier"},"client_state":{"title":"client state","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgCreateClient":{"type":"object","title":"MsgCreateClient defines a message to create an IBC client","properties":{"client_state":{"title":"light client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"description":"consensus state associated with the client that corresponds to a given\nheight.","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgCreateClientResponse":{"description":"MsgCreateClientResponse defines the Msg/CreateClient response type.","type":"object","properties":{"client_id":{"type":"string"}}},"ibc.core.client.v1.MsgDeleteClientCreator":{"type":"object","title":"MsgDeleteClientCreator defines a message to delete the client creator of a client","properties":{"client_id":{"type":"string","title":"client identifier"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgDeleteClientCreatorResponse":{"description":"MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type.","type":"object"},"ibc.core.client.v1.MsgIBCSoftwareUpgrade":{"type":"object","title":"MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal","properties":{"plan":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"},"signer":{"type":"string","title":"signer address"},"upgraded_client_state":{"description":"An UpgradedClientState must be provided to perform an IBC breaking upgrade.\nThis will make the chain commit to the correct upgraded (self) client state\nbefore the upgrade occurs, so that connecting chains can verify that the\nnew upgraded client is valid by verifying a proof on the previous version\nof the chain. This will allow IBC connections to persist smoothly across\nplanned chain upgrades. Correspondingly, the UpgradedClientState field has been\ndeprecated in the Cosmos SDK to allow for this logic to exist solely in\nthe 02-client module.","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse":{"description":"MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type.","type":"object"},"ibc.core.client.v1.MsgRecoverClient":{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"subject_client_id":{"type":"string","title":"the client identifier for the client to be updated if the proposal passes"},"substitute_client_id":{"type":"string","title":"the substitute client identifier for the client which will replace the subject\nclient"}}},"ibc.core.client.v1.MsgRecoverClientResponse":{"description":"MsgRecoverClientResponse defines the Msg/RecoverClient response type.","type":"object"},"ibc.core.client.v1.MsgSubmitMisbehaviour":{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"misbehaviour":{"title":"misbehaviour used for freezing the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgSubmitMisbehaviourResponse":{"description":"MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response\ntype.","type":"object"},"ibc.core.client.v1.MsgUpdateClient":{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_message":{"title":"client message to update the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateClientResponse":{"description":"MsgUpdateClientResponse defines the Msg/UpdateClient response type.","type":"object"},"ibc.core.client.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","type":"object","properties":{"params":{"description":"params defines the client parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.client.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.client.v1.MsgUpgradeClient":{"type":"object","title":"MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client\nstate","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_state":{"title":"upgraded client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"title":"upgraded consensus state, only contains enough information to serve as a\nbasis of trust in update logic","$ref":"#/definitions/google.protobuf.Any"},"proof_upgrade_client":{"type":"string","format":"byte","title":"proof that old chain committed to new client"},"proof_upgrade_consensus_state":{"type":"string","format":"byte","title":"proof that old chain committed to new consensus state"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpgradeClientResponse":{"description":"MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.","type":"object"},"ibc.core.client.v1.Params":{"description":"Params defines the set of IBC light client parameters.","type":"object","properties":{"allowed_clients":{"description":"allowed_clients defines the list of allowed client state types which can be created\nand interacted with. If a client type is removed from the allowed clients list, usage\nof this client will be disabled until it is added again to the list.","type":"array","items":{"type":"string"}}}},"ibc.core.client.v1.QueryClientCreatorResponse":{"description":"QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC\nmethod.","type":"object","properties":{"creator":{"type":"string","title":"creator of the client"}}},"ibc.core.client.v1.QueryClientParamsResponse":{"description":"QueryClientParamsResponse is the response type for the Query/ClientParams RPC\nmethod.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.client.v1.Params"}}},"ibc.core.client.v1.QueryClientStateResponse":{"description":"QueryClientStateResponse is the response type for the Query/ClientState RPC\nmethod. Besides the client state, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryClientStatesResponse":{"description":"QueryClientStatesResponse is the response type for the Query/ClientStates RPC\nmethod.","type":"object","properties":{"client_states":{"description":"list of stored ClientStates of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryClientStatusResponse":{"description":"QueryClientStatusResponse is the response type for the Query/ClientStatus RPC\nmethod. It returns the current status of the IBC client.","type":"object","properties":{"status":{"type":"string"}}},"ibc.core.client.v1.QueryConsensusStateHeightsResponse":{"type":"object","title":"QueryConsensusStateHeightsResponse is the response type for the\nQuery/ConsensusStateHeights RPC method","properties":{"consensus_state_heights":{"type":"array","title":"consensus state heights","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.Height"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryConsensusStateResponse":{"type":"object","title":"QueryConsensusStateResponse is the response type for the Query/ConsensusState\nRPC method","properties":{"consensus_state":{"title":"consensus state associated with the client identifier at the given height","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryConsensusStatesResponse":{"type":"object","title":"QueryConsensusStatesResponse is the response type for the\nQuery/ConsensusStates RPC method","properties":{"consensus_states":{"type":"array","title":"consensus states associated with the identifier","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.ConsensusStateWithHeight"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryUpgradedClientStateResponse":{"description":"QueryUpgradedClientStateResponse is the response type for the\nQuery/UpgradedClientState RPC method.","type":"object","properties":{"upgraded_client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the\nQuery/UpgradedConsensusState RPC method.","type":"object","properties":{"upgraded_consensus_state":{"title":"Consensus state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryVerifyMembershipRequest":{"type":"object","title":"QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method","properties":{"block_delay":{"type":"string","format":"uint64","title":"optional block delay"},"client_id":{"description":"client unique identifier.","type":"string"},"merkle_path":{"description":"the commitment key path.","$ref":"#/definitions/ibc.core.commitment.v2.MerklePath"},"proof":{"description":"the proof to be verified by the client.","type":"string","format":"byte"},"proof_height":{"description":"the height of the commitment root at which the proof is verified.","$ref":"#/definitions/ibc.core.client.v1.Height"},"time_delay":{"type":"string","format":"uint64","title":"optional time delay"},"value":{"description":"the value which is proven.","type":"string","format":"byte"}}},"ibc.core.client.v1.QueryVerifyMembershipResponse":{"type":"object","title":"QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method","properties":{"success":{"description":"boolean indicating success or failure of proof verification.","type":"boolean"}}},"ibc.core.client.v2.Config":{"type":"object","title":"Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages\nfor a given client.\nIf it is set, then only relayers in the allow list can send v2 messages\nIf it is not set, then the client allows permissionless relaying of v2 messages","properties":{"allowed_relayers":{"type":"array","title":"allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client","items":{"type":"string"}}}},"ibc.core.client.v2.CounterpartyInfo":{"type":"object","title":"CounterpartyInfo defines the key that the counterparty will use to message our client","properties":{"client_id":{"type":"string","title":"client identifier is the identifier used to send packet messages to our client"},"merkle_prefix":{"type":"array","title":"merkle prefix key is the prefix that ics provable keys are stored under","items":{"type":"string","format":"byte"}}}},"ibc.core.client.v2.MsgRegisterCounterparty":{"type":"object","title":"MsgRegisterCounterparty defines a message to register a counterparty on a client","properties":{"client_id":{"type":"string","title":"client identifier"},"counterparty_client_id":{"type":"string","title":"counterparty client identifier"},"counterparty_merkle_prefix":{"type":"array","title":"counterparty merkle prefix","items":{"type":"string","format":"byte"}},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgRegisterCounterpartyResponse":{"description":"MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type.","type":"object"},"ibc.core.client.v2.MsgUpdateClientConfig":{"type":"object","title":"MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client","properties":{"client_id":{"type":"string","title":"client identifier"},"config":{"description":"NOTE: All fields in the config must be supplied.","title":"allowed relayers","$ref":"#/definitions/ibc.core.client.v2.Config"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgUpdateClientConfigResponse":{"description":"MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type.","type":"object"},"ibc.core.client.v2.QueryConfigResponse":{"type":"object","title":"QueryConfigResponse is the response type for the Query/Config RPC method","properties":{"config":{"$ref":"#/definitions/ibc.core.client.v2.Config"}}},"ibc.core.client.v2.QueryCounterpartyInfoResponse":{"description":"QueryCounterpartyInfoResponse is the response type for the\nQuery/CounterpartyInfo RPC method.","type":"object","properties":{"counterparty_info":{"$ref":"#/definitions/ibc.core.client.v2.CounterpartyInfo"}}},"ibc.core.commitment.v1.MerklePrefix":{"type":"object","title":"MerklePrefix is merkle path prefixed to the key.\nThe constructed key from the Path and the key will be append(Path.KeyPath,\nappend(Path.KeyPrefix, key...))","properties":{"key_prefix":{"type":"string","format":"byte"}}},"ibc.core.commitment.v2.MerklePath":{"description":"MerklePath is the path used to verify commitment proofs, which can be an\narbitrary structured object (defined by a commitment type).\nICS-23 verification supports membership proofs for nested merkle trees.\nThe ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix.\nThe IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash\nstored in the consensus state of the client.\nEach element of the path represents the key of a merkle tree from the root to the leaf.\nThe elements of the path before the final element must be the path to the tree that contains\nthe ICS24 provable store. Thus, it should remain constant for all ICS24 proofs.\nThe final element of the path is the key of the leaf in the ICS24 provable store,\nThus IBC core will append the ICS24 path to the final element of the MerklePath\nstored in the counterparty to create the full path to the leaf for proof verification.\nExamples:\nCosmos SDK:\nThe Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes\nare hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"ibc\", \"\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"ibc\", \"{packetCommitmentPath}\"] which will then be used for final verification.\nEthereum:\nThe Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed\nby the smart contract state. Each smart contract has a specific prefix reserved within the global trie.\nThus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie.\nSince there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"IBCCoreContractAddressStoragePrefix\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"IBCCoreContractAddressStoragePrefix{packetCommitmentPath}\"] which will then be used for final\nverification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the\nconsensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24\nprovable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified\nby the client against the root hash in the client's consensus state.","type":"object","properties":{"key_path":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.connection.v1.ConnectionEnd":{"description":"ConnectionEnd defines a stateful object on a chain connected to another\nseparate one.\nNOTE: there must only be 2 defined ConnectionEnds to establish\na connection between two chains.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period that must pass before a consensus state can be used for\npacket-verification NOTE: delay period logic is only implemented by some\nclients.","type":"string","format":"uint64"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"description":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.Counterparty":{"description":"Counterparty defines the counterparty chain associated with a connection end.","type":"object","properties":{"client_id":{"description":"identifies the client on the counterparty chain associated with a given\nconnection.","type":"string"},"connection_id":{"description":"identifies the connection end on the counterparty chain associated with a\ngiven connection.","type":"string"},"prefix":{"description":"commitment merkle prefix of the counterparty chain.","$ref":"#/definitions/ibc.core.commitment.v1.MerklePrefix"}}},"ibc.core.connection.v1.IdentifiedConnection":{"description":"IdentifiedConnection defines a connection with additional connection\nidentifier field.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period associated with this connection.","type":"string","format":"uint64"},"id":{"description":"connection identifier.","type":"string"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"type":"array","title":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.MsgConnectionOpenAck":{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","type":"object","properties":{"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"connection_id":{"type":"string"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty_connection_id":{"type":"string"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain B: `UNINITIALIZED -\u003e\nTRYOPEN`"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenAckResponse":{"description":"MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenConfirm":{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","type":"object","properties":{"connection_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte","title":"proof for the change of the connection state on Chain A: `INIT -\u003e OPEN`"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenConfirmResponse":{"description":"MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm\nresponse type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenInit":{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","type":"object","properties":{"client_id":{"type":"string"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"type":"string","format":"uint64"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenInitResponse":{"description":"MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response\ntype.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenTry":{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","type":"object","properties":{"client_id":{"type":"string"},"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"counterparty_versions":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}},"delay_period":{"type":"string","format":"uint64"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"previous_connection_id":{"description":"Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC.","type":"string"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain A: `UNINITIALIZED -\u003e\nINIT`"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenTryResponse":{"description":"MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type.","type":"object"},"ibc.core.connection.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","type":"object","properties":{"params":{"description":"params defines the connection parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.connection.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.connection.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.connection.v1.Params":{"description":"Params defines the set of Connection parameters.","type":"object","properties":{"max_expected_time_per_block":{"description":"maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the\nlargest amount of time that the chain might reasonably take to produce the next block under normal operating\nconditions. A safe choice is 3-5x the expected time per block.","type":"string","format":"uint64"}}},"ibc.core.connection.v1.QueryClientConnectionsResponse":{"type":"object","title":"QueryClientConnectionsResponse is the response type for the\nQuery/ClientConnections RPC method","properties":{"connection_paths":{"description":"slice of all the connection paths associated with a client.","type":"array","items":{"type":"string"}},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was generated","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionClientStateResponse":{"type":"object","title":"QueryConnectionClientStateResponse is the response type for the\nQuery/ConnectionClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionConsensusStateResponse":{"type":"object","title":"QueryConnectionConsensusStateResponse is the response type for the\nQuery/ConnectionConsensusState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionParamsResponse":{"description":"QueryConnectionParamsResponse is the response type for the Query/ConnectionParams RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.connection.v1.Params"}}},"ibc.core.connection.v1.QueryConnectionResponse":{"description":"QueryConnectionResponse is the response type for the Query/Connection RPC\nmethod. Besides the connection end, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"connection":{"title":"connection associated with the request identifier","$ref":"#/definitions/ibc.core.connection.v1.ConnectionEnd"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionsResponse":{"description":"QueryConnectionsResponse is the response type for the Query/Connections RPC\nmethod.","type":"object","properties":{"connections":{"description":"list of stored connections of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.IdentifiedConnection"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.connection.v1.State":{"description":"State defines if a connection is in one of the following states:\nINIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A connection end has just started the opening handshake.\n - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\nchain.\n - STATE_OPEN: A connection end has completed the handshake.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN"]},"ibc.core.connection.v1.Version":{"description":"Version defines the versioning scheme used to negotiate the IBC version in\nthe connection handshake.","type":"object","properties":{"features":{"type":"array","title":"list of features compatible with the specified identifier","items":{"type":"string"}},"identifier":{"type":"string","title":"unique version identifier"}}},"ibc.lightclients.wasm.v1.MsgMigrateContract":{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the new wasm byte code for the contract"},"client_id":{"type":"string","title":"the client id of the contract"},"msg":{"type":"string","format":"byte","title":"the json encoded message to be passed to the contract on migration"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgMigrateContractResponse":{"type":"object","title":"MsgMigrateContractResponse defines the response type for the MigrateContract rpc"},"ibc.lightclients.wasm.v1.MsgRemoveChecksum":{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash to be removed from the store"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse":{"type":"object","title":"MsgStoreChecksumResponse defines the response type for the StoreCode rpc"},"ibc.lightclients.wasm.v1.MsgStoreCode":{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"wasm_byte_code":{"type":"string","format":"byte","title":"wasm byte code of light client contract. It can be raw or gzip compressed"}}},"ibc.lightclients.wasm.v1.MsgStoreCodeResponse":{"type":"object","title":"MsgStoreCodeResponse defines the response type for the StoreCode rpc","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the stored code"}}},"ibc.lightclients.wasm.v1.QueryChecksumsResponse":{"description":"QueryChecksumsResponse is the response type for the Query/Checksums RPC method.","type":"object","properties":{"checksums":{"description":"checksums is a list of the hex encoded checksums of all wasm codes stored.","type":"array","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.lightclients.wasm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC method.","type":"object","properties":{"data":{"type":"string","format":"byte"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"tendermint.abci.CheckTxType":{"type":"string","default":"NEW","enum":["NEW","RECHECK"]},"tendermint.abci.CommitInfo":{"type":"object","properties":{"round":{"type":"integer","format":"int32"},"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.VoteInfo"}}}},"tendermint.abci.Event":{"description":"Event allows application developers to attach additional information to\nResponseFinalizeBlock and ResponseCheckTx.\nLater, transactions may be queried using these events.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.EventAttribute"}},"type":{"type":"string"}}},"tendermint.abci.EventAttribute":{"description":"EventAttribute is a single key-value pair, associated with an event.","type":"object","properties":{"index":{"type":"boolean","title":"nondeterministic"},"key":{"type":"string"},"value":{"type":"string"}}},"tendermint.abci.ExecTxResult":{"description":"ExecTxResult contains results of executing one individual transaction.\n\n* Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","title":"nondeterministic","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ExtendedCommitInfo":{"description":"ExtendedCommitInfo is similar to CommitInfo except that it is only used in\nthe PrepareProposal request such that CometBFT can provide vote extensions\nto the application.","type":"object","properties":{"round":{"description":"The round at which the block proposer decided in the previous height.","type":"integer","format":"int32"},"votes":{"description":"List of validators' addresses in the last validator set with their voting\ninformation, including vote extensions.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExtendedVoteInfo"}}}},"tendermint.abci.ExtendedVoteInfo":{"type":"object","properties":{"block_id_flag":{"title":"block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all","$ref":"#/definitions/tendermint.types.BlockIDFlag"},"extension_signature":{"type":"string","format":"byte","title":"Vote extension signature created by CometBFT"},"validator":{"description":"The validator that sent the vote.","$ref":"#/definitions/tendermint.abci.Validator"},"vote_extension":{"description":"Non-deterministic extension provided by the sending validator's application.","type":"string","format":"byte"}}},"tendermint.abci.Misbehavior":{"type":"object","properties":{"height":{"type":"string","format":"int64","title":"The height when the offense occurred"},"time":{"type":"string","format":"date-time","title":"The corresponding time where the offense occurred"},"total_voting_power":{"type":"string","format":"int64","title":"Total voting power of the validator set in case the ABCI application does\nnot store historical validators.\nhttps://github.com/tendermint/tendermint/issues/4581"},"type":{"$ref":"#/definitions/tendermint.abci.MisbehaviorType"},"validator":{"title":"The offending validator","$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.abci.MisbehaviorType":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","DUPLICATE_VOTE","LIGHT_CLIENT_ATTACK"]},"tendermint.abci.RequestApplySnapshotChunk":{"type":"object","title":"Applies a snapshot chunk","properties":{"chunk":{"type":"string","format":"byte"},"index":{"type":"integer","format":"int64"},"sender":{"type":"string"}}},"tendermint.abci.RequestCheckTx":{"type":"object","properties":{"tx":{"type":"string","format":"byte"},"type":{"$ref":"#/definitions/tendermint.abci.CheckTxType"}}},"tendermint.abci.RequestCommit":{"type":"object"},"tendermint.abci.RequestEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.RequestExtendVote":{"type":"object","title":"Extends a vote with application-injected data","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this vote may be referring to"},"height":{"type":"string","format":"int64","title":"the height of the extended vote"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time","title":"info of the block that this vote may be referring to"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFinalizeBlock":{"type":"object","properties":{"decided_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"hash":{"description":"hash is the merkle root hash of the fields of the decided block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"proposer_address is the address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFlush":{"type":"object"},"tendermint.abci.RequestInfo":{"type":"object","properties":{"abci_version":{"type":"string"},"block_version":{"type":"string","format":"uint64"},"p2p_version":{"type":"string","format":"uint64"},"version":{"type":"string"}}},"tendermint.abci.RequestInitChain":{"type":"object","properties":{"app_state_bytes":{"type":"string","format":"byte"},"chain_id":{"type":"string"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"initial_height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.RequestListSnapshots":{"type":"object","title":"lists available snapshots"},"tendermint.abci.RequestLoadSnapshotChunk":{"type":"object","title":"loads a snapshot chunk","properties":{"chunk":{"type":"integer","format":"int64"},"format":{"type":"integer","format":"int64"},"height":{"type":"string","format":"uint64"}}},"tendermint.abci.RequestOfferSnapshot":{"type":"object","title":"offers a snapshot to the application","properties":{"app_hash":{"type":"string","format":"byte","title":"light client-verified app hash for snapshot height"},"snapshot":{"title":"snapshot offered by peers","$ref":"#/definitions/tendermint.abci.Snapshot"}}},"tendermint.abci.RequestPrepareProposal":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"local_last_commit":{"$ref":"#/definitions/tendermint.abci.ExtendedCommitInfo"},"max_tx_bytes":{"description":"the modified transactions cannot exceed this size.","type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"address of the public key of the validator proposing the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"description":"txs is an array of transactions that will be included in a block,\nsent to the app for possible modifications.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestProcessProposal":{"type":"object","properties":{"hash":{"description":"hash is the merkle root hash of the fields of the proposed block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestQuery":{"type":"object","properties":{"data":{"type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"path":{"type":"string"},"prove":{"type":"boolean"}}},"tendermint.abci.RequestVerifyVoteExtension":{"type":"object","title":"Verify the vote extension","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this received vote corresponds to"},"height":{"type":"string","format":"int64"},"validator_address":{"type":"string","format":"byte","title":"the validator that signed the vote extension"},"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseApplySnapshotChunk":{"type":"object","properties":{"refetch_chunks":{"type":"array","title":"Chunks to refetch and reapply","items":{"type":"integer","format":"int64"}},"reject_senders":{"type":"array","title":"Chunk senders to reject and ban","items":{"type":"string"}},"result":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk.Result"}}},"tendermint.abci.ResponseApplySnapshotChunk.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Chunk successfully accepted\n - ABORT: Abort all snapshot restoration\n - RETRY: Retry chunk (combine with refetch and reject)\n - RETRY_SNAPSHOT: Retry snapshot (combine with refetch and reject)\n - REJECT_SNAPSHOT: Reject this snapshot, try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","RETRY","RETRY_SNAPSHOT","REJECT_SNAPSHOT"]},"tendermint.abci.ResponseCheckTx":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ResponseCommit":{"type":"object","properties":{"retain_height":{"type":"string","format":"int64"}}},"tendermint.abci.ResponseEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.ResponseExtendVote":{"type":"object","properties":{"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseFinalizeBlock":{"type":"object","properties":{"app_hash":{"description":"app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was\ndeterministic. It is up to the application to decide which algorithm to use.","type":"string","format":"byte"},"consensus_param_updates":{"description":"updates to the consensus params, if any.","$ref":"#/definitions/tendermint.types.ConsensusParams"},"events":{"type":"array","title":"set of block events emmitted as part of executing the block","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"tx_results":{"type":"array","title":"the result of executing each transaction including the events\nthe particular transction emitted. This should match the order\nof the transactions delivered in the block itself","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExecTxResult"}},"validator_updates":{"description":"a list of updates to the validator set. These will reflect the validator set at current height + 2.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseFlush":{"type":"object"},"tendermint.abci.ResponseInfo":{"type":"object","properties":{"app_version":{"type":"string","format":"uint64"},"data":{"type":"string"},"last_block_app_hash":{"type":"string","format":"byte"},"last_block_height":{"type":"string","format":"int64"},"version":{"type":"string"}}},"tendermint.abci.ResponseInitChain":{"type":"object","properties":{"app_hash":{"type":"string","format":"byte"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseListSnapshots":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Snapshot"}}}},"tendermint.abci.ResponseLoadSnapshotChunk":{"type":"object","properties":{"chunk":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseOfferSnapshot":{"type":"object","properties":{"result":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot.Result"}}},"tendermint.abci.ResponseOfferSnapshot.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Snapshot accepted, apply chunks\n - ABORT: Abort all snapshot restoration\n - REJECT: Reject this specific snapshot, try others\n - REJECT_FORMAT: Reject all snapshots of this format, try others\n - REJECT_SENDER: Reject all snapshots from the sender(s), try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","REJECT","REJECT_FORMAT","REJECT_SENDER"]},"tendermint.abci.ResponsePrepareProposal":{"type":"object","properties":{"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.ResponseProcessProposal":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal.ProposalStatus"}}},"tendermint.abci.ResponseProcessProposal.ProposalStatus":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.ResponseQuery":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"description":"bytes data = 2; // use \"value\" instead.\n\nnondeterministic","type":"string"},"proof_ops":{"$ref":"#/definitions/tendermint.crypto.ProofOps"},"value":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseVerifyVoteExtension":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus"}}},"tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus":{"description":" - REJECT: Rejecting the vote extension will reject the entire precommit by the sender.\nIncorrectly implementing this thus has liveness implications as it may affect\nCometBFT's ability to receive 2/3+ valid votes to finalize the block.\nHonest nodes should never be rejected.","type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.Snapshot":{"type":"object","properties":{"chunks":{"type":"integer","format":"int64","title":"Number of chunks in the snapshot"},"format":{"type":"integer","format":"int64","title":"The application-specific snapshot format"},"hash":{"type":"string","format":"byte","title":"Arbitrary snapshot hash, equal only if identical"},"height":{"type":"string","format":"uint64","title":"The height at which the snapshot was taken"},"metadata":{"type":"string","format":"byte","title":"Arbitrary application metadata"}}},"tendermint.abci.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte","title":"The first 20 bytes of SHA256(public key)"},"power":{"description":"The voting power","type":"string","format":"int64","title":"PubKey pub_key = 2 [(gogoproto.nullable)=false];"}}},"tendermint.abci.ValidatorUpdate":{"type":"object","properties":{"power":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"}}},"tendermint.abci.VoteInfo":{"type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"validator":{"$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.crypto.ProofOp":{"type":"object","title":"ProofOp defines an operation used for calculating Merkle root\nThe data could be arbitrary format, providing nessecary data\nfor example neighbouring node hash","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"tendermint.crypto.ProofOps":{"type":"object","title":"ProofOps is Merkle proof defined by the list of ProofOps","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.crypto.ProofOp"}}}},"tendermint.crypto.PublicKey":{"type":"object","title":"PublicKey defines the keys available for use with Validators","properties":{"ed25519":{"type":"string","format":"byte"},"secp256k1":{"type":"string","format":"byte"}}},"tendermint.p2p.DefaultNodeInfo":{"type":"object","properties":{"channels":{"type":"string","format":"byte"},"default_node_id":{"type":"string"},"listen_addr":{"type":"string"},"moniker":{"type":"string"},"network":{"type":"string"},"other":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfoOther"},"protocol_version":{"$ref":"#/definitions/tendermint.p2p.ProtocolVersion"},"version":{"type":"string"}}},"tendermint.p2p.DefaultNodeInfoOther":{"type":"object","properties":{"rpc_address":{"type":"string"},"tx_index":{"type":"string"}}},"tendermint.p2p.ProtocolVersion":{"type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"},"p2p":{"type":"string","format":"uint64"}}},"tendermint.types.ABCIParams":{"description":"ABCIParams configure functionality specific to the Application Blockchain Interface.","type":"object","properties":{"vote_extensions_enable_height":{"description":"vote_extensions_enable_height configures the first height during which\nvote extensions will be enabled. During this specified height, and for all\nsubsequent heights, precommit messages that do not contain valid extension data\nwill be considered invalid. Prior to this height, vote extensions will not\nbe used or accepted by validators on the network.\n\nOnce enabled, vote extensions will be created by the application in ExtendVote,\npassed to the application for validation in VerifyVoteExtension and given\nto the application to use when proposing a block during PrepareProposal.","type":"string","format":"int64"}}},"tendermint.types.Block":{"type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/tendermint.types.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"tendermint.types.BlockID":{"type":"object","title":"BlockID","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"$ref":"#/definitions/tendermint.types.PartSetHeader"}}},"tendermint.types.BlockIDFlag":{"description":"- BLOCK_ID_FLAG_UNKNOWN: indicates an error condition\n - BLOCK_ID_FLAG_ABSENT: the vote was not received\n - BLOCK_ID_FLAG_COMMIT: voted for the block that received the majority\n - BLOCK_ID_FLAG_NIL: voted for nil","type":"string","title":"BlockIdFlag indicates which BlockID the signature is for","default":"BLOCK_ID_FLAG_UNKNOWN","enum":["BLOCK_ID_FLAG_UNKNOWN","BLOCK_ID_FLAG_ABSENT","BLOCK_ID_FLAG_COMMIT","BLOCK_ID_FLAG_NIL"]},"tendermint.types.BlockParams":{"description":"BlockParams contains limits on the block size.","type":"object","properties":{"max_bytes":{"type":"string","format":"int64","title":"Max block size, in bytes.\nNote: must be greater than 0"},"max_gas":{"type":"string","format":"int64","title":"Max gas per block.\nNote: must be greater or equal to -1"}}},"tendermint.types.Commit":{"description":"Commit contains the evidence that a block was committed by a set of validators.","type":"object","properties":{"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signatures":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.CommitSig"}}}},"tendermint.types.CommitSig":{"description":"CommitSig is a part of the Vote included in a Commit.","type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"signature":{"type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"validator_address":{"type":"string","format":"byte"}}},"tendermint.types.ConsensusParams":{"description":"ConsensusParams contains consensus critical parameters that determine the\nvalidity of blocks.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"block":{"$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"},"version":{"$ref":"#/definitions/tendermint.types.VersionParams"}}},"tendermint.types.Data":{"type":"object","title":"Data contains the set of transactions included in the block","properties":{"txs":{"description":"Txs that will be applied by state @ block.Height+1.\nNOTE: not all txs here are valid. We're just agreeing on the order first.\nThis means that block.AppHash does not include these txs.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.types.DuplicateVoteEvidence":{"description":"DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.","type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"},"validator_power":{"type":"string","format":"int64"},"vote_a":{"$ref":"#/definitions/tendermint.types.Vote"},"vote_b":{"$ref":"#/definitions/tendermint.types.Vote"}}},"tendermint.types.Evidence":{"type":"object","properties":{"duplicate_vote_evidence":{"$ref":"#/definitions/tendermint.types.DuplicateVoteEvidence"},"light_client_attack_evidence":{"$ref":"#/definitions/tendermint.types.LightClientAttackEvidence"}}},"tendermint.types.EvidenceList":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Evidence"}}}},"tendermint.types.EvidenceParams":{"description":"EvidenceParams determine how we handle evidence of malfeasance.","type":"object","properties":{"max_age_duration":{"description":"Max age of evidence, in time.\n\nIt should correspond with an app's \"unbonding period\" or other similar\nmechanism for handling [Nothing-At-Stake\nattacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).","type":"string"},"max_age_num_blocks":{"description":"Max age of evidence, in blocks.\n\nThe basic formula for calculating this is: MaxAgeDuration / {average block\ntime}.","type":"string","format":"int64"},"max_bytes":{"type":"string","format":"int64","title":"This sets the maximum size of total evidence in bytes that can be committed in a single block.\nand should fall comfortably under the max block bytes.\nDefault is 1048576 or 1MB"}}},"tendermint.types.Header":{"description":"Header defines the structure of a block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"type":"string","format":"byte","title":"original proposer of the block"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"tendermint.types.LightBlock":{"type":"object","properties":{"signed_header":{"$ref":"#/definitions/tendermint.types.SignedHeader"},"validator_set":{"$ref":"#/definitions/tendermint.types.ValidatorSet"}}},"tendermint.types.LightClientAttackEvidence":{"description":"LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.","type":"object","properties":{"byzantine_validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}},"common_height":{"type":"string","format":"int64"},"conflicting_block":{"$ref":"#/definitions/tendermint.types.LightBlock"},"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"}}},"tendermint.types.PartSetHeader":{"type":"object","title":"PartsetHeader","properties":{"hash":{"type":"string","format":"byte"},"total":{"type":"integer","format":"int64"}}},"tendermint.types.SignedHeader":{"type":"object","properties":{"commit":{"$ref":"#/definitions/tendermint.types.Commit"},"header":{"$ref":"#/definitions/tendermint.types.Header"}}},"tendermint.types.SignedMsgType":{"description":"SignedMsgType is a type of signed message in the consensus.\n\n - SIGNED_MSG_TYPE_PREVOTE: Votes\n - SIGNED_MSG_TYPE_PROPOSAL: Proposals","type":"string","default":"SIGNED_MSG_TYPE_UNKNOWN","enum":["SIGNED_MSG_TYPE_UNKNOWN","SIGNED_MSG_TYPE_PREVOTE","SIGNED_MSG_TYPE_PRECOMMIT","SIGNED_MSG_TYPE_PROPOSAL"]},"tendermint.types.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"},"voting_power":{"type":"string","format":"int64"}}},"tendermint.types.ValidatorParams":{"description":"ValidatorParams restrict the public key types validators can use.\nNOTE: uses ABCI pubkey naming, not Amino names.","type":"object","properties":{"pub_key_types":{"type":"array","items":{"type":"string"}}}},"tendermint.types.ValidatorSet":{"type":"object","properties":{"proposer":{"$ref":"#/definitions/tendermint.types.Validator"},"total_voting_power":{"type":"string","format":"int64"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}}}},"tendermint.types.VersionParams":{"description":"VersionParams contains the ABCI application version.","type":"object","properties":{"app":{"type":"string","format":"uint64"}}},"tendermint.types.Vote":{"description":"Vote represents a prevote or precommit vote from validators for\nconsensus.","type":"object","properties":{"block_id":{"description":"zero if vote is nil.","$ref":"#/definitions/tendermint.types.BlockID"},"extension":{"description":"Vote extension provided by the application. Only valid for precommit\nmessages.","type":"string","format":"byte"},"extension_signature":{"description":"Vote extension signature by the validator if they participated in\nconsensus for the associated block.\nOnly valid for precommit messages.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signature":{"description":"Vote signature by the validator if they participated in consensus for the\nassociated block.","type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"type":{"$ref":"#/definitions/tendermint.types.SignedMsgType"},"validator_address":{"type":"string","format":"byte"},"validator_index":{"type":"integer","format":"int32"}}},"tendermint.version.Consensus":{"description":"Consensus captures the consensus rules for processing a block in the blockchain,\nincluding all blockchain data structures and the rules of the application's\nstate transition machine.","type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"}}}},"tags":[{"name":"Query"},{"name":"Msg"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file +{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_report/{window_id}/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReport","parameters":[{"type":"string","format":"uint64","name":"window_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_window":{"get":{"tags":["Query"],"summary":"CurrentWindow returns the current derived window boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentWindow","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentWindowResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin11","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SelfReports returns self-reports submitted by the given supernode_account across windows.","operationId":"GithubComLumeraProtocollumeraQuery_SelfReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySelfReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SupernodeReports returns all reports that include observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_SupernodeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySupernodeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin16","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin21","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin29","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the x/auth module\nparameters. The authority defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","operationId":"FeegrantMsg_Exec","parameters":[{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Grant":{"post":{"tags":["Msg"],"summary":"Grant grants the provided authorization to the grantee on the granter's\naccount with the provided expiration time. If there is already a grant\nfor the given (granter, grantee, Authorization) triple, then the grant\nwill be overwritten.","operationId":"FeegrantMsg_Grant","parameters":[{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Revoke":{"post":{"tags":["Msg"],"summary":"Revoke revokes any authorization corresponding to the provided method name on the\ngranter's account that has been granted to the grantee.","operationId":"FeegrantMsg_Revoke","parameters":[{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.autocli.v1.Query/AppOptions":{"post":{"tags":["Query"],"summary":"AppOptions returns the autocli options for all of the modules in an app.","operationId":"FeegrantQuery_AppOptions","parameters":[{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/MultiSend":{"post":{"tags":["Msg"],"summary":"MultiSend defines a method for sending coins from some accounts to other accounts.","operationId":"FeegrantMsg_MultiSend","parameters":[{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method for sending coins from one account to another account.","operationId":"FeegrantMsg_Send","parameters":[{"description":"MsgSend represents a message to send coins from one account to another.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/SetSendEnabled":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"SetSendEnabled is a governance operation for setting the SendEnabled flag\non any number of Denoms. Only the entries to add or update should be\nincluded. Entries that already exist in the store, but that aren't\nincluded in this message, will be left unchanged.","operationId":"FeegrantMsg_SetSendEnabled","parameters":[{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabled"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin50","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/AuthorizeCircuitBreaker":{"post":{"tags":["Msg"],"summary":"AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another\naccount's circuit breaker permissions.","operationId":"FeegrantMsg_AuthorizeCircuitBreaker","parameters":[{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/ResetCircuitBreaker":{"post":{"tags":["Msg"],"summary":"ResetCircuitBreaker resumes processing of Msg's in the state machine that\nhave been been paused using TripCircuitBreaker.","operationId":"FeegrantMsg_ResetCircuitBreaker","parameters":[{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/TripCircuitBreaker":{"post":{"tags":["Msg"],"summary":"TripCircuitBreaker pauses processing of Msg's in the state machine.","operationId":"FeegrantMsg_TripCircuitBreaker","parameters":[{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.consensus.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin63","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin65","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/VerifyInvariant":{"post":{"tags":["Msg"],"summary":"VerifyInvariant defines a method to verify a particular invariant.","operationId":"FeegrantMsg_VerifyInvariant","parameters":[{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/distribution module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"FeegrantMsg_CommunityPoolSpend","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/DepositValidatorRewardsPool":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"FeegrantMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"FeegrantMsg_FundCommunityPool","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress":{"post":{"tags":["Msg"],"summary":"SetWithdrawAddress defines a method to change the withdraw address\nfor a delegator (or validator self-delegation).","operationId":"FeegrantMsg_SetWithdrawAddress","parameters":[{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin76","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward":{"post":{"tags":["Msg"],"summary":"WithdrawDelegatorReward defines a method to withdraw rewards of delegator\nfrom a single validator.","operationId":"FeegrantMsg_WithdrawDelegatorReward","parameters":[{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission":{"post":{"tags":["Msg"],"summary":"WithdrawValidatorCommission defines a method to withdraw the\nfull commission to the validator address.","operationId":"FeegrantMsg_WithdrawValidatorCommission","parameters":[{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evidence.v1beta1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or\ncounterfactual signing.","operationId":"FeegrantMsg_SubmitEvidence","parameters":[{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/GrantAllowance":{"post":{"tags":["Msg"],"summary":"GrantAllowance grants fee allowance to the grantee on the granter's\naccount with the provided expiration time.","operationId":"FeegrantMsg_GrantAllowance","parameters":[{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/PruneAllowances":{"post":{"description":"Since cosmos-sdk 0.50","tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"FeegrantMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowances"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/RevokeAllowance":{"post":{"tags":["Msg"],"summary":"RevokeAllowance revokes any fee allowance of granter's account that\nhas been granted to the grantee.","operationId":"FeegrantMsg_RevokeAllowance","parameters":[{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/CancelProposal":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"FeegrantMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"FeegrantMsg_Deposit","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/ExecLegacyContent":{"post":{"tags":["Msg"],"summary":"ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal\nto execute a legacy content-based proposal.","operationId":"FeegrantMsg_ExecLegacyContent","parameters":[{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContent"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given the messages.","operationId":"FeegrantMsg_SubmitProposal","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin89","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"FeegrantMsg_Vote","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"FeegrantMsg_VoteWeighted","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"FeegrantMsg_DepositMixin93","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given a content.","operationId":"FeegrantMsg_SubmitProposalMixin93","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"FeegrantMsg_VoteMixin93","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/VoteWeighted":{"post":{"description":"Since: cosmos-sdk 0.43","tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"FeegrantMsg_VoteWeightedMixin93","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroup":{"post":{"tags":["Msg"],"summary":"CreateGroup creates a new group with an admin account address, a list of members and some optional metadata.","operationId":"FeegrantMsg_CreateGroup","parameters":[{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupPolicy creates a new group policy using given DecisionPolicy.","operationId":"FeegrantMsg_CreateGroupPolicy","parameters":[{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupWithPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupWithPolicy creates a new group with policy.","operationId":"FeegrantMsg_CreateGroupWithPolicy","parameters":[{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec executes a proposal.","operationId":"FeegrantMsg_ExecMixin97","parameters":[{"description":"MsgExec is the Msg/Exec request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/LeaveGroup":{"post":{"tags":["Msg"],"summary":"LeaveGroup allows a group member to leave the group.","operationId":"FeegrantMsg_LeaveGroup","parameters":[{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal submits a new proposal.","operationId":"FeegrantMsg_SubmitProposalMixin97","parameters":[{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupAdmin updates the group admin with given group id and previous admin address.","operationId":"FeegrantMsg_UpdateGroupAdmin","parameters":[{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMembers":{"post":{"tags":["Msg"],"summary":"UpdateGroupMembers updates the group members with given group id and admin address.","operationId":"FeegrantMsg_UpdateGroupMembers","parameters":[{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembers"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupMetadata updates the group metadata with given group id and admin address.","operationId":"FeegrantMsg_UpdateGroupMetadata","parameters":[{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyAdmin updates a group policy admin.","operationId":"FeegrantMsg_UpdateGroupPolicyAdmin","parameters":[{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyDecisionPolicy":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated.","operationId":"FeegrantMsg_UpdateGroupPolicyDecisionPolicy","parameters":[{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyMetadata updates a group policy metadata.","operationId":"FeegrantMsg_UpdateGroupPolicyMetadata","parameters":[{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote allows a voter to vote on a proposal.","operationId":"FeegrantMsg_VoteMixin97","parameters":[{"description":"MsgVote is the Msg/Vote request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/WithdrawProposal":{"post":{"tags":["Msg"],"summary":"WithdrawProposal withdraws a proposal.","operationId":"FeegrantMsg_WithdrawProposal","parameters":[{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.mint.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/mint module\nparameters. The authority is defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParamsMixin102","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.nft.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method to send a nft from one account to another account.","operationId":"FeegrantMsg_SendMixin108","parameters":[{"description":"MsgSend represents a message to send a nft from one account to another account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/Unjail":{"post":{"tags":["Msg"],"summary":"Unjail defines a method for unjailing a jailed validator, thus returning\nthem into the bonded validator set, so they can begin receiving provisions\nand rewards again.","operationId":"FeegrantMsg_Unjail","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjail"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjailResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/slashing module\nparameters. The authority defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParamsMixin115","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/BeginRedelegate":{"post":{"tags":["Msg"],"summary":"BeginRedelegate defines a method for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","operationId":"FeegrantMsg_BeginRedelegate","parameters":[{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"FeegrantMsg_CancelUnbondingDelegation","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegation"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CreateValidator":{"post":{"tags":["Msg"],"summary":"CreateValidator defines a method for creating a new validator.","operationId":"FeegrantMsg_CreateValidator","parameters":[{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Delegate":{"post":{"tags":["Msg"],"summary":"Delegate defines a method for performing a delegation of coins\nfrom a delegator to a validator.","operationId":"FeegrantMsg_Delegate","parameters":[{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/EditValidator":{"post":{"tags":["Msg"],"summary":"EditValidator defines a method for editing an existing validator.","operationId":"FeegrantMsg_EditValidator","parameters":[{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Undelegate":{"post":{"tags":["Msg"],"summary":"Undelegate defines a method for performing an undelegation from a\ndelegate and a validator.","operationId":"FeegrantMsg_Undelegate","parameters":[{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines an operation for updating the x/staking module\nparameters.\nSince: cosmos-sdk 0.47","operationId":"FeegrantMsg_UpdateParamsMixin120","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenCommit":{"post":{"tags":["ABCIListenerService"],"summary":"ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit","operationId":"FeegrantABCIListenerService_ListenCommit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenFinalizeBlock":{"post":{"tags":["ABCIListenerService"],"summary":"ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock","operationId":"FeegrantABCIListenerService_ListenFinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/CancelUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"FeegrantMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"FeegrantMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"FeegrantMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"FeegrantMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreateVestingAccount":{"post":{"tags":["Msg"],"summary":"CreateVestingAccount defines a method that enables creating a vesting\naccount.","operationId":"FeegrantMsg_CreateVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/account_info/{address}":{"get":{"description":"Since: cosmos-sdk 0.47","tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"FeegrantQuery_AccountInfo","parameters":[{"type":"string","description":"address is the account address string.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.43","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"FeegrantQuery_Accounts","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account details based on address.","operationId":"FeegrantQuery_Account","parameters":[{"type":"string","description":"address defines the address to query for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/address_by_id/{id}":{"get":{"description":"Since: cosmos-sdk 0.46.2","tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"FeegrantQuery_AccountAddressByID","parameters":[{"type":"string","format":"int64","description":"Deprecated, use account_id instead\n\nid is the account number of the address to be queried. This field\nshould have been an uint64 (like all account numbers), and will be\nupdated to uint64 in a future version of the auth query.","name":"id","in":"path","required":true},{"type":"string","format":"uint64","description":"account_id is the account number of the address to be queried.\n\nSince: cosmos-sdk 0.47","name":"account_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountAddressByIDResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"FeegrantQuery_Bech32Prefix","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.Bech32PrefixResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_bytes}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"FeegrantQuery_AddressBytesToString","parameters":[{"type":"string","format":"byte","name":"address_bytes","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressBytesToStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_string}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"FeegrantQuery_AddressStringToBytes","parameters":[{"type":"string","name":"address_string","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressStringToBytesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"FeegrantQuery_ModuleAccounts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts/{name}":{"get":{"tags":["Query"],"summary":"ModuleAccountByName returns the module account info by module name","operationId":"FeegrantQuery_ModuleAccountByName","parameters":[{"type":"string","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountByNameResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters.","operationId":"FeegrantQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants":{"get":{"tags":["Query"],"summary":"Returns list of `Authorization`, granted to the grantee by the granter.","operationId":"FeegrantQuery_Grants","parameters":[{"type":"string","name":"granter","in":"query"},{"type":"string","name":"grantee","in":"query"},{"type":"string","description":"Optional, msg_type_url, when set, will query only grants matching given msg type.","name":"msg_type_url","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/grantee/{grantee}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"FeegrantQuery_GranteeGrants","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranteeGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/granter/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"FeegrantQuery_GranterGrants","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranterGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"AllBalances queries the balance of all coins for a single account.","operationId":"FeegrantQuery_AllBalances","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"boolean","description":"resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.\n\nSince: cosmos-sdk 0.50","name":"resolve_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryAllBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}/by_denom":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a single coin for a single account.","operationId":"FeegrantQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners/{denom}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"FeegrantQuery_DenomOwners","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners_by_query":{"get":{"description":"Since: cosmos-sdk 0.50.3","tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"FeegrantQuery_DenomOwnersByQuery","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata":{"get":{"tags":["Query"],"summary":"DenomsMetadata queries the client metadata for all registered coin\ndenominations.","operationId":"FeegrantQuery_DenomsMetadata","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomsMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata/{denom}":{"get":{"tags":["Query"],"summary":"DenomMetadata queries the client metadata of a given coin denomination.","operationId":"FeegrantQuery_DenomMetadata","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata_by_query_string":{"get":{"tags":["Query"],"summary":"DenomMetadataByQueryString queries the client metadata of a given coin denomination.","operationId":"FeegrantQuery_DenomMetadataByQueryString","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/bank module.","operationId":"FeegrantQuery_ParamsMixin49","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/send_enabled":{"get":{"description":"This query only returns denominations that have specific SendEnabled settings.\nAny denomination that does not have a specific setting will use the default\nparams.default_send_enabled, and will not be returned by this query.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"FeegrantQuery_SendEnabled","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"denoms is the specific denoms you want look up. Leave empty to get all entries.","name":"denoms","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"FeegrantQuery_SpendableBalances","parameters":[{"type":"string","description":"address is the address to query spendable balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"FeegrantQuery_SpendableBalanceByDenom","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"TotalSupply queries the total supply of all coins.","operationId":"FeegrantQuery_TotalSupply","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryTotalSupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SupplyOf queries the supply of a single coin.","operationId":"FeegrantQuery_SupplyOf","parameters":[{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySupplyOfResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/config":{"get":{"tags":["Service"],"summary":"Config queries for the operator configuration.","operationId":"FeegrantService_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.ConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/status":{"get":{"tags":["Service"],"summary":"Status queries for the node status.","operationId":"FeegrantService_Status","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.StatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/authn":{"get":{"tags":["ReflectionService"],"summary":"GetAuthnDescriptor returns information on how to authenticate transactions in the application\nNOTE: this RPC is still experimental and might be subject to breaking changes or removal in\nfuture releases of the cosmos-sdk.","operationId":"FeegrantReflectionService_GetAuthnDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/chain":{"get":{"tags":["ReflectionService"],"summary":"GetChainDescriptor returns the description of the chain","operationId":"FeegrantReflectionService_GetChainDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/codec":{"get":{"tags":["ReflectionService"],"summary":"GetCodecDescriptor returns the descriptor of the codec of the application","operationId":"FeegrantReflectionService_GetCodecDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/configuration":{"get":{"tags":["ReflectionService"],"summary":"GetConfigurationDescriptor returns the descriptor for the sdk.Config of the application","operationId":"FeegrantReflectionService_GetConfigurationDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/query_services":{"get":{"tags":["ReflectionService"],"summary":"GetQueryServicesDescriptor returns the available gRPC queryable services of the application","operationId":"FeegrantReflectionService_GetQueryServicesDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/tx_descriptor":{"get":{"tags":["ReflectionService"],"summary":"GetTxDescriptor returns information on the used transaction object and available msgs that can be used","operationId":"FeegrantReflectionService_GetTxDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces":{"get":{"tags":["ReflectionService"],"summary":"ListAllInterfaces lists all the interfaces registered in the interface\nregistry.","operationId":"FeegrantReflectionService_ListAllInterfaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListAllInterfacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces/{interface_name}/implementations":{"get":{"tags":["ReflectionService"],"summary":"ListImplementations list all the concrete types that implement a given\ninterface.","operationId":"FeegrantReflectionService_ListImplementations","parameters":[{"type":"string","description":"interface_name defines the interface to query the implementations for.","name":"interface_name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListImplementationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/abci_query":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Service"],"summary":"ABCIQuery defines a query handler that supports ABCI queries directly to the\napplication, bypassing Tendermint completely. The ABCI query must contain\na valid and supported path, including app, custom, p2p, and store.","operationId":"FeegrantService_ABCIQuery","parameters":[{"type":"string","format":"byte","name":"data","in":"query"},{"type":"string","name":"path","in":"query"},{"type":"string","format":"int64","name":"height","in":"query"},{"type":"boolean","name":"prove","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ABCIQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/latest":{"get":{"tags":["Service"],"summary":"GetLatestBlock returns the latest block.","operationId":"FeegrantService_GetLatestBlock","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/{height}":{"get":{"tags":["Service"],"summary":"GetBlockByHeight queries block for given height.","operationId":"FeegrantService_GetBlockByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/node_info":{"get":{"tags":["Service"],"summary":"GetNodeInfo queries the current node info.","operationId":"FeegrantService_GetNodeInfo","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetNodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/syncing":{"get":{"tags":["Service"],"summary":"GetSyncing queries node syncing.","operationId":"FeegrantService_GetSyncing","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetSyncingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/latest":{"get":{"tags":["Service"],"summary":"GetLatestValidatorSet queries latest validator-set.","operationId":"FeegrantService_GetLatestValidatorSet","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/{height}":{"get":{"tags":["Service"],"summary":"GetValidatorSetByHeight queries validator-set at a given height.","operationId":"FeegrantService_GetValidatorSetByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"FeegrantQuery_AccountsMixin59","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"FeegrantQuery_AccountMixin59","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/disable_list":{"get":{"tags":["Query"],"summary":"DisabledList returns a list of disabled message urls","operationId":"FeegrantQuery_DisabledList","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.DisabledListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/consensus/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/consensus module.","operationId":"FeegrantQuery_ParamsMixin62","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"FeegrantQuery_CommunityPool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards":{"get":{"tags":["Query"],"summary":"DelegationTotalRewards queries the total rewards accrued by each\nvalidator.","operationId":"FeegrantQuery_DelegationTotalRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}":{"get":{"tags":["Query"],"summary":"DelegationRewards queries the total rewards accrued by a delegation.","operationId":"FeegrantQuery_DelegationRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true},{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators":{"get":{"tags":["Query"],"summary":"DelegatorValidators queries the validators of a delegator.","operationId":"FeegrantQuery_DelegatorValidators","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address":{"get":{"tags":["Query"],"summary":"DelegatorWithdrawAddress queries withdraw address of a delegator.","operationId":"FeegrantQuery_DelegatorWithdrawAddress","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries params of the distribution module.","operationId":"FeegrantQuery_ParamsMixin75","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}":{"get":{"tags":["Query"],"summary":"ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator","operationId":"FeegrantQuery_ValidatorDistributionInfo","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/commission":{"get":{"tags":["Query"],"summary":"ValidatorCommission queries accumulated commission for a validator.","operationId":"FeegrantQuery_ValidatorCommission","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards":{"get":{"tags":["Query"],"summary":"ValidatorOutstandingRewards queries rewards of a validator address.","operationId":"FeegrantQuery_ValidatorOutstandingRewards","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes":{"get":{"tags":["Query"],"summary":"ValidatorSlashes queries slash events of a validator.","operationId":"FeegrantQuery_ValidatorSlashes","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true},{"type":"string","format":"uint64","description":"starting_height defines the optional starting height to query the slashes.","name":"starting_height","in":"query"},{"type":"string","format":"uint64","description":"starting_height defines the optional ending height to query the slashes.","name":"ending_height","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorSlashesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence":{"get":{"tags":["Query"],"summary":"AllEvidence queries all evidence.","operationId":"FeegrantQuery_AllEvidence","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryAllEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence/{hash}":{"get":{"tags":["Query"],"summary":"Evidence queries evidence based on evidence hash.","operationId":"FeegrantQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.\n\nSince: cosmos-sdk 0.47","name":"hash","in":"path","required":true},{"type":"string","format":"byte","description":"evidence_hash defines the hash of the requested evidence.\nDeprecated: Use hash, a HEX encoded string, instead.","name":"evidence_hash","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}":{"get":{"tags":["Query"],"summary":"Allowance returns granted allwance to the grantee by the granter.","operationId":"FeegrantQuery_Allowance","parameters":[{"type":"string","description":"granter is the address of the user granting an allowance of their funds.","name":"granter","in":"path","required":true},{"type":"string","description":"grantee is the address of the user being granted an allowance of another user's funds.","name":"grantee","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowances/{grantee}":{"get":{"tags":["Query"],"summary":"Allowances returns all the grants for the given grantee address.","operationId":"FeegrantQuery_Allowances","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/issued/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"FeegrantQuery_AllowancesByGranter","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/constitution":{"get":{"tags":["Query"],"summary":"Constitution queries the chain's constitution.","operationId":"FeegrantQuery_Constitution","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryConstitutionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"FeegrantQuery_ParamsMixin88","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"FeegrantQuery_Proposals","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"FeegrantQuery_Proposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"FeegrantQuery_Deposits","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositAddr.","operationId":"FeegrantQuery_Deposit","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"FeegrantQuery_TallyResult","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"FeegrantQuery_Votes","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"FeegrantQuery_Vote","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"FeegrantQuery_ParamsMixin92","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"FeegrantQuery_ProposalsMixin92","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"FeegrantQuery_ProposalMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"FeegrantQuery_DepositsMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositor address.","operationId":"FeegrantQuery_DepositMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"FeegrantQuery_TallyResultMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"FeegrantQuery_VotesMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"FeegrantQuery_VoteMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_info/{group_id}":{"get":{"tags":["Query"],"summary":"GroupInfo queries group info based on group id.","operationId":"FeegrantQuery_GroupInfo","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_members/{group_id}":{"get":{"tags":["Query"],"summary":"GroupMembers queries members of a group by group id.","operationId":"FeegrantQuery_GroupMembers","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByAdmin queries group policies by admin address.","operationId":"FeegrantQuery_GroupPoliciesByAdmin","parameters":[{"type":"string","description":"admin is the admin address of the group policy.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_group/{group_id}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByGroup queries group policies by group id.","operationId":"FeegrantQuery_GroupPoliciesByGroup","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group policy's group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policy_info/{address}":{"get":{"tags":["Query"],"summary":"GroupPolicyInfo queries group policy info based on account address of group policy.","operationId":"FeegrantQuery_GroupPolicyInfo","parameters":[{"type":"string","description":"address is the account address of the group policy.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPolicyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups":{"get":{"description":"Since: cosmos-sdk 0.47.1","tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"FeegrantQuery_Groups","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupsByAdmin queries groups by admin address.","operationId":"FeegrantQuery_GroupsByAdmin","parameters":[{"type":"string","description":"admin is the account address of a group's admin.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_member/{address}":{"get":{"tags":["Query"],"summary":"GroupsByMember queries groups by member address.","operationId":"FeegrantQuery_GroupsByMember","parameters":[{"type":"string","description":"address is the group member address.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByMemberResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries a proposal based on proposal id.","operationId":"FeegrantQuery_ProposalMixin96","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult returns the tally result of a proposal. If the proposal is\nstill in voting period, then this query computes the current tally state,\nwhich might not be final. On the other hand, if the proposal is final,\nthen it simply returns the `final_tally_result` state stored in the\nproposal itself.","operationId":"FeegrantQuery_TallyResultMixin96","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique id of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals_by_group_policy/{address}":{"get":{"tags":["Query"],"summary":"ProposalsByGroupPolicy queries proposals based on account address of group policy.","operationId":"FeegrantQuery_ProposalsByGroupPolicy","parameters":[{"type":"string","description":"address is the account address of the group policy related to proposals.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalsByGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}":{"get":{"tags":["Query"],"summary":"VoteByProposalVoter queries a vote by proposal id and voter.","operationId":"FeegrantQuery_VoteByProposalVoter","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVoteByProposalVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"VotesByProposal queries a vote by proposal id.","operationId":"FeegrantQuery_VotesByProposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_voter/{voter}":{"get":{"tags":["Query"],"summary":"VotesByVoter queries a vote by voter.","operationId":"FeegrantQuery_VotesByVoter","parameters":[{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/annual_provisions":{"get":{"tags":["Query"],"summary":"AnnualProvisions current minting annual provisions value.","operationId":"FeegrantQuery_AnnualProvisions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryAnnualProvisionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/inflation":{"get":{"tags":["Query"],"summary":"Inflation returns the current minting inflation value.","operationId":"FeegrantQuery_Inflation","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryInflationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of minting parameters.","operationId":"FeegrantQuery_ParamsMixin101","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/balance/{owner}/{class_id}":{"get":{"tags":["Query"],"summary":"Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721","operationId":"FeegrantQuery_BalanceMixin107","parameters":[{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"path","required":true},{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes":{"get":{"tags":["Query"],"summary":"Classes queries all NFT classes","operationId":"FeegrantQuery_Classes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes/{class_id}":{"get":{"tags":["Query"],"summary":"Class queries an NFT class based on its id","operationId":"FeegrantQuery_Class","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts":{"get":{"tags":["Query"],"summary":"NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in\nERC721Enumerable","operationId":"FeegrantQuery_NFTs","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"query"},{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"NFT queries an NFT based on its class and id.","operationId":"FeegrantQuery_NFT","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/owner/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721","operationId":"FeegrantQuery_Owner","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryOwnerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/supply/{class_id}":{"get":{"tags":["Query"],"summary":"Supply queries the number of NFTs from the given class, same as totalSupply of ERC721.","operationId":"FeegrantQuery_Supply","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QuerySupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries a specific parameter of a module, given its subspace and\nkey.","operationId":"FeegrantQuery_ParamsMixin110","parameters":[{"type":"string","description":"subspace defines the module to query the parameter for.","name":"subspace","in":"query"},{"type":"string","description":"key defines the key of the parameter in the subspace.","name":"key","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/subspaces":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"FeegrantQuery_Subspaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QuerySubspacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of slashing module","operationId":"FeegrantQuery_ParamsMixin113","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos":{"get":{"tags":["Query"],"summary":"SigningInfos queries signing info of all validators","operationId":"FeegrantQuery_SigningInfos","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos/{cons_address}":{"get":{"tags":["Query"],"summary":"SigningInfo queries the signing info of given cons address","operationId":"FeegrantQuery_SigningInfo","parameters":[{"type":"string","description":"cons_address is the address to query signing info of","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegations/{delegator_addr}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorDelegations queries all delegations of a given delegator address.","operationId":"FeegrantQuery_DelegatorDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Redelegations queries redelegations of given address.","operationId":"FeegrantQuery_Redelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"src_validator_addr defines the validator address to redelegate from.","name":"src_validator_addr","in":"query"},{"type":"string","description":"dst_validator_addr defines the validator address to redelegate to.","name":"dst_validator_addr","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryRedelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorUnbondingDelegations queries all unbonding delegations of a given\ndelegator address.","operationId":"FeegrantQuery_DelegatorUnbondingDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorValidators queries all validators info for given delegator\naddress.","operationId":"FeegrantQuery_DelegatorValidatorsMixin118","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"DelegatorValidator queries validator info for given delegator validator\npair.","operationId":"FeegrantQuery_DelegatorValidator","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/historical_info/{height}":{"get":{"tags":["Query"],"summary":"HistoricalInfo queries the historical info for given height.","operationId":"FeegrantQuery_HistoricalInfo","parameters":[{"type":"string","format":"int64","description":"height defines at which height to query the historical info.","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryHistoricalInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the staking parameters.","operationId":"FeegrantQuery_ParamsMixin118","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/pool":{"get":{"tags":["Query"],"summary":"Pool queries the pool info.","operationId":"FeegrantQuery_Pool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Validators queries all validators that match the given status.","operationId":"FeegrantQuery_Validators","parameters":[{"type":"string","description":"status enables to query for validators matching a given status.","name":"status","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"Validator queries validator info for given validator address.","operationId":"FeegrantQuery_Validator","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorDelegations queries delegate info for given validator.","operationId":"FeegrantQuery_ValidatorDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}":{"get":{"tags":["Query"],"summary":"Delegation queries delegate info for given validator delegator pair.","operationId":"FeegrantQuery_Delegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation":{"get":{"tags":["Query"],"summary":"UnbondingDelegation queries unbonding info for given validator delegator\npair.","operationId":"FeegrantQuery_UnbondingDelegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorUnbondingDelegations queries unbonding delegations of a validator.","operationId":"FeegrantQuery_ValidatorUnbondingDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"FeegrantService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"FeegrantService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"FeegrantService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"FeegrantService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/simulate":{"post":{"tags":["Service"],"summary":"Simulate simulates executing a transaction for estimating gas usage.","operationId":"FeegrantService_Simulate","parameters":[{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs":{"get":{"tags":["Service"],"summary":"GetTxsEvent fetches txs by event.","operationId":"FeegrantService_GetTxsEvent","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"events is the list of transaction event type.\nDeprecated post v0.47.x: use query instead, which should contain a valid\nevents query.","name":"events","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"],"type":"string","default":"ORDER_BY_UNSPECIFIED","description":" - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","name":"order_by","in":"query"},{"type":"string","format":"uint64","description":"page is the page number to query, starts at 1. If not provided, will\ndefault to first page.","name":"page","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"limit","in":"query"},{"type":"string","description":"query defines the transaction event query that is proxied to Tendermint's\nTxSearch RPC method. The query must be valid.\n\nSince cosmos-sdk 0.50","name":"query","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}},"post":{"tags":["Service"],"summary":"BroadcastTx broadcast transaction.","operationId":"FeegrantService_BroadcastTx","parameters":[{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/block/{height}":{"get":{"description":"Since: cosmos-sdk 0.45.2","tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"FeegrantService_GetBlockWithTxs","parameters":[{"type":"string","format":"int64","description":"height is the height of the block to query.","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetBlockWithTxsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/{hash}":{"get":{"tags":["Service"],"summary":"GetTx fetches a tx by hash.","operationId":"FeegrantService_GetTx","parameters":[{"type":"string","description":"hash is the tx hash to query, encoded as a hex string.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/applied_plan/{name}":{"get":{"tags":["Query"],"summary":"AppliedPlan queries a previously applied upgrade plan by its name.","operationId":"FeegrantQuery_AppliedPlan","parameters":[{"type":"string","description":"name is the name of the applied plan to query for.","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAppliedPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/authority":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"FeegrantQuery_Authority","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAuthorityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/current_plan":{"get":{"tags":["Query"],"summary":"CurrentPlan queries the current upgrade plan.","operationId":"FeegrantQuery_CurrentPlan","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryCurrentPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/module_versions":{"get":{"description":"Since: cosmos-sdk 0.43","tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"FeegrantQuery_ModuleVersions","parameters":[{"type":"string","description":"module_name is a field to query a specific module\nconsensus version from state. Leaving this empty will\nfetch the full list of module versions from state","name":"module_name","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryModuleVersionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries the consensus state that will serve\nas a trusted kernel for the next version of this chain. It will only be\nstored at the last height of this chain.\nUpgradedConsensusState RPC not supported with legacy querier\nThis rpc is deprecated now that IBC has its own replacement\n(https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)","operationId":"FeegrantQuery_UpgradedConsensusState","parameters":[{"type":"string","format":"int64","description":"last height of the current chain must be sent in request\nas this is the height under which next consensus state is stored","name":"last_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/AddCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"AddCodeUploadParamsAddresses defines a governance operation for\nadding addresses to code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_AddCodeUploadParamsAddresses","parameters":[{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ClearAdmin":{"post":{"tags":["Msg"],"summary":"ClearAdmin removes any admin stored for a smart contract","operationId":"WasmMsg_ClearAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ExecuteContract":{"post":{"tags":["Msg"],"summary":"Execute submits the given message data to a smart contract","operationId":"WasmMsg_ExecuteContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract":{"post":{"tags":["Msg"],"summary":"InstantiateContract creates a new smart contract instance for the given\n code id.","operationId":"WasmMsg_InstantiateContract","parameters":[{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract2":{"post":{"tags":["Msg"],"summary":"InstantiateContract2 creates a new smart contract instance for the given\n code id with a predictable address","operationId":"WasmMsg_InstantiateContract2","parameters":[{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"Migrate runs a code upgrade/ downgrade for a smart contract","operationId":"WasmMsg_MigrateContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/PinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"PinCodes defines a governance operation for pinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_PinCodes","parameters":[{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/RemoveCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"RemoveCodeUploadParamsAddresses defines a governance operation for\nremoving addresses from code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_RemoveCodeUploadParamsAddresses","parameters":[{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndInstantiateContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"StoreAndInstantiateContract defines a governance operation for storing\nand instantiating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndInstantiateContract","parameters":[{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndMigrateContract":{"post":{"description":"Since: 0.42","tags":["Msg"],"summary":"StoreAndMigrateContract defines a governance operation for storing\nand migrating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndMigrateContract","parameters":[{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode to submit Wasm code to the system","operationId":"WasmMsg_StoreCode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/SudoContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"SudoContract defines a governance operation for calling sudo\non a contract. The authority is defined in the keeper.","operationId":"WasmMsg_SudoContract","parameters":[{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UnpinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UnpinCodes defines a governance operation for unpinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_UnpinCodes","parameters":[{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateAdmin":{"post":{"tags":["Msg"],"summary":"UpdateAdmin sets a new admin for a smart contract","operationId":"WasmMsg_UpdateAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateContractLabel":{"post":{"description":"Since: 0.43","tags":["Msg"],"summary":"UpdateContractLabel sets a new label for a smart contract","operationId":"WasmMsg_UpdateContractLabel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateInstantiateConfig":{"post":{"tags":["Msg"],"summary":"UpdateInstantiateConfig updates instantiate config for a smart contract","operationId":"WasmMsg_UpdateInstantiateConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateParams":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/wasm\nmodule parameters. The authority is defined in the keeper.","operationId":"WasmMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code":{"get":{"tags":["Query"],"summary":"Codes gets the metadata for all stored wasm codes","operationId":"WasmQuery_Codes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code-info/{code_id}":{"get":{"tags":["Query"],"summary":"CodeInfo gets the metadata for a single wasm code","operationId":"WasmQuery_CodeInfo","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}":{"get":{"tags":["Query"],"summary":"Code gets the binary code and metadata for a single wasm code","operationId":"WasmQuery_Code","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}/contracts":{"get":{"tags":["Query"],"summary":"ContractsByCode lists all smart contracts for a code id","operationId":"WasmQuery_ContractsByCode","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/params":{"get":{"tags":["Query"],"summary":"Params gets the module params","operationId":"WasmQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/pinned":{"get":{"tags":["Query"],"summary":"PinnedCodes gets the pinned code ids","operationId":"WasmQuery_PinnedCodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryPinnedCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/build_address":{"get":{"tags":["Query"],"summary":"BuildAddress builds a contract address","operationId":"WasmQuery_BuildAddress","parameters":[{"type":"string","description":"CodeHash is the hash of the code","name":"code_hash","in":"query"},{"type":"string","description":"CreatorAddress is the address of the contract instantiator","name":"creator_address","in":"query"},{"type":"string","description":"Salt is a hex encoded salt","name":"salt","in":"query"},{"type":"string","format":"byte","description":"InitArgs are optional json encoded init args to be used in contract address\nbuilding if provided","name":"init_args","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryBuildAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}":{"get":{"tags":["Query"],"summary":"ContractInfo gets the contract meta data","operationId":"WasmQuery_ContractInfo","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/history":{"get":{"tags":["Query"],"summary":"ContractHistory gets the contract code history","operationId":"WasmQuery_ContractHistory","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractHistoryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}":{"get":{"tags":["Query"],"summary":"RawContractState gets single key from the raw store data of a contract","operationId":"WasmQuery_RawContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryRawContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}":{"get":{"tags":["Query"],"summary":"SmartContractState get smart query result from the contract","operationId":"WasmQuery_SmartContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"QueryData contains the query data passed to the contract","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QuerySmartContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/state":{"get":{"tags":["Query"],"summary":"AllContractState gets all raw store data for a single contract","operationId":"WasmQuery_AllContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryAllContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contracts/creator/{creator_address}":{"get":{"tags":["Query"],"summary":"ContractsByCreator gets the contracts by creator","operationId":"WasmQuery_ContractsByCreator","parameters":[{"type":"string","description":"CreatorAddress is the address of contract creator","name":"creator_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/wasm-limits-config":{"get":{"tags":["Query"],"summary":"WasmLimitsConfig gets the configured limits for static validation of Wasm\nfiles, encoded in JSON.","operationId":"WasmQuery_WasmLimitsConfig","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/RegisterInterchainAccount":{"post":{"tags":["Msg"],"summary":"RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount.","operationId":"ControllerMsg_RegisterInterchainAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/SendTx":{"post":{"tags":["Msg"],"summary":"SendTx defines a rpc handler for MsgSendTx.","operationId":"ControllerMsg_SendTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/ModuleQuerySafe":{"post":{"tags":["Msg"],"summary":"ModuleQuerySafe defines a rpc handler for MsgModuleQuerySafe.","operationId":"ControllerMsg_ModuleQuerySafe","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin157","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/Transfer":{"post":{"tags":["Msg"],"summary":"Transfer defines a rpc handler method for MsgTransfer.","operationId":"ControllerMsg_Transfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin168","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_Acknowledgement","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseConfirm":{"post":{"tags":["Msg"],"summary":"ChannelCloseConfirm defines a rpc handler method for\nMsgChannelCloseConfirm.","operationId":"ControllerMsg_ChannelCloseConfirm","parameters":[{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseInit":{"post":{"tags":["Msg"],"summary":"ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit.","operationId":"ControllerMsg_ChannelCloseInit","parameters":[{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenAck":{"post":{"tags":["Msg"],"summary":"ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck.","operationId":"ControllerMsg_ChannelOpenAck","parameters":[{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenConfirm":{"post":{"tags":["Msg"],"summary":"ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm.","operationId":"ControllerMsg_ChannelOpenConfirm","parameters":[{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenInit":{"post":{"tags":["Msg"],"summary":"ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit.","operationId":"ControllerMsg_ChannelOpenInit","parameters":[{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenTry":{"post":{"tags":["Msg"],"summary":"ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry.","operationId":"ControllerMsg_ChannelOpenTry","parameters":[{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacket","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_Timeout","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/TimeoutOnClose":{"post":{"tags":["Msg"],"summary":"TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose.","operationId":"ControllerMsg_TimeoutOnClose","parameters":[{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnCloseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_AcknowledgementMixin176","parameters":[{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacketMixin176","parameters":[{"description":"MsgRecvPacket receives an incoming IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/SendPacket":{"post":{"tags":["Msg"],"summary":"SendPacket defines a rpc handler method for MsgSendPacket.","operationId":"ControllerMsg_SendPacket","parameters":[{"description":"MsgSendPacket sends an outgoing IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_TimeoutMixin176","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/CreateClient":{"post":{"tags":["Msg"],"summary":"CreateClient defines a rpc handler method for MsgCreateClient.","operationId":"ControllerMsg_CreateClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/DeleteClientCreator":{"post":{"tags":["Msg"],"summary":"DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator.","operationId":"ControllerMsg_DeleteClientCreator","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/IBCSoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade.","operationId":"ControllerMsg_IBCSoftwareUpgrade","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/RecoverClient":{"post":{"tags":["Msg"],"summary":"RecoverClient defines a rpc handler method for MsgRecoverClient.","operationId":"ControllerMsg_RecoverClient","parameters":[{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/SubmitMisbehaviour":{"post":{"tags":["Msg"],"summary":"SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.","operationId":"ControllerMsg_SubmitMisbehaviour","parameters":[{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviour"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviourResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClient":{"post":{"tags":["Msg"],"summary":"UpdateClient defines a rpc handler method for MsgUpdateClient.","operationId":"ControllerMsg_UpdateClient","parameters":[{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClientParams":{"post":{"tags":["Msg"],"summary":"UpdateClientParams defines a rpc handler method for MsgUpdateParams.","operationId":"ControllerMsg_UpdateClientParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpgradeClient":{"post":{"tags":["Msg"],"summary":"UpgradeClient defines a rpc handler method for MsgUpgradeClient.","operationId":"ControllerMsg_UpgradeClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/RegisterCounterparty":{"post":{"tags":["Msg"],"summary":"RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty.","operationId":"ControllerMsg_RegisterCounterparty","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterparty"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterpartyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/UpdateClientConfig":{"post":{"tags":["Msg"],"summary":"UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig.","operationId":"ControllerMsg_UpdateClientConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenAck":{"post":{"tags":["Msg"],"summary":"ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck.","operationId":"ControllerMsg_ConnectionOpenAck","parameters":[{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenConfirm":{"post":{"tags":["Msg"],"summary":"ConnectionOpenConfirm defines a rpc handler method for\nMsgConnectionOpenConfirm.","operationId":"ControllerMsg_ConnectionOpenConfirm","parameters":[{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenInit":{"post":{"tags":["Msg"],"summary":"ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit.","operationId":"ControllerMsg_ConnectionOpenInit","parameters":[{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenTry":{"post":{"tags":["Msg"],"summary":"ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry.","operationId":"ControllerMsg_ConnectionOpenTry","parameters":[{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/UpdateConnectionParams":{"post":{"tags":["Msg"],"summary":"UpdateConnectionParams defines a rpc handler method for\nMsgUpdateParams.","operationId":"ControllerMsg_UpdateConnectionParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"MigrateContract defines a rpc handler method for MsgMigrateContract.","operationId":"ControllerMsg_MigrateContract","parameters":[{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/RemoveChecksum":{"post":{"tags":["Msg"],"summary":"RemoveChecksum defines a rpc handler method for MsgRemoveChecksum.","operationId":"ControllerMsg_RemoveChecksum","parameters":[{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode defines a rpc handler method for MsgStoreCode.","operationId":"ControllerMsg_StoreCode","parameters":[{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"InterchainAccount returns the interchain account address for a given owner address on a given connection","operationId":"ControllerQuery_InterchainAccount","parameters":[{"type":"string","name":"owner","in":"path","required":true},{"type":"string","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA controller submodule.","operationId":"ControllerQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/host/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA host submodule.","operationId":"ControllerQuery_ParamsMixin156","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address":{"get":{"tags":["Query"],"summary":"EscrowAddress returns the escrow address for a particular port and channel id.","operationId":"ControllerQuery_EscrowAddress","parameters":[{"type":"string","description":"unique channel identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"unique port identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryEscrowAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denom_hashes/{trace}":{"get":{"tags":["Query"],"summary":"DenomHash queries a denomination hash information.","operationId":"ControllerQuery_DenomHash","parameters":[{"pattern":".+","type":"string","description":"The denomination trace ([port_id]/[channel_id])+/[denom]","name":"trace","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomHashResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms":{"get":{"tags":["Query"],"summary":"Denoms queries all denominations","operationId":"ControllerQuery_Denoms","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms/{hash}":{"get":{"tags":["Query"],"summary":"Denom queries a denomination","operationId":"ControllerQuery_Denom","parameters":[{"pattern":".+","type":"string","description":"hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ibc-transfer module.","operationId":"ControllerQuery_ParamsMixin165","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/total_escrow/{denom}":{"get":{"tags":["Query"],"summary":"TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.","operationId":"ControllerQuery_TotalEscrowForDenom","parameters":[{"pattern":".+","type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels":{"get":{"tags":["Query"],"summary":"Channels queries all the IBC channels of a chain.","operationId":"ControllerQuery_Channels","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}":{"get":{"tags":["Query"],"summary":"Channel queries an IBC Channel.","operationId":"ControllerQuery_Channel","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state":{"get":{"tags":["Query"],"summary":"ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.","operationId":"ControllerQuery_ChannelClientState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ChannelConsensusState queries for the consensus state for the channel\nassociated with the provided channel identifiers.","operationId":"ControllerQuery_ChannelConsensusState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"revision number of the consensus state","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"revision height of the consensus state","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence":{"get":{"tags":["Query"],"summary":"NextSequenceReceive returns the next receive sequence for a given channel.","operationId":"ControllerQuery_NextSequenceReceive","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceReceiveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSend","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all the packet acknowledgements associated\nwith a channel.","operationId":"ControllerQuery_PacketAcknowledgements","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored packet acknowledgement hash.","operationId":"ControllerQuery_PacketAcknowledgement","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments returns all the packet commitments hashes associated\nwith a channel.","operationId":"ControllerQuery_PacketCommitments","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated\nwith a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcks","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a\nchannel and sequences.","operationId":"ControllerQuery_UnreceivedPackets","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"packet_commitment_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitment","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries if a given packet sequence has been received on the\nqueried chain","operationId":"ControllerQuery_PacketReceipt","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/connections/{connection}/channels":{"get":{"tags":["Query"],"summary":"ConnectionChannels queries all the channels associated with a connection\nend.","operationId":"ControllerQuery_ConnectionChannels","parameters":[{"type":"string","description":"connection unique identifier","name":"connection","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryConnectionChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSendMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all packet acknowledgements associated with a channel.","operationId":"ControllerQuery_PacketAcknowledgementsMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored acknowledgement commitment hash.","operationId":"ControllerQuery_PacketAcknowledgementMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentsMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcksMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedPacketsMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries a stored packet receipt.","operationId":"ControllerQuery_PacketReceiptMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_creator/{client_id}":{"get":{"tags":["Query"],"summary":"ClientCreator queries the creator of a given client.","operationId":"ControllerQuery_ClientCreator","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states":{"get":{"tags":["Query"],"summary":"ClientStates queries all the IBC light clients of a chain.","operationId":"ControllerQuery_ClientStates","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states/{client_id}":{"get":{"tags":["Query"],"summary":"ClientState queries an IBC light client.","operationId":"ControllerQuery_ClientState","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_status/{client_id}":{"get":{"tags":["Query"],"summary":"Status queries the status of an IBC client.","operationId":"ControllerQuery_ClientStatus","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}":{"get":{"tags":["Query"],"summary":"ConsensusStates queries all the consensus state associated with a given\nclient.","operationId":"ControllerQuery_ConsensusStates","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/heights":{"get":{"tags":["Query"],"summary":"ConsensusStateHeights queries the height of every consensus states associated with a given client.","operationId":"ControllerQuery_ConsensusStateHeights","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateHeightsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConsensusState queries a consensus state associated with a client state at\na given height.","operationId":"ControllerQuery_ConsensusState","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision number","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision height","name":"revision_height","in":"path","required":true},{"type":"boolean","description":"latest_height overrides the height field and queries the latest stored\nConsensusState","name":"latest_height","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/params":{"get":{"tags":["Query"],"summary":"ClientParams queries all parameters of the ibc client submodule.","operationId":"ControllerQuery_ClientParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_client_states":{"get":{"tags":["Query"],"summary":"UpgradedClientState queries an Upgraded IBC light client.","operationId":"ControllerQuery_UpgradedClientState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_consensus_states":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries an Upgraded IBC consensus state.","operationId":"ControllerQuery_UpgradedConsensusState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/verify_membership":{"post":{"tags":["Query"],"summary":"VerifyMembership queries an IBC light client for proof verification of a value at a given key path.","operationId":"ControllerQuery_VerifyMembership","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/config/{client_id}":{"get":{"tags":["Query"],"summary":"Config queries the IBC client v2 configuration for a given client.","operationId":"ControllerQuery_Config","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/counterparty_info/{client_id}":{"get":{"tags":["Query"],"summary":"CounterpartyInfo queries an IBC light counter party info.","operationId":"ControllerQuery_CounterpartyInfo","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryCounterpartyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/client_connections/{client_id}":{"get":{"tags":["Query"],"summary":"ClientConnections queries the connection paths associated with a client\nstate.","operationId":"ControllerQuery_ClientConnections","parameters":[{"type":"string","description":"client identifier associated with a connection","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryClientConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections":{"get":{"tags":["Query"],"summary":"Connections queries all the IBC connections of a chain.","operationId":"ControllerQuery_Connections","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"Connection queries an IBC connection end.","operationId":"ControllerQuery_Connection","parameters":[{"type":"string","description":"connection unique identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/client_state":{"get":{"tags":["Query"],"summary":"ConnectionClientState queries the client state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionClientState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConnectionConsensusState queries the consensus state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionConsensusState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/params":{"get":{"tags":["Query"],"summary":"ConnectionParams queries all parameters of the ibc connection submodule.","operationId":"ControllerQuery_ConnectionParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums":{"get":{"tags":["Query"],"summary":"Get all Wasm checksums","operationId":"ControllerQuery_Checksums","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryChecksumsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums/{checksum}/code":{"get":{"tags":["Query"],"summary":"Get Wasm code for given checksum","operationId":"ControllerQuery_Code","parameters":[{"type":"string","description":"checksum is a hex encoded string of the code stored.","name":"checksum","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitAuditReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitAuditReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin12","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin17","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin22","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin33","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ApplySnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestApplySnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/CheckTx":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_CheckTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCheckTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCheckTx"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Commit":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Commit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCommit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Echo":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Echo","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestEcho"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseEcho"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ExtendVote":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ExtendVote","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestExtendVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseExtendVote"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/FinalizeBlock":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_FinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Flush":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Flush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFlush"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFlush"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Info":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Info","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInfo"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInfo"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/InitChain":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_InitChain","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInitChain"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInitChain"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ListSnapshots":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ListSnapshots","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestListSnapshots"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseListSnapshots"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/LoadSnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_LoadSnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestLoadSnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseLoadSnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/OfferSnapshot":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_OfferSnapshot","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestOfferSnapshot"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/PrepareProposal":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_PrepareProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestPrepareProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponsePrepareProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ProcessProposal":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ProcessProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestProcessProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Query":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Query","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestQuery"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseQuery"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/VerifyVoteExtension":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_VerifyVoteExtension","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestVerifyVoteExtension"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.auth.v1beta1.AddressBytesToStringResponse":{"description":"AddressBytesToStringResponse is the response type for AddressString rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_bytes":{"type":"string","format":"byte"}}},"cosmos.auth.v1beta1.BaseAccount":{"description":"BaseAccount defines a base account type. It contains all the necessary fields\nfor basic account functionality. Any custom account type should extend this\ntype for additional functionality (e.g. vesting).","type":"object","properties":{"account_number":{"type":"string","format":"uint64"},"address":{"type":"string"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"sequence":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.Bech32PrefixResponse":{"description":"Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/auth parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.auth.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.auth.v1beta1.Params":{"description":"Params defines the parameters for the auth module.","type":"object","properties":{"max_memo_characters":{"type":"string","format":"uint64"},"sig_verify_cost_ed25519":{"type":"string","format":"uint64"},"sig_verify_cost_secp256k1":{"type":"string","format":"uint64"},"tx_sig_limit":{"type":"string","format":"uint64"},"tx_size_cost_per_byte":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.QueryAccountAddressByIDResponse":{"description":"Since: cosmos-sdk 0.46.2","type":"object","title":"QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method","properties":{"account_address":{"type":"string"}}},"cosmos.auth.v1beta1.QueryAccountInfoResponse":{"description":"QueryAccountInfoResponse is the Query/AccountInfo response type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"info":{"description":"info is the account info which is represented by BaseAccount.","$ref":"#/definitions/cosmos.auth.v1beta1.BaseAccount"}}},"cosmos.auth.v1beta1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"account":{"description":"account defines the account of the corresponding address.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryAccountsResponse":{"description":"QueryAccountsResponse is the response type for the Query/Accounts RPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"accounts":{"type":"array","title":"accounts are the existing accounts","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.auth.v1beta1.QueryModuleAccountByNameResponse":{"description":"QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method.","type":"object","properties":{"account":{"$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryModuleAccountsResponse":{"description":"QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.auth.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.authz.v1beta1.Grant":{"description":"Grant gives permissions to execute\nthe provide method with expiration time.","type":"object","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time","title":"time when the grant will expire and will be pruned. If null, then the grant\ndoesn't have a time expiration (other conditions in `authorization`\nmay apply to invalidate the grant)"}}},"cosmos.authz.v1beta1.GrantAuthorization":{"type":"object","title":"GrantAuthorization extends a grant with both the addresses of the grantee and granter.\nIt is used in genesis.proto and query.proto","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgExec":{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","type":"object","properties":{"grantee":{"type":"string"},"msgs":{"description":"Execute Msg.\nThe x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg))\ntriple and validate it.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.authz.v1beta1.MsgExecResponse":{"description":"MsgExecResponse defines the Msg/MsgExecResponse response type.","type":"object","properties":{"results":{"type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.authz.v1beta1.MsgGrant":{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","type":"object","properties":{"grant":{"$ref":"#/definitions/cosmos.authz.v1beta1.Grant"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgGrantResponse":{"description":"MsgGrantResponse defines the Msg/MsgGrant response type.","type":"object"},"cosmos.authz.v1beta1.MsgRevoke":{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","type":"object","properties":{"grantee":{"type":"string"},"granter":{"type":"string"},"msg_type_url":{"type":"string"}}},"cosmos.authz.v1beta1.MsgRevokeResponse":{"description":"MsgRevokeResponse defines the Msg/MsgRevokeResponse response type.","type":"object"},"cosmos.authz.v1beta1.QueryGranteeGrantsResponse":{"description":"QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted to the grantee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGranterGrantsResponse":{"description":"QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGrantsResponse":{"description":"QueryGrantsResponse is the response type for the Query/Authorizations RPC method.","type":"object","properties":{"grants":{"description":"authorizations is a list of grants granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.autocli.v1.AppOptionsRequest":{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","type":"object"},"cosmos.autocli.v1.AppOptionsResponse":{"description":"AppOptionsResponse is the RemoteInfoService/AppOptions response type.","type":"object","properties":{"module_options":{"description":"module_options is a map of module name to autocli module options.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ModuleOptions"}}}},"cosmos.autocli.v1.FlagOptions":{"description":"FlagOptions are options for flags generated from rpc request fields.\nBy default, all request fields are configured as flags based on the\nkebab-case name of the field. Fields can be turned into positional arguments\ninstead by using RpcCommandOptions.positional_args.","type":"object","properties":{"default_value":{"description":"default_value is the default value as text.","type":"string"},"deprecated":{"description":"deprecated is the usage text to show if this flag is deprecated.","type":"string"},"hidden":{"type":"boolean","title":"hidden hides the flag from help/usage text"},"name":{"description":"name is an alternate name to use for the field flag.","type":"string"},"shorthand":{"description":"shorthand is a one-letter abbreviated flag.","type":"string"},"shorthand_deprecated":{"description":"shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated.","type":"string"},"usage":{"description":"usage is the help message.","type":"string"}}},"cosmos.autocli.v1.ModuleOptions":{"description":"ModuleOptions describes the CLI options for a Cosmos SDK module.","type":"object","properties":{"query":{"description":"query describes the queries commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"},"tx":{"description":"tx describes the tx commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}},"cosmos.autocli.v1.PositionalArgDescriptor":{"description":"PositionalArgDescriptor describes a positional argument.","type":"object","properties":{"proto_field":{"description":"proto_field specifies the proto field to use as the positional arg. Any\nfields used as positional args will not have a flag generated.","type":"string"},"varargs":{"description":"varargs makes a positional parameter a varargs parameter. This can only be\napplied to last positional parameter and the proto_field must a repeated\nfield.","type":"boolean"}}},"cosmos.autocli.v1.RpcCommandOptions":{"description":"RpcCommandOptions specifies options for commands generated from protobuf\nrpc methods.","type":"object","properties":{"alias":{"description":"alias is an array of aliases that can be used instead of the first word in Use.","type":"array","items":{"type":"string"}},"deprecated":{"description":"deprecated defines, if this command is deprecated and should print this string when used.","type":"string"},"example":{"description":"example is examples of how to use the command.","type":"string"},"flag_options":{"description":"flag_options are options for flags generated from rpc request fields.\nBy default all request fields are configured as flags. They can\nalso be configured as positional args instead using positional_args.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.FlagOptions"}},"long":{"description":"long is the long message shown in the 'help \u003cthis-command\u003e' output.","type":"string"},"positional_args":{"description":"positional_args specifies positional arguments for the command.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.PositionalArgDescriptor"}},"rpc_method":{"description":"rpc_method is short name of the protobuf rpc method that this command is\ngenerated from.","type":"string"},"short":{"description":"short is the short description shown in the 'help' output.","type":"string"},"skip":{"description":"skip specifies whether to skip this rpc method when generating commands.","type":"boolean"},"suggest_for":{"description":"suggest_for is an array of command names for which this command will be suggested -\nsimilar to aliases but only suggests.","type":"array","items":{"type":"string"}},"use":{"description":"use is the one-line usage method. It also allows specifying an alternate\nname for the command as the first word of the usage text.\n\nBy default the name of an rpc command is the kebab-case short name of the\nrpc method.","type":"string"},"version":{"description":"version defines the version for this command. If this value is non-empty and the command does not\ndefine a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\nwill print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\ncommand does not define one.","type":"string"}}},"cosmos.autocli.v1.ServiceCommandDescriptor":{"description":"ServiceCommandDescriptor describes a CLI command based on a protobuf service.","type":"object","properties":{"rpc_command_options":{"description":"rpc_command_options are options for commands generated from rpc methods.\nIf no options are specified for a given rpc method on the service, a\ncommand will be generated for that method with the default options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.RpcCommandOptions"}},"service":{"description":"service is the fully qualified name of the protobuf service to build\nthe command from. It can be left empty if sub_commands are used instead\nwhich may be the case if a module provides multiple tx and/or query services.","type":"string"},"sub_commands":{"description":"sub_commands is a map of optional sub-commands for this command based on\ndifferent protobuf services. The map key is used as the name of the\nsub-command.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}}},"cosmos.bank.v1beta1.DenomOwner":{"description":"DenomOwner defines structure representing an account that owns or holds a\nparticular denominated token. It contains the account address and account\nbalance of the denominated token.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address":{"description":"address defines the address that owns a particular denomination.","type":"string"},"balance":{"description":"balance is the balance of the denominated coin for an account.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.DenomUnit":{"description":"DenomUnit represents a struct that describes a given\ndenomination unit of the basic token.","type":"object","properties":{"aliases":{"type":"array","title":"aliases is a list of string aliases for the given denom","items":{"type":"string"}},"denom":{"description":"denom represents the string name of the given denom unit (e.g uatom).","type":"string"},"exponent":{"description":"exponent represents power of 10 exponent that one must\nraise the base_denom to in order to equal the given DenomUnit's denom\n1 denom = 10^exponent base_denom\n(e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\nexponent = 6, thus: 1 atom = 10^6 uatom).","type":"integer","format":"int64"}}},"cosmos.bank.v1beta1.Input":{"description":"Input models transaction input.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Metadata":{"description":"Metadata represents a struct that describes\na basic token.","type":"object","properties":{"base":{"description":"base represents the base denom (should be the DenomUnit with exponent = 0).","type":"string"},"denom_units":{"type":"array","title":"denom_units represents the list of DenomUnit's for a given coin","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomUnit"}},"description":{"type":"string"},"display":{"description":"display indicates the suggested denom that should be\ndisplayed in clients.","type":"string"},"name":{"description":"Since: cosmos-sdk 0.43","type":"string","title":"name defines the name of the token (eg: Cosmos Atom)"},"symbol":{"description":"symbol is the token symbol usually shown on exchanges (eg: ATOM). This can\nbe the same as the display.\n\nSince: cosmos-sdk 0.43","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"},"uri_hash":{"description":"URIHash is a sha256 hash of a document pointed by URI. It's used to verify that\nthe document didn't change. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"}}},"cosmos.bank.v1beta1.MsgMultiSend":{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","type":"object","properties":{"inputs":{"description":"Inputs, despite being `repeated`, only allows one sender input. This is\nchecked in MsgMultiSend's ValidateBasic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Input"}},"outputs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Output"}}}},"cosmos.bank.v1beta1.MsgMultiSendResponse":{"description":"MsgMultiSendResponse defines the Msg/MultiSend response type.","type":"object"},"cosmos.bank.v1beta1.MsgSend":{"description":"MsgSend represents a message to send coins from one account to another.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.bank.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.bank.v1beta1.MsgSetSendEnabled":{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module.","type":"string"},"send_enabled":{"description":"send_enabled is the list of entries to add or update.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}},"use_default_for":{"description":"use_default_for is a list of denoms that should use the params.default_send_enabled value.\nDenoms listed here will have their SendEnabled entries deleted.\nIf a denom is included that doesn't have a SendEnabled entry,\nit will be ignored.","type":"array","items":{"type":"string"}}}},"cosmos.bank.v1beta1.MsgSetSendEnabledResponse":{"description":"MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/bank parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.Output":{"description":"Output models transaction outputs.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Params":{"description":"Params defines the parameters for the bank module.","type":"object","properties":{"default_send_enabled":{"type":"boolean"},"send_enabled":{"description":"Deprecated: Use of SendEnabled in params is deprecated.\nFor genesis, use the newly added send_enabled field in the genesis object.\nStorage, lookup, and manipulation of this information is now in the keeper.\n\nAs of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QueryAllBalancesResponse":{"description":"QueryAllBalancesResponse is the response type for the Query/AllBalances RPC\nmethod.","type":"object","properties":{"balances":{"description":"balances is the balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse":{"description":"QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC\nmethod. Identical with QueryDenomMetadataResponse but receives denom as query string in request.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomMetadataResponse":{"description":"QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC\nmethod.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse":{"description":"QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query.\n\nSince: cosmos-sdk 0.50.3","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomOwnersResponse":{"description":"QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomsMetadataResponse":{"description":"QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC\nmethod.","type":"object","properties":{"metadatas":{"description":"metadata provides the client information for all the registered tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/bank parameters.","type":"object","properties":{"params":{"description":"params provides the parameters of the bank module.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.QuerySendEnabledResponse":{"description":"QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response. This field is only\npopulated if the denoms field in the request is empty.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"send_enabled":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse":{"description":"QuerySpendableBalanceByDenomResponse defines the gRPC response structure for\nquerying an account's spendable balance for a specific denom.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QuerySpendableBalancesResponse":{"description":"QuerySpendableBalancesResponse defines the gRPC response structure for querying\nan account's spendable balances.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"balances":{"description":"balances is the spendable balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QuerySupplyOfResponse":{"description":"QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method.","type":"object","properties":{"amount":{"description":"amount is the supply of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryTotalSupplyResponse":{"type":"object","title":"QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC\nmethod","properties":{"pagination":{"description":"pagination defines the pagination in the response.\n\nSince: cosmos-sdk 0.43","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supply":{"type":"array","title":"supply is the supply of the coins","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.SendEnabled":{"description":"SendEnabled maps coin denom to a send_enabled status (whether a denom is\nsendable).","type":"object","properties":{"denom":{"type":"string"},"enabled":{"type":"boolean"}}},"cosmos.base.abci.v1beta1.ABCIMessageLog":{"description":"ABCIMessageLog defines a structure containing an indexed tx ABCI message log.","type":"object","properties":{"events":{"description":"Events contains a slice of Event objects that were emitted during some\nexecution.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.StringEvent"}},"log":{"type":"string"},"msg_index":{"type":"integer","format":"int64"}}},"cosmos.base.abci.v1beta1.Attribute":{"description":"Attribute defines an attribute wrapper where the key and value are\nstrings instead of raw bytes.","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"cosmos.base.abci.v1beta1.GasInfo":{"description":"GasInfo defines tx execution gas context.","type":"object","properties":{"gas_used":{"description":"GasUsed is the amount of gas actually consumed.","type":"string","format":"uint64"},"gas_wanted":{"description":"GasWanted is the maximum units of work we allow this tx to perform.","type":"string","format":"uint64"}}},"cosmos.base.abci.v1beta1.Result":{"description":"Result is the union of ResponseFormat and ResponseCheckTx.","type":"object","properties":{"data":{"description":"Data is any data returned from message or handler execution. It MUST be\nlength prefixed in order to separate data from multiple message executions.\nDeprecated. This field is still populated, but prefer msg_response instead\nbecause it also contains the Msg response typeURL.","type":"string","format":"byte"},"events":{"description":"Events contains a slice of Event objects that were emitted during message\nor handler execution.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"log":{"description":"Log contains the log information from message or handler execution.","type":"string"},"msg_responses":{"description":"msg_responses contains the Msg handler responses type packed in Anys.\n\nSince: cosmos-sdk 0.46","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.base.abci.v1beta1.StringEvent":{"description":"StringEvent defines en Event object wrapper where all the attributes\ncontain key/value pairs that are strings instead of raw bytes.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.Attribute"}},"type":{"type":"string"}}},"cosmos.base.abci.v1beta1.TxResponse":{"description":"TxResponse defines a structure containing relevant tx data and metadata. The\ntags are stringified and the log is JSON decoded.","type":"object","properties":{"code":{"description":"Response code.","type":"integer","format":"int64"},"codespace":{"type":"string","title":"Namespace for the Code"},"data":{"description":"Result bytes, if any.","type":"string"},"events":{"description":"Events defines all the events emitted by processing a transaction. Note,\nthese events include those emitted by processing all the messages and those\nemitted from the ante. Whereas Logs contains the events, with\nadditional metadata, emitted only by processing the messages.\n\nSince: cosmos-sdk 0.42.11, 0.44.5, 0.45","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"description":"Amount of gas consumed by transaction.","type":"string","format":"int64"},"gas_wanted":{"description":"Amount of gas requested for transaction.","type":"string","format":"int64"},"height":{"type":"string","format":"int64","title":"The block height"},"info":{"description":"Additional information. May be non-deterministic.","type":"string"},"logs":{"description":"The output of the application's logger (typed). May be non-deterministic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.ABCIMessageLog"}},"raw_log":{"description":"The output of the application's logger (raw string). May be\nnon-deterministic.","type":"string"},"timestamp":{"description":"Time of the previous block. For heights \u003e 1, it's the weighted median of\nthe timestamps of the valid votes in the block.LastCommit. For height == 1,\nit's genesis time.","type":"string"},"tx":{"description":"The request transaction bytes.","$ref":"#/definitions/google.protobuf.Any"},"txhash":{"description":"The transaction hash.","type":"string"}}},"cosmos.base.node.v1beta1.ConfigResponse":{"description":"ConfigResponse defines the response structure for the Config gRPC query.","type":"object","properties":{"halt_height":{"type":"string","format":"uint64"},"minimum_gas_price":{"type":"string"},"pruning_interval":{"type":"string"},"pruning_keep_recent":{"type":"string"}}},"cosmos.base.node.v1beta1.StatusResponse":{"description":"StateResponse defines the response structure for the status of a node.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"app hash of the current block"},"earliest_store_height":{"type":"string","format":"uint64","title":"earliest block height available in the store"},"height":{"type":"string","format":"uint64","title":"current block height"},"timestamp":{"type":"string","format":"date-time","title":"block height timestamp"},"validator_hash":{"type":"string","format":"byte","title":"validator hash provided by the consensus header"}}},"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.reflection.v1beta1.ListAllInterfacesResponse":{"description":"ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC.","type":"object","properties":{"interface_names":{"description":"interface_names is an array of all the registered interfaces.","type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v1beta1.ListImplementationsResponse":{"description":"ListImplementationsResponse is the response type of the ListImplementations\nRPC.","type":"object","properties":{"implementation_message_names":{"type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v2alpha1.AuthnDescriptor":{"type":"object","title":"AuthnDescriptor provides information on how to sign transactions without relying\non the online RPCs GetTxMetadata and CombineUnsignedTxAndSignatures","properties":{"sign_modes":{"type":"array","title":"sign_modes defines the supported signature algorithm","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.SigningModeDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ChainDescriptor":{"type":"object","title":"ChainDescriptor describes chain information of the application","properties":{"id":{"type":"string","title":"id is the chain id"}}},"cosmos.base.reflection.v2alpha1.CodecDescriptor":{"type":"object","title":"CodecDescriptor describes the registered interfaces and provides metadata information on the types","properties":{"interfaces":{"type":"array","title":"interfaces is a list of the registerted interfaces descriptors","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ConfigurationDescriptor":{"type":"object","title":"ConfigurationDescriptor contains metadata information on the sdk.Config","properties":{"bech32_account_address_prefix":{"type":"string","title":"bech32_account_address_prefix is the account address prefix"}}},"cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse":{"type":"object","title":"GetAuthnDescriptorResponse is the response returned by the GetAuthnDescriptor RPC","properties":{"authn":{"title":"authn describes how to authenticate to the application when sending transactions","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.AuthnDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse":{"type":"object","title":"GetChainDescriptorResponse is the response returned by the GetChainDescriptor RPC","properties":{"chain":{"title":"chain describes application chain information","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ChainDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse":{"type":"object","title":"GetCodecDescriptorResponse is the response returned by the GetCodecDescriptor RPC","properties":{"codec":{"title":"codec describes the application codec such as registered interfaces and implementations","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.CodecDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse":{"type":"object","title":"GetConfigurationDescriptorResponse is the response returned by the GetConfigurationDescriptor RPC","properties":{"config":{"title":"config describes the application's sdk.Config","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ConfigurationDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse":{"type":"object","title":"GetQueryServicesDescriptorResponse is the response returned by the GetQueryServicesDescriptor RPC","properties":{"queries":{"title":"queries provides information on the available queryable services","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServicesDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse":{"type":"object","title":"GetTxDescriptorResponse is the response returned by the GetTxDescriptor RPC","properties":{"tx":{"title":"tx provides information on msgs that can be forwarded to the application\nalongside the accepted transaction protobuf type","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.TxDescriptor"}}},"cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor":{"type":"object","title":"InterfaceAcceptingMessageDescriptor describes a protobuf message which contains\nan interface represented as a google.protobuf.Any","properties":{"field_descriptor_names":{"type":"array","title":"field_descriptor_names is a list of the protobuf name (not fullname) of the field\nwhich contains the interface as google.protobuf.Any (the interface is the same, but\nit can be in multiple fields of the same proto message)","items":{"type":"string"}},"fullname":{"type":"string","title":"fullname is the protobuf fullname of the type containing the interface"}}},"cosmos.base.reflection.v2alpha1.InterfaceDescriptor":{"type":"object","title":"InterfaceDescriptor describes the implementation of an interface","properties":{"fullname":{"type":"string","title":"fullname is the name of the interface"},"interface_accepting_messages":{"type":"array","title":"interface_accepting_messages contains information regarding the proto messages which contain the interface as\ngoogle.protobuf.Any field","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor"}},"interface_implementers":{"type":"array","title":"interface_implementers is a list of the descriptors of the interface implementers","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor"}}}},"cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor":{"type":"object","title":"InterfaceImplementerDescriptor describes an interface implementer","properties":{"fullname":{"type":"string","title":"fullname is the protobuf queryable name of the interface implementer"},"type_url":{"type":"string","title":"type_url defines the type URL used when marshalling the type as any\nthis is required so we can provide type safe google.protobuf.Any marshalling and\nunmarshalling, making sure that we don't accept just 'any' type\nin our interface fields"}}},"cosmos.base.reflection.v2alpha1.MsgDescriptor":{"type":"object","title":"MsgDescriptor describes a cosmos-sdk message that can be delivered with a transaction","properties":{"msg_type_url":{"description":"msg_type_url contains the TypeURL of a sdk.Msg.","type":"string"}}},"cosmos.base.reflection.v2alpha1.QueryMethodDescriptor":{"type":"object","title":"QueryMethodDescriptor describes a queryable method of a query service\nno other info is provided beside method name and tendermint queryable path\nbecause it would be redundant with the grpc reflection service","properties":{"full_query_path":{"type":"string","title":"full_query_path is the path that can be used to query\nthis method via tendermint abci.Query"},"name":{"type":"string","title":"name is the protobuf name (not fullname) of the method"}}},"cosmos.base.reflection.v2alpha1.QueryServiceDescriptor":{"type":"object","title":"QueryServiceDescriptor describes a cosmos-sdk queryable service","properties":{"fullname":{"type":"string","title":"fullname is the protobuf fullname of the service descriptor"},"is_module":{"type":"boolean","title":"is_module describes if this service is actually exposed by an application's module"},"methods":{"type":"array","title":"methods provides a list of query service methods","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryMethodDescriptor"}}}},"cosmos.base.reflection.v2alpha1.QueryServicesDescriptor":{"type":"object","title":"QueryServicesDescriptor contains the list of cosmos-sdk queriable services","properties":{"query_services":{"type":"array","title":"query_services is a list of cosmos-sdk QueryServiceDescriptor","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServiceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.SigningModeDescriptor":{"type":"object","title":"SigningModeDescriptor provides information on a signing flow of the application\nNOTE(fdymylja): here we could go as far as providing an entire flow on how\nto sign a message given a SigningModeDescriptor, but it's better to think about\nthis another time","properties":{"authn_info_provider_method_fullname":{"type":"string","title":"authn_info_provider_method_fullname defines the fullname of the method to call to get\nthe metadata required to authenticate using the provided sign_modes"},"name":{"type":"string","title":"name defines the unique name of the signing mode"},"number":{"type":"integer","format":"int32","title":"number is the unique int32 identifier for the sign_mode enum"}}},"cosmos.base.reflection.v2alpha1.TxDescriptor":{"type":"object","title":"TxDescriptor describes the accepted transaction type","properties":{"fullname":{"description":"fullname is the protobuf fullname of the raw transaction type (for instance the tx.Tx type)\nit is not meant to support polymorphism of transaction types, it is supposed to be used by\nreflection clients to understand if they can handle a specific transaction type in an application.","type":"string"},"msgs":{"type":"array","title":"msgs lists the accepted application messages (sdk.Msg)","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.MsgDescriptor"}}}},"cosmos.base.tendermint.v1beta1.ABCIQueryResponse":{"description":"ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query.\n\nNote: This type is a duplicate of the ResponseQuery proto type defined in\nTendermint.","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"type":"string","title":"nondeterministic"},"proof_ops":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOps"},"value":{"type":"string","format":"byte"}}},"cosmos.base.tendermint.v1beta1.Block":{"description":"Block is tendermint type Block, with the Header proposer address\nfield converted to bech32 string.","type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse":{"description":"GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestBlockResponse":{"description":"GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse":{"description":"GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.GetNodeInfoResponse":{"description":"GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method.","type":"object","properties":{"application_version":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.VersionInfo"},"default_node_info":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfo"}}},"cosmos.base.tendermint.v1beta1.GetSyncingResponse":{"description":"GetSyncingResponse is the response type for the Query/GetSyncing RPC method.","type":"object","properties":{"syncing":{"type":"boolean"}}},"cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse":{"description":"GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.Header":{"description":"Header defines the structure of a Tendermint block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"description":"proposer_address is the original block proposer address, formatted as a Bech32 string.\nIn Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\nfor better UX.\n\noriginal proposer of the block","type":"string"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"cosmos.base.tendermint.v1beta1.Module":{"type":"object","title":"Module is the type for VersionInfo","properties":{"path":{"type":"string","title":"module path"},"sum":{"type":"string","title":"checksum"},"version":{"type":"string","title":"module version"}}},"cosmos.base.tendermint.v1beta1.ProofOp":{"description":"ProofOp defines an operation used for calculating Merkle root. The data could\nbe arbitrary format, providing necessary data for example neighbouring node\nhash.\n\nNote: This type is a duplicate of the ProofOp proto type defined in Tendermint.","type":"object","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"cosmos.base.tendermint.v1beta1.ProofOps":{"description":"ProofOps is Merkle proof defined by the list of ProofOps.\n\nNote: This type is a duplicate of the ProofOps proto type defined in Tendermint.","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOp"}}}},"cosmos.base.tendermint.v1beta1.Validator":{"description":"Validator is the type for the validator-set.","type":"object","properties":{"address":{"type":"string"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"voting_power":{"type":"string","format":"int64"}}},"cosmos.base.tendermint.v1beta1.VersionInfo":{"description":"VersionInfo is the type for the GetNodeInfoResponse message.","type":"object","properties":{"app_name":{"type":"string"},"build_deps":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Module"}},"build_tags":{"type":"string"},"cosmos_sdk_version":{"type":"string","title":"Since: cosmos-sdk 0.43"},"git_commit":{"type":"string"},"go_version":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.base.v1beta1.DecCoin":{"description":"DecCoin defines a token with a denomination and a decimal amount.\n\nNOTE: The amount field is an Dec which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.circuit.v1.AccountResponse":{"description":"AccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"permission":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.AccountsResponse":{"description":"AccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.circuit.v1.GenesisAccountPermissions"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.circuit.v1.DisabledListResponse":{"description":"DisabledListResponse is the response type for the Query/DisabledList RPC method.","type":"object","properties":{"disabled_list":{"type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.GenesisAccountPermissions":{"type":"object","title":"GenesisAccountPermissions is the account permissions for the circuit breaker in genesis","properties":{"address":{"type":"string"},"permissions":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreaker":{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","type":"object","properties":{"grantee":{"description":"grantee is the account authorized with the provided permissions.","type":"string"},"granter":{"description":"granter is the granter of the circuit breaker permissions and must have\nLEVEL_SUPER_ADMIN.","type":"string"},"permissions":{"description":"permissions are the circuit breaker permissions that the grantee receives.\nThese will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can\nbe specified to revoke all permissions.","$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse":{"description":"MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgResetCircuitBreaker":{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip or reset the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of Msg type URLs to resume processing. If\nit is left empty all Msg processing for type URLs that the account is\nauthorized to trip will resume.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgResetCircuitBreakerResponse":{"description":"MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgTripCircuitBreaker":{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of type URLs to immediately stop processing.\nIF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY.\nThis value is validated against the authority's permissions and if the\nauthority does not have permissions to trip the specified msg type URLs\n(or all URLs), the operation will fail.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgTripCircuitBreakerResponse":{"description":"MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.Permissions":{"description":"Permissions are the permissions that an account has to trip\nor reset the circuit breaker.","type":"object","properties":{"level":{"description":"level is the level of permissions granted to this account.","$ref":"#/definitions/cosmos.circuit.v1.Permissions.Level"},"limit_type_urls":{"description":"limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type\nURLs that the account can trip. It is an error to use limit_type_urls with\na level other than LEVEL_SOME_MSGS.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.Permissions.Level":{"description":"Level is the permission level.\n\n - LEVEL_NONE_UNSPECIFIED: LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit\nbreaker permissions.\n - LEVEL_SOME_MSGS: LEVEL_SOME_MSGS indicates that the account will have permission to\ntrip or reset the circuit breaker for some Msg type URLs. If this level\nis chosen, a non-empty list of Msg type URLs must be provided in\nlimit_type_urls.\n - LEVEL_ALL_MSGS: LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit\nbreaker for Msg's of all type URLs.\n - LEVEL_SUPER_ADMIN: LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker\nactions and can grant permissions to other accounts.","type":"string","default":"LEVEL_NONE_UNSPECIFIED","enum":["LEVEL_NONE_UNSPECIFIED","LEVEL_SOME_MSGS","LEVEL_ALL_MSGS","LEVEL_SUPER_ADMIN"]},"cosmos.consensus.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"abci":{"title":"Since: cosmos-sdk 0.50","$ref":"#/definitions/tendermint.types.ABCIParams"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"block":{"description":"params defines the x/consensus parameters to update.\nVersionsParams is not included in this Msg because it is tracked\nsepararately in x/upgrade.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"}}},"cosmos.consensus.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.consensus.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/consensus parameters.","type":"object","properties":{"params":{"description":"params are the tendermint consensus params stored in the consensus module.\nPlease note that `params.version` is not populated in this response, it is\ntracked separately in the x/upgrade module.","$ref":"#/definitions/tendermint.types.ConsensusParams"}}},"cosmos.crisis.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"constant_fee":{"description":"constant_fee defines the x/crisis parameter.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.crisis.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.crisis.v1beta1.MsgVerifyInvariant":{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","type":"object","properties":{"invariant_module_name":{"description":"name of the invariant module.","type":"string"},"invariant_route":{"description":"invariant_route is the msg's invariant route.","type":"string"},"sender":{"description":"sender is the account address of private key to send coins to fee collector account.","type":"string"}}},"cosmos.crisis.v1beta1.MsgVerifyInvariantResponse":{"description":"MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type.","type":"object"},"cosmos.crypto.multisig.v1beta1.CompactBitArray":{"description":"CompactBitArray is an implementation of a space efficient bit array.\nThis is used to ensure that the encoded data takes up a minimal amount of\nspace after proto encoding.\nThis is not thread safe, and is not intended for concurrent usage.","type":"object","properties":{"elems":{"type":"string","format":"byte"},"extra_bits_stored":{"type":"integer","format":"int64"}}},"cosmos.distribution.v1beta1.DelegationDelegatorReward":{"description":"DelegationDelegatorReward represents the properties\nof a delegator's delegation reward.","type":"object","properties":{"reward":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse":{"description":"MsgDepositValidatorRewardsPoolResponse defines the response to executing a\nMsgDepositValidatorRewardsPool message.\n\nSince: cosmos-sdk 0.50","type":"object"},"cosmos.distribution.v1beta1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.distribution.v1beta1.MsgSetWithdrawAddress":{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","type":"object","properties":{"delegator_address":{"type":"string"},"withdraw_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse":{"description":"MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response\ntype.","type":"object"},"cosmos.distribution.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/distribution parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward":{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse":{"description":"MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward\nresponse type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission":{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","type":"object","properties":{"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse":{"description":"MsgWithdrawValidatorCommissionResponse defines the\nMsg/WithdrawValidatorCommission response type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.Params":{"description":"Params defines the set of params for the distribution module.","type":"object","properties":{"base_proposer_reward":{"description":"Deprecated: The base_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"bonus_proposer_reward":{"description":"Deprecated: The bonus_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"community_tax":{"type":"string"},"withdraw_addr_enabled":{"type":"boolean"}}},"cosmos.distribution.v1beta1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationRewardsResponse":{"description":"QueryDelegationRewardsResponse is the response type for the\nQuery/DelegationRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines the rewards accrued by a delegation.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse":{"description":"QueryDelegationTotalRewardsResponse is the response type for the\nQuery/DelegationTotalRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines all the rewards accrued by a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.DelegationDelegatorReward"}},"total":{"description":"total defines the sum of all the rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is the response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"validators":{"description":"validators defines the validators a delegator is delegating for.","type":"array","items":{"type":"string"}}}},"cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse":{"description":"QueryDelegatorWithdrawAddressResponse is the response type for the\nQuery/DelegatorWithdrawAddress RPC method.","type":"object","properties":{"withdraw_address":{"description":"withdraw_address defines the delegator address to query for.","type":"string"}}},"cosmos.distribution.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.QueryValidatorCommissionResponse":{"type":"object","title":"QueryValidatorCommissionResponse is the response type for the\nQuery/ValidatorCommission RPC method","properties":{"commission":{"description":"commission defines the commission the validator received.","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorAccumulatedCommission"}}},"cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse":{"description":"QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method.","type":"object","properties":{"commission":{"description":"commission defines the commission the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"operator_address":{"description":"operator_address defines the validator operator address.","type":"string"},"self_bond_rewards":{"description":"self_bond_rewards defines the self delegations rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse":{"description":"QueryValidatorOutstandingRewardsResponse is the response type for the\nQuery/ValidatorOutstandingRewards RPC method.","type":"object","properties":{"rewards":{"$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorOutstandingRewards"}}},"cosmos.distribution.v1beta1.QueryValidatorSlashesResponse":{"description":"QueryValidatorSlashesResponse is the response type for the\nQuery/ValidatorSlashes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"slashes":{"description":"slashes defines the slashes the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorSlashEvent"}}}},"cosmos.distribution.v1beta1.ValidatorAccumulatedCommission":{"description":"ValidatorAccumulatedCommission represents accumulated commission\nfor a validator kept as a running counter, can be withdrawn at any time.","type":"object","properties":{"commission":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorOutstandingRewards":{"description":"ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\nfor a validator inexpensive to track, allows simple sanity checks.","type":"object","properties":{"rewards":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorSlashEvent":{"description":"ValidatorSlashEvent represents a validator slash event.\nHeight is implicit within the store key.\nThis is needed to calculate appropriate amount of staking tokens\nfor delegations which are withdrawn after a slash has occurred.","type":"object","properties":{"fraction":{"type":"string"},"validator_period":{"type":"string","format":"uint64"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidence":{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","type":"object","properties":{"evidence":{"description":"evidence defines the evidence of misbehavior.","$ref":"#/definitions/google.protobuf.Any"},"submitter":{"description":"submitter is the signer account address of evidence.","type":"string"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse":{"description":"MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.","type":"object","properties":{"hash":{"description":"hash defines the hash of the evidence.","type":"string","format":"byte"}}},"cosmos.evidence.v1beta1.QueryAllEvidenceResponse":{"description":"QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC\nmethod.","type":"object","properties":{"evidence":{"description":"evidence returns all evidences.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.evidence.v1beta1.QueryEvidenceResponse":{"description":"QueryEvidenceResponse is the response type for the Query/Evidence RPC method.","type":"object","properties":{"evidence":{"description":"evidence returns the requested evidence.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.feegrant.v1beta1.Grant":{"type":"object","title":"Grant is stored in the KVStore to record a grant with full context","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowance":{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","type":"object","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse":{"description":"MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgPruneAllowances":{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","type":"object","properties":{"pruner":{"description":"pruner is the address of the user pruning expired allowances.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse":{"description":"MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type.\n\nSince cosmos-sdk 0.50","type":"object"},"cosmos.feegrant.v1beta1.MsgRevokeAllowance":{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","type":"object","properties":{"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse":{"description":"MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.QueryAllowanceResponse":{"description":"QueryAllowanceResponse is the response type for the Query/Allowance RPC method.","type":"object","properties":{"allowance":{"description":"allowance is a allowance granted for grantee by granter.","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}}},"cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse":{"description":"QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"allowances":{"description":"allowances that have been issued by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.feegrant.v1beta1.QueryAllowancesResponse":{"description":"QueryAllowancesResponse is the response type for the Query/Allowances RPC method.","type":"object","properties":{"allowances":{"description":"allowances are allowance's granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1.MsgCancelProposal":{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1.MsgCancelProposalResponse":{"description":"MsgCancelProposalResponse defines the response structure for executing a\nMsgCancelProposal message.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"canceled_height":{"description":"canceled_height defines the block height at which the proposal is canceled.","type":"string","format":"uint64"},"canceled_time":{"description":"canceled_time is the time when proposal is canceled.","type":"string","format":"date-time"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1.MsgExecLegacyContent":{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","type":"object","properties":{"authority":{"description":"authority must be the gov module address.","type":"string"},"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.gov.v1.MsgExecLegacyContentResponse":{"description":"MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type.","type":"object"},"cosmos.gov.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited or not"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"messages":{"description":"messages are the arbitrary messages to be executed if proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.gov.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/gov parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.gov.v1.Params"}}},"cosmos.gov.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.gov.v1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the Vote.","type":"string"},"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the VoteWeighted.","type":"string"},"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1.Params":{"description":"Params defines the parameters for the x/gov module.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"burn_proposal_deposit_prevote":{"type":"boolean","title":"burn deposits if the proposal does not enter voting period"},"burn_vote_quorum":{"type":"boolean","title":"burn deposits if a proposal does not meet quorum"},"burn_vote_veto":{"type":"boolean","title":"burn deposits if quorum with vote type no_veto is met"},"expedited_min_deposit":{"description":"Minimum expedited deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"expedited_threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.67.\n\nSince: cosmos-sdk 0.50","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.\n\nSince: cosmos-sdk 0.50","type":"string"},"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"min_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value minimum that must be met when making a deposit.\nDefault value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be\nrequired.\n\nSince: cosmos-sdk 0.50","type":"string"},"min_initial_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value that must be paid at proposal submission.","type":"string"},"proposal_cancel_dest":{"description":"The address which will receive (proposal_cancel_ratio * deposit) proposal deposits.\nIf empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned.\n\nSince: cosmos-sdk 0.50","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.\n\nSince: cosmos-sdk 0.50","type":"string"},"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\n considered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\n vetoed. Default value: 1/3.","type":"string"},"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"description":"Since: cosmos-sdk 0.50","type":"string","title":"failed_reason defines the reason why the proposal failed"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"},"id":{"description":"id defines the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages are the arbitrary messages to be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/gov#proposal-3"},"proposer":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"proposer is the address of the proposal sumbitter"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1.QueryConstitutionResponse":{"type":"object","title":"QueryConstitutionResponse is the response type for the Query/Constitution RPC method","properties":{"constitution":{"type":"string"}}},"cosmos.gov.v1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1.Deposit"}}},"cosmos.gov.v1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"Deprecated: Prefer to use `params` instead.\ndeposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1.DepositParams"},"params":{"description":"params defines all the paramaters of x/gov module.\n\nSince: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.gov.v1.Params"},"tally_params":{"description":"Deprecated: Prefer to use `params` instead.\ntally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1.TallyParams"},"voting_params":{"description":"Deprecated: Prefer to use `params` instead.\nvoting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1.VotingParams"}}},"cosmos.gov.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"description":"proposal is the requested governance proposal.","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}},"cosmos.gov.v1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}}},"cosmos.gov.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"}}},"cosmos.gov.v1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1.Vote"}}},"cosmos.gov.v1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Vote"}}}},"cosmos.gov.v1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string"}}},"cosmos.gov.v1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the number of abstain votes on a proposal.","type":"string"},"no_count":{"description":"no_count is the number of no votes on a proposal.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the number of no with veto votes on a proposal.","type":"string"},"yes_count":{"description":"yes_count is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.gov.v1beta1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1beta1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1beta1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1beta1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1beta1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.\n\nSince: cosmos-sdk 0.43","type":"object"},"cosmos.gov.v1beta1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1beta1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1beta1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1beta1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}}},"cosmos.gov.v1beta1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"deposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.DepositParams"},"tally_params":{"description":"tally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyParams"},"voting_params":{"description":"voting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1beta1.VotingParams"}}},"cosmos.gov.v1beta1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}},"cosmos.gov.v1beta1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}}},"cosmos.gov.v1beta1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"}}},"cosmos.gov.v1beta1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}},"cosmos.gov.v1beta1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}}},"cosmos.gov.v1beta1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string","format":"byte"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string","format":"byte"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string","format":"byte"}}},"cosmos.gov.v1beta1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain":{"description":"abstain is the number of abstain votes on a proposal.","type":"string"},"no":{"description":"no is the number of no votes on a proposal.","type":"string"},"no_with_veto":{"description":"no_with_veto is the number of no with veto votes on a proposal.","type":"string"},"yes":{"description":"yes is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1beta1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"option":{"description":"Deprecated: Prefer to use `options` instead. This field is set in queries\nif and only if `len(options) == 1` and that option has weight 1. In all\nother cases, this field will default to VOTE_OPTION_UNSPECIFIED.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"options":{"description":"options is the weighted vote options.\n\nSince: cosmos-sdk 0.43","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1beta1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1beta1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1beta1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.group.v1.Exec":{"description":"Exec defines modes of execution of a proposal on creation or on new vote.\n\n - EXEC_UNSPECIFIED: An empty value means that there should be a separate\nMsgExec request for the proposal to execute.\n - EXEC_TRY: Try to execute the proposal immediately.\nIf the proposal is not allowed per the DecisionPolicy,\nthe proposal will still be open and could\nbe executed at a later point.","type":"string","default":"EXEC_UNSPECIFIED","enum":["EXEC_UNSPECIFIED","EXEC_TRY"]},"cosmos.group.v1.GroupInfo":{"description":"GroupInfo represents the high-level on-chain information for a group.","type":"object","properties":{"admin":{"description":"admin is the account address of the group's admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group was created.","type":"string","format":"date-time"},"id":{"description":"id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata to attached to the group.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1"},"total_weight":{"description":"total_weight is the sum of the group members' weights.","type":"string"},"version":{"type":"string","format":"uint64","title":"version is used to track changes to a group's membership structure that\nwould break existing proposals. Whenever any members weight is changed,\nor any member is added or removed this version is incremented and will\ncause proposals based on older versions of this group to fail"}}},"cosmos.group.v1.GroupMember":{"description":"GroupMember represents the relationship between a group and a member.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member":{"description":"member is the member data.","$ref":"#/definitions/cosmos.group.v1.Member"}}},"cosmos.group.v1.GroupPolicyInfo":{"description":"GroupPolicyInfo represents the high-level on-chain information for a group policy.","type":"object","properties":{"address":{"description":"address is the account address of group policy.","type":"string"},"admin":{"description":"admin is the account address of the group admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group policy was created.","type":"string","format":"date-time"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the group policy.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#decision-policy-1"},"version":{"description":"version is used to track changes to a group's GroupPolicyInfo structure that\nwould create a different result on a running proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.Member":{"description":"Member represents a group member with an account address,\nnon-zero weight, metadata and added_at timestamp.","type":"object","properties":{"added_at":{"description":"added_at is a timestamp specifying when a member was added.","type":"string","format":"date-time"},"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MemberRequest":{"description":"MemberRequest represents a group member to be used in Msg server requests.\nContrary to `Member`, it doesn't have any `added_at` field\nsince this field cannot be set as part of requests.","type":"object","properties":{"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MsgCreateGroup":{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}},"metadata":{"description":"metadata is any arbitrary metadata to attached to the group.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicy":{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is any arbitrary metadata attached to the group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicyResponse":{"description":"MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type.","type":"object","properties":{"address":{"description":"address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupResponse":{"description":"MsgCreateGroupResponse is the Msg/CreateGroup response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgCreateGroupWithPolicy":{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group and group policy admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_metadata":{"description":"group_metadata is any arbitrary metadata attached to the group.","type":"string"},"group_policy_as_admin":{"description":"group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group\nand group policy admin.","type":"boolean"},"group_policy_metadata":{"description":"group_policy_metadata is any arbitrary metadata attached to the group policy.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgCreateGroupWithPolicyResponse":{"description":"MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group with policy.","type":"string","format":"uint64"},"group_policy_address":{"description":"group_policy_address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgExec":{"description":"MsgExec is the Msg/Exec request type.","type":"object","properties":{"executor":{"description":"executor is the account address used to execute the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgExecResponse":{"description":"MsgExecResponse is the Msg/Exec request type.","type":"object","properties":{"result":{"description":"result is the final result of the proposal execution.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"}}},"cosmos.group.v1.MsgLeaveGroup":{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","type":"object","properties":{"address":{"description":"address is the account address of the group member.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgLeaveGroupResponse":{"description":"MsgLeaveGroupResponse is the Msg/LeaveGroup response type.","type":"object"},"cosmos.group.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","type":"object","properties":{"exec":{"description":"exec defines the mode of execution of the proposal,\nwhether it should be executed immediately on creation or not.\nIf so, proposers signatures are considered as Yes votes.","$ref":"#/definitions/cosmos.group.v1.Exec"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposers":{"description":"proposers are the account addresses of the proposers.\nProposers signatures will be counted as yes votes.","type":"array","items":{"type":"string"}},"summary":{"description":"summary is the summary of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.group.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse is the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgUpdateGroupAdmin":{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the current account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"new_admin":{"description":"new_admin is the group new admin account address.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupAdminResponse":{"description":"MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMembers":{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member_updates":{"description":"member_updates is the list of members to update,\nset weight to 0 to remove a member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgUpdateGroupMembersResponse":{"description":"MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMetadata":{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is the updated group's metadata.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupMetadataResponse":{"description":"MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyAdmin":{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of the group policy.","type":"string"},"new_admin":{"description":"new_admin is the new group policy admin.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse":{"description":"MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy":{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy is the updated group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse":{"description":"MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyMetadata":{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"metadata":{"description":"metadata is the group policy metadata to be updated.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse":{"description":"MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type.","type":"object"},"cosmos.group.v1.MsgVote":{"description":"MsgVote is the Msg/Vote request type.","type":"object","properties":{"exec":{"description":"exec defines whether the proposal should be executed\nimmediately after voting or not.","$ref":"#/definitions/cosmos.group.v1.Exec"},"metadata":{"description":"metadata is any arbitrary metadata attached to the vote.","type":"string"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter account address.","type":"string"}}},"cosmos.group.v1.MsgVoteResponse":{"description":"MsgVoteResponse is the Msg/Vote response type.","type":"object"},"cosmos.group.v1.MsgWithdrawProposal":{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","type":"object","properties":{"address":{"description":"address is the admin of the group policy or one of the proposer of the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgWithdrawProposalResponse":{"description":"MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type.","type":"object"},"cosmos.group.v1.Proposal":{"description":"Proposal defines a group proposal. Any member of a group can submit a proposal\nfor a group policy to decide upon.\nA proposal consists of a set of `sdk.Msg`s that will be executed if the proposal\npasses as well as some optional metadata associated with the proposal.","type":"object","properties":{"executor_result":{"description":"executor_result is the final result of the proposal execution. Initial value is NotRun.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"},"final_tally_result":{"description":"final_tally_result contains the sums of all weighted votes for this\nproposal for each vote option. It is empty at submission, and only\npopulated after tallying, at voting period end or at proposal execution,\nwhichever happens first.","$ref":"#/definitions/cosmos.group.v1.TallyResult"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"group_policy_version":{"description":"group_policy_version tracks the version of the group policy at proposal submission.\nWhen a decision policy is changed, existing proposals from previous policy\nversions will become invalid with the `ABORTED` status.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"group_version":{"description":"group_version tracks the version of the group at proposal submission.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"id":{"description":"id is the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#proposal-4"},"proposers":{"description":"proposers are the account addresses of the proposers.","type":"array","items":{"type":"string"}},"status":{"description":"status represents the high level position in the life cycle of the proposal. Initial value is Submitted.","$ref":"#/definitions/cosmos.group.v1.ProposalStatus"},"submit_time":{"description":"submit_time is a timestamp specifying when a proposal was submitted.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"voting_period_end":{"description":"voting_period_end is the timestamp before which voting must be done.\nUnless a successful MsgExec is called before (to execute a proposal whose\ntally is successful before the voting period ends), tallying will be done\nat this point, and the `final_tally_result`and `status` fields will be\naccordingly updated.","type":"string","format":"date-time"}}},"cosmos.group.v1.ProposalExecutorResult":{"description":"ProposalExecutorResult defines types of proposal executor results.\n\n - PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED: An empty value is not allowed.\n - PROPOSAL_EXECUTOR_RESULT_NOT_RUN: We have not yet run the executor.\n - PROPOSAL_EXECUTOR_RESULT_SUCCESS: The executor was successful and proposed action updated state.\n - PROPOSAL_EXECUTOR_RESULT_FAILURE: The executor returned an error and proposed action didn't update state.","type":"string","default":"PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","enum":["PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","PROPOSAL_EXECUTOR_RESULT_NOT_RUN","PROPOSAL_EXECUTOR_RESULT_SUCCESS","PROPOSAL_EXECUTOR_RESULT_FAILURE"]},"cosmos.group.v1.ProposalStatus":{"description":"ProposalStatus defines proposal statuses.\n\n - PROPOSAL_STATUS_UNSPECIFIED: An empty value is invalid and not allowed.\n - PROPOSAL_STATUS_SUBMITTED: Initial status of a proposal when submitted.\n - PROPOSAL_STATUS_ACCEPTED: Final status of a proposal when the final tally is done and the outcome\npasses the group policy's decision policy.\n - PROPOSAL_STATUS_REJECTED: Final status of a proposal when the final tally is done and the outcome\nis rejected by the group policy's decision policy.\n - PROPOSAL_STATUS_ABORTED: Final status of a proposal when the group policy is modified before the\nfinal tally.\n - PROPOSAL_STATUS_WITHDRAWN: A proposal can be withdrawn before the voting start time by the owner.\nWhen this happens the final status is Withdrawn.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_SUBMITTED","PROPOSAL_STATUS_ACCEPTED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_ABORTED","PROPOSAL_STATUS_WITHDRAWN"]},"cosmos.group.v1.QueryGroupInfoResponse":{"description":"QueryGroupInfoResponse is the Query/GroupInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupInfo of the group.","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}}},"cosmos.group.v1.QueryGroupMembersResponse":{"description":"QueryGroupMembersResponse is the Query/GroupMembersResponse response type.","type":"object","properties":{"members":{"description":"members are the members of the group with given group_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupMember"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByAdminResponse":{"description":"QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info with provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByGroupResponse":{"description":"QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info associated with the provided group.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPolicyInfoResponse":{"description":"QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupPolicyInfo of the group policy.","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}}},"cosmos.group.v1.QueryGroupsByAdminResponse":{"description":"QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsByMemberResponse":{"description":"QueryGroupsByMemberResponse is the Query/GroupsByMember response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided group member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsResponse":{"description":"QueryGroupsResponse is the Query/Groups response type.\n\nSince: cosmos-sdk 0.47.1","type":"object","properties":{"groups":{"description":"`groups` is all the groups present in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the Query/Proposal response type.","type":"object","properties":{"proposal":{"description":"proposal is the proposal info.","$ref":"#/definitions/cosmos.group.v1.Proposal"}}},"cosmos.group.v1.QueryProposalsByGroupPolicyResponse":{"description":"QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals are the proposals with given group policy.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Proposal"}}}},"cosmos.group.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the Query/TallyResult response type.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.group.v1.TallyResult"}}},"cosmos.group.v1.QueryVoteByProposalVoterResponse":{"description":"QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type.","type":"object","properties":{"vote":{"description":"vote is the vote with given proposal_id and voter.","$ref":"#/definitions/cosmos.group.v1.Vote"}}},"cosmos.group.v1.QueryVotesByProposalResponse":{"description":"QueryVotesByProposalResponse is the Query/VotesByProposal response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes for given proposal_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.QueryVotesByVoterResponse":{"description":"QueryVotesByVoterResponse is the Query/VotesByVoter response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes by given voter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.TallyResult":{"description":"TallyResult represents the sum of weighted votes for each vote option.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the weighted sum of abstainers.","type":"string"},"no_count":{"description":"no_count is the weighted sum of no votes.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the weighted sum of veto.","type":"string"},"yes_count":{"description":"yes_count is the weighted sum of yes votes.","type":"string"}}},"cosmos.group.v1.Vote":{"type":"object","title":"Vote represents a vote for a proposal.string metadata","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"submit_time":{"description":"submit_time is the timestamp when the vote was submitted.","type":"string","format":"date-time"},"voter":{"description":"voter is the account address of the voter.","type":"string"}}},"cosmos.group.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will\nreturn an error.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.mint.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.mint.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.mint.v1beta1.Params":{"description":"Params defines the parameters for the x/mint module.","type":"object","properties":{"blocks_per_year":{"type":"string","format":"uint64","title":"expected blocks per year"},"goal_bonded":{"type":"string","title":"goal of percent bonded atoms"},"inflation_max":{"type":"string","title":"maximum inflation rate"},"inflation_min":{"type":"string","title":"minimum inflation rate"},"inflation_rate_change":{"type":"string","title":"maximum annual change in inflation rate"},"mint_denom":{"type":"string","title":"type of coin to mint"}}},"cosmos.mint.v1beta1.QueryAnnualProvisionsResponse":{"description":"QueryAnnualProvisionsResponse is the response type for the\nQuery/AnnualProvisions RPC method.","type":"object","properties":{"annual_provisions":{"description":"annual_provisions is the current minting annual provisions value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryInflationResponse":{"description":"QueryInflationResponse is the response type for the Query/Inflation RPC\nmethod.","type":"object","properties":{"inflation":{"description":"inflation is the current minting inflation value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.nft.v1beta1.Class":{"description":"Class defines the class of the nft type.","type":"object","properties":{"data":{"title":"data is the app specific metadata of the NFT class. Optional","$ref":"#/definitions/google.protobuf.Any"},"description":{"type":"string","title":"description is a brief description of nft classification. Optional"},"id":{"type":"string","title":"id defines the unique identifier of the NFT classification, similar to the contract address of ERC721"},"name":{"type":"string","title":"name defines the human-readable name of the NFT classification. Optional"},"symbol":{"type":"string","title":"symbol is an abbreviated name for nft classification. Optional"},"uri":{"type":"string","title":"uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri. Optional"}}},"cosmos.nft.v1beta1.MsgSend":{"description":"MsgSend represents a message to send a nft from one account to another account.","type":"object","properties":{"class_id":{"type":"string","title":"class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721"},"id":{"type":"string","title":"id defines the unique identification of nft"},"receiver":{"type":"string","title":"receiver is the receiver address of nft"},"sender":{"type":"string","title":"sender is the address of the owner of nft"}}},"cosmos.nft.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.nft.v1beta1.NFT":{"description":"NFT defines the NFT.","type":"object","properties":{"class_id":{"type":"string","title":"class_id associated with the NFT, similar to the contract address of ERC721"},"data":{"title":"data is an app specific data of the NFT. Optional","$ref":"#/definitions/google.protobuf.Any"},"id":{"type":"string","title":"id is a unique identifier of the NFT"},"uri":{"type":"string","title":"uri for the NFT metadata stored off chain"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri"}}},"cosmos.nft.v1beta1.QueryBalanceResponse":{"type":"object","title":"QueryBalanceResponse is the response type for the Query/Balance RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs of a given class owned by the owner"}}},"cosmos.nft.v1beta1.QueryClassResponse":{"type":"object","title":"QueryClassResponse is the response type for the Query/Class RPC method","properties":{"class":{"description":"class defines the class of the nft type.","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}}},"cosmos.nft.v1beta1.QueryClassesResponse":{"type":"object","title":"QueryClassesResponse is the response type for the Query/Classes RPC method","properties":{"classes":{"description":"class defines the class of the nft type.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryNFTResponse":{"type":"object","title":"QueryNFTResponse is the response type for the Query/NFT RPC method","properties":{"nft":{"title":"owner is the owner address of the nft","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}}},"cosmos.nft.v1beta1.QueryNFTsResponse":{"type":"object","title":"QueryNFTsResponse is the response type for the Query/NFTs RPC methods","properties":{"nfts":{"type":"array","title":"NFT defines the NFT","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryOwnerResponse":{"type":"object","title":"QueryOwnerResponse is the response type for the Query/Owner RPC method","properties":{"owner":{"type":"string","title":"owner is the owner address of the nft"}}},"cosmos.nft.v1beta1.QuerySupplyResponse":{"type":"object","title":"QuerySupplyResponse is the response type for the Query/Supply RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs from the given class"}}},"cosmos.params.v1beta1.ParamChange":{"description":"ParamChange defines an individual parameter change, for use in\nParameterChangeProposal.","type":"object","properties":{"key":{"type":"string"},"subspace":{"type":"string"},"value":{"type":"string"}}},"cosmos.params.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"param":{"description":"param defines the queried parameter.","$ref":"#/definitions/cosmos.params.v1beta1.ParamChange"}}},"cosmos.params.v1beta1.QuerySubspacesResponse":{"description":"QuerySubspacesResponse defines the response types for querying for all\nregistered subspaces and all keys for a subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"subspaces":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.params.v1beta1.Subspace"}}}},"cosmos.params.v1beta1.Subspace":{"description":"Subspace defines a parameter subspace name and all the keys that exist for\nthe subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjail":{"type":"object","title":"MsgUnjail defines the Msg/Unjail request type","properties":{"validator_addr":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjailResponse":{"type":"object","title":"MsgUnjailResponse defines the Msg/Unjail response type"},"cosmos.slashing.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/slashing parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.slashing.v1beta1.Params":{"description":"Params represents the parameters used for by the slashing module.","type":"object","properties":{"downtime_jail_duration":{"type":"string"},"min_signed_per_window":{"type":"string","format":"byte"},"signed_blocks_window":{"type":"string","format":"int64"},"slash_fraction_double_sign":{"type":"string","format":"byte"},"slash_fraction_downtime":{"type":"string","format":"byte"}}},"cosmos.slashing.v1beta1.QueryParamsResponse":{"type":"object","title":"QueryParamsResponse is the response type for the Query/Params RPC method","properties":{"params":{"$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.QuerySigningInfoResponse":{"type":"object","title":"QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC\nmethod","properties":{"val_signing_info":{"title":"val_signing_info is the signing info of requested val cons address","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}}},"cosmos.slashing.v1beta1.QuerySigningInfosResponse":{"type":"object","title":"QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC\nmethod","properties":{"info":{"type":"array","title":"info is the signing info of all validators","items":{"type":"object","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.slashing.v1beta1.ValidatorSigningInfo":{"description":"ValidatorSigningInfo defines a validator's signing info for monitoring their\nliveness activity.","type":"object","properties":{"address":{"type":"string"},"index_offset":{"description":"Index which is incremented every time a validator is bonded in a block and\n_may_ have signed a pre-commit or not. This in conjunction with the\nsigned_blocks_window param determines the index in the missed block bitmap.","type":"string","format":"int64"},"jailed_until":{"description":"Timestamp until which the validator is jailed due to liveness downtime.","type":"string","format":"date-time"},"missed_blocks_counter":{"description":"A counter of missed (unsigned) blocks. It is used to avoid unnecessary\nreads in the missed block bitmap.","type":"string","format":"int64"},"start_height":{"type":"string","format":"int64","title":"Height at which validator was first a candidate OR was un-jailed"},"tombstoned":{"description":"Whether or not a validator has been tombstoned (killed out of validator\nset). It is set once the validator commits an equivocation or for any other\nconfigured misbehavior.","type":"boolean"}}},"cosmos.staking.v1beta1.BondStatus":{"description":"BondStatus is the status of a validator.\n\n - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.","type":"string","default":"BOND_STATUS_UNSPECIFIED","enum":["BOND_STATUS_UNSPECIFIED","BOND_STATUS_UNBONDED","BOND_STATUS_UNBONDING","BOND_STATUS_BONDED"]},"cosmos.staking.v1beta1.Commission":{"description":"Commission defines commission parameters for a given validator.","type":"object","properties":{"commission_rates":{"description":"commission_rates defines the initial commission rates to be used for creating a validator.","$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"update_time":{"description":"update_time is the last time the commission rate was changed.","type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.CommissionRates":{"description":"CommissionRates defines the initial commission rates to be used for creating\na validator.","type":"object","properties":{"max_change_rate":{"description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction.","type":"string"},"max_rate":{"description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction.","type":"string"},"rate":{"description":"rate is the commission rate charged to delegators, as a fraction.","type":"string"}}},"cosmos.staking.v1beta1.Delegation":{"description":"Delegation represents the bond with tokens held by an account. It is\nowned by one delegator, and is associated with the voting power of one\nvalidator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"shares":{"description":"shares define the delegation shares received.","type":"string"},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.DelegationResponse":{"description":"DelegationResponse is equivalent to Delegation except that it contains a\nbalance in addition to shares which is more suitable for client responses.","type":"object","properties":{"balance":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Delegation"}}},"cosmos.staking.v1beta1.Description":{"description":"Description defines a validator description.","type":"object","properties":{"details":{"description":"details define other optional details.","type":"string"},"identity":{"description":"identity defines an optional identity signature (ex. UPort or Keybase).","type":"string"},"moniker":{"description":"moniker defines a human-readable name for the validator.","type":"string"},"security_contact":{"description":"security_contact defines an optional email for security contact.","type":"string"},"website":{"description":"website defines an optional website link.","type":"string"}}},"cosmos.staking.v1beta1.HistoricalInfo":{"description":"HistoricalInfo contains header and validator information for a given block.\nIt is stored as part of staking module's state, which persists the `n` most\nrecent HistoricalInfo\n(`n` is set by the staking module's `historical_entries` parameter).","type":"object","properties":{"header":{"$ref":"#/definitions/tendermint.types.Header"},"valset":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgBeginRedelegateResponse":{"description":"MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegation":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator","properties":{"amount":{"title":"amount is always less than or equal to unbonding delegation entry balance","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegationResponse"},"cosmos.staking.v1beta1.MsgCreateValidator":{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","type":"object","properties":{"commission":{"$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"delegator_address":{"description":"Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated.\nThe validator address bytes and delegator address bytes refer to the same account while creating validator (defer\nonly in bech32 notation).","type":"string"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"pubkey":{"$ref":"#/definitions/google.protobuf.Any"},"validator_address":{"type":"string"},"value":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.staking.v1beta1.MsgCreateValidatorResponse":{"description":"MsgCreateValidatorResponse defines the Msg/CreateValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgDelegate":{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgDelegateResponse":{"description":"MsgDelegateResponse defines the Msg/Delegate response type.","type":"object"},"cosmos.staking.v1beta1.MsgEditValidator":{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","type":"object","properties":{"commission_rate":{"type":"string","title":"We pass a reference to the new commission rate and min self delegation as\nit's not mandatory to update. If not updated, the deserialized rate will be\nzero with no way to distinguish if an update was intended.\nREF: #2373"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgEditValidatorResponse":{"description":"MsgEditValidatorResponse defines the Msg/EditValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgUndelegate":{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgUndelegateResponse":{"description":"MsgUndelegateResponse defines the Msg/Undelegate response type.","type":"object","properties":{"amount":{"description":"Since: cosmos-sdk 0.50","title":"amount returns the amount of undelegated coins","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/staking parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.staking.v1beta1.Params":{"description":"Params defines the parameters for the x/staking module.","type":"object","properties":{"bond_denom":{"description":"bond_denom defines the bondable coin denomination.","type":"string"},"historical_entries":{"description":"historical_entries is the number of historical entries to persist.","type":"integer","format":"int64"},"max_entries":{"description":"max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio).","type":"integer","format":"int64"},"max_validators":{"description":"max_validators is the maximum number of validators.","type":"integer","format":"int64"},"min_commission_rate":{"type":"string","title":"min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators"},"unbonding_time":{"description":"unbonding_time is the time duration of unbonding.","type":"string"}}},"cosmos.staking.v1beta1.Pool":{"description":"Pool is used for tracking bonded and not-bonded token supply of the bond\ndenomination.","type":"object","properties":{"bonded_tokens":{"type":"string"},"not_bonded_tokens":{"type":"string"}}},"cosmos.staking.v1beta1.QueryDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/Delegation RPC method.","type":"object","properties":{"delegation_response":{"description":"delegation_responses defines the delegation info of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse":{"description":"QueryDelegatorDelegationsResponse is response type for the\nQuery/DelegatorDelegations RPC method.","type":"object","properties":{"delegation_responses":{"description":"delegation_responses defines all the delegations' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse":{"description":"QueryUnbondingDelegatorDelegationsResponse is response type for the\nQuery/UnbondingDelegatorDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorResponse":{"description":"QueryDelegatorValidatorResponse response type for the\nQuery/DelegatorValidator RPC method.","type":"object","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators defines the validators' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.QueryHistoricalInfoResponse":{"description":"QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC\nmethod.","type":"object","properties":{"hist":{"description":"hist defines the historical info at the given height.","$ref":"#/definitions/cosmos.staking.v1beta1.HistoricalInfo"}}},"cosmos.staking.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.QueryPoolResponse":{"description":"QueryPoolResponse is response type for the Query/Pool RPC method.","type":"object","properties":{"pool":{"description":"pool defines the pool info.","$ref":"#/definitions/cosmos.staking.v1beta1.Pool"}}},"cosmos.staking.v1beta1.QueryRedelegationsResponse":{"description":"QueryRedelegationsResponse is response type for the Query/Redelegations RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"redelegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationResponse"}}}},"cosmos.staking.v1beta1.QueryUnbondingDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/UnbondingDelegation\nRPC method.","type":"object","properties":{"unbond":{"description":"unbond defines the unbonding information of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}},"cosmos.staking.v1beta1.QueryValidatorDelegationsResponse":{"type":"object","title":"QueryValidatorDelegationsResponse is response type for the\nQuery/ValidatorDelegations RPC method","properties":{"delegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryValidatorResponse":{"type":"object","title":"QueryValidatorResponse is response type for the Query/Validator RPC method","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse":{"description":"QueryValidatorUnbondingDelegationsResponse is response type for the\nQuery/ValidatorUnbondingDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryValidatorsResponse":{"type":"object","title":"QueryValidatorsResponse is response type for the Query/Validators RPC method","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators contains all the queried validators.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.Redelegation":{"description":"Redelegation contains the list of a particular delegator's redelegating bonds\nfrom a particular source validator to a particular destination validator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the bech32-encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the redelegation entries.\n\nredelegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}},"validator_dst_address":{"description":"validator_dst_address is the validator redelegation destination operator address.","type":"string"},"validator_src_address":{"description":"validator_src_address is the validator redelegation source operator address.","type":"string"}}},"cosmos.staking.v1beta1.RedelegationEntry":{"description":"RedelegationEntry defines a redelegation object with relevant metadata.","type":"object","properties":{"completion_time":{"description":"completion_time defines the unix time for redelegation completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height defines the height which the redelegation took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the initial balance when redelegation started.","type":"string"},"shares_dst":{"description":"shares_dst is the amount of destination-validator shares created by redelegation.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.RedelegationEntryResponse":{"description":"RedelegationEntryResponse is equivalent to a RedelegationEntry except that it\ncontains a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"balance":{"type":"string"},"redelegation_entry":{"$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}}},"cosmos.staking.v1beta1.RedelegationResponse":{"description":"RedelegationResponse is equivalent to a Redelegation except that its entries\ncontain a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntryResponse"}},"redelegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Redelegation"}}},"cosmos.staking.v1beta1.UnbondingDelegation":{"description":"UnbondingDelegation stores all of a single delegator's unbonding bonds\nfor a single validator in an time-ordered list.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the unbonding delegation entries.\n\nunbonding delegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegationEntry"}},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.UnbondingDelegationEntry":{"description":"UnbondingDelegationEntry defines an unbonding object with relevant metadata.","type":"object","properties":{"balance":{"description":"balance defines the tokens to receive at completion.","type":"string"},"completion_time":{"description":"completion_time is the unix time for unbonding completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the tokens initially scheduled to receive at completion.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.Validator":{"description":"Validator defines a validator, together with the total amount of the\nValidator's bond shares and their exchange rate to coins. Slashing results in\na decrease in the exchange rate, allowing correct calculation of future\nundelegations without iterating over delegators. When coins are delegated to\nthis validator, the validator is credited with a delegation whose number of\nbond shares is based on the amount of coins delegated divided by the current\nexchange rate. Voting power can be calculated as total bonded shares\nmultiplied by exchange rate.","type":"object","properties":{"commission":{"description":"commission defines the commission parameters.","$ref":"#/definitions/cosmos.staking.v1beta1.Commission"},"consensus_pubkey":{"description":"consensus_pubkey is the consensus public key of the validator, as a Protobuf Any.","$ref":"#/definitions/google.protobuf.Any"},"delegator_shares":{"description":"delegator_shares defines total shares issued to a validator's delegators.","type":"string"},"description":{"description":"description defines the description terms for the validator.","$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"jailed":{"description":"jailed defined whether the validator has been jailed from bonded status or not.","type":"boolean"},"min_self_delegation":{"description":"min_self_delegation is the validator's self declared minimum self delegation.\n\nSince: cosmos-sdk 0.46","type":"string"},"operator_address":{"description":"operator_address defines the address of the validator's operator; bech encoded in JSON.","type":"string"},"status":{"description":"status is the validator status (bonded/unbonding/unbonded).","$ref":"#/definitions/cosmos.staking.v1beta1.BondStatus"},"tokens":{"description":"tokens define the delegated tokens (incl. self-delegation).","type":"string"},"unbonding_height":{"description":"unbonding_height defines, if unbonding, the height at which this validator has begun unbonding.","type":"string","format":"int64"},"unbonding_ids":{"type":"array","title":"list of unbonding ids, each uniquely identifing an unbonding of this validator","items":{"type":"string","format":"uint64"}},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"strictly positive if this validator's unbonding has been stopped by external modules"},"unbonding_time":{"description":"unbonding_time defines, if unbonding, the min time for the validator to complete unbonding.","type":"string","format":"date-time"}}},"cosmos.store.streaming.abci.ListenCommitRequest":{"type":"object","title":"ListenCommitRequest is the request type for the ListenCommit RPC method","properties":{"block_height":{"type":"string","format":"int64","title":"explicitly pass in block height as ResponseCommit does not contain this info"},"change_set":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.store.v1beta1.StoreKVPair"}},"res":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}}},"cosmos.store.streaming.abci.ListenCommitResponse":{"type":"object","title":"ListenCommitResponse is the response type for the ListenCommit RPC method"},"cosmos.store.streaming.abci.ListenFinalizeBlockRequest":{"type":"object","title":"ListenEndBlockRequest is the request type for the ListenEndBlock RPC method","properties":{"req":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"},"res":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}}},"cosmos.store.streaming.abci.ListenFinalizeBlockResponse":{"type":"object","title":"ListenEndBlockResponse is the response type for the ListenEndBlock RPC method"},"cosmos.store.v1beta1.StoreKVPair":{"description":"Since: cosmos-sdk 0.43","type":"object","title":"StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes)\nIt optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and\nDeletes","properties":{"delete":{"type":"boolean","title":"true indicates a delete operation, false indicates a set operation"},"key":{"type":"string","format":"byte"},"store_key":{"type":"string","title":"the store key for the KVStore this pair originates from"},"value":{"type":"string","format":"byte"}}},"cosmos.tx.signing.v1beta1.SignMode":{"description":"SignMode represents a signing mode with its own security guarantees.\n\nThis enum should be considered a registry of all known sign modes\nin the Cosmos ecosystem. Apps are not expected to support all known\nsign modes. Apps that would like to support custom sign modes are\nencouraged to open a small PR against this file to add a new case\nto this SignMode enum describing their sign mode so that different\napps have a consistent version of this enum.\n\n - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\nrejected.\n - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\nverified with raw bytes from Tx.\n - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\nhuman-readable textual representation on top of the binary representation\nfrom SIGN_MODE_DIRECT.\n\nSince: cosmos-sdk 0.50\n - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\nSignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\nrequire signers signing over other signers' `signer_info`.\n\nSince: cosmos-sdk 0.46\n - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\nAmino JSON and will be removed in the future.\n - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\nSDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\nCurrently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\nbut is not implemented on the SDK by default. To enable EIP-191, you need\nto pass a custom `TxConfig` that has an implementation of\n`SignModeHandler` for EIP-191. The SDK may decide to fully support\nEIP-191 in the future.\n\nSince: cosmos-sdk 0.45.2","type":"string","default":"SIGN_MODE_UNSPECIFIED","enum":["SIGN_MODE_UNSPECIFIED","SIGN_MODE_DIRECT","SIGN_MODE_TEXTUAL","SIGN_MODE_DIRECT_AUX","SIGN_MODE_LEGACY_AMINO_JSON","SIGN_MODE_EIP_191"]},"cosmos.tx.v1beta1.AuthInfo":{"description":"AuthInfo describes the fee and signer modes that are used to sign a\ntransaction.","type":"object","properties":{"fee":{"description":"Fee is the fee and gas limit for the transaction. The first signer is the\nprimary signer and the one which pays the fee. The fee can be calculated\nbased on the cost of evaluating the body and doing signature verification\nof the signers. This can be estimated via simulation.","$ref":"#/definitions/cosmos.tx.v1beta1.Fee"},"signer_infos":{"description":"signer_infos defines the signing modes for the required signers. The number\nand order of elements must match the required signers from TxBody's\nmessages. The first element is the primary signer and the one which pays\nthe fee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.SignerInfo"}},"tip":{"description":"Tip is the optional tip used for transactions fees paid in another denom.\n\nThis field is ignored if the chain didn't enable tips, i.e. didn't add the\n`TipDecorator` in its posthandler.\n\nSince: cosmos-sdk 0.46","$ref":"#/definitions/cosmos.tx.v1beta1.Tip"}}},"cosmos.tx.v1beta1.BroadcastMode":{"description":"BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\nmethod.\n\n - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\nBROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits\nfor a CheckTx execution response only.\n - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client\nreturns immediately.","type":"string","default":"BROADCAST_MODE_UNSPECIFIED","enum":["BROADCAST_MODE_UNSPECIFIED","BROADCAST_MODE_BLOCK","BROADCAST_MODE_SYNC","BROADCAST_MODE_ASYNC"]},"cosmos.tx.v1beta1.BroadcastTxRequest":{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","type":"object","properties":{"mode":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastMode"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.BroadcastTxResponse":{"description":"BroadcastTxResponse is the response type for the\nService.BroadcastTx method.","type":"object","properties":{"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.Fee":{"description":"Fee includes the amount of coins paid in fees and the maximum\ngas to be used by the transaction. The ratio yields an effective \"gasprice\",\nwhich must be above some miminum to be accepted into the mempool.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of coins to be paid as a fee","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"gas_limit":{"type":"string","format":"uint64","title":"gas_limit is the maximum gas that can be used in transaction processing\nbefore an out of gas error occurs"},"granter":{"type":"string","title":"if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used\nto pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\nnot support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees.\nthe payer must be a tx signer (and thus have signed this field in AuthInfo).\nsetting this field does *not* change the ordering of required signers for the transaction.","type":"string"}}},"cosmos.tx.v1beta1.GetBlockWithTxsResponse":{"description":"GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs\nmethod.\n\nSince: cosmos-sdk 0.45.2","type":"object","properties":{"block":{"$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"pagination":{"description":"pagination defines a pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"txs":{"description":"txs are the transactions in the block.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.GetTxResponse":{"description":"GetTxResponse is the response type for the Service.GetTx method.","type":"object","properties":{"tx":{"description":"tx is the queried transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.GetTxsEventResponse":{"description":"GetTxsEventResponse is the response type for the Service.TxsByEvents\nRPC method.","type":"object","properties":{"pagination":{"description":"pagination defines a pagination for the response.\nDeprecated post v0.46.x: use total instead.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64","title":"total is total number of results available"},"tx_responses":{"description":"tx_responses is the list of queried TxResponses.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}},"txs":{"description":"txs is the list of queried transactions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.ModeInfo":{"description":"ModeInfo describes the signing mode of a single or nested multisig signer.","type":"object","properties":{"multi":{"title":"multi represents a nested multisig signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi"},"single":{"title":"single represents a single signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Single"}}},"cosmos.tx.v1beta1.ModeInfo.Multi":{"type":"object","title":"Multi is the mode info for a multisig public key","properties":{"bitarray":{"title":"bitarray specifies which keys within the multisig are signing","$ref":"#/definitions/cosmos.crypto.multisig.v1beta1.CompactBitArray"},"mode_infos":{"type":"array","title":"mode_infos is the corresponding modes of the signers of the multisig\nwhich could include nested multisig public keys","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"}}}},"cosmos.tx.v1beta1.ModeInfo.Single":{"type":"object","title":"Single is the mode info for a single signer. It is structured as a message\nto allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\nfuture","properties":{"mode":{"title":"mode is the signing mode of the single signer","$ref":"#/definitions/cosmos.tx.signing.v1beta1.SignMode"}}},"cosmos.tx.v1beta1.OrderBy":{"description":"- ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","type":"string","title":"OrderBy defines the sorting order","default":"ORDER_BY_UNSPECIFIED","enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"]},"cosmos.tx.v1beta1.SignerInfo":{"description":"SignerInfo describes the public key and signing mode of a single top-level\nsigner.","type":"object","properties":{"mode_info":{"title":"mode_info describes the signing mode of the signer and is a nested\nstructure to support nested multisig pubkey's","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"},"public_key":{"description":"public_key is the public key of the signer. It is optional for accounts\nthat already exist in state. If unset, the verifier can use the required \\\nsigner address for this position and lookup the public key.","$ref":"#/definitions/google.protobuf.Any"},"sequence":{"description":"sequence is the sequence of the account, which describes the\nnumber of committed transactions signed by a given address. It is used to\nprevent replay attacks.","type":"string","format":"uint64"}}},"cosmos.tx.v1beta1.SimulateRequest":{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to simulate.\nDeprecated. Send raw tx bytes instead.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_bytes":{"description":"tx_bytes is the raw transaction.\n\nSince: cosmos-sdk 0.43","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.SimulateResponse":{"description":"SimulateResponse is the response type for the\nService.SimulateRPC method.","type":"object","properties":{"gas_info":{"description":"gas_info is the information about gas used in the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.GasInfo"},"result":{"description":"result is the result of the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.Result"}}},"cosmos.tx.v1beta1.Tip":{"description":"Tip is the tip used for meta-transactions.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of the tip","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"tipper":{"type":"string","title":"tipper is the address of the account paying for the tip"}}},"cosmos.tx.v1beta1.Tx":{"description":"Tx is the standard type used for broadcasting transactions.","type":"object","properties":{"auth_info":{"title":"auth_info is the authorization related content of the transaction,\nspecifically signers, signer modes and fee","$ref":"#/definitions/cosmos.tx.v1beta1.AuthInfo"},"body":{"title":"body is the processable content of the transaction","$ref":"#/definitions/cosmos.tx.v1beta1.TxBody"},"signatures":{"description":"signatures is a list of signatures that matches the length and order of\nAuthInfo's signer_infos to allow connecting signature meta information like\npublic key and signing mode by position.","type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.tx.v1beta1.TxBody":{"description":"TxBody is the body of a transaction that all signers sign over.","type":"object","properties":{"extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, the transaction will be rejected","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"memo":{"description":"memo is any arbitrary note/comment to be added to the transaction.\nWARNING: in clients, any publicly exposed text should not be called memo,\nbut should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).","type":"string"},"messages":{"description":"messages is a list of messages to be executed. The required signers of\nthose messages define the number and order of elements in AuthInfo's\nsigner_infos and Tx's signatures. Each required signer address is added to\nthe list only the first time it occurs.\nBy convention, the first required signer (usually from the first message)\nis referred to as the primary signer and pays the fee for the whole\ntransaction.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"non_critical_extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, they will be ignored","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"timeout_height":{"type":"string","format":"uint64","title":"timeout is the block height after which this transaction will not\nbe processed by the chain"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeAminoResponse":{"description":"TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeResponse":{"description":"TxDecodeResponse is the response type for the\nService.TxDecode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the decoded transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeAminoRequest":{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxEncodeRequest":{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the transaction to encode.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeResponse":{"description":"TxEncodeResponse is the response type for the\nService.TxEncode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the encoded transaction bytes.","type":"string","format":"byte"}}},"cosmos.upgrade.v1beta1.ModuleVersion":{"description":"ModuleVersion specifies a module and its consensus version.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"name":{"type":"string","title":"name of the app module"},"version":{"type":"string","format":"uint64","title":"consensus version of the app module"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgrade":{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse":{"description":"MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"plan":{"description":"plan is the upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse":{"description":"MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.Plan":{"description":"Plan specifies information about a planned upgrade and when it should occur.","type":"object","properties":{"height":{"description":"The height at which the upgrade must be performed.","type":"string","format":"int64"},"info":{"type":"string","title":"Any application specific upgrade info to be included on-chain\nsuch as a git commit that validators could automatically upgrade to"},"name":{"description":"Sets the name for the upgrade. This name will be used by the upgraded\nversion of the software to apply any special \"on-upgrade\" commands during\nthe first BeginBlock method after the upgrade is applied. It is also used\nto detect whether a software version can handle a given upgrade. If no\nupgrade handler with this name has been set in the software, it will be\nassumed that the software is out-of-date when the upgrade Time or Height is\nreached and the software will exit.","type":"string"},"time":{"description":"Deprecated: Time based upgrades have been deprecated. Time based upgrade logic\nhas been removed from the SDK.\nIf this field is not empty, an error will be thrown.","type":"string","format":"date-time"},"upgraded_client_state":{"description":"Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been\nmoved to the IBC module in the sub module 02-client.\nIf this field is not empty, an error will be thrown.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.upgrade.v1beta1.QueryAppliedPlanResponse":{"description":"QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC\nmethod.","type":"object","properties":{"height":{"description":"height is the block height at which the plan was applied.","type":"string","format":"int64"}}},"cosmos.upgrade.v1beta1.QueryAuthorityResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"QueryAuthorityResponse is the response type for Query/Authority","properties":{"address":{"type":"string"}}},"cosmos.upgrade.v1beta1.QueryCurrentPlanResponse":{"description":"QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC\nmethod.","type":"object","properties":{"plan":{"description":"plan is the current upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.QueryModuleVersionsResponse":{"description":"QueryModuleVersionsResponse is the response type for the Query/ModuleVersions\nRPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"module_versions":{"description":"module_versions is a list of module names with their consensus versions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.upgrade.v1beta1.ModuleVersion"}}}},"cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState\nRPC method.","type":"object","properties":{"upgraded_consensus_state":{"type":"string","format":"byte","title":"Since: cosmos-sdk 0.43"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"from_address":{"type":"string"},"start_time":{"description":"start of vesting as unix time (in seconds).","type":"string","format":"int64"},"to_address":{"type":"string"},"vesting_periods":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.vesting.v1beta1.Period"}}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount\nresponse type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse":{"description":"MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreateVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"delayed":{"type":"boolean"},"end_time":{"description":"end of vesting as unix time (in seconds).","type":"string","format":"int64"},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type.","type":"object"},"cosmos.vesting.v1beta1.Period":{"description":"Period defines a length of time and amount of coins that will vest.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"length":{"description":"Period duration in seconds.","type":"string","format":"int64"}}},"cosmwasm.wasm.v1.AbsoluteTxPosition":{"description":"AbsoluteTxPosition is a unique transaction position that allows for global\nordering of transactions.","type":"object","properties":{"block_height":{"type":"string","format":"uint64","title":"BlockHeight is the block the contract was created at"},"tx_index":{"type":"string","format":"uint64","title":"TxIndex is a monotonic counter within the block (actual transaction index,\nor gas consumed)"}}},"cosmwasm.wasm.v1.AccessConfig":{"description":"AccessConfig access control type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.AccessType":{"description":"- ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty value\n - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses","type":"string","title":"AccessType permission types","default":"ACCESS_TYPE_UNSPECIFIED","enum":["ACCESS_TYPE_UNSPECIFIED","ACCESS_TYPE_NOBODY","ACCESS_TYPE_EVERYBODY","ACCESS_TYPE_ANY_OF_ADDRESSES"]},"cosmwasm.wasm.v1.CodeInfoResponse":{"type":"object","title":"CodeInfoResponse contains code meta data from CodeInfo","properties":{"code_id":{"type":"string","format":"uint64","title":"id for legacy support"},"creator":{"type":"string"},"data_hash":{"type":"string","format":"byte"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.ContractCodeHistoryEntry":{"description":"ContractCodeHistoryEntry metadata to a contract.","type":"object","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"msg":{"type":"string","format":"byte"},"operation":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryOperationType"},"updated":{"description":"Updated Tx position when the operation was executed.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"}}},"cosmwasm.wasm.v1.ContractCodeHistoryOperationType":{"description":"- CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data","type":"string","title":"ContractCodeHistoryOperationType actions that caused a code change","default":"CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","enum":["CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT","CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE","CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS"]},"cosmwasm.wasm.v1.ContractInfo":{"type":"object","title":"ContractInfo stores a WASM contract instance","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored Wasm code"},"created":{"description":"Created Tx position when the contract was instantiated.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"},"creator":{"type":"string","title":"Creator address who initially instantiated the contract"},"extension":{"description":"Extension is an extension point to store custom metadata within the\npersistence model.","$ref":"#/definitions/google.protobuf.Any"},"ibc2_port_id":{"type":"string"},"ibc_port_id":{"type":"string"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"}}},"cosmwasm.wasm.v1.Model":{"type":"object","title":"Model is a struct that holds a KV pair","properties":{"key":{"type":"string","format":"byte","title":"hex-encode key to read it better (this is often ascii)"},"value":{"type":"string","format":"byte","title":"base64-encode raw value"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses":{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse":{"description":"MsgAddCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgAddCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgClearAdmin":{"type":"object","title":"MsgClearAdmin removes any admin stored for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgClearAdminResponse":{"type":"object","title":"MsgClearAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgExecuteContract":{"type":"object","title":"MsgExecuteContract submits the given message data to a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on execution","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgExecuteContractResponse":{"description":"MsgExecuteContractResponse returns execution result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContract":{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2":{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"fix_msg":{"type":"boolean","title":"FixMsg include the msg value into the hash for the predictable address.\nDefault is false"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"salt":{"description":"Salt is an arbitrary value provided by the sender. Size can be 1 to 64.","type":"string","format":"byte"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2Response":{"type":"object","title":"MsgInstantiateContract2Response return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContractResponse":{"type":"object","title":"MsgInstantiateContractResponse return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgMigrateContract":{"type":"object","title":"MsgMigrateContract runs a code upgrade/ downgrade for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the new WASM code"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgMigrateContractResponse":{"description":"MsgMigrateContractResponse returns contract migration result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains same raw bytes returned as data from the wasm contract.\n(May be empty)"}}},"cosmwasm.wasm.v1.MsgPinCodes":{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the new WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgPinCodesResponse":{"description":"MsgPinCodesResponse defines the response structure for executing a\nMsgPinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses":{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse":{"description":"MsgRemoveCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgRemoveCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContract":{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"authority":{"description":"Authority is the address of the governance account.","type":"string"},"builder":{"type":"string","title":"Builder is the docker image used to build the code deterministically, used\nfor smart contract verification"},"code_hash":{"type":"string","format":"byte","title":"CodeHash is the SHA256 sum of the code outputted by builder, used for smart\ncontract verification"},"funds":{"type":"array","title":"Funds coins that are transferred from the authority account to the contract\non instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"source":{"type":"string","title":"Source is the URL where the code is hosted"},"unpin_code":{"description":"UnpinCode code on upload, optional. As default the uploaded contract is\npinned to cache.","type":"boolean"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse":{"description":"MsgStoreAndInstantiateContractResponse defines the response structure\nfor executing a MsgStoreAndInstantiateContract message.\n\nSince: 0.40","type":"object","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContract":{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse":{"description":"MsgStoreAndMigrateContractResponse defines the response structure\nfor executing a MsgStoreAndMigrateContract message.\n\nSince: 0.42","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreCode":{"type":"object","title":"MsgStoreCode submit Wasm code to the system","properties":{"instantiate_permission":{"title":"InstantiatePermission access control to apply on contract creation,\noptional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreCodeResponse":{"description":"MsgStoreCodeResponse returns store result data.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"}}},"cosmwasm.wasm.v1.MsgSudoContract":{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract as sudo"}}},"cosmwasm.wasm.v1.MsgSudoContractResponse":{"description":"MsgSudoContractResponse defines the response structure for executing a\nMsgSudoContract message.\n\nSince: 0.40","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgUnpinCodes":{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgUnpinCodesResponse":{"description":"MsgUnpinCodesResponse defines the response structure for executing a\nMsgUnpinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgUpdateAdmin":{"type":"object","title":"MsgUpdateAdmin sets a new admin for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_admin":{"type":"string","title":"NewAdmin address to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateAdminResponse":{"type":"object","title":"MsgUpdateAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateContractLabel":{"type":"object","title":"MsgUpdateContractLabel sets a new label for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_label":{"type":"string","title":"NewLabel string to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateContractLabelResponse":{"type":"object","title":"MsgUpdateContractLabelResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfig":{"type":"object","title":"MsgUpdateInstantiateConfig updates instantiate config for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the stored WASM code"},"new_instantiate_permission":{"title":"NewInstantiatePermission is the new access control","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse":{"type":"object","title":"MsgUpdateInstantiateConfigResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/wasm parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.Params":{"description":"Params defines the set of wasm parameters.","type":"object","properties":{"code_upload_access":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"instantiate_default_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.QueryAllContractStateResponse":{"type":"object","title":"QueryAllContractStateResponse is the response type for the\nQuery/AllContractState RPC method","properties":{"models":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.Model"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryBuildAddressResponse":{"description":"QueryBuildAddressResponse is the response type for the Query/BuildAddress RPC\nmethod.","type":"object","properties":{"address":{"type":"string","title":"Address is the contract address"}}},"cosmwasm.wasm.v1.QueryCodeInfoResponse":{"type":"object","title":"QueryCodeInfoResponse is the response type for the Query/CodeInfo RPC method","properties":{"checksum":{"type":"string","format":"byte"},"code_id":{"type":"string","format":"uint64"},"creator":{"type":"string"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.QueryCodeResponse":{"type":"object","title":"QueryCodeResponse is the response type for the Query/Code RPC method","properties":{"code_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"},"data":{"type":"string","format":"byte"}}},"cosmwasm.wasm.v1.QueryCodesResponse":{"type":"object","title":"QueryCodesResponse is the response type for the Query/Codes RPC method","properties":{"code_infos":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractHistoryResponse":{"type":"object","title":"QueryContractHistoryResponse is the response type for the\nQuery/ContractHistory RPC method","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryEntry"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractInfoResponse":{"type":"object","title":"QueryContractInfoResponse is the response type for the Query/ContractInfo RPC\nmethod","properties":{"address":{"type":"string","title":"address is the address of the contract"},"contract_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractInfo"}}},"cosmwasm.wasm.v1.QueryContractsByCodeResponse":{"type":"object","title":"QueryContractsByCodeResponse is the response type for the\nQuery/ContractsByCode RPC method","properties":{"contracts":{"type":"array","title":"contracts are a set of contract addresses","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractsByCreatorResponse":{"description":"QueryContractsByCreatorResponse is the response type for the\nQuery/ContractsByCreator RPC method.","type":"object","properties":{"contract_addresses":{"type":"array","title":"ContractAddresses result set","items":{"type":"string"}},"pagination":{"description":"Pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.QueryPinnedCodesResponse":{"type":"object","title":"QueryPinnedCodesResponse is the response type for the\nQuery/PinnedCodes RPC method","properties":{"code_ids":{"type":"array","items":{"type":"string","format":"uint64"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryRawContractStateResponse":{"type":"object","title":"QueryRawContractStateResponse is the response type for the\nQuery/RawContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the raw store data"}}},"cosmwasm.wasm.v1.QuerySmartContractStateResponse":{"type":"object","title":"QuerySmartContractStateResponse is the response type for the\nQuery/SmartContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the json data returned from the smart contract"}}},"cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse":{"description":"QueryWasmLimitsConfigResponse is the response type for the\nQuery/WasmLimitsConfig RPC method. It contains the JSON encoded limits for\nstatic validation of Wasm files.","type":"object","properties":{"config":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount":{"type":"object","title":"MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount","properties":{"connection_id":{"type":"string"},"ordering":{"$ref":"#/definitions/ibc.core.channel.v1.Order"},"owner":{"type":"string"},"version":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse":{"type":"object","title":"MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTx":{"type":"object","title":"MsgSendTx defines the payload for Msg/SendTx","properties":{"connection_id":{"type":"string"},"owner":{"type":"string"},"packet_data":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.InterchainAccountPacketData"},"relative_timeout":{"description":"Relative timeout timestamp provided will be added to the current block time during transaction execution.\nThe timeout timestamp must be non-zero.","type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse":{"type":"object","title":"MsgSendTxResponse defines the response for MsgSendTx","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/controller parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.controller.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the controller submodule.","type":"object","properties":{"controller_enabled":{"description":"controller_enabled enables or disables the controller submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse":{"description":"QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method.","type":"object","properties":{"address":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe":{"type":"object","title":"MsgModuleQuerySafe defines the payload for Msg/ModuleQuerySafe","properties":{"requests":{"description":"requests defines the module safe queries to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryRequest"}},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse":{"type":"object","title":"MsgModuleQuerySafeResponse defines the response for Msg/ModuleQuerySafe","properties":{"height":{"type":"string","format":"uint64","title":"height at which the responses were queried"},"responses":{"type":"array","title":"protobuf encoded responses for each query","items":{"type":"string","format":"byte"}}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/host parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.host.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the host submodule.","type":"object","properties":{"allow_messages":{"description":"allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain.","type":"array","items":{"type":"string"}},"host_enabled":{"description":"host_enabled enables or disables the host submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.host.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.QueryRequest":{"description":"QueryRequest defines the parameters for a particular query request\nby an interchain account.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"data defines the payload of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"},"path":{"type":"string","title":"path defines the path of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"}}},"ibc.applications.interchain_accounts.v1.InterchainAccountPacketData":{"description":"InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.","type":"object","properties":{"data":{"type":"string","format":"byte"},"memo":{"type":"string"},"type":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.Type"}}},"ibc.applications.interchain_accounts.v1.Type":{"description":"- TYPE_UNSPECIFIED: Default zero value enumeration\n - TYPE_EXECUTE_TX: Execute a transaction on an interchain accounts host chain","type":"string","title":"Type defines a classification of message issued from a controller chain to its associated interchain accounts\nhost","default":"TYPE_UNSPECIFIED","enum":["TYPE_UNSPECIFIED","TYPE_EXECUTE_TX"]},"ibc.applications.transfer.v1.Denom":{"description":"Denom holds the base denom of a Token and a trace of the chains it was sent through.","type":"object","properties":{"base":{"type":"string","title":"the base token denomination"},"trace":{"type":"array","title":"the trace of the token","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Hop"}}}},"ibc.applications.transfer.v1.Hop":{"type":"object","title":"Hop defines a port ID, channel ID pair specifying a unique \"hop\" in a trace","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.transfer.v1.MsgTransfer":{"type":"object","title":"MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between\nICS20 enabled chains. See ICS Spec here:\nhttps://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures","properties":{"encoding":{"type":"string","title":"optional encoding"},"memo":{"type":"string","title":"optional memo"},"receiver":{"type":"string","title":"the recipient address on the destination chain"},"sender":{"type":"string","title":"the sender address"},"source_channel":{"type":"string","title":"the channel by which the packet will be sent"},"source_port":{"type":"string","title":"the port on which the packet will be sent"},"timeout_height":{"description":"Timeout height relative to the current block height.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted.","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"description":"Timeout timestamp in absolute nanoseconds since unix epoch.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set.","type":"string","format":"uint64"},"token":{"title":"token to be transferred","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.applications.transfer.v1.MsgTransferResponse":{"description":"MsgTransferResponse defines the Msg/Transfer response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64","title":"sequence number of the transfer packet sent"}}},"ibc.applications.transfer.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"params":{"description":"params defines the transfer parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.transfer.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibc.applications.transfer.v1.Params":{"description":"Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false.","type":"object","properties":{"receive_enabled":{"description":"receive_enabled enables or disables all cross-chain token transfers to this\nchain.","type":"boolean"},"send_enabled":{"description":"send_enabled enables or disables all cross-chain token transfers from this\nchain.","type":"boolean"}}},"ibc.applications.transfer.v1.QueryDenomHashResponse":{"description":"QueryDenomHashResponse is the response type for the Query/DenomHash RPC\nmethod.","type":"object","properties":{"hash":{"description":"hash (in hex format) of the denomination trace information.","type":"string"}}},"ibc.applications.transfer.v1.QueryDenomResponse":{"description":"QueryDenomResponse is the response type for the Query/Denom RPC\nmethod.","type":"object","properties":{"denom":{"description":"denom returns the requested denomination.","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}}},"ibc.applications.transfer.v1.QueryDenomsResponse":{"description":"QueryDenomsResponse is the response type for the Query/Denoms RPC\nmethod.","type":"object","properties":{"denoms":{"description":"denoms returns all denominations.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.applications.transfer.v1.QueryEscrowAddressResponse":{"description":"QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.","type":"object","properties":{"escrow_address":{"type":"string","title":"the escrow account address"}}},"ibc.applications.transfer.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"}}},"ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse":{"description":"QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.core.channel.v1.Channel":{"description":"Channel defines pipeline for exactly-once packet delivery between specific\nmodules on separate blockchains, which has at least one end capable of\nsending packets and one end capable of receiving packets.","type":"object","properties":{"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.Counterparty":{"type":"object","title":"Counterparty defines a channel end counterparty","properties":{"channel_id":{"type":"string","title":"channel end on the counterparty chain"},"port_id":{"description":"port on the counterparty chain which owns the other end of the channel.","type":"string"}}},"ibc.core.channel.v1.IdentifiedChannel":{"description":"IdentifiedChannel defines a channel with additional port and channel\nidentifier fields.","type":"object","properties":{"channel_id":{"type":"string","title":"channel identifier"},"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"port_id":{"type":"string","title":"port identifier"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.MsgAcknowledgement":{"type":"object","title":"MsgAcknowledgement receives incoming IBC acknowledgement","properties":{"acknowledgement":{"type":"string","format":"byte"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgChannelCloseConfirm":{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseConfirmResponse":{"description":"MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelCloseInit":{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseInitResponse":{"description":"MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenAck":{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"counterparty_channel_id":{"type":"string"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenAckResponse":{"description":"MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenConfirm":{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenConfirmResponse":{"description":"MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenInit":{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","type":"object","properties":{"channel":{"$ref":"#/definitions/ibc.core.channel.v1.Channel"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenInitResponse":{"description":"MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTry":{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","type":"object","properties":{"channel":{"description":"NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC.","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"previous_channel_id":{"description":"Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC.","type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTryResponse":{"description":"MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacket":{"type":"object","title":"MsgRecvPacket receives incoming IBC packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnClose":{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","type":"object","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_close":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnCloseResponse":{"description":"MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.Order":{"description":"- ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\nwhich they were sent.\n - ORDER_ORDERED: packets are delivered exactly in the order which they were sent","type":"string","title":"Order defines if a channel is ORDERED or UNORDERED","default":"ORDER_NONE_UNSPECIFIED","enum":["ORDER_NONE_UNSPECIFIED","ORDER_UNORDERED","ORDER_ORDERED"]},"ibc.core.channel.v1.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"data":{"type":"string","format":"byte","title":"actual opaque bytes transferred directly to the application module"},"destination_channel":{"description":"identifies the channel end on the receiving chain.","type":"string"},"destination_port":{"description":"identifies the port on the receiving chain.","type":"string"},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_channel":{"description":"identifies the channel end on the sending chain.","type":"string"},"source_port":{"description":"identifies the port on the sending chain.","type":"string"},"timeout_height":{"title":"block height after which the packet times out","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"type":"string","format":"uint64","title":"block timestamp (in nanoseconds) after which the packet times out"}}},"ibc.core.channel.v1.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"channel_id":{"description":"channel unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"port_id":{"description":"channel port identifier.","type":"string"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v1.QueryChannelClientStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelConsensusStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelResponse":{"description":"QueryChannelResponse is the response type for the Query/Channel RPC method.\nBesides the Channel end, it includes a proof and the height from which the\nproof was retrieved.","type":"object","properties":{"channel":{"title":"channel associated with the request identifiers","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelsResponse":{"description":"QueryChannelsResponse is the response type for the Query/Channels RPC method.","type":"object","properties":{"channels":{"description":"list of stored channels of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryConnectionChannelsResponse":{"type":"object","title":"QueryConnectionChannelsResponse is the Response type for the\nQuery/QueryConnectionChannels RPC method","properties":{"channels":{"description":"list of channels associated with a connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryNextSequenceReceiveResponse":{"type":"object","title":"QuerySequenceResponse is the response type for the\nQuery/QueryNextSequenceReceiveResponse RPC method","properties":{"next_sequence_receive":{"type":"string","format":"uint64","title":"next sequence receive number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the request type for the\nQuery/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementResponse":{"type":"object","title":"QueryPacketAcknowledgementResponse defines the client query response for a\npacket which also includes a proof and the height from which the\nproof was retrieved","properties":{"acknowledgement":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketCommitmentResponse":{"type":"object","title":"QueryPacketCommitmentResponse defines the client query response for a packet\nwhich also includes a proof and the height from which the proof was\nretrieved","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketCommitmentsResponse":{"type":"object","title":"QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method","properties":{"commitments":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketReceiptResponse":{"type":"object","title":"QueryPacketReceiptResponse defines the client query response for a packet\nreceipt which also includes a proof, and the height from which the proof was\nretrieved","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v1.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.channel.v1.State":{"description":"State defines if a channel is in one of the following states:\nCLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A channel has just started the opening handshake.\n - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n - STATE_OPEN: A channel has completed the handshake. Open channels are\nready to send and receive packets.\n - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\npackets.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN","STATE_CLOSED"]},"ibc.core.channel.v2.Acknowledgement":{"description":"Acknowledgement contains a list of all ack results associated with a single packet.\nIn the case of a successful receive, the acknowledgement will contain an app acknowledgement\nfor each application that received a payload in the same order that the payloads were sent\nin the packet.\nIf the receive is not successful, the acknowledgement will contain a single app acknowledgment\nwhich will be a constant error acknowledgment as defined by the IBC v2 protocol.","type":"object","properties":{"app_acknowledgements":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.channel.v2.MsgAcknowledgement":{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","type":"object","properties":{"acknowledgement":{"$ref":"#/definitions/ibc.core.channel.v2.Acknowledgement"},"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgRecvPacket":{"description":"MsgRecvPacket receives an incoming IBC packet.","type":"object","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgSendPacket":{"description":"MsgSendPacket sends an outgoing IBC packet.","type":"object","properties":{"payloads":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"signer":{"type":"string"},"source_client":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgSendPacketResponse":{"description":"MsgSendPacketResponse defines the Msg/SendPacket response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"destination_client":{"description":"identifies the receiving client on the receiving chain.","type":"string"},"payloads":{"description":"a list of payloads, each one for a specific application.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_client":{"description":"identifies the sending client on the sending chain.","type":"string"},"timeout_timestamp":{"description":"timeout timestamp in seconds after which the packet times out.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"client_id":{"description":"client unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.Payload":{"type":"object","title":"Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes)","properties":{"destination_port":{"description":"specifies the destination port of the packet.","type":"string"},"encoding":{"description":"the encoding used for the provided value.","type":"string"},"source_port":{"description":"specifies the source port of the packet.","type":"string"},"value":{"description":"the raw bytes for the payload.","type":"string","format":"byte"},"version":{"description":"version of the specified application.","type":"string"}}},"ibc.core.channel.v2.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementResponse":{"description":"QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method.","type":"object","properties":{"acknowledgement":{"type":"string","format":"byte","title":"acknowledgement associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketCommitmentResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketCommitmentsResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitments":{"description":"collection of packet commitments for the requested channel identifier.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"description":"query block height.","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"description":"pagination response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketReceiptResponse":{"description":"QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method.","type":"object","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence or absence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v2.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.client.v1.ConsensusStateWithHeight":{"description":"ConsensusStateWithHeight defines a consensus state with an additional height\nfield.","type":"object","properties":{"consensus_state":{"title":"consensus state","$ref":"#/definitions/google.protobuf.Any"},"height":{"title":"consensus state height","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.Height":{"description":"Normally the RevisionHeight is incremented at each height while keeping\nRevisionNumber the same. However some consensus algorithms may choose to\nreset the height in certain conditions e.g. hard forks, state-machine\nbreaking changes In these cases, the RevisionNumber is incremented so that\nheight continues to be monitonically increasing even as the RevisionHeight\ngets reset\n\nPlease note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag.\nThis enforces the Go json marshaller to always emit zero values for both revision_number and revision_height.","type":"object","title":"Height is a monotonically increasing data type\nthat can be compared against another Height for the purposes of updating and\nfreezing clients","properties":{"revision_height":{"type":"string","format":"uint64","title":"the height within the given revision"},"revision_number":{"type":"string","format":"uint64","title":"the revision that the client is currently on"}}},"ibc.core.client.v1.IdentifiedClientState":{"description":"IdentifiedClientState defines a client state with an additional client\nidentifier field.","type":"object","properties":{"client_id":{"type":"string","title":"client identifier"},"client_state":{"title":"client state","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgCreateClient":{"type":"object","title":"MsgCreateClient defines a message to create an IBC client","properties":{"client_state":{"title":"light client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"description":"consensus state associated with the client that corresponds to a given\nheight.","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgCreateClientResponse":{"description":"MsgCreateClientResponse defines the Msg/CreateClient response type.","type":"object","properties":{"client_id":{"type":"string"}}},"ibc.core.client.v1.MsgDeleteClientCreator":{"type":"object","title":"MsgDeleteClientCreator defines a message to delete the client creator of a client","properties":{"client_id":{"type":"string","title":"client identifier"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgDeleteClientCreatorResponse":{"description":"MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type.","type":"object"},"ibc.core.client.v1.MsgIBCSoftwareUpgrade":{"type":"object","title":"MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal","properties":{"plan":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"},"signer":{"type":"string","title":"signer address"},"upgraded_client_state":{"description":"An UpgradedClientState must be provided to perform an IBC breaking upgrade.\nThis will make the chain commit to the correct upgraded (self) client state\nbefore the upgrade occurs, so that connecting chains can verify that the\nnew upgraded client is valid by verifying a proof on the previous version\nof the chain. This will allow IBC connections to persist smoothly across\nplanned chain upgrades. Correspondingly, the UpgradedClientState field has been\ndeprecated in the Cosmos SDK to allow for this logic to exist solely in\nthe 02-client module.","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse":{"description":"MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type.","type":"object"},"ibc.core.client.v1.MsgRecoverClient":{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"subject_client_id":{"type":"string","title":"the client identifier for the client to be updated if the proposal passes"},"substitute_client_id":{"type":"string","title":"the substitute client identifier for the client which will replace the subject\nclient"}}},"ibc.core.client.v1.MsgRecoverClientResponse":{"description":"MsgRecoverClientResponse defines the Msg/RecoverClient response type.","type":"object"},"ibc.core.client.v1.MsgSubmitMisbehaviour":{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"misbehaviour":{"title":"misbehaviour used for freezing the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgSubmitMisbehaviourResponse":{"description":"MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response\ntype.","type":"object"},"ibc.core.client.v1.MsgUpdateClient":{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_message":{"title":"client message to update the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateClientResponse":{"description":"MsgUpdateClientResponse defines the Msg/UpdateClient response type.","type":"object"},"ibc.core.client.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","type":"object","properties":{"params":{"description":"params defines the client parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.client.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.client.v1.MsgUpgradeClient":{"type":"object","title":"MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client\nstate","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_state":{"title":"upgraded client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"title":"upgraded consensus state, only contains enough information to serve as a\nbasis of trust in update logic","$ref":"#/definitions/google.protobuf.Any"},"proof_upgrade_client":{"type":"string","format":"byte","title":"proof that old chain committed to new client"},"proof_upgrade_consensus_state":{"type":"string","format":"byte","title":"proof that old chain committed to new consensus state"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpgradeClientResponse":{"description":"MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.","type":"object"},"ibc.core.client.v1.Params":{"description":"Params defines the set of IBC light client parameters.","type":"object","properties":{"allowed_clients":{"description":"allowed_clients defines the list of allowed client state types which can be created\nand interacted with. If a client type is removed from the allowed clients list, usage\nof this client will be disabled until it is added again to the list.","type":"array","items":{"type":"string"}}}},"ibc.core.client.v1.QueryClientCreatorResponse":{"description":"QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC\nmethod.","type":"object","properties":{"creator":{"type":"string","title":"creator of the client"}}},"ibc.core.client.v1.QueryClientParamsResponse":{"description":"QueryClientParamsResponse is the response type for the Query/ClientParams RPC\nmethod.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.client.v1.Params"}}},"ibc.core.client.v1.QueryClientStateResponse":{"description":"QueryClientStateResponse is the response type for the Query/ClientState RPC\nmethod. Besides the client state, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryClientStatesResponse":{"description":"QueryClientStatesResponse is the response type for the Query/ClientStates RPC\nmethod.","type":"object","properties":{"client_states":{"description":"list of stored ClientStates of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryClientStatusResponse":{"description":"QueryClientStatusResponse is the response type for the Query/ClientStatus RPC\nmethod. It returns the current status of the IBC client.","type":"object","properties":{"status":{"type":"string"}}},"ibc.core.client.v1.QueryConsensusStateHeightsResponse":{"type":"object","title":"QueryConsensusStateHeightsResponse is the response type for the\nQuery/ConsensusStateHeights RPC method","properties":{"consensus_state_heights":{"type":"array","title":"consensus state heights","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.Height"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryConsensusStateResponse":{"type":"object","title":"QueryConsensusStateResponse is the response type for the Query/ConsensusState\nRPC method","properties":{"consensus_state":{"title":"consensus state associated with the client identifier at the given height","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryConsensusStatesResponse":{"type":"object","title":"QueryConsensusStatesResponse is the response type for the\nQuery/ConsensusStates RPC method","properties":{"consensus_states":{"type":"array","title":"consensus states associated with the identifier","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.ConsensusStateWithHeight"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryUpgradedClientStateResponse":{"description":"QueryUpgradedClientStateResponse is the response type for the\nQuery/UpgradedClientState RPC method.","type":"object","properties":{"upgraded_client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the\nQuery/UpgradedConsensusState RPC method.","type":"object","properties":{"upgraded_consensus_state":{"title":"Consensus state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryVerifyMembershipRequest":{"type":"object","title":"QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method","properties":{"block_delay":{"type":"string","format":"uint64","title":"optional block delay"},"client_id":{"description":"client unique identifier.","type":"string"},"merkle_path":{"description":"the commitment key path.","$ref":"#/definitions/ibc.core.commitment.v2.MerklePath"},"proof":{"description":"the proof to be verified by the client.","type":"string","format":"byte"},"proof_height":{"description":"the height of the commitment root at which the proof is verified.","$ref":"#/definitions/ibc.core.client.v1.Height"},"time_delay":{"type":"string","format":"uint64","title":"optional time delay"},"value":{"description":"the value which is proven.","type":"string","format":"byte"}}},"ibc.core.client.v1.QueryVerifyMembershipResponse":{"type":"object","title":"QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method","properties":{"success":{"description":"boolean indicating success or failure of proof verification.","type":"boolean"}}},"ibc.core.client.v2.Config":{"type":"object","title":"Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages\nfor a given client.\nIf it is set, then only relayers in the allow list can send v2 messages\nIf it is not set, then the client allows permissionless relaying of v2 messages","properties":{"allowed_relayers":{"type":"array","title":"allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client","items":{"type":"string"}}}},"ibc.core.client.v2.CounterpartyInfo":{"type":"object","title":"CounterpartyInfo defines the key that the counterparty will use to message our client","properties":{"client_id":{"type":"string","title":"client identifier is the identifier used to send packet messages to our client"},"merkle_prefix":{"type":"array","title":"merkle prefix key is the prefix that ics provable keys are stored under","items":{"type":"string","format":"byte"}}}},"ibc.core.client.v2.MsgRegisterCounterparty":{"type":"object","title":"MsgRegisterCounterparty defines a message to register a counterparty on a client","properties":{"client_id":{"type":"string","title":"client identifier"},"counterparty_client_id":{"type":"string","title":"counterparty client identifier"},"counterparty_merkle_prefix":{"type":"array","title":"counterparty merkle prefix","items":{"type":"string","format":"byte"}},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgRegisterCounterpartyResponse":{"description":"MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type.","type":"object"},"ibc.core.client.v2.MsgUpdateClientConfig":{"type":"object","title":"MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client","properties":{"client_id":{"type":"string","title":"client identifier"},"config":{"description":"NOTE: All fields in the config must be supplied.","title":"allowed relayers","$ref":"#/definitions/ibc.core.client.v2.Config"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgUpdateClientConfigResponse":{"description":"MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type.","type":"object"},"ibc.core.client.v2.QueryConfigResponse":{"type":"object","title":"QueryConfigResponse is the response type for the Query/Config RPC method","properties":{"config":{"$ref":"#/definitions/ibc.core.client.v2.Config"}}},"ibc.core.client.v2.QueryCounterpartyInfoResponse":{"description":"QueryCounterpartyInfoResponse is the response type for the\nQuery/CounterpartyInfo RPC method.","type":"object","properties":{"counterparty_info":{"$ref":"#/definitions/ibc.core.client.v2.CounterpartyInfo"}}},"ibc.core.commitment.v1.MerklePrefix":{"type":"object","title":"MerklePrefix is merkle path prefixed to the key.\nThe constructed key from the Path and the key will be append(Path.KeyPath,\nappend(Path.KeyPrefix, key...))","properties":{"key_prefix":{"type":"string","format":"byte"}}},"ibc.core.commitment.v2.MerklePath":{"description":"MerklePath is the path used to verify commitment proofs, which can be an\narbitrary structured object (defined by a commitment type).\nICS-23 verification supports membership proofs for nested merkle trees.\nThe ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix.\nThe IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash\nstored in the consensus state of the client.\nEach element of the path represents the key of a merkle tree from the root to the leaf.\nThe elements of the path before the final element must be the path to the tree that contains\nthe ICS24 provable store. Thus, it should remain constant for all ICS24 proofs.\nThe final element of the path is the key of the leaf in the ICS24 provable store,\nThus IBC core will append the ICS24 path to the final element of the MerklePath\nstored in the counterparty to create the full path to the leaf for proof verification.\nExamples:\nCosmos SDK:\nThe Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes\nare hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"ibc\", \"\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"ibc\", \"{packetCommitmentPath}\"] which will then be used for final verification.\nEthereum:\nThe Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed\nby the smart contract state. Each smart contract has a specific prefix reserved within the global trie.\nThus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie.\nSince there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"IBCCoreContractAddressStoragePrefix\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"IBCCoreContractAddressStoragePrefix{packetCommitmentPath}\"] which will then be used for final\nverification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the\nconsensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24\nprovable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified\nby the client against the root hash in the client's consensus state.","type":"object","properties":{"key_path":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.connection.v1.ConnectionEnd":{"description":"ConnectionEnd defines a stateful object on a chain connected to another\nseparate one.\nNOTE: there must only be 2 defined ConnectionEnds to establish\na connection between two chains.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period that must pass before a consensus state can be used for\npacket-verification NOTE: delay period logic is only implemented by some\nclients.","type":"string","format":"uint64"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"description":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.Counterparty":{"description":"Counterparty defines the counterparty chain associated with a connection end.","type":"object","properties":{"client_id":{"description":"identifies the client on the counterparty chain associated with a given\nconnection.","type":"string"},"connection_id":{"description":"identifies the connection end on the counterparty chain associated with a\ngiven connection.","type":"string"},"prefix":{"description":"commitment merkle prefix of the counterparty chain.","$ref":"#/definitions/ibc.core.commitment.v1.MerklePrefix"}}},"ibc.core.connection.v1.IdentifiedConnection":{"description":"IdentifiedConnection defines a connection with additional connection\nidentifier field.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period associated with this connection.","type":"string","format":"uint64"},"id":{"description":"connection identifier.","type":"string"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"type":"array","title":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.MsgConnectionOpenAck":{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","type":"object","properties":{"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"connection_id":{"type":"string"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty_connection_id":{"type":"string"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain B: `UNINITIALIZED -\u003e\nTRYOPEN`"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenAckResponse":{"description":"MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenConfirm":{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","type":"object","properties":{"connection_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte","title":"proof for the change of the connection state on Chain A: `INIT -\u003e OPEN`"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenConfirmResponse":{"description":"MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm\nresponse type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenInit":{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","type":"object","properties":{"client_id":{"type":"string"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"type":"string","format":"uint64"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenInitResponse":{"description":"MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response\ntype.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenTry":{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","type":"object","properties":{"client_id":{"type":"string"},"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"counterparty_versions":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}},"delay_period":{"type":"string","format":"uint64"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"previous_connection_id":{"description":"Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC.","type":"string"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain A: `UNINITIALIZED -\u003e\nINIT`"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenTryResponse":{"description":"MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type.","type":"object"},"ibc.core.connection.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","type":"object","properties":{"params":{"description":"params defines the connection parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.connection.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.connection.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.connection.v1.Params":{"description":"Params defines the set of Connection parameters.","type":"object","properties":{"max_expected_time_per_block":{"description":"maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the\nlargest amount of time that the chain might reasonably take to produce the next block under normal operating\nconditions. A safe choice is 3-5x the expected time per block.","type":"string","format":"uint64"}}},"ibc.core.connection.v1.QueryClientConnectionsResponse":{"type":"object","title":"QueryClientConnectionsResponse is the response type for the\nQuery/ClientConnections RPC method","properties":{"connection_paths":{"description":"slice of all the connection paths associated with a client.","type":"array","items":{"type":"string"}},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was generated","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionClientStateResponse":{"type":"object","title":"QueryConnectionClientStateResponse is the response type for the\nQuery/ConnectionClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionConsensusStateResponse":{"type":"object","title":"QueryConnectionConsensusStateResponse is the response type for the\nQuery/ConnectionConsensusState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionParamsResponse":{"description":"QueryConnectionParamsResponse is the response type for the Query/ConnectionParams RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.connection.v1.Params"}}},"ibc.core.connection.v1.QueryConnectionResponse":{"description":"QueryConnectionResponse is the response type for the Query/Connection RPC\nmethod. Besides the connection end, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"connection":{"title":"connection associated with the request identifier","$ref":"#/definitions/ibc.core.connection.v1.ConnectionEnd"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionsResponse":{"description":"QueryConnectionsResponse is the response type for the Query/Connections RPC\nmethod.","type":"object","properties":{"connections":{"description":"list of stored connections of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.IdentifiedConnection"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.connection.v1.State":{"description":"State defines if a connection is in one of the following states:\nINIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A connection end has just started the opening handshake.\n - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\nchain.\n - STATE_OPEN: A connection end has completed the handshake.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN"]},"ibc.core.connection.v1.Version":{"description":"Version defines the versioning scheme used to negotiate the IBC version in\nthe connection handshake.","type":"object","properties":{"features":{"type":"array","title":"list of features compatible with the specified identifier","items":{"type":"string"}},"identifier":{"type":"string","title":"unique version identifier"}}},"ibc.lightclients.wasm.v1.MsgMigrateContract":{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the new wasm byte code for the contract"},"client_id":{"type":"string","title":"the client id of the contract"},"msg":{"type":"string","format":"byte","title":"the json encoded message to be passed to the contract on migration"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgMigrateContractResponse":{"type":"object","title":"MsgMigrateContractResponse defines the response type for the MigrateContract rpc"},"ibc.lightclients.wasm.v1.MsgRemoveChecksum":{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash to be removed from the store"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse":{"type":"object","title":"MsgStoreChecksumResponse defines the response type for the StoreCode rpc"},"ibc.lightclients.wasm.v1.MsgStoreCode":{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"wasm_byte_code":{"type":"string","format":"byte","title":"wasm byte code of light client contract. It can be raw or gzip compressed"}}},"ibc.lightclients.wasm.v1.MsgStoreCodeResponse":{"type":"object","title":"MsgStoreCodeResponse defines the response type for the StoreCode rpc","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the stored code"}}},"ibc.lightclients.wasm.v1.QueryChecksumsResponse":{"description":"QueryChecksumsResponse is the response type for the Query/Checksums RPC method.","type":"object","properties":{"checksums":{"description":"checksums is a list of the hex encoded checksums of all wasm codes stored.","type":"array","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.lightclients.wasm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC method.","type":"object","properties":{"data":{"type":"string","format":"byte"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.AuditPeerObservation":{"type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the window.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.AuditReport":{"type":"object","properties":{"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.AuditSelfReport":{"type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.MsgSubmitAuditReport":{"type":"object","properties":{"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgSubmitAuditReportResponse":{"type":"object"},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"max_probe_targets_per_window":{"type":"integer","format":"int64"},"min_probe_targets_per_window":{"type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"reporting_window_blocks":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.QueryAuditReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.AuditReport"}}},"lumera.audit.v1.QueryAuditReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditReport"}}}},"lumera.audit.v1.QueryCurrentWindowResponse":{"type":"object","properties":{"window_end_height":{"type":"string","format":"int64"},"window_id":{"type":"string","format":"uint64"},"window_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QuerySelfReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SelfReport"}}}},"lumera.audit.v1.QuerySupernodeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SupernodeReport"}}}},"lumera.audit.v1.SelfReport":{"type":"object","properties":{"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.SupernodeReport":{"type":"object","properties":{"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"tendermint.abci.CheckTxType":{"type":"string","default":"NEW","enum":["NEW","RECHECK"]},"tendermint.abci.CommitInfo":{"type":"object","properties":{"round":{"type":"integer","format":"int32"},"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.VoteInfo"}}}},"tendermint.abci.Event":{"description":"Event allows application developers to attach additional information to\nResponseFinalizeBlock and ResponseCheckTx.\nLater, transactions may be queried using these events.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.EventAttribute"}},"type":{"type":"string"}}},"tendermint.abci.EventAttribute":{"description":"EventAttribute is a single key-value pair, associated with an event.","type":"object","properties":{"index":{"type":"boolean","title":"nondeterministic"},"key":{"type":"string"},"value":{"type":"string"}}},"tendermint.abci.ExecTxResult":{"description":"ExecTxResult contains results of executing one individual transaction.\n\n* Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","title":"nondeterministic","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ExtendedCommitInfo":{"description":"ExtendedCommitInfo is similar to CommitInfo except that it is only used in\nthe PrepareProposal request such that CometBFT can provide vote extensions\nto the application.","type":"object","properties":{"round":{"description":"The round at which the block proposer decided in the previous height.","type":"integer","format":"int32"},"votes":{"description":"List of validators' addresses in the last validator set with their voting\ninformation, including vote extensions.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExtendedVoteInfo"}}}},"tendermint.abci.ExtendedVoteInfo":{"type":"object","properties":{"block_id_flag":{"title":"block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all","$ref":"#/definitions/tendermint.types.BlockIDFlag"},"extension_signature":{"type":"string","format":"byte","title":"Vote extension signature created by CometBFT"},"validator":{"description":"The validator that sent the vote.","$ref":"#/definitions/tendermint.abci.Validator"},"vote_extension":{"description":"Non-deterministic extension provided by the sending validator's application.","type":"string","format":"byte"}}},"tendermint.abci.Misbehavior":{"type":"object","properties":{"height":{"type":"string","format":"int64","title":"The height when the offense occurred"},"time":{"type":"string","format":"date-time","title":"The corresponding time where the offense occurred"},"total_voting_power":{"type":"string","format":"int64","title":"Total voting power of the validator set in case the ABCI application does\nnot store historical validators.\nhttps://github.com/tendermint/tendermint/issues/4581"},"type":{"$ref":"#/definitions/tendermint.abci.MisbehaviorType"},"validator":{"title":"The offending validator","$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.abci.MisbehaviorType":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","DUPLICATE_VOTE","LIGHT_CLIENT_ATTACK"]},"tendermint.abci.RequestApplySnapshotChunk":{"type":"object","title":"Applies a snapshot chunk","properties":{"chunk":{"type":"string","format":"byte"},"index":{"type":"integer","format":"int64"},"sender":{"type":"string"}}},"tendermint.abci.RequestCheckTx":{"type":"object","properties":{"tx":{"type":"string","format":"byte"},"type":{"$ref":"#/definitions/tendermint.abci.CheckTxType"}}},"tendermint.abci.RequestCommit":{"type":"object"},"tendermint.abci.RequestEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.RequestExtendVote":{"type":"object","title":"Extends a vote with application-injected data","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this vote may be referring to"},"height":{"type":"string","format":"int64","title":"the height of the extended vote"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time","title":"info of the block that this vote may be referring to"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFinalizeBlock":{"type":"object","properties":{"decided_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"hash":{"description":"hash is the merkle root hash of the fields of the decided block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"proposer_address is the address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFlush":{"type":"object"},"tendermint.abci.RequestInfo":{"type":"object","properties":{"abci_version":{"type":"string"},"block_version":{"type":"string","format":"uint64"},"p2p_version":{"type":"string","format":"uint64"},"version":{"type":"string"}}},"tendermint.abci.RequestInitChain":{"type":"object","properties":{"app_state_bytes":{"type":"string","format":"byte"},"chain_id":{"type":"string"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"initial_height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.RequestListSnapshots":{"type":"object","title":"lists available snapshots"},"tendermint.abci.RequestLoadSnapshotChunk":{"type":"object","title":"loads a snapshot chunk","properties":{"chunk":{"type":"integer","format":"int64"},"format":{"type":"integer","format":"int64"},"height":{"type":"string","format":"uint64"}}},"tendermint.abci.RequestOfferSnapshot":{"type":"object","title":"offers a snapshot to the application","properties":{"app_hash":{"type":"string","format":"byte","title":"light client-verified app hash for snapshot height"},"snapshot":{"title":"snapshot offered by peers","$ref":"#/definitions/tendermint.abci.Snapshot"}}},"tendermint.abci.RequestPrepareProposal":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"local_last_commit":{"$ref":"#/definitions/tendermint.abci.ExtendedCommitInfo"},"max_tx_bytes":{"description":"the modified transactions cannot exceed this size.","type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"address of the public key of the validator proposing the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"description":"txs is an array of transactions that will be included in a block,\nsent to the app for possible modifications.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestProcessProposal":{"type":"object","properties":{"hash":{"description":"hash is the merkle root hash of the fields of the proposed block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestQuery":{"type":"object","properties":{"data":{"type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"path":{"type":"string"},"prove":{"type":"boolean"}}},"tendermint.abci.RequestVerifyVoteExtension":{"type":"object","title":"Verify the vote extension","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this received vote corresponds to"},"height":{"type":"string","format":"int64"},"validator_address":{"type":"string","format":"byte","title":"the validator that signed the vote extension"},"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseApplySnapshotChunk":{"type":"object","properties":{"refetch_chunks":{"type":"array","title":"Chunks to refetch and reapply","items":{"type":"integer","format":"int64"}},"reject_senders":{"type":"array","title":"Chunk senders to reject and ban","items":{"type":"string"}},"result":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk.Result"}}},"tendermint.abci.ResponseApplySnapshotChunk.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Chunk successfully accepted\n - ABORT: Abort all snapshot restoration\n - RETRY: Retry chunk (combine with refetch and reject)\n - RETRY_SNAPSHOT: Retry snapshot (combine with refetch and reject)\n - REJECT_SNAPSHOT: Reject this snapshot, try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","RETRY","RETRY_SNAPSHOT","REJECT_SNAPSHOT"]},"tendermint.abci.ResponseCheckTx":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ResponseCommit":{"type":"object","properties":{"retain_height":{"type":"string","format":"int64"}}},"tendermint.abci.ResponseEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.ResponseExtendVote":{"type":"object","properties":{"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseFinalizeBlock":{"type":"object","properties":{"app_hash":{"description":"app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was\ndeterministic. It is up to the application to decide which algorithm to use.","type":"string","format":"byte"},"consensus_param_updates":{"description":"updates to the consensus params, if any.","$ref":"#/definitions/tendermint.types.ConsensusParams"},"events":{"type":"array","title":"set of block events emmitted as part of executing the block","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"tx_results":{"type":"array","title":"the result of executing each transaction including the events\nthe particular transction emitted. This should match the order\nof the transactions delivered in the block itself","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExecTxResult"}},"validator_updates":{"description":"a list of updates to the validator set. These will reflect the validator set at current height + 2.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseFlush":{"type":"object"},"tendermint.abci.ResponseInfo":{"type":"object","properties":{"app_version":{"type":"string","format":"uint64"},"data":{"type":"string"},"last_block_app_hash":{"type":"string","format":"byte"},"last_block_height":{"type":"string","format":"int64"},"version":{"type":"string"}}},"tendermint.abci.ResponseInitChain":{"type":"object","properties":{"app_hash":{"type":"string","format":"byte"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseListSnapshots":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Snapshot"}}}},"tendermint.abci.ResponseLoadSnapshotChunk":{"type":"object","properties":{"chunk":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseOfferSnapshot":{"type":"object","properties":{"result":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot.Result"}}},"tendermint.abci.ResponseOfferSnapshot.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Snapshot accepted, apply chunks\n - ABORT: Abort all snapshot restoration\n - REJECT: Reject this specific snapshot, try others\n - REJECT_FORMAT: Reject all snapshots of this format, try others\n - REJECT_SENDER: Reject all snapshots from the sender(s), try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","REJECT","REJECT_FORMAT","REJECT_SENDER"]},"tendermint.abci.ResponsePrepareProposal":{"type":"object","properties":{"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.ResponseProcessProposal":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal.ProposalStatus"}}},"tendermint.abci.ResponseProcessProposal.ProposalStatus":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.ResponseQuery":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"description":"bytes data = 2; // use \"value\" instead.\n\nnondeterministic","type":"string"},"proof_ops":{"$ref":"#/definitions/tendermint.crypto.ProofOps"},"value":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseVerifyVoteExtension":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus"}}},"tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus":{"description":" - REJECT: Rejecting the vote extension will reject the entire precommit by the sender.\nIncorrectly implementing this thus has liveness implications as it may affect\nCometBFT's ability to receive 2/3+ valid votes to finalize the block.\nHonest nodes should never be rejected.","type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.Snapshot":{"type":"object","properties":{"chunks":{"type":"integer","format":"int64","title":"Number of chunks in the snapshot"},"format":{"type":"integer","format":"int64","title":"The application-specific snapshot format"},"hash":{"type":"string","format":"byte","title":"Arbitrary snapshot hash, equal only if identical"},"height":{"type":"string","format":"uint64","title":"The height at which the snapshot was taken"},"metadata":{"type":"string","format":"byte","title":"Arbitrary application metadata"}}},"tendermint.abci.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte","title":"The first 20 bytes of SHA256(public key)"},"power":{"description":"The voting power","type":"string","format":"int64","title":"PubKey pub_key = 2 [(gogoproto.nullable)=false];"}}},"tendermint.abci.ValidatorUpdate":{"type":"object","properties":{"power":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"}}},"tendermint.abci.VoteInfo":{"type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"validator":{"$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.crypto.ProofOp":{"type":"object","title":"ProofOp defines an operation used for calculating Merkle root\nThe data could be arbitrary format, providing nessecary data\nfor example neighbouring node hash","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"tendermint.crypto.ProofOps":{"type":"object","title":"ProofOps is Merkle proof defined by the list of ProofOps","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.crypto.ProofOp"}}}},"tendermint.crypto.PublicKey":{"type":"object","title":"PublicKey defines the keys available for use with Validators","properties":{"ed25519":{"type":"string","format":"byte"},"secp256k1":{"type":"string","format":"byte"}}},"tendermint.p2p.DefaultNodeInfo":{"type":"object","properties":{"channels":{"type":"string","format":"byte"},"default_node_id":{"type":"string"},"listen_addr":{"type":"string"},"moniker":{"type":"string"},"network":{"type":"string"},"other":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfoOther"},"protocol_version":{"$ref":"#/definitions/tendermint.p2p.ProtocolVersion"},"version":{"type":"string"}}},"tendermint.p2p.DefaultNodeInfoOther":{"type":"object","properties":{"rpc_address":{"type":"string"},"tx_index":{"type":"string"}}},"tendermint.p2p.ProtocolVersion":{"type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"},"p2p":{"type":"string","format":"uint64"}}},"tendermint.types.ABCIParams":{"description":"ABCIParams configure functionality specific to the Application Blockchain Interface.","type":"object","properties":{"vote_extensions_enable_height":{"description":"vote_extensions_enable_height configures the first height during which\nvote extensions will be enabled. During this specified height, and for all\nsubsequent heights, precommit messages that do not contain valid extension data\nwill be considered invalid. Prior to this height, vote extensions will not\nbe used or accepted by validators on the network.\n\nOnce enabled, vote extensions will be created by the application in ExtendVote,\npassed to the application for validation in VerifyVoteExtension and given\nto the application to use when proposing a block during PrepareProposal.","type":"string","format":"int64"}}},"tendermint.types.Block":{"type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/tendermint.types.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"tendermint.types.BlockID":{"type":"object","title":"BlockID","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"$ref":"#/definitions/tendermint.types.PartSetHeader"}}},"tendermint.types.BlockIDFlag":{"description":"- BLOCK_ID_FLAG_UNKNOWN: indicates an error condition\n - BLOCK_ID_FLAG_ABSENT: the vote was not received\n - BLOCK_ID_FLAG_COMMIT: voted for the block that received the majority\n - BLOCK_ID_FLAG_NIL: voted for nil","type":"string","title":"BlockIdFlag indicates which BlockID the signature is for","default":"BLOCK_ID_FLAG_UNKNOWN","enum":["BLOCK_ID_FLAG_UNKNOWN","BLOCK_ID_FLAG_ABSENT","BLOCK_ID_FLAG_COMMIT","BLOCK_ID_FLAG_NIL"]},"tendermint.types.BlockParams":{"description":"BlockParams contains limits on the block size.","type":"object","properties":{"max_bytes":{"type":"string","format":"int64","title":"Max block size, in bytes.\nNote: must be greater than 0"},"max_gas":{"type":"string","format":"int64","title":"Max gas per block.\nNote: must be greater or equal to -1"}}},"tendermint.types.Commit":{"description":"Commit contains the evidence that a block was committed by a set of validators.","type":"object","properties":{"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signatures":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.CommitSig"}}}},"tendermint.types.CommitSig":{"description":"CommitSig is a part of the Vote included in a Commit.","type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"signature":{"type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"validator_address":{"type":"string","format":"byte"}}},"tendermint.types.ConsensusParams":{"description":"ConsensusParams contains consensus critical parameters that determine the\nvalidity of blocks.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"block":{"$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"},"version":{"$ref":"#/definitions/tendermint.types.VersionParams"}}},"tendermint.types.Data":{"type":"object","title":"Data contains the set of transactions included in the block","properties":{"txs":{"description":"Txs that will be applied by state @ block.Height+1.\nNOTE: not all txs here are valid. We're just agreeing on the order first.\nThis means that block.AppHash does not include these txs.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.types.DuplicateVoteEvidence":{"description":"DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.","type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"},"validator_power":{"type":"string","format":"int64"},"vote_a":{"$ref":"#/definitions/tendermint.types.Vote"},"vote_b":{"$ref":"#/definitions/tendermint.types.Vote"}}},"tendermint.types.Evidence":{"type":"object","properties":{"duplicate_vote_evidence":{"$ref":"#/definitions/tendermint.types.DuplicateVoteEvidence"},"light_client_attack_evidence":{"$ref":"#/definitions/tendermint.types.LightClientAttackEvidence"}}},"tendermint.types.EvidenceList":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Evidence"}}}},"tendermint.types.EvidenceParams":{"description":"EvidenceParams determine how we handle evidence of malfeasance.","type":"object","properties":{"max_age_duration":{"description":"Max age of evidence, in time.\n\nIt should correspond with an app's \"unbonding period\" or other similar\nmechanism for handling [Nothing-At-Stake\nattacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).","type":"string"},"max_age_num_blocks":{"description":"Max age of evidence, in blocks.\n\nThe basic formula for calculating this is: MaxAgeDuration / {average block\ntime}.","type":"string","format":"int64"},"max_bytes":{"type":"string","format":"int64","title":"This sets the maximum size of total evidence in bytes that can be committed in a single block.\nand should fall comfortably under the max block bytes.\nDefault is 1048576 or 1MB"}}},"tendermint.types.Header":{"description":"Header defines the structure of a block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"type":"string","format":"byte","title":"original proposer of the block"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"tendermint.types.LightBlock":{"type":"object","properties":{"signed_header":{"$ref":"#/definitions/tendermint.types.SignedHeader"},"validator_set":{"$ref":"#/definitions/tendermint.types.ValidatorSet"}}},"tendermint.types.LightClientAttackEvidence":{"description":"LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.","type":"object","properties":{"byzantine_validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}},"common_height":{"type":"string","format":"int64"},"conflicting_block":{"$ref":"#/definitions/tendermint.types.LightBlock"},"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"}}},"tendermint.types.PartSetHeader":{"type":"object","title":"PartsetHeader","properties":{"hash":{"type":"string","format":"byte"},"total":{"type":"integer","format":"int64"}}},"tendermint.types.SignedHeader":{"type":"object","properties":{"commit":{"$ref":"#/definitions/tendermint.types.Commit"},"header":{"$ref":"#/definitions/tendermint.types.Header"}}},"tendermint.types.SignedMsgType":{"description":"SignedMsgType is a type of signed message in the consensus.\n\n - SIGNED_MSG_TYPE_PREVOTE: Votes\n - SIGNED_MSG_TYPE_PROPOSAL: Proposals","type":"string","default":"SIGNED_MSG_TYPE_UNKNOWN","enum":["SIGNED_MSG_TYPE_UNKNOWN","SIGNED_MSG_TYPE_PREVOTE","SIGNED_MSG_TYPE_PRECOMMIT","SIGNED_MSG_TYPE_PROPOSAL"]},"tendermint.types.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"},"voting_power":{"type":"string","format":"int64"}}},"tendermint.types.ValidatorParams":{"description":"ValidatorParams restrict the public key types validators can use.\nNOTE: uses ABCI pubkey naming, not Amino names.","type":"object","properties":{"pub_key_types":{"type":"array","items":{"type":"string"}}}},"tendermint.types.ValidatorSet":{"type":"object","properties":{"proposer":{"$ref":"#/definitions/tendermint.types.Validator"},"total_voting_power":{"type":"string","format":"int64"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}}}},"tendermint.types.VersionParams":{"description":"VersionParams contains the ABCI application version.","type":"object","properties":{"app":{"type":"string","format":"uint64"}}},"tendermint.types.Vote":{"description":"Vote represents a prevote or precommit vote from validators for\nconsensus.","type":"object","properties":{"block_id":{"description":"zero if vote is nil.","$ref":"#/definitions/tendermint.types.BlockID"},"extension":{"description":"Vote extension provided by the application. Only valid for precommit\nmessages.","type":"string","format":"byte"},"extension_signature":{"description":"Vote extension signature by the validator if they participated in\nconsensus for the associated block.\nOnly valid for precommit messages.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signature":{"description":"Vote signature by the validator if they participated in consensus for the\nassociated block.","type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"type":{"$ref":"#/definitions/tendermint.types.SignedMsgType"},"validator_address":{"type":"string","format":"byte"},"validator_index":{"type":"integer","format":"int32"}}},"tendermint.version.Consensus":{"description":"Consensus captures the consensus rules for processing a block in the blockchain,\nincluding all blockchain data structures and the rules of the application's\nstate transition machine.","type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"}}}},"tags":[{"name":"Query"},{"name":"Msg"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file diff --git a/proto/lumera/audit/v1/audit.proto b/proto/lumera/audit/v1/audit.proto index 836e723..7e88dfd 100644 --- a/proto/lumera/audit/v1/audit.proto +++ b/proto/lumera/audit/v1/audit.proto @@ -18,56 +18,37 @@ message AuditSelfReport { double mem_usage_percent = 2; double disk_usage_percent = 3; - // Ordered like Params.required_open_ports. repeated PortState inbound_port_states = 4; uint32 failed_actions_count = 5; } message AuditPeerObservation { - string target_validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + string target_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - // Ordered like Params.required_open_ports. + // port_states[i] refers to required_open_ports[i] for the window. repeated PortState port_states = 2; } message AuditReport { - string reporter_validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; - string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 3; - int64 report_height = 4; + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + int64 report_height = 3; - AuditSelfReport self_report = 5 [(gogoproto.nullable) = false]; - repeated AuditPeerObservation peer_observations = 6; + AuditSelfReport self_report = 4 [(gogoproto.nullable) = false]; + repeated AuditPeerObservation peer_observations = 5; } -message AuditStatus { - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; - - uint64 last_reported_window_id = 2; - int64 last_report_height = 3; - - bool compliant = 4; - repeated string reasons = 5; - - // Summary reachability states (last evaluated window). - repeated PortState required_ports_state = 6; -} - -message PortEvidenceAggregate { - uint32 count = 1; - PortState first_state = 2; - bool conflict = 3; +// ProberTargets captures the deterministic prober -> targets mapping for a window. +message ProberTargets { + string prober_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + repeated string target_supernode_accounts = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; } message WindowSnapshot { uint64 window_id = 1; int64 window_start_height = 2; - bytes seed_bytes = 3; - - repeated string senders = 4 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; - repeated string receivers = 5 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; - - uint32 k_window = 6; + // assignments is the minimal per-window source-of-truth for prober -> targets mapping. + repeated ProberTargets assignments = 3 [(gogoproto.nullable) = false]; } diff --git a/proto/lumera/audit/v1/params.proto b/proto/lumera/audit/v1/params.proto index bceb0c7..e54ca57 100644 --- a/proto/lumera/audit/v1/params.proto +++ b/proto/lumera/audit/v1/params.proto @@ -11,7 +11,6 @@ message Params { option (gogoproto.equal) = true; uint64 reporting_window_blocks = 1; - uint64 missing_report_grace_blocks = 2; uint32 peer_quorum_reports = 3; uint32 min_probe_targets_per_window = 4; diff --git a/proto/lumera/audit/v1/query.proto b/proto/lumera/audit/v1/query.proto index 88a875b..cea912a 100644 --- a/proto/lumera/audit/v1/query.proto +++ b/proto/lumera/audit/v1/query.proto @@ -7,6 +7,7 @@ import "amino/amino.proto"; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos_proto/cosmos.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; import "lumera/audit/v1/params.proto"; import "lumera/audit/v1/audit.proto"; @@ -18,8 +19,27 @@ service Query { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/params"; } - rpc AuditStatus(QueryAuditStatusRequest) returns (QueryAuditStatusResponse) { - option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_status/{validator_address}"; + // CurrentWindow returns the current derived window boundaries at the current chain height. + rpc CurrentWindow(QueryCurrentWindowRequest) returns (QueryCurrentWindowResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/current_window"; + } + + rpc AuditReport(QueryAuditReportRequest) returns (QueryAuditReportResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_report/{window_id}/{supernode_account}"; + } + + rpc AuditReportsByReporter(QueryAuditReportsByReporterRequest) returns (QueryAuditReportsByReporterResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}"; + } + + // SupernodeReports returns all reports that include observations about the given supernode_account. + rpc SupernodeReports(QuerySupernodeReportsRequest) returns (QuerySupernodeReportsResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}"; + } + + // SelfReports returns self-reports submitted by the given supernode_account across windows. + rpc SelfReports(QuerySelfReportsRequest) returns (QuerySelfReportsResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}"; } } @@ -29,10 +49,64 @@ message QueryParamsResponse { Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } -message QueryAuditStatusRequest { - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +message QueryCurrentWindowRequest {} + +message QueryCurrentWindowResponse { + uint64 window_id = 1; + int64 window_start_height = 2; + int64 window_end_height = 3; +} + +message QueryAuditReportRequest { + uint64 window_id = 1; + string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; +} + +message QueryAuditReportResponse { + AuditReport report = 1 [(gogoproto.nullable) = false]; +} + +message QueryAuditReportsByReporterRequest { + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryAuditReportsByReporterResponse { + repeated AuditReport reports = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QuerySupernodeReportsRequest { + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +message SupernodeReport { + string reporter_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + int64 report_height = 3; + repeated PortState port_states = 4; +} + +message QuerySupernodeReportsResponse { + repeated SupernodeReport reports = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QuerySelfReportsRequest { + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +message SelfReport { + uint64 window_id = 1; + int64 report_height = 2; + AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; } -message QueryAuditStatusResponse { - AuditStatus status = 1 [(gogoproto.nullable) = false]; +message QuerySelfReportsResponse { + repeated SelfReport reports = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/tests/systemtests/audit_missing_report_enforcement_test.go b/tests/systemtests/audit_missing_report_enforcement_test.go new file mode 100644 index 0000000..cbcc3dd --- /dev/null +++ b/tests/systemtests/audit_missing_report_enforcement_test.go @@ -0,0 +1,62 @@ +//go:build system_test + +package system + +// This test validates missing-report enforcement in EndBlocker: +// - two ACTIVE supernodes are snapshotted as senders at window start +// - only one submits a report for the window +// - after `window_end + 1`, the missing sender is POSTPONED + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestAuditMissingReportPostponesSender(t *testing.T) { + const ( + reportingWindowBlocks = uint64(5) + ) + const originHeight = int64(1) + + sut.ModifyGenesisJSON(t, + setSupernodeParamsForAuditTests(t), + setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + ) + sut.StartChain(t) + + cli := NewLumeradCLI(t, sut, true) + n0 := getNodeIdentity(t, cli, "node0") + n1 := getNodeIdentity(t, cli, "node1") + + registerSupernode(t, cli, n0, "192.168.1.1") + registerSupernode(t, cli, n1, "192.168.1.2") + + currentHeight := sut.AwaitNextBlock(t) + // Use the next window after registration so both supernodes are in the sender snapshot for that window. + windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) + enforceHeight := windowStartHeight + int64(reportingWindowBlocks) + + awaitAtLeastHeight(t, windowStartHeight) + + seed := headerHashAtHeight(t, sut.rpcAddr, windowStartHeight) + senders := sortedStrings(n0.accAddr, n1.accAddr) + receivers := sortedStrings(n0.accAddr, n1.accAddr) + kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kWindow) + + targets0, ok := assignedTargets(seed, senders, receivers, kWindow, n0.accAddr) + require.True(t, ok) + require.Len(t, targets0, 1) + + self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + txResp := submitAuditReport(t, cli, n0.nodeName, windowID, self, []string{ + auditPeerObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, txResp) + + // node1 does not submit any report for this window -> should be postponed at enforceHeight. + awaitAtLeastHeight(t, enforceHeight) + + require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) +} diff --git a/tests/systemtests/audit_submit_and_query_test.go b/tests/systemtests/audit_submit_and_query_test.go new file mode 100644 index 0000000..6789ffe --- /dev/null +++ b/tests/systemtests/audit_submit_and_query_test.go @@ -0,0 +1,58 @@ +//go:build system_test + +package system + +// This test validates the "happy path" end-to-end: +// - supernode registration +// - audit report submission via CLI +// - querying stored report via gRPC +// +// Assertions: +// - the reporter's report is stored under (window_id, supernode_account) + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestAuditSubmitReportAndQuery(t *testing.T) { + const ( + // Keep windows long enough in real time to avoid end-blocker enforcement during the test. + reportingWindowBlocks = uint64(20) + ) + const originHeight = int64(1) + + sut.ModifyGenesisJSON(t, + setSupernodeParamsForAuditTests(t), + setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + ) + sut.StartChain(t) + + cli := NewLumeradCLI(t, sut, true) + n0 := getNodeIdentity(t, cli, "node0") + n1 := getNodeIdentity(t, cli, "node1") + + registerSupernode(t, cli, n0, "192.168.1.1") + registerSupernode(t, cli, n1, "192.168.1.2") + + currentHeight := sut.AwaitNextBlock(t) + // Always test against the next window boundary after registration so: + // - the snapshot includes the registered supernodes, + // - the window is guaranteed to be currently accepted at submission height. + windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) + awaitAtLeastHeight(t, windowStartHeight) + + // Construct a minimal report. + self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + var peerObs []string + + txResp := submitAuditReport(t, cli, n0.nodeName, windowID, self, peerObs) + RequireTxSuccess(t, txResp) + + // Query via gRPC instead of CLI JSON because AuditReport contains float fields and + // CLI JSON marshalling is currently broken ("unknown type float64") in this environment. + report := auditQueryReport(t, windowID, n0.accAddr) + require.Equal(t, n0.accAddr, report.SupernodeAccount) + require.Equal(t, windowID, report.WindowId) +} diff --git a/tests/systemtests/audit_test_helpers_test.go b/tests/systemtests/audit_test_helpers_test.go new file mode 100644 index 0000000..c941c93 --- /dev/null +++ b/tests/systemtests/audit_test_helpers_test.go @@ -0,0 +1,357 @@ +//go:build system_test + +package system + +// This file contains helper functions used by the audit module systemtests. +// +// Why helpers exist here: +// - The audit module behavior depends heavily on block height (window boundaries). +// - The systemtest harness runs a real multi-node testnet; we need stable ways to: +// - pick a safe window to test against (avoid racing enforcement), +// - derive deterministic peer targets (same logic as the keeper), +// - submit reports via CLI, +// - query results reliably (gRPC where CLI JSON marshalling is known to break). + +import ( + "context" + "encoding/binary" + "encoding/json" + "fmt" + "sort" + "strconv" + "strings" + "testing" + "time" + + client "github.com/cometbft/cometbft/rpc/client/http" + "github.com/stretchr/testify/require" + "github.com/tidwall/gjson" + "github.com/tidwall/sjson" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + + lcfg "github.com/LumeraProtocol/lumera/config" + audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +// setAuditParamsForFastWindows overrides audit module params in genesis so tests complete quickly. +func setAuditParamsForFastWindows(t *testing.T, reportingWindowBlocks uint64, peerQuorumReports, minTargets, maxTargets uint32, requiredOpenPorts []uint32) GenesisMutator { + return func(genesis []byte) []byte { + t.Helper() + + state := genesis + var err error + + state, err = sjson.SetRawBytes(state, "app_state.audit.params.reporting_window_blocks", []byte(fmt.Sprintf("%q", strconv.FormatUint(reportingWindowBlocks, 10)))) + require.NoError(t, err) + + state, err = sjson.SetRawBytes(state, "app_state.audit.params.peer_quorum_reports", []byte(strconv.FormatUint(uint64(peerQuorumReports), 10))) + require.NoError(t, err) + state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_probe_targets_per_window", []byte(strconv.FormatUint(uint64(minTargets), 10))) + require.NoError(t, err) + state, err = sjson.SetRawBytes(state, "app_state.audit.params.max_probe_targets_per_window", []byte(strconv.FormatUint(uint64(maxTargets), 10))) + require.NoError(t, err) + + portsJSON, err := json.Marshal(requiredOpenPorts) + require.NoError(t, err) + state, err = sjson.SetRawBytes(state, "app_state.audit.params.required_open_ports", portsJSON) + require.NoError(t, err) + + return state + } +} + +// setSupernodeParamsForAuditTests keeps supernode registration permissive for test environments. +// +// These tests register supernodes and then submit audit reports "on their behalf" using node keys. +// We keep minimum stake and min version permissive so registration is not the bottleneck. +func setSupernodeParamsForAuditTests(t *testing.T) GenesisMutator { + return func(genesis []byte) []byte { + t.Helper() + + state, err := sjson.SetRawBytes(genesis, "app_state.supernode.params.min_supernode_version", []byte(`"0.0.0"`)) + require.NoError(t, err) + + coinJSON := fmt.Sprintf(`{"denom":"%s","amount":"1"}`, lcfg.ChainDenom) + state, err = sjson.SetRawBytes(state, "app_state.supernode.params.minimum_stake_for_sn", []byte(coinJSON)) + require.NoError(t, err) + + return state + } +} + +func awaitAtLeastHeight(t *testing.T, height int64) { + t.Helper() + if sut.currentHeight >= height { + return + } + sut.AwaitBlockHeight(t, height) +} + +// pickWindowForStartAtOrAfter returns the first window whose start height is >= minStartHeight. +// This is a "ceiling" window picker. +func pickWindowForStartAtOrAfter(originHeight int64, windowBlocks uint64, minStartHeight int64) (windowID uint64, startHeight int64) { + if windowBlocks == 0 { + return 0, originHeight + } + if minStartHeight < originHeight { + minStartHeight = originHeight + } + + blocks := int64(windowBlocks) + delta := minStartHeight - originHeight + windowID = uint64((delta + blocks - 1) / blocks) // ceil(delta/blocks) + startHeight = originHeight + int64(windowID)*blocks + return windowID, startHeight +} + +// nextWindowAfterHeight returns the next window after the provided height. +// +// We use this in tests to: +// - register supernodes first, +// - then wait for the *next* window boundary to ensure snapshot inclusion and acceptance. +func nextWindowAfterHeight(originHeight int64, windowBlocks uint64, height int64) (windowID uint64, startHeight int64) { + if windowBlocks == 0 { + return 0, originHeight + } + if height < originHeight { + return 0, originHeight + } + blocks := int64(windowBlocks) + currentID := uint64((height - originHeight) / blocks) + windowID = currentID + 1 + startHeight = originHeight + int64(windowID)*blocks + return windowID, startHeight +} + +type testNodeIdentity struct { + nodeName string + accAddr string + valAddr string +} + +// getNodeIdentity reads the node's account and validator operator address from the systemtest keyring. +func getNodeIdentity(t *testing.T, cli *LumeradCli, nodeName string) testNodeIdentity { + t.Helper() + accAddr := cli.GetKeyAddr(nodeName) + valAddr := strings.TrimSpace(cli.Keys("keys", "show", nodeName, "--bech", "val", "-a")) + require.NotEmpty(t, accAddr) + require.NotEmpty(t, valAddr) + return testNodeIdentity{nodeName: nodeName, accAddr: accAddr, valAddr: valAddr} +} + +// registerSupernode registers a supernode using the node's own key as both: +// - the tx signer (via --from), +// - the supernode_account (so that later MsgSubmitAuditReport signatures match). +func registerSupernode(t *testing.T, cli *LumeradCli, id testNodeIdentity, ip string) { + t.Helper() + resp := cli.CustomCommand( + "tx", "supernode", "register-supernode", + id.valAddr, + ip, + id.accAddr, + "--from", id.nodeName, + ) + RequireTxSuccess(t, resp) + sut.AwaitNextBlock(t) +} + +// headerHashAtHeight fetches the block header hash at an exact height. +// The audit module uses ctx.HeaderHash() as the snapshot seed; the assignment logic needs this seed. +func headerHashAtHeight(t *testing.T, rpcAddr string, height int64) []byte { + t.Helper() + httpClient, err := client.New(rpcAddr, "/websocket") + require.NoError(t, err) + require.NoError(t, httpClient.Start()) + t.Cleanup(func() { _ = httpClient.Stop() }) + + res, err := httpClient.Block(context.Background(), &height) + require.NoError(t, err) + hash := res.Block.Header.Hash() + require.True(t, len(hash) >= 8, "expected header hash >= 8 bytes") + return []byte(hash) +} + +// computeKWindow replicates x/audit/v1/keeper.computeKWindow to keep tests deterministic and black-box. +// It computes how many peer targets each sender must probe this window. +func computeKWindow(peerQuorumReports, minTargets, maxTargets uint32, sendersCount, receiversCount int) uint32 { + if sendersCount <= 0 || receiversCount <= 1 { + return 0 + } + + a := uint64(sendersCount) + n := uint64(receiversCount) + q := uint64(peerQuorumReports) + kNeeded := (q*n + a - 1) / a + + kMin := uint64(minTargets) + kMax := uint64(maxTargets) + if kNeeded < kMin { + kNeeded = kMin + } + if kNeeded > kMax { + kNeeded = kMax + } + if kNeeded > n-1 { + kNeeded = n - 1 + } + + return uint32(kNeeded) +} + +// assignedTargets replicates x/audit/v1/keeper.assignedTargets. +// +// Notes: +// - The assignment is order-sensitive; the module enforces that peer observations match targets by index. +// - We use this to build exactly-valid test reports. +func assignedTargets(seed []byte, senders, receivers []string, kWindow uint32, senderSupernodeAccount string) ([]string, bool) { + k := int(kWindow) + if k == 0 || len(receivers) == 0 { + return []string{}, true + } + + senderIndex := -1 + for i, s := range senders { + if s == senderSupernodeAccount { + senderIndex = i + break + } + } + if senderIndex < 0 { + return nil, false + } + if len(seed) < 8 { + return nil, false + } + + n := len(receivers) + offsetU64 := binary.BigEndian.Uint64(seed[:8]) + offset := int(offsetU64 % uint64(n)) + + seen := make(map[int]struct{}, k) + out := make([]string, 0, k) + + for j := 0; j < k; j++ { + slot := senderIndex*k + j + candidate := (offset + slot) % n + + tries := 0 + for tries < n { + if receivers[candidate] != senderSupernodeAccount { + if _, ok := seen[candidate]; !ok { + break + } + } + candidate = (candidate + 1) % n + tries++ + } + if tries >= n { + break + } + + seen[candidate] = struct{}{} + out = append(out, receivers[candidate]) + } + + return out, true +} + +// auditSelfReportJSON builds the JSON payload for the positional self-report argument. +// AuditSelfReport contains float fields (cpu/mem/disk), so we keep values simple. +func auditSelfReportJSON(inboundPortStates []string) string { + bz, _ := json.Marshal(map[string]any{ + "cpu_usage_percent": 1.0, + "mem_usage_percent": 1.0, + "disk_usage_percent": 1.0, + "inbound_port_states": inboundPortStates, + "failed_actions_count": 0, + }) + return string(bz) +} + +// auditPeerObservationJSON builds the JSON payload for --peer-observations flag. +func auditPeerObservationJSON(targetSupernodeAccount string, portStates []string) string { + bz, _ := json.Marshal(map[string]any{ + "target_supernode_account": targetSupernodeAccount, + "port_states": portStates, + }) + return string(bz) +} + +// submitAuditReport submits a report using the AutoCLI command: +// +// tx audit submit-audit-report [window-id] [self-report-json] --peer-observations ... +// +// We keep it as a CLI call to validate the end-to-end integration path (signer handling, encoding). +func submitAuditReport(t *testing.T, cli *LumeradCli, fromNode string, windowID uint64, selfReportJSON string, peerObservationJSONs []string) string { + t.Helper() + + args := []string{"tx", "audit", "submit-audit-report", strconv.FormatUint(windowID, 10), selfReportJSON, "--from", fromNode} + for _, obs := range peerObservationJSONs { + args = append(args, "--peer-observations", obs) + } + + return cli.CustomCommand(args...) +} + +// querySupernodeLatestState reads the latest supernode state string (e.g. "SUPERNODE_STATE_POSTPONED") via CLI JSON. +func querySupernodeLatestState(t *testing.T, cli *LumeradCli, validatorAddress string) string { + t.Helper() + resp := cli.CustomQuery("q", "supernode", "get-supernode", validatorAddress) + states := gjson.Get(resp, "supernode.states") + require.True(t, states.Exists(), "missing states: %s", resp) + arr := states.Array() + require.NotEmpty(t, arr, "missing states: %s", resp) + return arr[len(arr)-1].Get("state").String() +} + +// gjsonUint64 is a small helper because some CLI outputs represent uint64 as strings. +func gjsonUint64(v gjson.Result) uint64 { + if !v.Exists() { + return 0 + } + if v.Type == gjson.Number { + return uint64(v.Uint()) + } + if v.Type == gjson.String { + out, err := strconv.ParseUint(v.String(), 10, 64) + if err != nil { + return 0 + } + return out + } + return 0 +} + +func sortedStrings(in ...string) []string { + out := append([]string(nil), in...) + sort.Strings(out) + return out +} + +// newAuditQueryClient creates a gRPC query client against node0's gRPC endpoint. +// +// - `AuditReport` contains float fields; CLI JSON marshalling for those fields is currently broken +// in this environment and fails with "unknown type float64". +func newAuditQueryClient(t *testing.T) (audittypes.QueryClient, func()) { + t.Helper() + conn, err := grpc.Dial("localhost:9090", grpc.WithTransportCredentials(insecure.NewCredentials())) + require.NoError(t, err) + closeFn := func() { _ = conn.Close() } + t.Cleanup(closeFn) + return audittypes.NewQueryClient(conn), closeFn +} + +// auditQueryReport queries a stored report via gRPC. +func auditQueryReport(t *testing.T, windowID uint64, reporterSupernodeAccount string) audittypes.AuditReport { + t.Helper() + qc, _ := newAuditQueryClient(t) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + resp, err := qc.AuditReport(ctx, &audittypes.QueryAuditReportRequest{ + WindowId: windowID, + SupernodeAccount: reporterSupernodeAccount, + }) + require.NoError(t, err) + return resp.Report +} diff --git a/x/audit/v1/README.md b/x/audit/v1/README.md index e5e5e47..21a2e2d 100644 --- a/x/audit/v1/README.md +++ b/x/audit/v1/README.md @@ -14,20 +14,19 @@ ## Abstract -The Audit module provides deterministic, window-based reporting and peer reachability observations for supernodes. It aggregates peer evidence per window and enforces minimum participation by postponing ACTIVE supernodes that fail to submit required reports after a grace period. +The Audit module provides deterministic, window-based reporting for supernodes. It persists audit reports and a per-window `WindowSnapshot` that serves as the minimal source-of-truth for the prober → targets mapping for that window. ## Overview High-level behavior: - The chain advances in deterministic reporting windows derived from block height. -- At each window start, the module snapshots the ACTIVE set (senders) and the ACTIVE+POSTPONED set (receivers), plus a window seed. -- ACTIVE supernodes submit one report per window: +- At each window start, the module persists a `WindowSnapshot` containing the prober → targets mapping (`assignments`). +- Supernodes submit one report per window containing: - self metrics (self-attested) - - peer reachability observations for deterministically assigned targets -- Peer observations are aggregated per `(window_id, target_validator_address, port_index)` using quorum + unanimity semantics. -- After the grace period, any ACTIVE sender in the window snapshot that did not submit a report is transitioned to POSTPONED. + - peer reachability observations -Note: this implementation currently focuses on windowing, deterministic assignment, evidence aggregation, and missing-report postponement. Resource threshold enforcement and POSTPONED recovery via peer consensus are not yet implemented. +Notes: +- This module currently focuses on windowing/snapshotting and report persistence. Penalties and aggregation are intentionally not implemented. ## Genesis State Implementation @@ -47,7 +46,6 @@ Module parameters are defined in `proto/lumera/audit/v1/params.proto` and persis Key fields: - `reporting_window_blocks` -- `missing_report_grace_blocks` - `peer_quorum_reports` - `min_probe_targets_per_window` - `max_probe_targets_per_window` @@ -55,7 +53,7 @@ Key fields: ### 2. Window Origin and Window IDs -On first use, the module stores a `window_origin_height` and uses it to derive: +On first use, the module stores an `origin_height` and uses it to derive: - `window_id` - `window_start_height` - `window_end_height` @@ -63,56 +61,30 @@ On first use, the module stores a `window_origin_height` and uses it to derive: ### 3. Window Snapshots At `window_start_height`, the module stores a `WindowSnapshot`: -- `seed_bytes` (from the block header hash) -- ordered `senders` (ACTIVE validator addresses) -- ordered `receivers` (ACTIVE + POSTPONED validator addresses) -- `k_window` (targets assigned per sender for the window) +- `window_id` +- `window_start_height` +- `assignments`: the per-window prober → targets mapping -Snapshots make target assignment deterministic for the entire window, even if membership changes mid-window. +Snapshots freeze the per-window prober → targets mapping at the start of the window so later logic can rely on a deterministic, persisted mapping. ### 4. Reports -Reports are stored per `(window_id, reporter_validator_address)` and include: +Reports are stored per `(window_id, supernode_account)` and include: - `supernode_account` - `self_report` - `peer_observations` -Uniqueness is enforced (one report per reporter per window). - -### 5. Evidence Aggregates - -Evidence is aggregated per `(window_id, target_validator_address, port_index)` as: -- `count` of distinct probers contributing OPEN/CLOSED -- `first_state` (OPEN/CLOSED) -- `conflict` flag (true if any prober disagrees with first_state) - -Consensus state derivation: -- if `count < peer_quorum_reports` => `UNKNOWN` -- if `conflict == true` => `UNKNOWN` -- else => `first_state` - -### 6. Audit Status - -`AuditStatus` provides a compact, queryable view per validator: -- last reported window + height -- compliance flag and bounded reasons -- last-derived `required_ports_state` (ordered like `required_open_ports`) +Uniqueness is guaranteed (one report per reporter per window). ## State Transitions ### Report submission On `MsgSubmitAuditReport`: -1. Resolve reporter validator address from `supernode_account` via `x/supernode`. -2. Validate window acceptance (from `window_start_height` until `window_end_height + grace`). -3. Enforce per-window uniqueness for the reporter. -4. If reporter is ACTIVE, validate peer observation targets match deterministic assignment from the window snapshot. -5. Persist the report and update evidence aggregates and `AuditStatus`. - -### Missing report enforcement - -After `missing_report_grace_blocks` past `window_end_height`, for the enforced window: -- For each sender in the window snapshot without a report, transition the corresponding supernode to POSTPONED and record `"missing_report"` in its `AuditStatus`. +1. Resolve reporter supernode from `supernode_account` via `x/supernode`. +2. Validate window acceptance (from `window_start_height` through `window_end_height`). +3. Ensure per-window uniqueness for the reporter. +4. Persist the report. ## Messages @@ -148,21 +120,43 @@ Returns current module params: - gRPC: `Query/Params` - REST: `GET /LumeraProtocol/lumera/audit/v1/params` -### AuditStatus +### AuditReport + +Returns `AuditReport` for a window and reporter: +- gRPC: `Query/AuditReport` + +### AuditReportsByReporter + +Lists `AuditReport` submitted by a reporter (paginated): +- gRPC: `Query/AuditReportsByReporter` +- REST: `GET /LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}` + +### CurrentWindow + +Returns the current reporting window boundaries: +- gRPC: `Query/CurrentWindow` +- REST: `GET /LumeraProtocol/lumera/audit/v1/current_window` + +### SupernodeReports + +Lists peer-observation chunks about a given supernode (by other reporters): +- gRPC: `Query/SupernodeReports` +- REST: `GET /LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}` + +### SelfReports -Returns `AuditStatus` for a validator: -- gRPC: `Query/AuditStatus` -- REST: `GET /LumeraProtocol/lumera/audit/v1/audit_status/{validator_address}` +Lists self-report chunks for a supernode across windows: +- gRPC: `Query/SelfReports` +- REST: `GET /LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}` ## Events -The module currently emits the `x/supernode` postponement event when a sender misses a report window. Audit-specific events are not yet emitted. +Audit-specific events are not emitted. ## Parameters Default values (as implemented in `x/audit/v1/types/params.go`): - `reporting_window_blocks`: `400` -- `missing_report_grace_blocks`: `100` - `peer_quorum_reports`: `3` - `min_probe_targets_per_window`: `3` - `max_probe_targets_per_window`: `5` diff --git a/x/audit/v1/keeper/abci.go b/x/audit/v1/keeper/abci.go index 9f102d3..24bfe51 100644 --- a/x/audit/v1/keeper/abci.go +++ b/x/audit/v1/keeper/abci.go @@ -2,12 +2,8 @@ package keeper import ( "context" - "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/LumeraProtocol/lumera/x/audit/v1/types" - sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) func (k Keeper) BeginBlocker(ctx context.Context) error { @@ -27,95 +23,6 @@ func (k Keeper) BeginBlocker(ctx context.Context) error { } func (k Keeper) EndBlocker(ctx context.Context) error { - sdkCtx := sdk.UnwrapSDKContext(ctx) - params := k.GetParams(ctx).WithDefaults() - - origin := k.getOrInitWindowOriginHeight(sdkCtx) - height := sdkCtx.BlockHeight() - grace := int64(params.MissingReportGraceBlocks) - if height < origin+grace+1 { - return nil - } - - candidateHeight := height - grace - 1 - if candidateHeight < origin { - return nil - } - - windowToEnforce := k.windowIDAtHeight(origin, params, candidateHeight) - enforceHeight := k.windowEndHeight(origin, params, windowToEnforce) + grace + 1 - if height != enforceHeight { - return nil - } - - snap, found := k.GetWindowSnapshot(sdkCtx, windowToEnforce) - if !found { - // Snapshot missing means we cannot deterministically decide who was required to report. - return nil - } - - for _, sender := range snap.Senders { - if k.HasReport(sdkCtx, windowToEnforce, sender) { - continue - } - - if err := k.postponeSupernodeForMissingReport(sdkCtx, sender, windowToEnforce); err != nil { - return err - } - - status, ok := k.GetAuditStatus(sdkCtx, sender) - if !ok { - status = types.AuditStatus{ - ValidatorAddress: sender, - } - } - status.Compliant = false - status.Reasons = []string{"missing_report"} - if err := k.SetAuditStatus(sdkCtx, status); err != nil { - return err - } - } - + // Windowing/snapshotting only: no EndBlock side effects here. return nil } - -func (k Keeper) postponeSupernodeForMissingReport(ctx sdk.Context, validatorAddress string, windowID uint64) error { - valAddr, err := sdk.ValAddressFromBech32(validatorAddress) - if err != nil { - return err - } - - sn, found := k.supernodeKeeper.QuerySuperNode(ctx, valAddr) - if !found { - return nil - } - if len(sn.States) == 0 { - return nil - } - - last := sn.States[len(sn.States)-1] - if last.State == sntypes.SuperNodeStatePostponed { - return nil - } - - sn.States = append(sn.States, &sntypes.SuperNodeStateRecord{ - State: sntypes.SuperNodeStatePostponed, - Height: ctx.BlockHeight(), - }) - - if err := k.supernodeKeeper.SetSuperNode(ctx, sn); err != nil { - return err - } - - ctx.EventManager().EmitEvent( - sdk.NewEvent( - sntypes.EventTypeSupernodePostponed, - sdk.NewAttribute(sntypes.AttributeKeyValidatorAddress, sn.ValidatorAddress), - sdk.NewAttribute(sntypes.AttributeKeyOldState, last.State.String()), - sdk.NewAttribute(sntypes.AttributeKeyReason, fmt.Sprintf("audit missing report (window_id=%d)", windowID)), - ), - ) - - return nil -} - diff --git a/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md b/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md new file mode 100644 index 0000000..a8397f4 --- /dev/null +++ b/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md @@ -0,0 +1,119 @@ +# Deterministic Assignment (Window Snapshot) + +This document explains how `x/audit/v1` computes and persists the per-window **prober → targets** mapping (`WindowSnapshot.assignments`). + +## Where it happens + +- Snapshot creation is triggered in `BeginBlocker` exactly at `window_start_height` for a window. + - File: `x/audit/v1/keeper/abci.go` +- Snapshot computation + persistence is implemented in: + - File: `x/audit/v1/keeper/window.go` +- The deterministic assignment algorithm itself is implemented as pure helpers in: + - File: `x/audit/v1/keeper/assignment/assignment.go` + +## Inputs to the mapping + +At `window_start_height` for a given `window_id`, the module builds: + +- `probers` (called `senders` in code): supernodes in state `ACTIVE` +- `targets` (called `receivers` in code): supernodes in state `ACTIVE` + `POSTPONED` +- `params`: module params as of that height: + - `peer_quorum_reports` + - `min_probe_targets_per_window` + - `max_probe_targets_per_window` +- `seedBytes`: `ctx.HeaderHash()` at `window_start_height` (only the first 8 bytes are used) + +## Ordering (determinism invariant) + +To ensure all nodes compute the same mapping: +- `probers` (`senders`) are sorted lexicographically by `supernode_account` (bech32 string). +- `targets` (`receivers`) are sorted lexicographically by `supernode_account`. + +This sorting step is part of the deterministic assignment helpers. + +## Step 1: Compute `k_window` + +`k_window` is the number of targets assigned to each sender for a window. + +Let: +- `a = len(probers)` +- `n = len(targets)` +- `q = peer_quorum_reports` + +We compute the minimum `k` to get average per-receiver coverage of at least `q`: + +``` +sendersCount * k_window >= peer_quorum_reports * receiversCount +k_needed = ceil(q*n / a) +``` + +Then clamp: +- `k_needed = max(k_needed, min_probe_targets_per_window)` +- `k_needed = min(k_needed, max_probe_targets_per_window)` + +And finally: +- `k_needed <= n - 1` (no self-targeting and no duplicates is only possible up to `n-1`) + +Edge cases: +- If `a <= 0` or `n <= 1`, `k_window = 0`. + +## Step 2: Compute a deterministic ring offset from the seed + +Only the first 8 bytes are used: + +- `offsetU64 = bigEndianUint64(seedBytes[0:8])` +- `offset = offsetU64 % len(targets)` + +This rotates the receiver list per window so assignments don’t always start at receiver index 0. + +## Step 3: Assign targets to each sender + +For each prober at index `senderIndex` in sorted `probers`: + +For each `j` from `0` to `k_window - 1`: + +1) Compute a deterministic slot: + - `slot = senderIndex * k_window + j` +2) Initial candidate: + - `candidateIndex = (offset + slot) % len(targets)` +3) Resolve collisions deterministically by walking forward (wrap-around): + - Reject candidate if: + - `targets[candidateIndex] == sender` (self), or + - candidate already chosen for this sender (no duplicates) + - If rejected, set `candidateIndex = (candidateIndex + 1) % len(targets)` and retry + - Stop once a valid candidate is found, or after `len(targets)` tries (in which case assignment stops early) + +The resulting ordered `targets[]` are stored as one `ProberTargets` record: + +```protobuf +message ProberTargets { + string prober_supernode_account = 1; + repeated string target_supernode_accounts = 2; +} +``` + +## What is persisted + +The module persists a `WindowSnapshot` in state under `ws/`: + +```protobuf +message WindowSnapshot { + uint64 window_id = 1; + int64 window_start_height = 2; + repeated ProberTargets assignments = 3; +} +``` + +Notes: +- The seed is used during snapshot creation, but is **not persisted** in `WindowSnapshot`. +- The persisted mapping is the minimal per-window source-of-truth for prober → targets. + +## Determinism invariants (summary) + +All nodes will compute the same `assignments` for a window if: +- They evaluate at the same `window_start_height` +- They observe the same ACTIVE / ACTIVE+POSTPONED sets at that height +- They sort senders/receivers identically +- They use the same params at that height (`peer_quorum_reports`, min/max probes) +- They use the same `seedBytes` (`HeaderHash()` at that height) +- They run the same collision-resolution rules (self + duplicate avoidance) diff --git a/x/audit/v1/keeper/assignment/assignment.go b/x/audit/v1/keeper/assignment/assignment.go new file mode 100644 index 0000000..05577d9 --- /dev/null +++ b/x/audit/v1/keeper/assignment/assignment.go @@ -0,0 +1,127 @@ +package assignment + +import ( + "encoding/binary" + "fmt" + "sort" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +// Deterministic assignment helpers. +// +// These helpers are intentionally pure (no keeper/store access) so the same logic can be reused by: +// - snapshot creation at window start +// - any future validation that wants to recompute the expected mapping from inputs +// +// Determinism relies on: +// - identical sender/receiver sets and their ordering (we sort lexicographically) +// - identical params at snapshot time (peer_quorum_reports, min/max probes) +// - identical seed bytes (we use the first 8 bytes to compute a ring offset) + +func ComputeKWindowFromParams(params types.Params, sendersCount, receiversCount int) uint32 { + // k_window is the number of targets each sender is assigned for a window. + // + // We derive it so that, on average, each receiver gets at least peer_quorum_reports observations: + // sendersCount * k_window >= peer_quorum_reports * receiversCount + // Then clamp into [min_probe_targets_per_window, max_probe_targets_per_window] and ensure k_window <= receiversCount-1 + // (no self-targeting, no duplicates). + if sendersCount <= 0 || receiversCount <= 1 { + return 0 + } + + a := uint64(sendersCount) + n := uint64(receiversCount) + q := uint64(params.PeerQuorumReports) + + kNeeded := (q*n + a - 1) / a + + kMin := uint64(params.MinProbeTargetsPerWindow) + kMax := uint64(params.MaxProbeTargetsPerWindow) + if kNeeded < kMin { + kNeeded = kMin + } + if kNeeded > kMax { + kNeeded = kMax + } + + // Avoid self + no duplicates. + if kNeeded > n-1 { + kNeeded = n - 1 + } + + return uint32(kNeeded) +} + +func computeAssignmentsFromInputs(senders []string, receivers []string, kWindow uint32, seedBytes []byte) ([]types.ProberTargets, error) { + if len(seedBytes) < 8 { + return nil, fmt.Errorf("seed must be at least 8 bytes") + } + + assignments := make([]types.ProberTargets, 0, len(senders)) + if kWindow == 0 || len(receivers) == 0 { + for _, sender := range senders { + assignments = append(assignments, types.ProberTargets{ + ProberSupernodeAccount: sender, + TargetSupernodeAccounts: []string{}, + }) + } + return assignments, nil + } + + offsetU64 := binary.BigEndian.Uint64(seedBytes[:8]) + n := len(receivers) + offset := int(offsetU64 % uint64(n)) + + for senderIndex, sender := range senders { + seen := make(map[int]struct{}, int(kWindow)) + targets := make([]string, 0, int(kWindow)) + + for j := 0; j < int(kWindow); j++ { + slot := senderIndex*int(kWindow) + j + candidate := (offset + slot) % n + + tries := 0 + for tries < n { + if receivers[candidate] != sender { + if _, ok := seen[candidate]; !ok { + break + } + } + candidate = (candidate + 1) % n + tries++ + } + + if tries >= n { + break + } + + seen[candidate] = struct{}{} + targets = append(targets, receivers[candidate]) + } + + assignments = append(assignments, types.ProberTargets{ + ProberSupernodeAccount: sender, + TargetSupernodeAccounts: targets, + }) + } + + return assignments, nil +} + +func computeSnapshotAssignments(params types.Params, senders []string, receivers []string, seedBytes []byte) ([]types.ProberTargets, error) { + // Sort to guarantee deterministic ordering across nodes. + // Copy first to avoid mutating the caller's slices. + sendersSorted := append([]string(nil), senders...) + receiversSorted := append([]string(nil), receivers...) + sort.Strings(sendersSorted) + sort.Strings(receiversSorted) + + kWindow := ComputeKWindowFromParams(params, len(sendersSorted), len(receiversSorted)) + return computeAssignmentsFromInputs(sendersSorted, receiversSorted, kWindow, seedBytes) +} + +// ComputeSnapshotAssignments is the canonical helper used by the module to derive the per-window prober -> targets mapping. +func ComputeSnapshotAssignments(params types.Params, senders []string, receivers []string, seedBytes []byte) ([]types.ProberTargets, error) { + return computeSnapshotAssignments(params, senders, receivers, seedBytes) +} diff --git a/x/audit/v1/keeper/keeper.go b/x/audit/v1/keeper/keeper.go index 2cc6c0a..268d813 100644 --- a/x/audit/v1/keeper/keeper.go +++ b/x/audit/v1/keeper/keeper.go @@ -37,11 +37,11 @@ func NewKeeper( } return Keeper{ - cdc: cdc, - addressCodec: addressCodec, - storeService: storeService, - logger: logger, - authority: authority, + cdc: cdc, + addressCodec: addressCodec, + storeService: storeService, + logger: logger, + authority: authority, supernodeKeeper: supernodeKeeper, } } @@ -53,4 +53,3 @@ func (k Keeper) GetAuthority() []byte { func (k Keeper) Logger() log.Logger { return k.logger.With("module", "x/audit") } - diff --git a/x/audit/v1/keeper/msg_server.go b/x/audit/v1/keeper/msg_server.go index 2fdb9ba..2d9b56e 100644 --- a/x/audit/v1/keeper/msg_server.go +++ b/x/audit/v1/keeper/msg_server.go @@ -15,4 +15,3 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { } var _ types.MsgServer = msgServer{} - diff --git a/x/audit/v1/keeper/msg_submit_audit_report.go b/x/audit/v1/keeper/msg_submit_audit_report.go index dcda878..d1c0cef 100644 --- a/x/audit/v1/keeper/msg_submit_audit_report.go +++ b/x/audit/v1/keeper/msg_submit_audit_report.go @@ -2,13 +2,11 @@ package keeper import ( "context" - "fmt" errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/LumeraProtocol/lumera/x/audit/v1/types" - sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAuditReport) (*types.MsgSubmitAuditReportResponse, error) { @@ -20,15 +18,14 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu params := m.GetParams(ctx).WithDefaults() origin := m.getOrInitWindowOriginHeight(sdkCtx) - // Enforce window_id acceptance: allow submitting for a window until end+grace. + // Validate window_id acceptance: allow submitting for a window until end. windowStart := m.windowStartHeight(origin, params, req.WindowId) windowEnd := m.windowEndHeight(origin, params, req.WindowId) - graceEnd := windowEnd + int64(params.MissingReportGraceBlocks) - if sdkCtx.BlockHeight() < windowStart || sdkCtx.BlockHeight() > graceEnd { + if sdkCtx.BlockHeight() < windowStart || sdkCtx.BlockHeight() > windowEnd { return nil, errorsmod.Wrapf(types.ErrInvalidWindowID, "window_id not accepted at height %d", sdkCtx.BlockHeight()) } - sn, found, err := m.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.SupernodeAccount) + _, found, err := m.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.SupernodeAccount) if err != nil { return nil, err } @@ -36,122 +33,37 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu return nil, errorsmod.Wrap(types.ErrReporterNotFound, "unknown supernode_account") } - reporterValidator := sn.ValidatorAddress - if m.HasReport(sdkCtx, req.WindowId, reporterValidator) { + reporterAccount := req.SupernodeAccount + if m.HasReport(sdkCtx, req.WindowId, reporterAccount) { return nil, errorsmod.Wrap(types.ErrDuplicateReport, "report already submitted for this window") } - // Ensure the snapshot exists for deterministic assignment checks. - snap, hasSnap := m.GetWindowSnapshot(sdkCtx, req.WindowId) - if !hasSnap { - return nil, errorsmod.Wrap(types.ErrWindowSnapshotNotFound, "missing window snapshot") - } - - requiredPorts := params.RequiredOpenPorts - requiredPortsCount := len(requiredPorts) - for _, obs := range req.PeerObservations { - if len(obs.PortStates) != requiredPortsCount { - return nil, errorsmod.Wrapf(types.ErrInvalidPortStatesLength, "expected %d port states", requiredPortsCount) - } - } - - // Reporter state gating. - lastState := sntypes.SuperNodeStateUnspecified - if len(sn.States) > 0 { - lastState = sn.States[len(sn.States)-1].State - } - - switch lastState { - case sntypes.SuperNodeStateActive: - // Validate deterministic assignment only if the reporter is in the snapshot senders list. - expectedTargets, ok := assignedTargets(snap, reporterValidator) - if !ok { - // ACTIVE but not a sender for this window snapshot: reject peer observations. - if len(req.PeerObservations) != 0 { - return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "reporter not a sender for this window") - } - break - } - - if len(req.PeerObservations) != len(expectedTargets) { - return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "expected %d peer observations", len(expectedTargets)) - } - for i := range expectedTargets { - if req.PeerObservations[i].TargetValidatorAddress != expectedTargets[i] { - return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "peer observations must match assigned targets (order-sensitive)") - } - } - case sntypes.SuperNodeStatePostponed: - if len(req.PeerObservations) != 0 { - return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "postponed reporters must not submit peer observations") - } - default: - return nil, errorsmod.Wrap(types.ErrInvalidReporterState, fmt.Sprintf("unsupported reporter state: %s", lastState.String())) - } - report := types.AuditReport{ - ReporterValidatorAddress: reporterValidator, - SupernodeAccount: req.SupernodeAccount, - WindowId: req.WindowId, - ReportHeight: sdkCtx.BlockHeight(), - SelfReport: req.SelfReport, - PeerObservations: req.PeerObservations, + SupernodeAccount: reporterAccount, + WindowId: req.WindowId, + ReportHeight: sdkCtx.BlockHeight(), + SelfReport: req.SelfReport, + PeerObservations: req.PeerObservations, } if err := m.SetReport(sdkCtx, report); err != nil { return nil, err } + m.SetReportIndex(sdkCtx, req.WindowId, reporterAccount) + m.SetSelfReportIndex(sdkCtx, req.WindowId, reporterAccount) - // Update reporter status (self-report tracking). - status, ok := m.GetAuditStatus(sdkCtx, reporterValidator) - if !ok { - status = types.AuditStatus{ - ValidatorAddress: reporterValidator, - } - } - status.LastReportedWindowId = req.WindowId - status.LastReportHeight = sdkCtx.BlockHeight() - status.Compliant = true - status.Reasons = nil - if err := m.SetAuditStatus(sdkCtx, status); err != nil { - return nil, err - } - - // Update evidence aggregates for targets. + seenSupernodes := make(map[string]struct{}, len(req.PeerObservations)) for _, obs := range req.PeerObservations { - for portIdx, state := range obs.PortStates { - if state == types.PortState_PORT_STATE_UNKNOWN { - continue - } - - idx := uint32(portIdx) - agg, found := m.GetEvidenceAggregate(sdkCtx, req.WindowId, obs.TargetValidatorAddress, idx) - if !found { - agg = types.PortEvidenceAggregate{ - Count: 0, - FirstState: state, - Conflict: false, - } - } - - agg.Count++ - if agg.Count == 1 { - agg.FirstState = state - } else if state != agg.FirstState { - agg.Conflict = true - } - - if err := m.SetEvidenceAggregate(sdkCtx, req.WindowId, obs.TargetValidatorAddress, idx, agg); err != nil { - return nil, err - } - - consensus := consensusFromAggregate(agg, params.PeerQuorumReports) - if err := m.setRequiredPortsState(sdkCtx, obs.TargetValidatorAddress, requiredPortsCount, idx, consensus); err != nil { - return nil, err - } + supernodeAccount := obs.TargetSupernodeAccount + if supernodeAccount == "" { + continue + } + if _, seen := seenSupernodes[supernodeAccount]; seen { + continue } + seenSupernodes[supernodeAccount] = struct{}{} + m.SetSupernodeReportIndex(sdkCtx, supernodeAccount, req.WindowId, reporterAccount) } return &types.MsgSubmitAuditReportResponse{}, nil } - diff --git a/x/audit/v1/keeper/msg_update_params.go b/x/audit/v1/keeper/msg_update_params.go index 3a06ac6..5d00d7e 100644 --- a/x/audit/v1/keeper/msg_update_params.go +++ b/x/audit/v1/keeper/msg_update_params.go @@ -32,4 +32,3 @@ func (m msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) return &types.MsgUpdateParamsResponse{}, nil } - diff --git a/x/audit/v1/keeper/params.go b/x/audit/v1/keeper/params.go index 4283a20..e05c97b 100644 --- a/x/audit/v1/keeper/params.go +++ b/x/audit/v1/keeper/params.go @@ -31,4 +31,3 @@ func (k Keeper) SetParams(ctx context.Context, params types.Params) error { store.Set(types.ParamsKey, bz) return nil } - diff --git a/x/audit/v1/keeper/query.go b/x/audit/v1/keeper/query.go index c38a9ea..0bc8ca1 100644 --- a/x/audit/v1/keeper/query.go +++ b/x/audit/v1/keeper/query.go @@ -16,4 +16,3 @@ func NewQueryServerImpl(k Keeper) types.QueryServer { k: k, } } - diff --git a/x/audit/v1/keeper/query_audit_report.go b/x/audit/v1/keeper/query_audit_report.go new file mode 100644 index 0000000..921ce4d --- /dev/null +++ b/x/audit/v1/keeper/query_audit_report.go @@ -0,0 +1,24 @@ +package keeper + +import ( + "context" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (q queryServer) AuditReport(ctx context.Context, req *types.QueryAuditReportRequest) (*types.QueryAuditReportResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + r, found := q.k.GetReport(sdkCtx, req.WindowId, req.SupernodeAccount) + if !found { + return nil, status.Error(codes.NotFound, "audit report not found") + } + + return &types.QueryAuditReportResponse{Report: r}, nil +} diff --git a/x/audit/v1/keeper/query_audit_reports_by_reporter.go b/x/audit/v1/keeper/query_audit_reports_by_reporter.go new file mode 100644 index 0000000..7bb8b8c --- /dev/null +++ b/x/audit/v1/keeper/query_audit_reports_by_reporter.go @@ -0,0 +1,52 @@ +package keeper + +import ( + "context" + "encoding/binary" + + "cosmossdk.io/store/prefix" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (q queryServer) AuditReportsByReporter(ctx context.Context, req *types.QueryAuditReportsByReporterRequest) (*types.QueryAuditReportsByReporterResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) + store := prefix.NewStore(storeAdapter, types.ReportIndexPrefix(req.SupernodeAccount)) + + var reports []types.AuditReport + + pagination := req.Pagination + if pagination == nil { + pagination = &query.PageRequest{Limit: 100} + } + + pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { + if len(key) != 8 { + return status.Error(codes.Internal, "invalid report index key") + } + windowID := binary.BigEndian.Uint64(key) + r, found := q.k.GetReport(sdkCtx, windowID, req.SupernodeAccount) + if !found { + return nil + } + reports = append(reports, r) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAuditReportsByReporterResponse{ + Reports: reports, + Pagination: pageRes, + }, nil +} diff --git a/x/audit/v1/keeper/query_audit_status.go b/x/audit/v1/keeper/query_audit_status.go deleted file mode 100644 index 7a146f1..0000000 --- a/x/audit/v1/keeper/query_audit_status.go +++ /dev/null @@ -1,26 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/LumeraProtocol/lumera/x/audit/v1/types" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -func (q queryServer) AuditStatus(ctx context.Context, req *types.QueryAuditStatusRequest) (*types.QueryAuditStatusResponse, error) { - if req == nil { - return &types.QueryAuditStatusResponse{Status: types.AuditStatus{}}, nil - } - - sdkCtx := sdk.UnwrapSDKContext(ctx) - status, found := q.k.GetAuditStatus(sdkCtx, req.ValidatorAddress) - if !found { - status = types.AuditStatus{ - ValidatorAddress: req.ValidatorAddress, - Compliant: true, - } - } - - return &types.QueryAuditStatusResponse{Status: status}, nil -} - diff --git a/x/audit/v1/keeper/query_current_window.go b/x/audit/v1/keeper/query_current_window.go new file mode 100644 index 0000000..ebcf5fb --- /dev/null +++ b/x/audit/v1/keeper/query_current_window.go @@ -0,0 +1,35 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (q queryServer) CurrentWindow(ctx context.Context, req *types.QueryCurrentWindowRequest) (*types.QueryCurrentWindowResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + params := q.k.GetParams(ctx).WithDefaults() + + origin, found := q.k.getWindowOriginHeight(sdkCtx) + if !found { + return nil, status.Error(codes.NotFound, "window origin height not initialized") + } + + windowID := q.k.windowIDAtHeight(origin, params, sdkCtx.BlockHeight()) + windowStart := q.k.windowStartHeight(origin, params, windowID) + windowEnd := q.k.windowEndHeight(origin, params, windowID) + + return &types.QueryCurrentWindowResponse{ + WindowId: windowID, + WindowStartHeight: windowStart, + WindowEndHeight: windowEnd, + }, nil +} diff --git a/x/audit/v1/keeper/query_params.go b/x/audit/v1/keeper/query_params.go index 32cff4c..5db5ce3 100644 --- a/x/audit/v1/keeper/query_params.go +++ b/x/audit/v1/keeper/query_params.go @@ -10,4 +10,3 @@ func (q queryServer) Params(ctx context.Context, _ *types.QueryParamsRequest) (* params := q.k.GetParams(ctx).WithDefaults() return &types.QueryParamsResponse{Params: params}, nil } - diff --git a/x/audit/v1/keeper/query_self_reports.go b/x/audit/v1/keeper/query_self_reports.go new file mode 100644 index 0000000..cae228c --- /dev/null +++ b/x/audit/v1/keeper/query_self_reports.go @@ -0,0 +1,64 @@ +package keeper + +import ( + "context" + "encoding/binary" + + "cosmossdk.io/store/prefix" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReportsRequest) (*types.QuerySelfReportsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + if req.SupernodeAccount == "" { + return nil, status.Error(codes.InvalidArgument, "supernode_account is required") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) + store := prefix.NewStore(storeAdapter, types.SelfReportIndexPrefix(req.SupernodeAccount)) + + var reports []types.SelfReport + + pagination := req.Pagination + if pagination == nil { + pagination = &query.PageRequest{Limit: 100} + } + + pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { + if len(key) != 8 { + return status.Error(codes.Internal, "invalid self report index key") + } + windowID := binary.BigEndian.Uint64(key) + if req.WindowId != 0 && windowID != req.WindowId { + return nil + } + + r, found := q.k.GetReport(sdkCtx, windowID, req.SupernodeAccount) + if !found { + return nil + } + reports = append(reports, types.SelfReport{ + WindowId: r.WindowId, + ReportHeight: r.ReportHeight, + SelfReport: r.SelfReport, + }) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QuerySelfReportsResponse{ + Reports: reports, + Pagination: pageRes, + }, nil +} + diff --git a/x/audit/v1/keeper/query_supernode_reports.go b/x/audit/v1/keeper/query_supernode_reports.go new file mode 100644 index 0000000..c0baa1b --- /dev/null +++ b/x/audit/v1/keeper/query_supernode_reports.go @@ -0,0 +1,97 @@ +package keeper + +import ( + "context" + "encoding/binary" + + "cosmossdk.io/store/prefix" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySupernodeReportsRequest) (*types.QuerySupernodeReportsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + if req.SupernodeAccount == "" { + return nil, status.Error(codes.InvalidArgument, "supernode_account is required") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) + + var store prefix.Store + if req.WindowId != 0 { + store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexWindowPrefix(req.SupernodeAccount, req.WindowId)) + } else { + store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexPrefix(req.SupernodeAccount)) + } + + var reports []types.SupernodeReport + + pagination := req.Pagination + if pagination == nil { + pagination = &query.PageRequest{Limit: 100} + } + + pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { + var ( + windowID uint64 + reporter string + ) + + if req.WindowId != 0 { + windowID = req.WindowId + reporter = string(key) + } else { + if len(key) < 9 || key[8] != '/' { + return status.Error(codes.Internal, "invalid supernode report index key") + } + windowID = binary.BigEndian.Uint64(key[:8]) + reporter = string(key[9:]) + } + + if reporter == "" || reporter == req.SupernodeAccount { + return nil + } + + r, found := q.k.GetReport(sdkCtx, windowID, reporter) + if !found { + return nil + } + + var portStates []types.PortState + for _, obs := range r.PeerObservations { + if obs.TargetSupernodeAccount != req.SupernodeAccount { + continue + } + for _, ps := range obs.PortStates { + portStates = append(portStates, ps) + } + break + } + if len(portStates) == 0 { + return nil + } + + reports = append(reports, types.SupernodeReport{ + ReporterSupernodeAccount: reporter, + WindowId: r.WindowId, + ReportHeight: r.ReportHeight, + PortStates: portStates, + }) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QuerySupernodeReportsResponse{ + Reports: reports, + Pagination: pageRes, + }, nil +} diff --git a/x/audit/v1/keeper/state.go b/x/audit/v1/keeper/state.go index 9cb72a6..d3d8b5c 100644 --- a/x/audit/v1/keeper/state.go +++ b/x/audit/v1/keeper/state.go @@ -6,14 +6,14 @@ import ( "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) -func (k Keeper) HasReport(ctx sdk.Context, windowID uint64, reporterValidatorAddress string) bool { +func (k Keeper) HasReport(ctx sdk.Context, windowID uint64, reporterSupernodeAccount string) bool { store := k.kvStore(ctx) - return store.Has(types.ReportKey(windowID, reporterValidatorAddress)) + return store.Has(types.ReportKey(windowID, reporterSupernodeAccount)) } -func (k Keeper) GetReport(ctx sdk.Context, windowID uint64, reporterValidatorAddress string) (types.AuditReport, bool) { +func (k Keeper) GetReport(ctx sdk.Context, windowID uint64, reporterSupernodeAccount string) (types.AuditReport, bool) { store := k.kvStore(ctx) - bz := store.Get(types.ReportKey(windowID, reporterValidatorAddress)) + bz := store.Get(types.ReportKey(windowID, reporterSupernodeAccount)) if bz == nil { return types.AuditReport{}, false } @@ -28,78 +28,21 @@ func (k Keeper) SetReport(ctx sdk.Context, r types.AuditReport) error { if err != nil { return err } - store.Set(types.ReportKey(r.WindowId, r.ReporterValidatorAddress), bz) + store.Set(types.ReportKey(r.WindowId, r.SupernodeAccount), bz) return nil } -func (k Keeper) GetEvidenceAggregate(ctx sdk.Context, windowID uint64, targetValidatorAddress string, portIndex uint32) (types.PortEvidenceAggregate, bool) { +func (k Keeper) SetReportIndex(ctx sdk.Context, windowID uint64, reporterSupernodeAccount string) { store := k.kvStore(ctx) - bz := store.Get(types.EvidenceKey(windowID, targetValidatorAddress, portIndex)) - if bz == nil { - return types.PortEvidenceAggregate{}, false - } - var a types.PortEvidenceAggregate - k.cdc.MustUnmarshal(bz, &a) - return a, true -} - -func (k Keeper) SetEvidenceAggregate(ctx sdk.Context, windowID uint64, targetValidatorAddress string, portIndex uint32, a types.PortEvidenceAggregate) error { - store := k.kvStore(ctx) - bz, err := k.cdc.Marshal(&a) - if err != nil { - return err - } - store.Set(types.EvidenceKey(windowID, targetValidatorAddress, portIndex), bz) - return nil + store.Set(types.ReportIndexKey(reporterSupernodeAccount, windowID), []byte{1}) } -func (k Keeper) GetAuditStatus(ctx sdk.Context, validatorAddress string) (types.AuditStatus, bool) { +func (k Keeper) SetSupernodeReportIndex(ctx sdk.Context, supernodeAccount string, windowID uint64, reporterSupernodeAccount string) { store := k.kvStore(ctx) - bz := store.Get(types.AuditStatusKey(validatorAddress)) - if bz == nil { - return types.AuditStatus{}, false - } - var s types.AuditStatus - k.cdc.MustUnmarshal(bz, &s) - return s, true + store.Set(types.SupernodeReportIndexKey(supernodeAccount, windowID, reporterSupernodeAccount), []byte{1}) } -func (k Keeper) SetAuditStatus(ctx sdk.Context, s types.AuditStatus) error { +func (k Keeper) SetSelfReportIndex(ctx sdk.Context, windowID uint64, reporterSupernodeAccount string) { store := k.kvStore(ctx) - bz, err := k.cdc.Marshal(&s) - if err != nil { - return err - } - store.Set(types.AuditStatusKey(s.ValidatorAddress), bz) - return nil -} - -func consensusFromAggregate(a types.PortEvidenceAggregate, quorum uint32) types.PortState { - if a.Count < quorum { - return types.PortState_PORT_STATE_UNKNOWN - } - if a.Conflict { - return types.PortState_PORT_STATE_UNKNOWN - } - return a.FirstState -} - -func (k Keeper) setRequiredPortsState(ctx sdk.Context, validatorAddress string, requiredPortsCount int, portIndex uint32, state types.PortState) error { - status, found := k.GetAuditStatus(ctx, validatorAddress) - if !found { - status = types.AuditStatus{ - ValidatorAddress: validatorAddress, - Compliant: true, - } - } - - if len(status.RequiredPortsState) != requiredPortsCount { - status.RequiredPortsState = make([]types.PortState, requiredPortsCount) - } - - if int(portIndex) < len(status.RequiredPortsState) { - status.RequiredPortsState[portIndex] = state - } - - return k.SetAuditStatus(ctx, status) + store.Set(types.SelfReportIndexKey(reporterSupernodeAccount, windowID), []byte{1}) } diff --git a/x/audit/v1/keeper/store.go b/x/audit/v1/keeper/store.go index bebc560..7bba071 100644 --- a/x/audit/v1/keeper/store.go +++ b/x/audit/v1/keeper/store.go @@ -1,8 +1,8 @@ package keeper import ( - "github.com/cosmos/cosmos-sdk/runtime" storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/audit/v1/keeper/window.go b/x/audit/v1/keeper/window.go index 433824c..276a4c8 100644 --- a/x/audit/v1/keeper/window.go +++ b/x/audit/v1/keeper/window.go @@ -2,14 +2,26 @@ package keeper import ( "encoding/binary" - "sort" + "fmt" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper/assignment" "github.com/LumeraProtocol/lumera/x/audit/v1/types" sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) +func (k Keeper) getWindowOriginHeight(ctx sdk.Context) (int64, bool) { + // The origin height is set once (on first use) and then kept stable forever. + // All window boundaries are derived from it to avoid drifting schedules. + store := k.kvStore(ctx) + bz := store.Get(types.WindowOriginHeightKey()) + if len(bz) != 8 { + return 0, false + } + return int64(binary.BigEndian.Uint64(bz)), true +} + func (k Keeper) getOrInitWindowOriginHeight(ctx sdk.Context) int64 { store := k.kvStore(ctx) bz := store.Get(types.WindowOriginHeightKey()) @@ -39,34 +51,6 @@ func (k Keeper) windowIDAtHeight(origin int64, params types.Params, height int64 return uint64((height - origin) / int64(params.ReportingWindowBlocks)) } -func computeKWindow(params types.Params, sendersCount, receiversCount int) uint32 { - if sendersCount <= 0 || receiversCount <= 1 { - return 0 - } - - a := uint64(sendersCount) - n := uint64(receiversCount) - q := uint64(params.PeerQuorumReports) - - kNeeded := (q*n + a - 1) / a - - kMin := uint64(params.MinProbeTargetsPerWindow) - kMax := uint64(params.MaxProbeTargetsPerWindow) - if kNeeded < kMin { - kNeeded = kMin - } - if kNeeded > kMax { - kNeeded = kMax - } - - // Avoid self + no duplicates. - if kNeeded > n-1 { - kNeeded = n - 1 - } - - return uint32(kNeeded) -} - func (k Keeper) GetWindowSnapshot(ctx sdk.Context, windowID uint64) (types.WindowSnapshot, bool) { store := k.kvStore(ctx) bz := store.Get(types.WindowSnapshotKey(windowID)) @@ -104,79 +88,30 @@ func (k Keeper) CreateWindowSnapshotIfNeeded(ctx sdk.Context, windowID uint64, p senders := make([]string, 0, len(active)) for _, sn := range active { - senders = append(senders, sn.ValidatorAddress) + if sn.SupernodeAccount == "" { + return fmt.Errorf("supernode %q has empty supernode_account", sn.ValidatorAddress) + } + senders = append(senders, sn.SupernodeAccount) } receivers := make([]string, 0, len(receiversSN)) for _, sn := range receiversSN { - receivers = append(receivers, sn.ValidatorAddress) - } - - sort.Strings(senders) - sort.Strings(receivers) - - snap := types.WindowSnapshot{ - WindowId: windowID, - WindowStartHeight: ctx.BlockHeight(), - SeedBytes: ctx.HeaderHash(), - Senders: senders, - Receivers: receivers, - KWindow: computeKWindow(params, len(senders), len(receivers)), - } - - return k.SetWindowSnapshot(ctx, snap) -} - -func assignedTargets(snapshot types.WindowSnapshot, senderValidatorAddress string) ([]string, bool) { - kWindow := int(snapshot.KWindow) - if kWindow == 0 || len(snapshot.Receivers) == 0 { - return []string{}, true - } - - senderIndex := -1 - for i, s := range snapshot.Senders { - if s == senderValidatorAddress { - senderIndex = i - break + if sn.SupernodeAccount == "" { + return fmt.Errorf("supernode %q has empty supernode_account", sn.ValidatorAddress) } - } - if senderIndex < 0 { - return nil, false + receivers = append(receivers, sn.SupernodeAccount) } - seed := snapshot.SeedBytes - if len(seed) < 8 { - return nil, false + seedBytes := ctx.HeaderHash() + assignments, err := assignment.ComputeSnapshotAssignments(params, senders, receivers, seedBytes) + if err != nil { + return err } - offsetU64 := binary.BigEndian.Uint64(seed[:8]) - n := len(snapshot.Receivers) - offset := int(offsetU64 % uint64(n)) - - seen := make(map[int]struct{}, kWindow) - out := make([]string, 0, kWindow) - - for j := 0; j < kWindow; j++ { - slot := senderIndex*kWindow + j - candidate := (offset + slot) % n - - tries := 0 - for tries < n { - if snapshot.Receivers[candidate] != senderValidatorAddress { - if _, ok := seen[candidate]; !ok { - break - } - } - candidate = (candidate + 1) % n - tries++ - } - if tries >= n { - break - } - - seen[candidate] = struct{}{} - out = append(out, snapshot.Receivers[candidate]) + snap := types.WindowSnapshot{ + WindowId: windowID, + WindowStartHeight: ctx.BlockHeight(), + Assignments: assignments, } - return out, true + return k.SetWindowSnapshot(ctx, snap) } - diff --git a/x/audit/v1/module/autocli.go b/x/audit/v1/module/autocli.go index 6f616f1..76940bb 100644 --- a/x/audit/v1/module/autocli.go +++ b/x/audit/v1/module/autocli.go @@ -17,10 +17,35 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { Short: "Shows the parameters of the module", }, { - RpcMethod: "AuditStatus", - Use: "audit-status [validator-address]", - Short: "Query audit status for a validator", - PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "validator_address"}}, + RpcMethod: "CurrentWindow", + Use: "current-window", + Short: "Query current audit reporting window boundaries", + }, + { + RpcMethod: "AuditReport", + Use: "audit-report [window-id] [supernode-account]", + Short: "Query an audit report by window and reporter", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "window_id"}, {ProtoField: "supernode_account"}}, + }, + { + RpcMethod: "AuditReportsByReporter", + Use: "audit-reports-by-reporter [supernode-account]", + Short: "List audit reports submitted by a reporter", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "supernode_account"}}, + }, + { + RpcMethod: "SupernodeReports", + Use: "supernode-reports [supernode-account]", + Short: "List reports that include observations about a supernode", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "supernode_account"}}, + }, + { + RpcMethod: "SelfReports", + Use: "self-reports [supernode-account]", + Short: "List self-reports submitted by a supernode across windows", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "supernode_account"}, + }, }, // this line is used by ignite scaffolding # autocli/query }, @@ -44,4 +69,3 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { }, } } - diff --git a/x/audit/v1/module/genesis.go b/x/audit/v1/module/genesis.go index 890eeb8..8deefe0 100644 --- a/x/audit/v1/module/genesis.go +++ b/x/audit/v1/module/genesis.go @@ -24,4 +24,3 @@ func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { genesis.Params = k.GetParams(ctx) return genesis } - diff --git a/x/audit/v1/module/module.go b/x/audit/v1/module/module.go index 55dd006..fb4667c 100644 --- a/x/audit/v1/module/module.go +++ b/x/audit/v1/module/module.go @@ -107,4 +107,3 @@ func (am AppModule) EndBlock(ctx context.Context) error { } func (am AppModule) IsAppModule() {} - diff --git a/x/audit/v1/types/audit.pb.go b/x/audit/v1/types/audit.pb.go index c6a3732..c7016b0 100644 --- a/x/audit/v1/types/audit.pb.go +++ b/x/audit/v1/types/audit.pb.go @@ -55,10 +55,9 @@ func (PortState) EnumDescriptor() ([]byte, []int) { } type AuditSelfReport struct { - CpuUsagePercent float64 `protobuf:"fixed64,1,opt,name=cpu_usage_percent,json=cpuUsagePercent,proto3" json:"cpu_usage_percent,omitempty"` - MemUsagePercent float64 `protobuf:"fixed64,2,opt,name=mem_usage_percent,json=memUsagePercent,proto3" json:"mem_usage_percent,omitempty"` - DiskUsagePercent float64 `protobuf:"fixed64,3,opt,name=disk_usage_percent,json=diskUsagePercent,proto3" json:"disk_usage_percent,omitempty"` - // Ordered like Params.required_open_ports. + CpuUsagePercent float64 `protobuf:"fixed64,1,opt,name=cpu_usage_percent,json=cpuUsagePercent,proto3" json:"cpu_usage_percent,omitempty"` + MemUsagePercent float64 `protobuf:"fixed64,2,opt,name=mem_usage_percent,json=memUsagePercent,proto3" json:"mem_usage_percent,omitempty"` + DiskUsagePercent float64 `protobuf:"fixed64,3,opt,name=disk_usage_percent,json=diskUsagePercent,proto3" json:"disk_usage_percent,omitempty"` InboundPortStates []PortState `protobuf:"varint,4,rep,packed,name=inbound_port_states,json=inboundPortStates,proto3,enum=lumera.audit.v1.PortState" json:"inbound_port_states,omitempty"` FailedActionsCount uint32 `protobuf:"varint,5,opt,name=failed_actions_count,json=failedActionsCount,proto3" json:"failed_actions_count,omitempty"` } @@ -132,8 +131,8 @@ func (m *AuditSelfReport) GetFailedActionsCount() uint32 { } type AuditPeerObservation struct { - TargetValidatorAddress string `protobuf:"bytes,1,opt,name=target_validator_address,json=targetValidatorAddress,proto3" json:"target_validator_address,omitempty"` - // Ordered like Params.required_open_ports. + TargetSupernodeAccount string `protobuf:"bytes,1,opt,name=target_supernode_account,json=targetSupernodeAccount,proto3" json:"target_supernode_account,omitempty"` + // port_states[i] refers to required_open_ports[i] for the window. PortStates []PortState `protobuf:"varint,2,rep,packed,name=port_states,json=portStates,proto3,enum=lumera.audit.v1.PortState" json:"port_states,omitempty"` } @@ -170,9 +169,9 @@ func (m *AuditPeerObservation) XXX_DiscardUnknown() { var xxx_messageInfo_AuditPeerObservation proto.InternalMessageInfo -func (m *AuditPeerObservation) GetTargetValidatorAddress() string { +func (m *AuditPeerObservation) GetTargetSupernodeAccount() string { if m != nil { - return m.TargetValidatorAddress + return m.TargetSupernodeAccount } return "" } @@ -185,12 +184,11 @@ func (m *AuditPeerObservation) GetPortStates() []PortState { } type AuditReport struct { - ReporterValidatorAddress string `protobuf:"bytes,1,opt,name=reporter_validator_address,json=reporterValidatorAddress,proto3" json:"reporter_validator_address,omitempty"` - SupernodeAccount string `protobuf:"bytes,2,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - WindowId uint64 `protobuf:"varint,3,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` - ReportHeight int64 `protobuf:"varint,4,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` - SelfReport AuditSelfReport `protobuf:"bytes,5,opt,name=self_report,json=selfReport,proto3" json:"self_report"` - PeerObservations []*AuditPeerObservation `protobuf:"bytes,6,rep,name=peer_observations,json=peerObservations,proto3" json:"peer_observations,omitempty"` + SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` + WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + ReportHeight int64 `protobuf:"varint,3,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` + SelfReport AuditSelfReport `protobuf:"bytes,4,opt,name=self_report,json=selfReport,proto3" json:"self_report"` + PeerObservations []*AuditPeerObservation `protobuf:"bytes,5,rep,name=peer_observations,json=peerObservations,proto3" json:"peer_observations,omitempty"` } func (m *AuditReport) Reset() { *m = AuditReport{} } @@ -226,13 +224,6 @@ func (m *AuditReport) XXX_DiscardUnknown() { var xxx_messageInfo_AuditReport proto.InternalMessageInfo -func (m *AuditReport) GetReporterValidatorAddress() string { - if m != nil { - return m.ReporterValidatorAddress - } - return "" -} - func (m *AuditReport) GetSupernodeAccount() string { if m != nil { return m.SupernodeAccount @@ -268,28 +259,24 @@ func (m *AuditReport) GetPeerObservations() []*AuditPeerObservation { return nil } -type AuditStatus struct { - ValidatorAddress string `protobuf:"bytes,1,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - LastReportedWindowId uint64 `protobuf:"varint,2,opt,name=last_reported_window_id,json=lastReportedWindowId,proto3" json:"last_reported_window_id,omitempty"` - LastReportHeight int64 `protobuf:"varint,3,opt,name=last_report_height,json=lastReportHeight,proto3" json:"last_report_height,omitempty"` - Compliant bool `protobuf:"varint,4,opt,name=compliant,proto3" json:"compliant,omitempty"` - Reasons []string `protobuf:"bytes,5,rep,name=reasons,proto3" json:"reasons,omitempty"` - // Summary reachability states (last evaluated window). - RequiredPortsState []PortState `protobuf:"varint,6,rep,packed,name=required_ports_state,json=requiredPortsState,proto3,enum=lumera.audit.v1.PortState" json:"required_ports_state,omitempty"` +// ProberTargets captures the deterministic prober -> targets mapping for a window. +type ProberTargets struct { + ProberSupernodeAccount string `protobuf:"bytes,1,opt,name=prober_supernode_account,json=proberSupernodeAccount,proto3" json:"prober_supernode_account,omitempty"` + TargetSupernodeAccounts []string `protobuf:"bytes,2,rep,name=target_supernode_accounts,json=targetSupernodeAccounts,proto3" json:"target_supernode_accounts,omitempty"` } -func (m *AuditStatus) Reset() { *m = AuditStatus{} } -func (m *AuditStatus) String() string { return proto.CompactTextString(m) } -func (*AuditStatus) ProtoMessage() {} -func (*AuditStatus) Descriptor() ([]byte, []int) { +func (m *ProberTargets) Reset() { *m = ProberTargets{} } +func (m *ProberTargets) String() string { return proto.CompactTextString(m) } +func (*ProberTargets) ProtoMessage() {} +func (*ProberTargets) Descriptor() ([]byte, []int) { return fileDescriptor_0613fff850c07858, []int{3} } -func (m *AuditStatus) XXX_Unmarshal(b []byte) error { +func (m *ProberTargets) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *AuditStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *ProberTargets) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_AuditStatus.Marshal(b, m, deterministic) + return xxx_messageInfo_ProberTargets.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -299,134 +286,44 @@ func (m *AuditStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) return b[:n], nil } } -func (m *AuditStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_AuditStatus.Merge(m, src) +func (m *ProberTargets) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProberTargets.Merge(m, src) } -func (m *AuditStatus) XXX_Size() int { +func (m *ProberTargets) XXX_Size() int { return m.Size() } -func (m *AuditStatus) XXX_DiscardUnknown() { - xxx_messageInfo_AuditStatus.DiscardUnknown(m) +func (m *ProberTargets) XXX_DiscardUnknown() { + xxx_messageInfo_ProberTargets.DiscardUnknown(m) } -var xxx_messageInfo_AuditStatus proto.InternalMessageInfo +var xxx_messageInfo_ProberTargets proto.InternalMessageInfo -func (m *AuditStatus) GetValidatorAddress() string { +func (m *ProberTargets) GetProberSupernodeAccount() string { if m != nil { - return m.ValidatorAddress + return m.ProberSupernodeAccount } return "" } -func (m *AuditStatus) GetLastReportedWindowId() uint64 { - if m != nil { - return m.LastReportedWindowId - } - return 0 -} - -func (m *AuditStatus) GetLastReportHeight() int64 { - if m != nil { - return m.LastReportHeight - } - return 0 -} - -func (m *AuditStatus) GetCompliant() bool { - if m != nil { - return m.Compliant - } - return false -} - -func (m *AuditStatus) GetReasons() []string { - if m != nil { - return m.Reasons - } - return nil -} - -func (m *AuditStatus) GetRequiredPortsState() []PortState { +func (m *ProberTargets) GetTargetSupernodeAccounts() []string { if m != nil { - return m.RequiredPortsState + return m.TargetSupernodeAccounts } return nil } -type PortEvidenceAggregate struct { - Count uint32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` - FirstState PortState `protobuf:"varint,2,opt,name=first_state,json=firstState,proto3,enum=lumera.audit.v1.PortState" json:"first_state,omitempty"` - Conflict bool `protobuf:"varint,3,opt,name=conflict,proto3" json:"conflict,omitempty"` -} - -func (m *PortEvidenceAggregate) Reset() { *m = PortEvidenceAggregate{} } -func (m *PortEvidenceAggregate) String() string { return proto.CompactTextString(m) } -func (*PortEvidenceAggregate) ProtoMessage() {} -func (*PortEvidenceAggregate) Descriptor() ([]byte, []int) { - return fileDescriptor_0613fff850c07858, []int{4} -} -func (m *PortEvidenceAggregate) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PortEvidenceAggregate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PortEvidenceAggregate.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 *PortEvidenceAggregate) XXX_Merge(src proto.Message) { - xxx_messageInfo_PortEvidenceAggregate.Merge(m, src) -} -func (m *PortEvidenceAggregate) XXX_Size() int { - return m.Size() -} -func (m *PortEvidenceAggregate) XXX_DiscardUnknown() { - xxx_messageInfo_PortEvidenceAggregate.DiscardUnknown(m) -} - -var xxx_messageInfo_PortEvidenceAggregate proto.InternalMessageInfo - -func (m *PortEvidenceAggregate) GetCount() uint32 { - if m != nil { - return m.Count - } - return 0 -} - -func (m *PortEvidenceAggregate) GetFirstState() PortState { - if m != nil { - return m.FirstState - } - return PortState_PORT_STATE_UNKNOWN -} - -func (m *PortEvidenceAggregate) GetConflict() bool { - if m != nil { - return m.Conflict - } - return false -} - type WindowSnapshot struct { - WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` - WindowStartHeight int64 `protobuf:"varint,2,opt,name=window_start_height,json=windowStartHeight,proto3" json:"window_start_height,omitempty"` - SeedBytes []byte `protobuf:"bytes,3,opt,name=seed_bytes,json=seedBytes,proto3" json:"seed_bytes,omitempty"` - Senders []string `protobuf:"bytes,4,rep,name=senders,proto3" json:"senders,omitempty"` - Receivers []string `protobuf:"bytes,5,rep,name=receivers,proto3" json:"receivers,omitempty"` - KWindow uint32 `protobuf:"varint,6,opt,name=k_window,json=kWindow,proto3" json:"k_window,omitempty"` + WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + WindowStartHeight int64 `protobuf:"varint,2,opt,name=window_start_height,json=windowStartHeight,proto3" json:"window_start_height,omitempty"` + // assignments is the minimal per-window source-of-truth for prober -> targets mapping. + Assignments []ProberTargets `protobuf:"bytes,3,rep,name=assignments,proto3" json:"assignments"` } func (m *WindowSnapshot) Reset() { *m = WindowSnapshot{} } func (m *WindowSnapshot) String() string { return proto.CompactTextString(m) } func (*WindowSnapshot) ProtoMessage() {} func (*WindowSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_0613fff850c07858, []int{5} + return fileDescriptor_0613fff850c07858, []int{4} } func (m *WindowSnapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -469,103 +366,68 @@ func (m *WindowSnapshot) GetWindowStartHeight() int64 { return 0 } -func (m *WindowSnapshot) GetSeedBytes() []byte { +func (m *WindowSnapshot) GetAssignments() []ProberTargets { if m != nil { - return m.SeedBytes + return m.Assignments } return nil } -func (m *WindowSnapshot) GetSenders() []string { - if m != nil { - return m.Senders - } - return nil -} - -func (m *WindowSnapshot) GetReceivers() []string { - if m != nil { - return m.Receivers - } - return nil -} - -func (m *WindowSnapshot) GetKWindow() uint32 { - if m != nil { - return m.KWindow - } - return 0 -} - func init() { proto.RegisterEnum("lumera.audit.v1.PortState", PortState_name, PortState_value) proto.RegisterType((*AuditSelfReport)(nil), "lumera.audit.v1.AuditSelfReport") proto.RegisterType((*AuditPeerObservation)(nil), "lumera.audit.v1.AuditPeerObservation") proto.RegisterType((*AuditReport)(nil), "lumera.audit.v1.AuditReport") - proto.RegisterType((*AuditStatus)(nil), "lumera.audit.v1.AuditStatus") - proto.RegisterType((*PortEvidenceAggregate)(nil), "lumera.audit.v1.PortEvidenceAggregate") + proto.RegisterType((*ProberTargets)(nil), "lumera.audit.v1.ProberTargets") proto.RegisterType((*WindowSnapshot)(nil), "lumera.audit.v1.WindowSnapshot") } func init() { proto.RegisterFile("lumera/audit/v1/audit.proto", fileDescriptor_0613fff850c07858) } var fileDescriptor_0613fff850c07858 = []byte{ - // 871 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x6e, 0x1b, 0x37, - 0x10, 0xd6, 0x4a, 0xfe, 0x91, 0x46, 0x49, 0x2c, 0xd1, 0x4a, 0xb2, 0x91, 0x1b, 0x55, 0x55, 0x51, - 0x40, 0x30, 0x12, 0xb9, 0x71, 0xd1, 0x53, 0x0e, 0x85, 0x9c, 0x1a, 0x4d, 0xdb, 0x40, 0x12, 0x56, - 0x4e, 0x03, 0xb4, 0x07, 0x82, 0xde, 0x1d, 0xad, 0x17, 0x96, 0x96, 0x5b, 0x92, 0xab, 0x34, 0x2f, - 0xd0, 0x73, 0x2f, 0x45, 0x5f, 0xa3, 0x87, 0x3c, 0x84, 0x8f, 0x41, 0x4e, 0x3d, 0x15, 0x85, 0xfd, - 0x22, 0x05, 0xc9, 0x95, 0x64, 0x6f, 0x8a, 0x26, 0x80, 0x2f, 0x02, 0xe7, 0xfb, 0xbe, 0x19, 0x91, - 0xdf, 0x0c, 0xb9, 0xb0, 0x33, 0x4d, 0x67, 0x28, 0xd8, 0x1e, 0x4b, 0x83, 0x48, 0xed, 0xcd, 0x1f, - 0xd9, 0x45, 0x2f, 0x11, 0x5c, 0x71, 0xb2, 0x65, 0xc9, 0x9e, 0xc5, 0xe6, 0x8f, 0x9a, 0x75, 0x36, - 0x8b, 0x62, 0xbe, 0x67, 0x7e, 0xad, 0xa6, 0x79, 0xcf, 0xe7, 0x72, 0xc6, 0x25, 0x35, 0xd1, 0x9e, - 0x0d, 0x32, 0xaa, 0x11, 0xf2, 0x90, 0x5b, 0x5c, 0xaf, 0x2c, 0xda, 0xf9, 0xbd, 0x08, 0x5b, 0x7d, - 0x5d, 0x70, 0x8c, 0xd3, 0x89, 0x87, 0x09, 0x17, 0x8a, 0xec, 0x42, 0xdd, 0x4f, 0x52, 0x9a, 0x4a, - 0x16, 0x22, 0x4d, 0x50, 0xf8, 0x18, 0x2b, 0xd7, 0x69, 0x3b, 0x5d, 0xc7, 0xdb, 0xf2, 0x93, 0xf4, - 0xb9, 0xc6, 0x47, 0x16, 0xd6, 0xda, 0x19, 0xce, 0x72, 0xda, 0xa2, 0xd5, 0xce, 0x70, 0x76, 0x45, - 0xfb, 0x00, 0x48, 0x10, 0xc9, 0xd3, 0x9c, 0xb8, 0x64, 0xc4, 0x35, 0xcd, 0x5c, 0x51, 0x7f, 0x07, - 0xdb, 0x51, 0x7c, 0xcc, 0xd3, 0x38, 0xa0, 0x7a, 0x57, 0x54, 0x2a, 0xa6, 0x50, 0xba, 0x6b, 0xed, - 0x52, 0xf7, 0xd6, 0x7e, 0xb3, 0x97, 0x33, 0xa3, 0x37, 0xe2, 0x42, 0x8d, 0xb5, 0xc4, 0xab, 0x67, - 0x69, 0x4b, 0x44, 0x92, 0xcf, 0xa1, 0x31, 0x61, 0xd1, 0x14, 0x03, 0xca, 0x7c, 0x15, 0xf1, 0x58, - 0x52, 0x9f, 0xa7, 0xb1, 0x72, 0xd7, 0xdb, 0x4e, 0xf7, 0xa6, 0x47, 0x2c, 0xd7, 0xb7, 0xd4, 0x13, - 0xcd, 0x74, 0xfe, 0x74, 0xa0, 0x61, 0x7c, 0x19, 0x21, 0x8a, 0xe1, 0xb1, 0x44, 0x31, 0x67, 0x9a, - 0x26, 0x3f, 0x81, 0xab, 0x98, 0x08, 0x51, 0xd1, 0x39, 0x9b, 0x46, 0x01, 0x53, 0x5c, 0x50, 0x16, - 0x04, 0x02, 0xa5, 0x34, 0x1e, 0x55, 0x0e, 0x3e, 0x79, 0xfb, 0xfa, 0xe1, 0xfd, 0xcc, 0xfa, 0x1f, - 0x16, 0x9a, 0xbe, 0x95, 0x8c, 0x95, 0x88, 0xe2, 0xd0, 0xbb, 0x63, 0x4b, 0xe4, 0x59, 0xf2, 0x18, - 0xaa, 0x97, 0xcf, 0x5a, 0x7c, 0xef, 0x59, 0x21, 0x59, 0x1e, 0xb2, 0xf3, 0x47, 0x09, 0xaa, 0x66, - 0xcb, 0x59, 0x1b, 0x29, 0x34, 0x85, 0x59, 0xa1, 0xb8, 0xce, 0x5e, 0xdd, 0x45, 0x91, 0x77, 0x76, - 0xfb, 0x14, 0xea, 0x32, 0x4d, 0x50, 0xc4, 0x3c, 0x40, 0xca, 0x7c, 0x6b, 0x69, 0xd1, 0xd4, 0xdd, - 0x79, 0xfb, 0xfa, 0xe1, 0xdd, 0xac, 0x6e, 0xdf, 0xf7, 0xaf, 0x56, 0xac, 0x2d, 0xb3, 0xfa, 0x36, - 0x89, 0xec, 0x40, 0xe5, 0x65, 0x14, 0x07, 0xfc, 0x25, 0x8d, 0x02, 0x33, 0x10, 0x6b, 0x5e, 0xd9, - 0x02, 0xdf, 0x06, 0xe4, 0x53, 0xb8, 0x69, 0xb7, 0x40, 0x4f, 0x30, 0x0a, 0x4f, 0x94, 0xbb, 0xd6, - 0x76, 0xba, 0x25, 0xef, 0x86, 0x05, 0x9f, 0x1a, 0x8c, 0x7c, 0x03, 0x55, 0x89, 0xd3, 0x09, 0xb5, - 0xa0, 0x69, 0x6c, 0x75, 0xbf, 0xfd, 0x8e, 0x73, 0xb9, 0x51, 0x3f, 0x58, 0x3b, 0xfb, 0xfb, 0xe3, - 0x82, 0x07, 0x72, 0x35, 0xfc, 0x1e, 0xd4, 0x13, 0x44, 0x41, 0xf9, 0xaa, 0xe7, 0xd2, 0xdd, 0x68, - 0x97, 0xba, 0xd5, 0xfd, 0xcf, 0xfe, 0xbb, 0x5c, 0x6e, 0x42, 0xbc, 0x5a, 0x72, 0x15, 0x90, 0x9d, - 0xb3, 0x62, 0xd6, 0x19, 0xdd, 0xa9, 0x54, 0x92, 0x01, 0xd4, 0xaf, 0xd1, 0x90, 0xda, 0x3c, 0xdf, - 0x88, 0x2f, 0xe1, 0xee, 0x94, 0x49, 0x95, 0x1d, 0x1e, 0x03, 0xba, 0x32, 0xb3, 0x68, 0xcc, 0x6c, - 0x68, 0xda, 0xcb, 0xd8, 0x17, 0x0b, 0x63, 0x1f, 0x00, 0xb9, 0x94, 0xb6, 0x70, 0xb7, 0x64, 0xdc, - 0xad, 0xad, 0x32, 0x32, 0x87, 0x3f, 0x82, 0x8a, 0xcf, 0x67, 0xc9, 0x34, 0x62, 0xb1, 0x6d, 0x41, - 0xd9, 0x5b, 0x01, 0xc4, 0x85, 0x4d, 0x81, 0x4c, 0x6a, 0xb3, 0xd6, 0xdb, 0xa5, 0x6e, 0xc5, 0x5b, - 0x84, 0xe4, 0x19, 0x34, 0x04, 0xfe, 0x9c, 0x46, 0x02, 0xed, 0x45, 0x96, 0x76, 0xba, 0x8d, 0xa7, - 0xff, 0x3f, 0xdc, 0x64, 0x91, 0xa7, 0x21, 0x69, 0xb0, 0xce, 0xaf, 0x0e, 0xdc, 0xd6, 0xe1, 0xe1, - 0x3c, 0x0a, 0x30, 0xf6, 0xb1, 0x1f, 0x86, 0x02, 0x43, 0xa6, 0x90, 0x34, 0x60, 0xdd, 0x4e, 0xa0, - 0x63, 0x2e, 0xb5, 0x0d, 0xf4, 0x8d, 0x9a, 0x44, 0x42, 0x66, 0x57, 0xca, 0xd8, 0xf1, 0x9e, 0x1b, - 0x65, 0xe4, 0x66, 0x4d, 0x9a, 0x50, 0xf6, 0x79, 0x3c, 0x99, 0x46, 0xbe, 0xb5, 0xa5, 0xec, 0x2d, - 0x63, 0xfd, 0x70, 0xde, 0xb2, 0x4e, 0x8e, 0x63, 0x96, 0xc8, 0x13, 0x9e, 0x9b, 0x62, 0x27, 0x37, - 0xc5, 0x3d, 0xd8, 0xce, 0x48, 0xa9, 0xd8, 0xca, 0xed, 0xa2, 0x71, 0xbb, 0x6e, 0xa9, 0xb1, 0x66, - 0x32, 0xbb, 0xef, 0x03, 0x48, 0xc4, 0x80, 0x1e, 0xbf, 0xd2, 0x2f, 0x81, 0xfe, 0xf7, 0x1b, 0x5e, - 0x45, 0x23, 0x07, 0x1a, 0x20, 0x8f, 0x61, 0x53, 0x62, 0x1c, 0xa0, 0xb0, 0x2f, 0xe2, 0x07, 0x0d, - 0xce, 0x22, 0x83, 0x7c, 0x05, 0x15, 0x81, 0x3e, 0x46, 0x73, 0x9d, 0xbe, 0xfe, 0xa1, 0xe9, 0xab, - 0x1c, 0x72, 0x0f, 0xca, 0xa7, 0xd9, 0x90, 0xb9, 0x1b, 0xc6, 0xee, 0xcd, 0x53, 0x6b, 0xc6, 0xee, - 0x10, 0x2a, 0x4b, 0x33, 0xc9, 0x1d, 0x20, 0xa3, 0xa1, 0x77, 0x44, 0xc7, 0x47, 0xfd, 0xa3, 0x43, - 0xfa, 0x7c, 0xf0, 0xfd, 0x60, 0xf8, 0x62, 0x50, 0x2b, 0x90, 0x6d, 0xd8, 0xba, 0x84, 0x0f, 0x47, - 0x87, 0x83, 0x9a, 0x43, 0x6e, 0x43, 0xfd, 0x12, 0xf8, 0xe4, 0xd9, 0x70, 0x7c, 0xf8, 0x75, 0xad, - 0x78, 0xb0, 0x7b, 0x76, 0xde, 0x72, 0xde, 0x9c, 0xb7, 0x9c, 0x7f, 0xce, 0x5b, 0xce, 0x6f, 0x17, - 0xad, 0xc2, 0x9b, 0x8b, 0x56, 0xe1, 0xaf, 0x8b, 0x56, 0xe1, 0xc7, 0xda, 0x2f, 0xab, 0x0f, 0xa5, - 0x7a, 0x95, 0xa0, 0x3c, 0xde, 0x30, 0x1f, 0xb5, 0x2f, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x15, - 0x00, 0xd5, 0x42, 0x48, 0x07, 0x00, 0x00, + // 666 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x4e, 0xdb, 0x4c, + 0x14, 0xc5, 0xe3, 0x24, 0x7c, 0xfa, 0xb8, 0x29, 0x24, 0x36, 0x14, 0x02, 0x48, 0x6e, 0x94, 0xaa, + 0x52, 0x84, 0xda, 0xa4, 0xd0, 0x65, 0x57, 0x81, 0xd2, 0xd2, 0x3f, 0x4a, 0x22, 0x3b, 0x08, 0xa9, + 0x9b, 0xd1, 0xc4, 0x1e, 0x8c, 0xd5, 0xd8, 0x63, 0xcd, 0x8c, 0xa1, 0x7d, 0x8b, 0x6e, 0xfa, 0x08, + 0xdd, 0x74, 0x5d, 0x75, 0xdb, 0x2d, 0x4b, 0xd4, 0x55, 0x57, 0x55, 0x05, 0x2f, 0x52, 0xcd, 0x8c, + 0x4b, 0x82, 0xa1, 0x42, 0x62, 0x13, 0xd9, 0xe7, 0x9c, 0x3b, 0xb9, 0x73, 0x7f, 0x57, 0x86, 0xb5, + 0x71, 0x1a, 0x11, 0x86, 0x3b, 0x38, 0xf5, 0x43, 0xd1, 0x39, 0xda, 0xd0, 0x0f, 0xed, 0x84, 0x51, + 0x41, 0xad, 0xaa, 0x36, 0xdb, 0x5a, 0x3b, 0xda, 0x58, 0x35, 0x71, 0x14, 0xc6, 0xb4, 0xa3, 0x7e, + 0x75, 0x66, 0x75, 0xc5, 0xa3, 0x3c, 0xa2, 0x1c, 0xa9, 0xb7, 0x8e, 0x7e, 0xc9, 0xac, 0xc5, 0x80, + 0x06, 0x54, 0xeb, 0xf2, 0x49, 0xab, 0xcd, 0x4f, 0x45, 0xa8, 0x76, 0xe5, 0x81, 0x2e, 0x19, 0x1f, + 0x38, 0x24, 0xa1, 0x4c, 0x58, 0xeb, 0x60, 0x7a, 0x49, 0x8a, 0x52, 0x8e, 0x03, 0x82, 0x12, 0xc2, + 0x3c, 0x12, 0x8b, 0xba, 0xd1, 0x30, 0x5a, 0x86, 0x53, 0xf5, 0x92, 0x74, 0x4f, 0xea, 0x03, 0x2d, + 0xcb, 0x6c, 0x44, 0xa2, 0x5c, 0xb6, 0xa8, 0xb3, 0x11, 0x89, 0x2e, 0x65, 0x1f, 0x82, 0xe5, 0x87, + 0xfc, 0x5d, 0x2e, 0x5c, 0x52, 0xe1, 0x9a, 0x74, 0x2e, 0xa5, 0x5f, 0xc1, 0x42, 0x18, 0x8f, 0x68, + 0x1a, 0xfb, 0x48, 0x76, 0x85, 0xb8, 0xc0, 0x82, 0xf0, 0x7a, 0xb9, 0x51, 0x6a, 0xcd, 0x6f, 0xae, + 0xb6, 0x73, 0xc3, 0x68, 0x0f, 0x28, 0x13, 0xae, 0x8c, 0x38, 0x66, 0x56, 0x76, 0xa1, 0x70, 0xeb, + 0x31, 0x2c, 0x1e, 0xe0, 0x70, 0x4c, 0x7c, 0x84, 0x3d, 0x11, 0xd2, 0x98, 0x23, 0x8f, 0xa6, 0xb1, + 0xa8, 0xcf, 0x34, 0x8c, 0xd6, 0x9c, 0x63, 0x69, 0xaf, 0xab, 0xad, 0x6d, 0xe9, 0x34, 0xbf, 0x18, + 0xb0, 0xa8, 0xe6, 0x32, 0x20, 0x84, 0xf5, 0x47, 0x9c, 0xb0, 0x23, 0x2c, 0x6d, 0x6b, 0x0f, 0xea, + 0x02, 0xb3, 0x80, 0x08, 0xc4, 0xd3, 0x84, 0xb0, 0x98, 0xfa, 0x04, 0x61, 0x4f, 0x1f, 0x27, 0x67, + 0x34, 0xbb, 0xb5, 0xf6, 0xe3, 0xeb, 0xa3, 0xe5, 0x6c, 0xf4, 0x5d, 0xcf, 0xeb, 0xfa, 0x3e, 0x23, + 0x9c, 0xbb, 0x82, 0x85, 0x71, 0xe0, 0x2c, 0xe9, 0x62, 0xf7, 0x6f, 0x6d, 0x57, 0x97, 0x5a, 0x4f, + 0xa1, 0x32, 0x7d, 0xcb, 0xe2, 0x8d, 0xb7, 0x84, 0xe4, 0xe2, 0x7a, 0xcd, 0x6f, 0x45, 0xa8, 0xa8, + 0x66, 0x33, 0x80, 0xbb, 0x60, 0xde, 0xaa, 0xb9, 0x1a, 0xcf, 0xb7, 0xb5, 0x06, 0xb3, 0xc7, 0x61, + 0xec, 0xd3, 0x63, 0x14, 0xfa, 0x0a, 0x6b, 0xd9, 0xf9, 0x5f, 0x0b, 0x2f, 0x7d, 0xeb, 0x3e, 0xcc, + 0x31, 0xf5, 0x87, 0xe8, 0x90, 0x84, 0xc1, 0xa1, 0x46, 0x59, 0x72, 0xee, 0x68, 0x71, 0x57, 0x69, + 0xd6, 0x0b, 0xa8, 0x70, 0x32, 0x3e, 0x40, 0x5a, 0xac, 0x97, 0x1b, 0x46, 0xab, 0xb2, 0xd9, 0xb8, + 0x72, 0xb1, 0xdc, 0x0e, 0x6e, 0x95, 0x4f, 0x7e, 0xdd, 0x2b, 0x38, 0xc0, 0x27, 0x5b, 0xe9, 0x80, + 0x99, 0x10, 0xc2, 0x10, 0x9d, 0xc0, 0xe0, 0xf5, 0x99, 0x46, 0xa9, 0x55, 0xd9, 0x7c, 0x70, 0xfd, + 0x71, 0x39, 0x74, 0x4e, 0x2d, 0xb9, 0x2c, 0xf0, 0xe6, 0x77, 0x03, 0xe6, 0x06, 0x8c, 0x8e, 0x08, + 0x1b, 0x2a, 0x2c, 0x5c, 0xe2, 0x4d, 0x94, 0x70, 0x4b, 0xbc, 0xba, 0xf8, 0x0a, 0xde, 0x7d, 0x58, + 0xf9, 0xd7, 0xd6, 0x68, 0xd8, 0x37, 0x9c, 0xbb, 0x7c, 0xfd, 0xda, 0xf0, 0xe6, 0x67, 0x03, 0xe6, + 0xf7, 0x15, 0x10, 0x37, 0xc6, 0x09, 0x3f, 0xa4, 0x39, 0x66, 0x46, 0x8e, 0x59, 0x1b, 0x16, 0x32, + 0x93, 0x0b, 0x3c, 0x21, 0x57, 0x54, 0xe4, 0x4c, 0x6d, 0xb9, 0xd2, 0xc9, 0xf0, 0x3d, 0x87, 0x0a, + 0xe6, 0x3c, 0x0c, 0xe2, 0x88, 0xc8, 0x56, 0x4b, 0x6a, 0xde, 0xf6, 0xd5, 0xbd, 0x9c, 0x1e, 0x62, + 0x06, 0x6f, 0xba, 0x70, 0xbd, 0x0f, 0xb3, 0x17, 0xbb, 0x6b, 0x2d, 0x81, 0x35, 0xe8, 0x3b, 0x43, + 0xe4, 0x0e, 0xbb, 0xc3, 0x1d, 0xb4, 0xd7, 0x7b, 0xdd, 0xeb, 0xef, 0xf7, 0x6a, 0x05, 0x6b, 0x01, + 0xaa, 0x53, 0x7a, 0x7f, 0xb0, 0xd3, 0xab, 0x19, 0xd6, 0x5d, 0x30, 0xa7, 0xc4, 0xed, 0x37, 0x7d, + 0x77, 0xe7, 0x59, 0xad, 0xb8, 0xb5, 0x7e, 0x72, 0x66, 0x1b, 0xa7, 0x67, 0xb6, 0xf1, 0xfb, 0xcc, + 0x36, 0x3e, 0x9e, 0xdb, 0x85, 0xd3, 0x73, 0xbb, 0xf0, 0xf3, 0xdc, 0x2e, 0xbc, 0xad, 0xbd, 0x9f, + 0x7c, 0x3f, 0xc5, 0x87, 0x84, 0xf0, 0xd1, 0x7f, 0xea, 0x5b, 0xf7, 0xe4, 0x4f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x83, 0x4b, 0x2e, 0xcc, 0x5f, 0x05, 0x00, 0x00, } func (m *AuditSelfReport) Marshal() (dAtA []byte, err error) { @@ -670,10 +532,10 @@ func (m *AuditPeerObservation) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - if len(m.TargetValidatorAddress) > 0 { - i -= len(m.TargetValidatorAddress) - copy(dAtA[i:], m.TargetValidatorAddress) - i = encodeVarintAudit(dAtA, i, uint64(len(m.TargetValidatorAddress))) + if len(m.TargetSupernodeAccount) > 0 { + i -= len(m.TargetSupernodeAccount) + copy(dAtA[i:], m.TargetSupernodeAccount) + i = encodeVarintAudit(dAtA, i, uint64(len(m.TargetSupernodeAccount))) i-- dAtA[i] = 0xa } @@ -711,7 +573,7 @@ func (m *AuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintAudit(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 + dAtA[i] = 0x2a } } { @@ -723,35 +585,28 @@ func (m *AuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintAudit(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x22 if m.ReportHeight != 0 { i = encodeVarintAudit(dAtA, i, uint64(m.ReportHeight)) i-- - dAtA[i] = 0x20 + dAtA[i] = 0x18 } if m.WindowId != 0 { i = encodeVarintAudit(dAtA, i, uint64(m.WindowId)) i-- - dAtA[i] = 0x18 + dAtA[i] = 0x10 } if len(m.SupernodeAccount) > 0 { i -= len(m.SupernodeAccount) copy(dAtA[i:], m.SupernodeAccount) i = encodeVarintAudit(dAtA, i, uint64(len(m.SupernodeAccount))) i-- - dAtA[i] = 0x12 - } - if len(m.ReporterValidatorAddress) > 0 { - i -= len(m.ReporterValidatorAddress) - copy(dAtA[i:], m.ReporterValidatorAddress) - i = encodeVarintAudit(dAtA, i, uint64(len(m.ReporterValidatorAddress))) - i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *AuditStatus) Marshal() (dAtA []byte, err error) { +func (m *ProberTargets) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -761,116 +616,35 @@ func (m *AuditStatus) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AuditStatus) MarshalTo(dAtA []byte) (int, error) { +func (m *ProberTargets) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AuditStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ProberTargets) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.RequiredPortsState) > 0 { - dAtA7 := make([]byte, len(m.RequiredPortsState)*10) - var j6 int - for _, num := range m.RequiredPortsState { - for num >= 1<<7 { - dAtA7[j6] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j6++ - } - dAtA7[j6] = uint8(num) - j6++ - } - i -= j6 - copy(dAtA[i:], dAtA7[:j6]) - i = encodeVarintAudit(dAtA, i, uint64(j6)) - i-- - dAtA[i] = 0x32 - } - if len(m.Reasons) > 0 { - for iNdEx := len(m.Reasons) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Reasons[iNdEx]) - copy(dAtA[i:], m.Reasons[iNdEx]) - i = encodeVarintAudit(dAtA, i, uint64(len(m.Reasons[iNdEx]))) + if len(m.TargetSupernodeAccounts) > 0 { + for iNdEx := len(m.TargetSupernodeAccounts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TargetSupernodeAccounts[iNdEx]) + copy(dAtA[i:], m.TargetSupernodeAccounts[iNdEx]) + i = encodeVarintAudit(dAtA, i, uint64(len(m.TargetSupernodeAccounts[iNdEx]))) i-- - dAtA[i] = 0x2a + dAtA[i] = 0x12 } } - if m.Compliant { - i-- - if m.Compliant { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } - if m.LastReportHeight != 0 { - i = encodeVarintAudit(dAtA, i, uint64(m.LastReportHeight)) - i-- - dAtA[i] = 0x18 - } - if m.LastReportedWindowId != 0 { - i = encodeVarintAudit(dAtA, i, uint64(m.LastReportedWindowId)) - i-- - dAtA[i] = 0x10 - } - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintAudit(dAtA, i, uint64(len(m.ValidatorAddress))) + if len(m.ProberSupernodeAccount) > 0 { + i -= len(m.ProberSupernodeAccount) + copy(dAtA[i:], m.ProberSupernodeAccount) + i = encodeVarintAudit(dAtA, i, uint64(len(m.ProberSupernodeAccount))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *PortEvidenceAggregate) 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 *PortEvidenceAggregate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PortEvidenceAggregate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Conflict { - i-- - if m.Conflict { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if m.FirstState != 0 { - i = encodeVarintAudit(dAtA, i, uint64(m.FirstState)) - i-- - dAtA[i] = 0x10 - } - if m.Count != 0 { - i = encodeVarintAudit(dAtA, i, uint64(m.Count)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - func (m *WindowSnapshot) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -891,36 +665,20 @@ func (m *WindowSnapshot) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.KWindow != 0 { - i = encodeVarintAudit(dAtA, i, uint64(m.KWindow)) - i-- - dAtA[i] = 0x30 - } - if len(m.Receivers) > 0 { - for iNdEx := len(m.Receivers) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Receivers[iNdEx]) - copy(dAtA[i:], m.Receivers[iNdEx]) - i = encodeVarintAudit(dAtA, i, uint64(len(m.Receivers[iNdEx]))) - i-- - dAtA[i] = 0x2a - } - } - if len(m.Senders) > 0 { - for iNdEx := len(m.Senders) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Senders[iNdEx]) - copy(dAtA[i:], m.Senders[iNdEx]) - i = encodeVarintAudit(dAtA, i, uint64(len(m.Senders[iNdEx]))) + if len(m.Assignments) > 0 { + for iNdEx := len(m.Assignments) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Assignments[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintAudit(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x1a } } - if len(m.SeedBytes) > 0 { - i -= len(m.SeedBytes) - copy(dAtA[i:], m.SeedBytes) - i = encodeVarintAudit(dAtA, i, uint64(len(m.SeedBytes))) - i-- - dAtA[i] = 0x1a - } if m.WindowStartHeight != 0 { i = encodeVarintAudit(dAtA, i, uint64(m.WindowStartHeight)) i-- @@ -979,7 +737,7 @@ func (m *AuditPeerObservation) Size() (n int) { } var l int _ = l - l = len(m.TargetValidatorAddress) + l = len(m.TargetSupernodeAccount) if l > 0 { n += 1 + l + sovAudit(uint64(l)) } @@ -999,10 +757,6 @@ func (m *AuditReport) Size() (n int) { } var l int _ = l - l = len(m.ReporterValidatorAddress) - if l > 0 { - n += 1 + l + sovAudit(uint64(l)) - } l = len(m.SupernodeAccount) if l > 0 { n += 1 + l + sovAudit(uint64(l)) @@ -1024,56 +778,22 @@ func (m *AuditReport) Size() (n int) { return n } -func (m *AuditStatus) Size() (n int) { +func (m *ProberTargets) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.ValidatorAddress) + l = len(m.ProberSupernodeAccount) if l > 0 { n += 1 + l + sovAudit(uint64(l)) } - if m.LastReportedWindowId != 0 { - n += 1 + sovAudit(uint64(m.LastReportedWindowId)) - } - if m.LastReportHeight != 0 { - n += 1 + sovAudit(uint64(m.LastReportHeight)) - } - if m.Compliant { - n += 2 - } - if len(m.Reasons) > 0 { - for _, s := range m.Reasons { + if len(m.TargetSupernodeAccounts) > 0 { + for _, s := range m.TargetSupernodeAccounts { l = len(s) n += 1 + l + sovAudit(uint64(l)) } } - if len(m.RequiredPortsState) > 0 { - l = 0 - for _, e := range m.RequiredPortsState { - l += sovAudit(uint64(e)) - } - n += 1 + sovAudit(uint64(l)) + l - } - return n -} - -func (m *PortEvidenceAggregate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Count != 0 { - n += 1 + sovAudit(uint64(m.Count)) - } - if m.FirstState != 0 { - n += 1 + sovAudit(uint64(m.FirstState)) - } - if m.Conflict { - n += 2 - } return n } @@ -1089,25 +809,12 @@ func (m *WindowSnapshot) Size() (n int) { if m.WindowStartHeight != 0 { n += 1 + sovAudit(uint64(m.WindowStartHeight)) } - l = len(m.SeedBytes) - if l > 0 { - n += 1 + l + sovAudit(uint64(l)) - } - if len(m.Senders) > 0 { - for _, s := range m.Senders { - l = len(s) - n += 1 + l + sovAudit(uint64(l)) - } - } - if len(m.Receivers) > 0 { - for _, s := range m.Receivers { - l = len(s) + if len(m.Assignments) > 0 { + for _, e := range m.Assignments { + l = e.Size() n += 1 + l + sovAudit(uint64(l)) } } - if m.KWindow != 0 { - n += 1 + sovAudit(uint64(m.KWindow)) - } return n } @@ -1319,7 +1026,7 @@ func (m *AuditPeerObservation) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetValidatorAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TargetSupernodeAccount", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1347,7 +1054,7 @@ func (m *AuditPeerObservation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.TargetValidatorAddress = string(dAtA[iNdEx:postIndex]) + m.TargetSupernodeAccount = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType == 0 { @@ -1469,38 +1176,6 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReporterValidatorAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - 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 ErrInvalidLengthAudit - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAudit - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ReporterValidatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", wireType) } @@ -1532,7 +1207,7 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { } m.SupernodeAccount = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 2: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) } @@ -1551,7 +1226,7 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { break } } - case 4: + case 3: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field ReportHeight", wireType) } @@ -1570,7 +1245,7 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { break } } - case 5: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SelfReport", wireType) } @@ -1603,7 +1278,7 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 6: + case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field PeerObservations", wireType) } @@ -1658,7 +1333,7 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { } return nil } -func (m *AuditStatus) Unmarshal(dAtA []byte) error { +func (m *ProberTargets) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1681,15 +1356,15 @@ func (m *AuditStatus) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AuditStatus: wiretype end group for non-group") + return fmt.Errorf("proto: ProberTargets: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AuditStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ProberTargets: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProberSupernodeAccount", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1717,69 +1392,11 @@ func (m *AuditStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + m.ProberSupernodeAccount = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LastReportedWindowId", wireType) - } - m.LastReportedWindowId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LastReportedWindowId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LastReportHeight", wireType) - } - m.LastReportHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LastReportHeight |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Compliant", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Compliant = bool(v != 0) - case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reasons", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TargetSupernodeAccounts", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1807,185 +1424,8 @@ func (m *AuditStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Reasons = append(m.Reasons, string(dAtA[iNdEx:postIndex])) + m.TargetSupernodeAccounts = append(m.TargetSupernodeAccounts, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 6: - if wireType == 0 { - var v PortState - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= PortState(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RequiredPortsState = append(m.RequiredPortsState, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthAudit - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthAudit - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - if elementCount != 0 && len(m.RequiredPortsState) == 0 { - m.RequiredPortsState = make([]PortState, 0, elementCount) - } - for iNdEx < postIndex { - var v PortState - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= PortState(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RequiredPortsState = append(m.RequiredPortsState, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field RequiredPortsState", wireType) - } - default: - iNdEx = preIndex - skippy, err := skipAudit(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PortEvidenceAggregate) 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 ErrIntOverflowAudit - } - 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: PortEvidenceAggregate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PortEvidenceAggregate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) - } - m.Count = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Count |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FirstState", wireType) - } - m.FirstState = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.FirstState |= PortState(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Conflict", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Conflict = bool(v != 0) default: iNdEx = preIndex skippy, err := skipAudit(dAtA[iNdEx:]) @@ -2076,43 +1516,9 @@ func (m *WindowSnapshot) Unmarshal(dAtA []byte) error { } case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SeedBytes", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthAudit - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthAudit + return fmt.Errorf("proto: wrong wireType = %d for field Assignments", wireType) } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SeedBytes = append(m.SeedBytes[:0], dAtA[iNdEx:postIndex]...) - if m.SeedBytes == nil { - m.SeedBytes = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Senders", wireType) - } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowAudit @@ -2122,75 +1528,26 @@ func (m *WindowSnapshot) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthAudit } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthAudit } if postIndex > l { return io.ErrUnexpectedEOF } - m.Senders = append(m.Senders, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Receivers", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - 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 ErrInvalidLengthAudit - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAudit - } - if postIndex > l { - return io.ErrUnexpectedEOF + m.Assignments = append(m.Assignments, ProberTargets{}) + if err := m.Assignments[len(m.Assignments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.Receivers = append(m.Receivers, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KWindow", wireType) - } - m.KWindow = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.KWindow |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipAudit(dAtA[iNdEx:]) diff --git a/x/audit/v1/types/errors.go b/x/audit/v1/types/errors.go index 2793e30..3d9e1de 100644 --- a/x/audit/v1/types/errors.go +++ b/x/audit/v1/types/errors.go @@ -5,12 +5,13 @@ import ( ) var ( - ErrInvalidSigner = errorsmod.Register(ModuleName, 1, "invalid signer") - ErrInvalidWindowID = errorsmod.Register(ModuleName, 2, "invalid window id") - ErrWindowSnapshotNotFound = errorsmod.Register(ModuleName, 3, "window snapshot not found") - ErrDuplicateReport = errorsmod.Register(ModuleName, 4, "duplicate report") - ErrInvalidPeerObservations = errorsmod.Register(ModuleName, 5, "invalid peer observations") - ErrInvalidPortStatesLength = errorsmod.Register(ModuleName, 6, "invalid port states length") - ErrReporterNotFound = errorsmod.Register(ModuleName, 7, "reporter supernode not found") - ErrInvalidReporterState = errorsmod.Register(ModuleName, 8, "invalid reporter state") + ErrInvalidSigner = errorsmod.Register(ModuleName, 1, "invalid signer") + ErrInvalidWindowID = errorsmod.Register(ModuleName, 2, "invalid window id") + ErrWindowSnapshotNotFound = errorsmod.Register(ModuleName, 3, "window snapshot not found") + ErrDuplicateReport = errorsmod.Register(ModuleName, 4, "duplicate report") + ErrInvalidPeerObservations = errorsmod.Register(ModuleName, 5, "invalid peer observations") + ErrInvalidPortStatesLength = errorsmod.Register(ModuleName, 6, "invalid port states length") + ErrReporterNotFound = errorsmod.Register(ModuleName, 7, "reporter supernode not found") + ErrInvalidReporterState = errorsmod.Register(ModuleName, 8, "invalid reporter state") + ErrInvalidWindowSnapshot = errorsmod.Register(ModuleName, 9, "invalid window snapshot") ) diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go index 586fb91..c37998f 100644 --- a/x/audit/v1/types/keys.go +++ b/x/audit/v1/types/keys.go @@ -12,46 +12,139 @@ const ( var ( ParamsKey = []byte("p_audit") - windowOriginHeightKey = []byte{0x01} + // Key layout notes + // + // This module uses human-readable ASCII prefixes plus fixed-width binary window IDs. + // - Prefixes are short and unambiguous when iterating by prefix. + // - window_id is encoded as 8-byte big-endian so lexicographic ordering matches numeric ordering. + // - supernode accounts are stored as their bech32 string bytes. + // + // Snapshotting: + // - Each window stores a WindowSnapshot under "ws/". + // - The snapshot is intended to be an immutable per-window source-of-truth for: + // - prober -> targets mapping (assignments) + // + // Formats: + // - WindowOriginHeightKey: "origin_height" -> 8 bytes (u64be(height)) + // - WindowSnapshotKey: "ws/" + u64be(window_id) + // - ReportKey: "r/" + u64be(window_id) + reporter_supernode_account + // - ReportIndexKey: "ri/" + reporter_supernode_account + "/" + u64be(window_id) + // - SupernodeReportIndexKey: "sr/" + supernode_account + "/" + u64be(window_id) + "/" + reporter_supernode_account + // - SelfReportIndexKey: "ss/" + reporter_supernode_account + "/" + u64be(window_id) + // + // Examples (shown as pseudo strings; the u64be bytes will appear as non-printable in raw dumps): + // - WindowSnapshotKey(1) => "ws/" + u64be(1) + // - ReportKey(1, "") => "r/" + u64be(1) + "" + // - EvidenceKey(1, "") => "e/" + u64be(1) + "" - windowSnapshotPrefix = []byte{0x10} - reportPrefix = []byte{0x11} - evidencePrefix = []byte{0x12} - statusPrefix = []byte{0x13} + windowOriginHeightKey = []byte("origin_height") + + windowSnapshotPrefix = []byte("ws/") + reportPrefix = []byte("r/") + + reportIndexPrefix = []byte("ri/") + + // supernodeReportIndexPrefix indexes reports that include an observation for a given supernode. + // Format: "sr/" + supernode_account + "/" + u64be(window_id) + "/" + reporter_supernode_account + supernodeReportIndexPrefix = []byte("sr/") + + // selfReportIndexPrefix indexes all submitted reports (for listing self reports across reporters/windows). + // Format: "ss/" + reporter_supernode_account + "/" + u64be(window_id) + selfReportIndexPrefix = []byte("ss/") ) +// WindowOriginHeightKey returns the store key for the module's fixed window origin height. +// The stored value is u64be(height). func WindowOriginHeightKey() []byte { return windowOriginHeightKey } +// WindowSnapshotKey returns the store key for the WindowSnapshot identified by windowID. func WindowSnapshotKey(windowID uint64) []byte { - key := make([]byte, 0, len(windowSnapshotPrefix)+8) - key = append(key, windowSnapshotPrefix...) - key = binary.BigEndian.AppendUint64(key, windowID) + key := make([]byte, 0, len(windowSnapshotPrefix)+8) // "ws/" + u64be(window_id) + key = append(key, windowSnapshotPrefix...) // "ws/" + key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + return key +} + +// ReportKey returns the store key for the AuditReport identified by (windowID, reporterSupernodeAccount). +func ReportKey(windowID uint64, reporterSupernodeAccount string) []byte { + key := make([]byte, 0, len(reportPrefix)+8+len(reporterSupernodeAccount)) // "r/" + u64be(window_id) + reporter + key = append(key, reportPrefix...) // "r/" + key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + key = append(key, reporterSupernodeAccount...) // reporter (bech32) + return key +} + +// ReportIndexKey returns the store key for the report index entry identified by (reporterSupernodeAccount, windowID). +// The value is empty; the key exists to allow querying all reports for a reporter without scanning all windows. +func ReportIndexKey(reporterSupernodeAccount string, windowID uint64) []byte { + key := make([]byte, 0, len(reportIndexPrefix)+len(reporterSupernodeAccount)+1+8) // "ri/" + reporter + "/" + u64be(window_id) + key = append(key, reportIndexPrefix...) // "ri/" + key = append(key, reporterSupernodeAccount...) // reporter (bech32) + key = append(key, '/') // separator + key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + return key +} + +// ReportIndexPrefix returns the prefix under which report index keys are stored for a reporter. +func ReportIndexPrefix(reporterSupernodeAccount string) []byte { + key := make([]byte, 0, len(reportIndexPrefix)+len(reporterSupernodeAccount)+1) // "ri/" + reporter + "/" + key = append(key, reportIndexPrefix...) // "ri/" + key = append(key, reporterSupernodeAccount...) // reporter (bech32) + key = append(key, '/') // separator + return key +} + +// SupernodeReportIndexKey returns the store key for an index entry identified by (supernodeAccount, windowID, reporterSupernodeAccount). +// The value is empty; the key exists to allow querying reports about a given supernode without scanning all reports. +func SupernodeReportIndexKey(supernodeAccount string, windowID uint64, reporterSupernodeAccount string) []byte { + key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1+8+1+len(reporterSupernodeAccount)) // "sr/" + supernode + "/" + u64be(window_id) + "/" + reporter + key = append(key, supernodeReportIndexPrefix...) // "sr/" + key = append(key, supernodeAccount...) // supernode (bech32) + key = append(key, '/') // separator + key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + key = append(key, '/') // separator + key = append(key, reporterSupernodeAccount...) // reporter (bech32) + return key +} + +// SupernodeReportIndexPrefix returns the prefix under which index keys are stored for a given supernode. +func SupernodeReportIndexPrefix(supernodeAccount string) []byte { + key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1) // "sr/" + supernode + "/" + key = append(key, supernodeReportIndexPrefix...) // "sr/" + key = append(key, supernodeAccount...) // supernode (bech32) + key = append(key, '/') // separator return key } -func ReportKey(windowID uint64, reporterValidatorAddress string) []byte { - key := make([]byte, 0, len(reportPrefix)+8+len(reporterValidatorAddress)) - key = append(key, reportPrefix...) - key = binary.BigEndian.AppendUint64(key, windowID) - key = append(key, reporterValidatorAddress...) +// SupernodeReportIndexWindowPrefix returns the prefix under which index keys are stored for a given (supernodeAccount, windowID). +func SupernodeReportIndexWindowPrefix(supernodeAccount string, windowID uint64) []byte { + key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1+8+1) // "sr/" + supernode + "/" + u64be(window_id) + "/" + key = append(key, supernodeReportIndexPrefix...) // "sr/" + key = append(key, supernodeAccount...) // supernode (bech32) + key = append(key, '/') // separator + key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + key = append(key, '/') // separator return key } -func EvidenceKey(windowID uint64, targetValidatorAddress string, portIndex uint32) []byte { - key := make([]byte, 0, len(evidencePrefix)+8+len(targetValidatorAddress)+1+4) - key = append(key, evidencePrefix...) - key = binary.BigEndian.AppendUint64(key, windowID) - key = append(key, targetValidatorAddress...) - key = append(key, 0x00) - key = binary.BigEndian.AppendUint32(key, portIndex) +// SelfReportIndexKey returns the store key for an index entry identified by (reporterSupernodeAccount, windowID). +// The value is empty; the key exists to allow listing a supernode's self reports across windows without scanning all report keys. +func SelfReportIndexKey(reporterSupernodeAccount string, windowID uint64) []byte { + key := make([]byte, 0, len(selfReportIndexPrefix)+len(reporterSupernodeAccount)+1+8) // "ss/" + reporter + "/" + u64be(window_id) + key = append(key, selfReportIndexPrefix...) // "ss/" + key = append(key, reporterSupernodeAccount...) // reporter (bech32) + key = append(key, '/') // separator + key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) return key } -func AuditStatusKey(validatorAddress string) []byte { - key := make([]byte, 0, len(statusPrefix)+len(validatorAddress)) - key = append(key, statusPrefix...) - key = append(key, validatorAddress...) +// SelfReportIndexPrefix returns the prefix under which self report index keys are stored for a given reporter. +func SelfReportIndexPrefix(reporterSupernodeAccount string) []byte { + key := make([]byte, 0, len(selfReportIndexPrefix)+len(reporterSupernodeAccount)+1) // "ss/" + reporter + "/" + key = append(key, selfReportIndexPrefix...) // "ss/" + key = append(key, reporterSupernodeAccount...) // reporter (bech32) + key = append(key, '/') // separator return key } diff --git a/x/audit/v1/types/params.go b/x/audit/v1/types/params.go index 0b172fc..1c53db7 100644 --- a/x/audit/v1/types/params.go +++ b/x/audit/v1/types/params.go @@ -10,49 +10,51 @@ import ( var _ paramtypes.ParamSet = (*Params)(nil) var ( - KeyReportingWindowBlocks = []byte("ReportingWindowBlocks") - KeyMissingReportGraceBlocks = []byte("MissingReportGraceBlocks") - KeyPeerQuorumReports = []byte("PeerQuorumReports") - KeyMinProbeTargetsPerWindow = []byte("MinProbeTargetsPerWindow") - KeyMaxProbeTargetsPerWindow = []byte("MaxProbeTargetsPerWindow") - KeyRequiredOpenPorts = []byte("RequiredOpenPorts") + KeyReportingWindowBlocks = []byte("ReportingWindowBlocks") + KeyPeerQuorumReports = []byte("PeerQuorumReports") + KeyMinProbeTargetsPerWindow = []byte("MinProbeTargetsPerWindow") + KeyMaxProbeTargetsPerWindow = []byte("MaxProbeTargetsPerWindow") + KeyRequiredOpenPorts = []byte("RequiredOpenPorts") ) var ( - DefaultReportingWindowBlocks = uint64(400) - DefaultMissingReportGraceBlocks = uint64(100) - DefaultPeerQuorumReports = uint32(3) - DefaultMinProbeTargetsPerWindow = uint32(3) - DefaultMaxProbeTargetsPerWindow = uint32(5) - DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} + DefaultReportingWindowBlocks = uint64(400) + DefaultPeerQuorumReports = uint32(3) + DefaultMinProbeTargetsPerWindow = uint32(3) + DefaultMaxProbeTargetsPerWindow = uint32(5) + DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} ) +// Params notes +// +// - reporting_window_blocks: defines the fixed-length reporting window size in blocks. +// - peer_quorum_reports: desired number of peer observations per receiver (drives k_window calculation). +// - min/max_probe_targets_per_window: clamps k_window to a safe range. +// - required_open_ports: ports every report must cover. + func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) } func NewParams( reportingWindowBlocks uint64, - missingReportGraceBlocks uint64, peerQuorumReports uint32, minProbeTargetsPerWindow uint32, maxProbeTargetsPerWindow uint32, requiredOpenPorts []uint32, ) Params { return Params{ - ReportingWindowBlocks: reportingWindowBlocks, - MissingReportGraceBlocks: missingReportGraceBlocks, - PeerQuorumReports: peerQuorumReports, - MinProbeTargetsPerWindow: minProbeTargetsPerWindow, - MaxProbeTargetsPerWindow: maxProbeTargetsPerWindow, - RequiredOpenPorts: requiredOpenPorts, + ReportingWindowBlocks: reportingWindowBlocks, + PeerQuorumReports: peerQuorumReports, + MinProbeTargetsPerWindow: minProbeTargetsPerWindow, + MaxProbeTargetsPerWindow: maxProbeTargetsPerWindow, + RequiredOpenPorts: requiredOpenPorts, } } func DefaultParams() Params { return NewParams( DefaultReportingWindowBlocks, - DefaultMissingReportGraceBlocks, DefaultPeerQuorumReports, DefaultMinProbeTargetsPerWindow, DefaultMaxProbeTargetsPerWindow, @@ -64,9 +66,6 @@ func (p Params) WithDefaults() Params { if p.ReportingWindowBlocks == 0 { p.ReportingWindowBlocks = DefaultReportingWindowBlocks } - if p.MissingReportGraceBlocks == 0 { - p.MissingReportGraceBlocks = DefaultMissingReportGraceBlocks - } if p.PeerQuorumReports == 0 { p.PeerQuorumReports = DefaultPeerQuorumReports } @@ -85,7 +84,6 @@ func (p Params) WithDefaults() Params { func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { return paramtypes.ParamSetPairs{ paramtypes.NewParamSetPair(KeyReportingWindowBlocks, &p.ReportingWindowBlocks, validateUint64), - paramtypes.NewParamSetPair(KeyMissingReportGraceBlocks, &p.MissingReportGraceBlocks, validateUint64), paramtypes.NewParamSetPair(KeyPeerQuorumReports, &p.PeerQuorumReports, validateUint32), paramtypes.NewParamSetPair(KeyMinProbeTargetsPerWindow, &p.MinProbeTargetsPerWindow, validateUint32), paramtypes.NewParamSetPair(KeyMaxProbeTargetsPerWindow, &p.MaxProbeTargetsPerWindow, validateUint32), diff --git a/x/audit/v1/types/params.pb.go b/x/audit/v1/types/params.pb.go index 00ac19c..c7309f6 100644 --- a/x/audit/v1/types/params.pb.go +++ b/x/audit/v1/types/params.pb.go @@ -27,7 +27,6 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Params defines the parameters for the audit module. type Params struct { ReportingWindowBlocks uint64 `protobuf:"varint,1,opt,name=reporting_window_blocks,json=reportingWindowBlocks,proto3" json:"reporting_window_blocks,omitempty"` - MissingReportGraceBlocks uint64 `protobuf:"varint,2,opt,name=missing_report_grace_blocks,json=missingReportGraceBlocks,proto3" json:"missing_report_grace_blocks,omitempty"` PeerQuorumReports uint32 `protobuf:"varint,3,opt,name=peer_quorum_reports,json=peerQuorumReports,proto3" json:"peer_quorum_reports,omitempty"` MinProbeTargetsPerWindow uint32 `protobuf:"varint,4,opt,name=min_probe_targets_per_window,json=minProbeTargetsPerWindow,proto3" json:"min_probe_targets_per_window,omitempty"` MaxProbeTargetsPerWindow uint32 `protobuf:"varint,5,opt,name=max_probe_targets_per_window,json=maxProbeTargetsPerWindow,proto3" json:"max_probe_targets_per_window,omitempty"` @@ -74,13 +73,6 @@ func (m *Params) GetReportingWindowBlocks() uint64 { return 0 } -func (m *Params) GetMissingReportGraceBlocks() uint64 { - if m != nil { - return m.MissingReportGraceBlocks - } - return 0 -} - func (m *Params) GetPeerQuorumReports() uint32 { if m != nil { return m.PeerQuorumReports @@ -116,28 +108,27 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/params.proto", fileDescriptor_3788ca0fc7eb9d86) } var fileDescriptor_3788ca0fc7eb9d86 = []byte{ - // 336 bytes of a gzipped FileDescriptorProto + // 311 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xbf, 0x4a, 0x03, 0x41, - 0x10, 0xc6, 0x73, 0x49, 0x4c, 0x71, 0x20, 0x9a, 0x8b, 0xe2, 0x11, 0xc3, 0x19, 0xac, 0x82, 0xc5, - 0x1d, 0x41, 0xb0, 0x10, 0xb4, 0x48, 0x63, 0xe9, 0x19, 0x04, 0xc1, 0x66, 0xd9, 0x24, 0xc3, 0xb1, - 0x98, 0xfd, 0x93, 0xd9, 0xbb, 0x24, 0xbe, 0x85, 0x8f, 0xe0, 0xe3, 0x58, 0xa6, 0xb4, 0x94, 0x04, - 0xc1, 0xc7, 0x90, 0xdd, 0xbd, 0x68, 0xa3, 0xcd, 0x32, 0xec, 0xef, 0xfb, 0x0d, 0x1f, 0x8c, 0xdf, - 0x99, 0x16, 0x1c, 0x90, 0x26, 0xb4, 0x98, 0xb0, 0x3c, 0x99, 0xf7, 0x13, 0x45, 0x91, 0x72, 0x1d, - 0x2b, 0x94, 0xb9, 0x0c, 0xf6, 0x1c, 0x8d, 0x2d, 0x8d, 0xe7, 0xfd, 0x76, 0x93, 0x72, 0x26, 0x64, - 0x62, 0x5f, 0x97, 0x69, 0x1f, 0x64, 0x32, 0x93, 0x76, 0x4c, 0xcc, 0xe4, 0x7e, 0x4f, 0x3f, 0xab, - 0x7e, 0x23, 0xb5, 0xab, 0x82, 0x0b, 0xff, 0x08, 0x41, 0x49, 0xcc, 0x99, 0xc8, 0xc8, 0x82, 0x89, - 0x89, 0x5c, 0x90, 0xd1, 0x54, 0x8e, 0x9f, 0x74, 0xe8, 0x75, 0xbd, 0x5e, 0x7d, 0x78, 0xf8, 0x83, - 0x1f, 0x2c, 0x1d, 0x58, 0x18, 0x5c, 0xf9, 0xc7, 0x9c, 0x69, 0x6d, 0x2c, 0x17, 0x20, 0x19, 0xd2, - 0x31, 0x6c, 0xdd, 0xaa, 0x75, 0xc3, 0x32, 0x32, 0xb4, 0x89, 0x1b, 0x13, 0x28, 0xf5, 0xd8, 0x6f, - 0x29, 0x00, 0x24, 0xb3, 0x42, 0x62, 0xc1, 0xcb, 0x15, 0x3a, 0xac, 0x75, 0xbd, 0xde, 0xee, 0xb0, - 0x69, 0xd0, 0x9d, 0x25, 0xce, 0xd4, 0xc1, 0xb5, 0xdf, 0xe1, 0x4c, 0x10, 0x85, 0x72, 0x04, 0x24, - 0xa7, 0x98, 0x41, 0xae, 0x89, 0x02, 0x2c, 0x2b, 0x87, 0x75, 0x2b, 0x86, 0x9c, 0x89, 0xd4, 0x44, - 0xee, 0x5d, 0x22, 0x05, 0x74, 0xa5, 0xad, 0x4f, 0x97, 0xff, 0xfb, 0x3b, 0xa5, 0x4f, 0x97, 0x7f, - 0xfb, 0xb1, 0xdf, 0x42, 0x98, 0x15, 0x0c, 0x61, 0x42, 0xa4, 0x02, 0x41, 0x5c, 0xdf, 0x46, 0xb7, - 0x66, 0xfa, 0x6e, 0xd1, 0xad, 0x02, 0x91, 0x1a, 0x70, 0x59, 0xff, 0x7a, 0x3d, 0xf1, 0x06, 0x67, - 0x6f, 0xeb, 0xc8, 0x5b, 0xad, 0x23, 0xef, 0x63, 0x1d, 0x79, 0x2f, 0x9b, 0xa8, 0xb2, 0xda, 0x44, - 0x95, 0xf7, 0x4d, 0x54, 0x79, 0xdc, 0x5f, 0xfe, 0x1e, 0x35, 0x7f, 0x56, 0xa0, 0x47, 0x0d, 0x7b, - 0x9a, 0xf3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0x6e, 0x88, 0x53, 0xf4, 0x01, 0x00, 0x00, + 0x10, 0x87, 0xb3, 0x26, 0xa6, 0x58, 0x10, 0xcd, 0x45, 0xf1, 0x08, 0x61, 0x0d, 0x56, 0xc1, 0xe2, + 0x8e, 0x20, 0x58, 0x58, 0x58, 0xe4, 0x05, 0x3c, 0x83, 0x20, 0xd8, 0x2c, 0x1b, 0x33, 0x1c, 0x8b, + 0xd9, 0x3f, 0x99, 0xdb, 0x4b, 0xe2, 0x5b, 0xf8, 0x08, 0x56, 0x3e, 0x8b, 0x65, 0x4a, 0x4b, 0x49, + 0x1a, 0x1f, 0x43, 0x6e, 0x37, 0x6a, 0xa3, 0xcd, 0x32, 0xec, 0xf7, 0xfb, 0x76, 0x86, 0x1d, 0xda, + 0x9d, 0x96, 0x0a, 0x50, 0xa4, 0xa2, 0x9c, 0x48, 0x97, 0xce, 0x07, 0xa9, 0x15, 0x28, 0x54, 0x91, + 0x58, 0x34, 0xce, 0x44, 0xfb, 0x81, 0x26, 0x9e, 0x26, 0xf3, 0x41, 0xa7, 0x25, 0x94, 0xd4, 0x26, + 0xf5, 0x67, 0xc8, 0x74, 0x0e, 0x73, 0x93, 0x1b, 0x5f, 0xa6, 0x55, 0x15, 0x6e, 0x4f, 0x5f, 0x77, + 0x68, 0x33, 0xf3, 0x4f, 0x45, 0x17, 0xf4, 0x18, 0xc1, 0x1a, 0x74, 0x52, 0xe7, 0x7c, 0x21, 0xf5, + 0xc4, 0x2c, 0xf8, 0x78, 0x6a, 0x1e, 0x1e, 0x8b, 0x98, 0xf4, 0x48, 0xbf, 0x31, 0x3a, 0xfa, 0xc1, + 0x77, 0x9e, 0x0e, 0x3d, 0x8c, 0x12, 0xda, 0xb6, 0x00, 0xc8, 0x67, 0xa5, 0xc1, 0x52, 0xf1, 0x10, + 0x2a, 0xe2, 0x7a, 0x8f, 0xf4, 0xf7, 0x46, 0xad, 0x0a, 0xdd, 0x78, 0x32, 0x0a, 0x20, 0xba, 0xa2, + 0x5d, 0x25, 0x35, 0xb7, 0x68, 0xc6, 0xc0, 0x9d, 0xc0, 0x1c, 0x5c, 0xc1, 0x2d, 0xe0, 0xb6, 0x67, + 0xdc, 0xf0, 0x62, 0xac, 0xa4, 0xce, 0xaa, 0xc8, 0x6d, 0x48, 0x64, 0x80, 0xa1, 0xab, 0xf7, 0xc5, + 0xf2, 0x7f, 0x7f, 0x77, 0xeb, 0x8b, 0xe5, 0xdf, 0x7e, 0x42, 0xdb, 0x08, 0xb3, 0x52, 0x22, 0x4c, + 0xb8, 0xb1, 0xa0, 0x79, 0x98, 0xb7, 0xd9, 0xab, 0x57, 0xf3, 0x7e, 0xa3, 0x6b, 0x0b, 0x3a, 0xab, + 0xc0, 0x65, 0xe3, 0xf3, 0xe5, 0x84, 0x0c, 0xcf, 0xde, 0xd6, 0x8c, 0xac, 0xd6, 0x8c, 0x7c, 0xac, + 0x19, 0x79, 0xde, 0xb0, 0xda, 0x6a, 0xc3, 0x6a, 0xef, 0x1b, 0x56, 0xbb, 0x3f, 0x58, 0xfe, 0x6e, + 0xc5, 0x3d, 0x59, 0x28, 0xc6, 0x4d, 0xff, 0xb7, 0xe7, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x89, + 0x10, 0x5a, 0x8e, 0xb5, 0x01, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -162,9 +153,6 @@ func (this *Params) Equal(that interface{}) bool { if this.ReportingWindowBlocks != that1.ReportingWindowBlocks { return false } - if this.MissingReportGraceBlocks != that1.MissingReportGraceBlocks { - return false - } if this.PeerQuorumReports != that1.PeerQuorumReports { return false } @@ -237,11 +225,6 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x18 } - if m.MissingReportGraceBlocks != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.MissingReportGraceBlocks)) - i-- - dAtA[i] = 0x10 - } if m.ReportingWindowBlocks != 0 { i = encodeVarintParams(dAtA, i, uint64(m.ReportingWindowBlocks)) i-- @@ -270,9 +253,6 @@ func (m *Params) Size() (n int) { if m.ReportingWindowBlocks != 0 { n += 1 + sovParams(uint64(m.ReportingWindowBlocks)) } - if m.MissingReportGraceBlocks != 0 { - n += 1 + sovParams(uint64(m.MissingReportGraceBlocks)) - } if m.PeerQuorumReports != 0 { n += 1 + sovParams(uint64(m.PeerQuorumReports)) } @@ -346,25 +326,6 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MissingReportGraceBlocks", wireType) - } - m.MissingReportGraceBlocks = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MissingReportGraceBlocks |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } case 3: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field PeerQuorumReports", wireType) diff --git a/x/audit/v1/types/query.pb.go b/x/audit/v1/types/query.pb.go index 88c9f4e..a8dd248 100644 --- a/x/audit/v1/types/query.pb.go +++ b/x/audit/v1/types/query.pb.go @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" _ "github.com/cosmos/cosmos-proto" + query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" @@ -111,22 +112,21 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -type QueryAuditStatusRequest struct { - ValidatorAddress string `protobuf:"bytes,1,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` +type QueryCurrentWindowRequest struct { } -func (m *QueryAuditStatusRequest) Reset() { *m = QueryAuditStatusRequest{} } -func (m *QueryAuditStatusRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAuditStatusRequest) ProtoMessage() {} -func (*QueryAuditStatusRequest) Descriptor() ([]byte, []int) { +func (m *QueryCurrentWindowRequest) Reset() { *m = QueryCurrentWindowRequest{} } +func (m *QueryCurrentWindowRequest) String() string { return proto.CompactTextString(m) } +func (*QueryCurrentWindowRequest) ProtoMessage() {} +func (*QueryCurrentWindowRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{2} } -func (m *QueryAuditStatusRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryCurrentWindowRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAuditStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryCurrentWindowRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAuditStatusRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryCurrentWindowRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -136,41 +136,36 @@ func (m *QueryAuditStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryAuditStatusRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAuditStatusRequest.Merge(m, src) +func (m *QueryCurrentWindowRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCurrentWindowRequest.Merge(m, src) } -func (m *QueryAuditStatusRequest) XXX_Size() int { +func (m *QueryCurrentWindowRequest) XXX_Size() int { return m.Size() } -func (m *QueryAuditStatusRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAuditStatusRequest.DiscardUnknown(m) +func (m *QueryCurrentWindowRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCurrentWindowRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAuditStatusRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryCurrentWindowRequest proto.InternalMessageInfo -func (m *QueryAuditStatusRequest) GetValidatorAddress() string { - if m != nil { - return m.ValidatorAddress - } - return "" -} - -type QueryAuditStatusResponse struct { - Status AuditStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status"` +type QueryCurrentWindowResponse struct { + WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + WindowStartHeight int64 `protobuf:"varint,2,opt,name=window_start_height,json=windowStartHeight,proto3" json:"window_start_height,omitempty"` + WindowEndHeight int64 `protobuf:"varint,3,opt,name=window_end_height,json=windowEndHeight,proto3" json:"window_end_height,omitempty"` } -func (m *QueryAuditStatusResponse) Reset() { *m = QueryAuditStatusResponse{} } -func (m *QueryAuditStatusResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAuditStatusResponse) ProtoMessage() {} -func (*QueryAuditStatusResponse) Descriptor() ([]byte, []int) { +func (m *QueryCurrentWindowResponse) Reset() { *m = QueryCurrentWindowResponse{} } +func (m *QueryCurrentWindowResponse) String() string { return proto.CompactTextString(m) } +func (*QueryCurrentWindowResponse) ProtoMessage() {} +func (*QueryCurrentWindowResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{3} } -func (m *QueryAuditStatusResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryCurrentWindowResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAuditStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryCurrentWindowResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAuditStatusResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryCurrentWindowResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -180,365 +175,2800 @@ func (m *QueryAuditStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *QueryAuditStatusResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAuditStatusResponse.Merge(m, src) +func (m *QueryCurrentWindowResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCurrentWindowResponse.Merge(m, src) } -func (m *QueryAuditStatusResponse) XXX_Size() int { +func (m *QueryCurrentWindowResponse) XXX_Size() int { return m.Size() } -func (m *QueryAuditStatusResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAuditStatusResponse.DiscardUnknown(m) +func (m *QueryCurrentWindowResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCurrentWindowResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAuditStatusResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryCurrentWindowResponse proto.InternalMessageInfo -func (m *QueryAuditStatusResponse) GetStatus() AuditStatus { +func (m *QueryCurrentWindowResponse) GetWindowId() uint64 { if m != nil { - return m.Status + return m.WindowId } - return AuditStatus{} + return 0 } -func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "lumera.audit.v1.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "lumera.audit.v1.QueryParamsResponse") - proto.RegisterType((*QueryAuditStatusRequest)(nil), "lumera.audit.v1.QueryAuditStatusRequest") - proto.RegisterType((*QueryAuditStatusResponse)(nil), "lumera.audit.v1.QueryAuditStatusResponse") +func (m *QueryCurrentWindowResponse) GetWindowStartHeight() int64 { + if m != nil { + return m.WindowStartHeight + } + return 0 } -func init() { proto.RegisterFile("lumera/audit/v1/query.proto", fileDescriptor_e98945621bbc9485) } +func (m *QueryCurrentWindowResponse) GetWindowEndHeight() int64 { + if m != nil { + return m.WindowEndHeight + } + return 0 +} -var fileDescriptor_e98945621bbc9485 = []byte{ - // 432 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xce, 0x29, 0xcd, 0x4d, - 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0x2f, 0x33, 0xd4, 0x2f, 0x2c, 0x4d, 0x2d, - 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x48, 0xea, 0x81, 0x25, 0xf5, 0xca, - 0x0c, 0xa5, 0x04, 0x13, 0x73, 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x44, 0x8d, 0x94, 0x48, 0x7a, - 0x7e, 0x7a, 0x3e, 0x98, 0xa9, 0x0f, 0x62, 0x41, 0x45, 0x65, 0xd2, 0xf3, 0xf3, 0xd3, 0x73, 0x52, - 0xf5, 0x13, 0x0b, 0x32, 0xf5, 0x13, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, 0xf3, 0xf3, 0x8a, - 0xa1, 0xb2, 0x92, 0xc9, 0xf9, 0xc5, 0xb9, 0xf9, 0xc5, 0xf1, 0x10, 0x6d, 0x10, 0x0e, 0x4c, 0x23, - 0xba, 0x7b, 0x0a, 0x12, 0x8b, 0x12, 0x73, 0x61, 0xb2, 0x18, 0xae, 0x85, 0xb8, 0x0c, 0x2c, 0xa9, - 0x24, 0xc2, 0x25, 0x14, 0x08, 0x72, 0x7c, 0x00, 0x58, 0x47, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, - 0x89, 0x52, 0x20, 0x97, 0x30, 0x8a, 0x68, 0x71, 0x41, 0x7e, 0x5e, 0x71, 0xaa, 0x90, 0x15, 0x17, - 0x1b, 0xc4, 0x64, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x71, 0x3d, 0x34, 0xbf, 0xea, 0x41, - 0x34, 0x38, 0x71, 0x9e, 0xb8, 0x27, 0xcf, 0xb0, 0xe2, 0xf9, 0x06, 0x2d, 0xc6, 0x20, 0xa8, 0x0e, - 0xa5, 0x4c, 0x2e, 0x71, 0xb0, 0x91, 0x8e, 0x20, 0xa5, 0xc1, 0x25, 0x89, 0x25, 0xa5, 0x30, 0xdb, - 0x84, 0xfc, 0xb8, 0x04, 0xcb, 0x12, 0x73, 0x32, 0x53, 0x12, 0x4b, 0xf2, 0x8b, 0xe2, 0x13, 0x53, - 0x52, 0x8a, 0x52, 0x8b, 0x21, 0x36, 0x70, 0x3a, 0x29, 0x5e, 0xda, 0xa2, 0x2b, 0x0b, 0xf5, 0x6b, - 0x18, 0x4c, 0x8d, 0x23, 0x44, 0x49, 0x70, 0x49, 0x51, 0x66, 0x5e, 0x7a, 0x90, 0x40, 0x19, 0x9a, - 0xb8, 0x52, 0x18, 0x97, 0x04, 0xa6, 0x55, 0x08, 0x2f, 0x14, 0x83, 0x45, 0xa0, 0x5e, 0x90, 0xc1, - 0xf0, 0x02, 0x92, 0x2e, 0x27, 0x16, 0x90, 0x3f, 0x82, 0xa0, 0x3a, 0x8c, 0xf6, 0x30, 0x71, 0xb1, - 0x82, 0x0d, 0x16, 0x6a, 0x66, 0xe4, 0x62, 0x83, 0x78, 0x55, 0x48, 0x19, 0xc3, 0x00, 0xcc, 0xf0, - 0x94, 0x52, 0xc1, 0xaf, 0x08, 0xe2, 0x36, 0x25, 0xbd, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x69, 0x08, - 0xa9, 0xe9, 0xfb, 0x80, 0x55, 0x07, 0x80, 0x62, 0x28, 0x39, 0x3f, 0x47, 0x1f, 0x7b, 0xf4, 0x0a, - 0xad, 0x61, 0xe4, 0xe2, 0x46, 0x72, 0xad, 0x90, 0x06, 0x76, 0x5b, 0x30, 0x43, 0x5c, 0x4a, 0x93, - 0x08, 0x95, 0x50, 0x47, 0x79, 0x80, 0x1d, 0xe5, 0x24, 0xe4, 0x40, 0xc8, 0x51, 0x60, 0x46, 0x3c, - 0x24, 0xa8, 0xf4, 0xab, 0x31, 0x22, 0xb4, 0xd6, 0x49, 0xeb, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, - 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, - 0x8f, 0xe5, 0x18, 0xa2, 0x04, 0x2a, 0x10, 0xc6, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, - 0x53, 0xa7, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xd4, 0xc4, 0x77, 0xae, 0x6a, 0x03, 0x00, 0x00, +type QueryAuditReportRequest struct { + WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + SupernodeAccount string `protobuf:"bytes,2,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` } -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn +func (m *QueryAuditReportRequest) Reset() { *m = QueryAuditReportRequest{} } +func (m *QueryAuditReportRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAuditReportRequest) ProtoMessage() {} +func (*QueryAuditReportRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{4} +} +func (m *QueryAuditReportRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAuditReportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAuditReportRequest.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 *QueryAuditReportRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAuditReportRequest.Merge(m, src) +} +func (m *QueryAuditReportRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAuditReportRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAuditReportRequest.DiscardUnknown(m) +} -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +var xxx_messageInfo_QueryAuditReportRequest proto.InternalMessageInfo -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - // Parameters queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) - AuditStatus(ctx context.Context, in *QueryAuditStatusRequest, opts ...grpc.CallOption) (*QueryAuditStatusResponse, error) +func (m *QueryAuditReportRequest) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 } -type queryClient struct { - cc grpc1.ClientConn +func (m *QueryAuditReportRequest) GetSupernodeAccount() string { + if m != nil { + return m.SupernodeAccount + } + return "" } -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} +type QueryAuditReportResponse struct { + Report AuditReport `protobuf:"bytes,1,opt,name=report,proto3" json:"report"` } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/Params", in, out, opts...) - if err != nil { - return nil, err +func (m *QueryAuditReportResponse) Reset() { *m = QueryAuditReportResponse{} } +func (m *QueryAuditReportResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAuditReportResponse) ProtoMessage() {} +func (*QueryAuditReportResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{5} +} +func (m *QueryAuditReportResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAuditReportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAuditReportResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QueryAuditReportResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAuditReportResponse.Merge(m, src) +} +func (m *QueryAuditReportResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAuditReportResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAuditReportResponse.DiscardUnknown(m) } -func (c *queryClient) AuditStatus(ctx context.Context, in *QueryAuditStatusRequest, opts ...grpc.CallOption) (*QueryAuditStatusResponse, error) { - out := new(QueryAuditStatusResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/AuditStatus", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QueryAuditReportResponse proto.InternalMessageInfo + +func (m *QueryAuditReportResponse) GetReport() AuditReport { + if m != nil { + return m.Report } - return out, nil + return AuditReport{} } -// QueryServer is the server API for Query service. -type QueryServer interface { - // Parameters queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) - AuditStatus(context.Context, *QueryAuditStatusRequest) (*QueryAuditStatusResponse, error) +type QueryAuditReportsByReporterRequest struct { + SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { +func (m *QueryAuditReportsByReporterRequest) Reset() { *m = QueryAuditReportsByReporterRequest{} } +func (m *QueryAuditReportsByReporterRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAuditReportsByReporterRequest) ProtoMessage() {} +func (*QueryAuditReportsByReporterRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{6} } - -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +func (m *QueryAuditReportsByReporterRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAuditReportsByReporterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAuditReportsByReporterRequest.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 (*UnimplementedQueryServer) AuditStatus(ctx context.Context, req *QueryAuditStatusRequest) (*QueryAuditStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AuditStatus not implemented") +func (m *QueryAuditReportsByReporterRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAuditReportsByReporterRequest.Merge(m, src) } - -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) +func (m *QueryAuditReportsByReporterRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAuditReportsByReporterRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAuditReportsByReporterRequest.DiscardUnknown(m) } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/lumera.audit.v1.Query/Params", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) +var xxx_messageInfo_QueryAuditReportsByReporterRequest proto.InternalMessageInfo + +func (m *QueryAuditReportsByReporterRequest) GetSupernodeAccount() string { + if m != nil { + return m.SupernodeAccount } - return interceptor(ctx, in, info, handler) + return "" } -func _Query_AuditStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAuditStatusRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).AuditStatus(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/lumera.audit.v1.Query/AuditStatus", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AuditStatus(ctx, req.(*QueryAuditStatusRequest)) +func (m *QueryAuditReportsByReporterRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination } - return interceptor(ctx, in, info, handler) + return nil } -var Query_serviceDesc = _Query_serviceDesc -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "lumera.audit.v1.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Params", - Handler: _Query_Params_Handler, - }, - { - MethodName: "AuditStatus", - Handler: _Query_AuditStatus_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "lumera/audit/v1/query.proto", +type QueryAuditReportsByReporterResponse struct { + Reports []AuditReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryAuditReportsByReporterResponse) Reset() { *m = QueryAuditReportsByReporterResponse{} } +func (m *QueryAuditReportsByReporterResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAuditReportsByReporterResponse) ProtoMessage() {} +func (*QueryAuditReportsByReporterResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{7} +} +func (m *QueryAuditReportsByReporterResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAuditReportsByReporterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAuditReportsByReporterResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return dAtA[:n], nil } - -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryAuditReportsByReporterResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAuditReportsByReporterResponse.Merge(m, src) +} +func (m *QueryAuditReportsByReporterResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAuditReportsByReporterResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAuditReportsByReporterResponse.DiscardUnknown(m) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil +var xxx_messageInfo_QueryAuditReportsByReporterResponse proto.InternalMessageInfo + +func (m *QueryAuditReportsByReporterResponse) GetReports() []AuditReport { + if m != nil { + return m.Reports + } + return nil } -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryAuditReportsByReporterResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination } - return dAtA[:n], nil + return nil } -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +type QuerySupernodeReportsRequest struct { + SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` + WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) +func (m *QuerySupernodeReportsRequest) Reset() { *m = QuerySupernodeReportsRequest{} } +func (m *QuerySupernodeReportsRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySupernodeReportsRequest) ProtoMessage() {} +func (*QuerySupernodeReportsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{8} +} +func (m *QuerySupernodeReportsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySupernodeReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySupernodeReportsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + return b[:n], nil } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil } - -func (m *QueryAuditStatusRequest) 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 *QuerySupernodeReportsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySupernodeReportsRequest.Merge(m, src) +} +func (m *QuerySupernodeReportsRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySupernodeReportsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySupernodeReportsRequest.DiscardUnknown(m) } -func (m *QueryAuditStatusRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +var xxx_messageInfo_QuerySupernodeReportsRequest proto.InternalMessageInfo + +func (m *QuerySupernodeReportsRequest) GetSupernodeAccount() string { + if m != nil { + return m.SupernodeAccount + } + return "" } -func (m *QueryAuditStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddress))) - i-- - dAtA[i] = 0xa +func (m *QuerySupernodeReportsRequest) GetWindowId() uint64 { + if m != nil { + return m.WindowId } - return len(dAtA) - i, nil + return 0 } -func (m *QueryAuditStatusResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QuerySupernodeReportsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination } - return dAtA[:n], nil + return nil } -func (m *QueryAuditStatusResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +type SupernodeReport struct { + ReporterSupernodeAccount string `protobuf:"bytes,1,opt,name=reporter_supernode_account,json=reporterSupernodeAccount,proto3" json:"reporter_supernode_account,omitempty"` + WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + ReportHeight int64 `protobuf:"varint,3,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` + PortStates []PortState `protobuf:"varint,4,rep,packed,name=port_states,json=portStates,proto3,enum=lumera.audit.v1.PortState" json:"port_states,omitempty"` } -func (m *QueryAuditStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) +func (m *SupernodeReport) Reset() { *m = SupernodeReport{} } +func (m *SupernodeReport) String() string { return proto.CompactTextString(m) } +func (*SupernodeReport) ProtoMessage() {} +func (*SupernodeReport) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{9} +} +func (m *SupernodeReport) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SupernodeReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SupernodeReport.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err + } + return b[:n], nil + } +} +func (m *SupernodeReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_SupernodeReport.Merge(m, src) +} +func (m *SupernodeReport) XXX_Size() int { + return m.Size() +} +func (m *SupernodeReport) XXX_DiscardUnknown() { + xxx_messageInfo_SupernodeReport.DiscardUnknown(m) +} + +var xxx_messageInfo_SupernodeReport proto.InternalMessageInfo + +func (m *SupernodeReport) GetReporterSupernodeAccount() string { + if m != nil { + return m.ReporterSupernodeAccount + } + return "" +} + +func (m *SupernodeReport) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +func (m *SupernodeReport) GetReportHeight() int64 { + if m != nil { + return m.ReportHeight + } + return 0 +} + +func (m *SupernodeReport) GetPortStates() []PortState { + if m != nil { + return m.PortStates + } + return nil +} + +type QuerySupernodeReportsResponse struct { + Reports []SupernodeReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QuerySupernodeReportsResponse) Reset() { *m = QuerySupernodeReportsResponse{} } +func (m *QuerySupernodeReportsResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySupernodeReportsResponse) ProtoMessage() {} +func (*QuerySupernodeReportsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{10} +} +func (m *QuerySupernodeReportsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySupernodeReportsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySupernodeReportsResponse.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 *QuerySupernodeReportsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySupernodeReportsResponse.Merge(m, src) +} +func (m *QuerySupernodeReportsResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySupernodeReportsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySupernodeReportsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySupernodeReportsResponse proto.InternalMessageInfo + +func (m *QuerySupernodeReportsResponse) GetReports() []SupernodeReport { + if m != nil { + return m.Reports + } + return nil +} + +func (m *QuerySupernodeReportsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +type QuerySelfReportsRequest struct { + SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` + WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QuerySelfReportsRequest) Reset() { *m = QuerySelfReportsRequest{} } +func (m *QuerySelfReportsRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySelfReportsRequest) ProtoMessage() {} +func (*QuerySelfReportsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{11} +} +func (m *QuerySelfReportsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySelfReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySelfReportsRequest.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 *QuerySelfReportsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySelfReportsRequest.Merge(m, src) +} +func (m *QuerySelfReportsRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySelfReportsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySelfReportsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySelfReportsRequest proto.InternalMessageInfo + +func (m *QuerySelfReportsRequest) GetSupernodeAccount() string { + if m != nil { + return m.SupernodeAccount + } + return "" +} + +func (m *QuerySelfReportsRequest) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +func (m *QuerySelfReportsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type SelfReport struct { + WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + ReportHeight int64 `protobuf:"varint,2,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` + SelfReport AuditSelfReport `protobuf:"bytes,3,opt,name=self_report,json=selfReport,proto3" json:"self_report"` +} + +func (m *SelfReport) Reset() { *m = SelfReport{} } +func (m *SelfReport) String() string { return proto.CompactTextString(m) } +func (*SelfReport) ProtoMessage() {} +func (*SelfReport) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{12} +} +func (m *SelfReport) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SelfReport.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 *SelfReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfReport.Merge(m, src) +} +func (m *SelfReport) XXX_Size() int { + return m.Size() +} +func (m *SelfReport) XXX_DiscardUnknown() { + xxx_messageInfo_SelfReport.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfReport proto.InternalMessageInfo + +func (m *SelfReport) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +func (m *SelfReport) GetReportHeight() int64 { + if m != nil { + return m.ReportHeight + } + return 0 +} + +func (m *SelfReport) GetSelfReport() AuditSelfReport { + if m != nil { + return m.SelfReport + } + return AuditSelfReport{} +} + +type QuerySelfReportsResponse struct { + Reports []SelfReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QuerySelfReportsResponse) Reset() { *m = QuerySelfReportsResponse{} } +func (m *QuerySelfReportsResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySelfReportsResponse) ProtoMessage() {} +func (*QuerySelfReportsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{13} +} +func (m *QuerySelfReportsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySelfReportsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySelfReportsResponse.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 *QuerySelfReportsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySelfReportsResponse.Merge(m, src) +} +func (m *QuerySelfReportsResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySelfReportsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySelfReportsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySelfReportsResponse proto.InternalMessageInfo + +func (m *QuerySelfReportsResponse) GetReports() []SelfReport { + if m != nil { + return m.Reports + } + return nil +} + +func (m *QuerySelfReportsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "lumera.audit.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "lumera.audit.v1.QueryParamsResponse") + proto.RegisterType((*QueryCurrentWindowRequest)(nil), "lumera.audit.v1.QueryCurrentWindowRequest") + proto.RegisterType((*QueryCurrentWindowResponse)(nil), "lumera.audit.v1.QueryCurrentWindowResponse") + proto.RegisterType((*QueryAuditReportRequest)(nil), "lumera.audit.v1.QueryAuditReportRequest") + proto.RegisterType((*QueryAuditReportResponse)(nil), "lumera.audit.v1.QueryAuditReportResponse") + proto.RegisterType((*QueryAuditReportsByReporterRequest)(nil), "lumera.audit.v1.QueryAuditReportsByReporterRequest") + proto.RegisterType((*QueryAuditReportsByReporterResponse)(nil), "lumera.audit.v1.QueryAuditReportsByReporterResponse") + proto.RegisterType((*QuerySupernodeReportsRequest)(nil), "lumera.audit.v1.QuerySupernodeReportsRequest") + proto.RegisterType((*SupernodeReport)(nil), "lumera.audit.v1.SupernodeReport") + proto.RegisterType((*QuerySupernodeReportsResponse)(nil), "lumera.audit.v1.QuerySupernodeReportsResponse") + proto.RegisterType((*QuerySelfReportsRequest)(nil), "lumera.audit.v1.QuerySelfReportsRequest") + proto.RegisterType((*SelfReport)(nil), "lumera.audit.v1.SelfReport") + proto.RegisterType((*QuerySelfReportsResponse)(nil), "lumera.audit.v1.QuerySelfReportsResponse") +} + +func init() { proto.RegisterFile("lumera/audit/v1/query.proto", fileDescriptor_e98945621bbc9485) } + +var fileDescriptor_e98945621bbc9485 = []byte{ + // 973 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0x4d, 0x6f, 0x1b, 0x45, + 0x18, 0xce, 0xc4, 0x21, 0x34, 0xaf, 0x29, 0x49, 0xa6, 0x15, 0x71, 0xd7, 0xc1, 0x58, 0x1b, 0x54, + 0x8c, 0x51, 0x77, 0x49, 0x8a, 0x38, 0x50, 0x0e, 0x8d, 0x51, 0x49, 0x90, 0x5a, 0x48, 0xd7, 0x7c, + 0x08, 0x2e, 0xab, 0xb5, 0x77, 0xba, 0x5d, 0xc9, 0xde, 0xd9, 0xee, 0x8c, 0x53, 0xac, 0xaa, 0x12, + 0x82, 0x3f, 0x80, 0x84, 0x10, 0xd7, 0x1e, 0x11, 0xea, 0x81, 0x03, 0x42, 0x88, 0x13, 0xc7, 0x5c, + 0x90, 0x2a, 0xb8, 0x20, 0x0e, 0x08, 0x25, 0x48, 0x1c, 0xf8, 0x13, 0x68, 0x67, 0x66, 0x63, 0x7b, + 0x77, 0xfd, 0x91, 0xa8, 0x1c, 0xb8, 0x44, 0xe3, 0x79, 0xbf, 0x9e, 0xe7, 0x9d, 0x67, 0xdf, 0x99, + 0x40, 0xb9, 0xd3, 0xeb, 0x92, 0xc8, 0x31, 0x9d, 0x9e, 0xeb, 0x73, 0x73, 0x7f, 0xd3, 0xbc, 0xd3, + 0x23, 0x51, 0xdf, 0x08, 0x23, 0xca, 0x29, 0x5e, 0x96, 0x46, 0x43, 0x18, 0x8d, 0xfd, 0x4d, 0x6d, + 0xd5, 0xe9, 0xfa, 0x01, 0x35, 0xc5, 0x5f, 0xe9, 0xa3, 0x9d, 0xf7, 0xa8, 0x47, 0xc5, 0xd2, 0x8c, + 0x57, 0x6a, 0x77, 0xdd, 0xa3, 0xd4, 0xeb, 0x10, 0xd3, 0x09, 0x7d, 0xd3, 0x09, 0x02, 0xca, 0x1d, + 0xee, 0xd3, 0x80, 0x29, 0xeb, 0x85, 0x36, 0x65, 0x5d, 0xca, 0x6c, 0x19, 0x26, 0x7f, 0x28, 0x53, + 0x5d, 0xfe, 0x32, 0x5b, 0x0e, 0x23, 0x12, 0x8b, 0xb9, 0xbf, 0xd9, 0x22, 0xdc, 0xd9, 0x34, 0x43, + 0xc7, 0xf3, 0x03, 0x91, 0x27, 0x29, 0x92, 0xc6, 0x1e, 0x3a, 0x91, 0xd3, 0x4d, 0x32, 0x65, 0x98, + 0x49, 0x16, 0xc2, 0xa8, 0x9f, 0x07, 0x7c, 0x33, 0x4e, 0xbe, 0x27, 0x22, 0x2c, 0x72, 0xa7, 0x47, + 0x18, 0xd7, 0x6f, 0xc2, 0xb9, 0x91, 0x5d, 0x16, 0xd2, 0x80, 0x11, 0xfc, 0x1a, 0x2c, 0xca, 0xcc, + 0x25, 0x54, 0x45, 0xb5, 0xe2, 0xd6, 0x9a, 0x91, 0xea, 0x8b, 0x21, 0x03, 0x1a, 0x4b, 0x07, 0x7f, + 0x3c, 0x37, 0xf7, 0xf5, 0xdf, 0xdf, 0xd6, 0x91, 0xa5, 0x22, 0xf4, 0x32, 0x5c, 0x10, 0x29, 0xdf, + 0xe8, 0x45, 0x11, 0x09, 0xf8, 0x07, 0x7e, 0xe0, 0xd2, 0xbb, 0x49, 0xbd, 0x2f, 0x11, 0x68, 0x79, + 0x56, 0x55, 0xb7, 0x0c, 0x4b, 0x77, 0xc5, 0x8e, 0xed, 0xbb, 0xa2, 0xf4, 0x82, 0x75, 0x46, 0x6e, + 0xbc, 0xe5, 0x62, 0x03, 0xce, 0x29, 0x23, 0xe3, 0x4e, 0xc4, 0xed, 0xdb, 0xc4, 0xf7, 0x6e, 0xf3, + 0xd2, 0x7c, 0x15, 0xd5, 0x0a, 0xd6, 0xaa, 0x34, 0x35, 0x63, 0xcb, 0xae, 0x30, 0xe0, 0x3a, 0xa8, + 0x4d, 0x9b, 0x04, 0x6e, 0xe2, 0x5d, 0x10, 0xde, 0xcb, 0xd2, 0x70, 0x2d, 0x70, 0xa5, 0xaf, 0xfe, + 0x09, 0x82, 0x35, 0x81, 0x6b, 0x3b, 0x26, 0x68, 0x91, 0x90, 0x46, 0x5c, 0x61, 0x9e, 0x0c, 0x6a, + 0x17, 0x56, 0x59, 0x2f, 0x24, 0x51, 0x40, 0x5d, 0x62, 0x3b, 0xed, 0x36, 0xed, 0x05, 0x12, 0xd2, + 0x52, 0xa3, 0xfc, 0xcb, 0x77, 0x97, 0xd6, 0xd4, 0x51, 0x6f, 0xb7, 0xdb, 0xdb, 0xae, 0x1b, 0x11, + 0xc6, 0x9a, 0x3c, 0xf2, 0x03, 0xcf, 0x5a, 0x39, 0x8e, 0xda, 0x96, 0x41, 0xfa, 0xfb, 0x50, 0xca, + 0x22, 0x18, 0x9c, 0x47, 0x24, 0x76, 0xd4, 0x79, 0xac, 0x67, 0xce, 0x63, 0x28, 0xaa, 0xb1, 0x10, + 0x1f, 0x8a, 0xa5, 0x22, 0xf4, 0xef, 0x11, 0xe8, 0xe9, 0xc4, 0xac, 0xd1, 0x97, 0x0b, 0x12, 0x25, + 0x2c, 0x73, 0x89, 0xa0, 0x53, 0x10, 0xc1, 0x6f, 0x02, 0x0c, 0x84, 0x2b, 0x7a, 0x51, 0xdc, 0xba, + 0x68, 0xa8, 0xf8, 0x58, 0xe5, 0x86, 0xfc, 0xe2, 0x94, 0xca, 0x8d, 0x3d, 0xc7, 0x23, 0x0a, 0x85, + 0x35, 0x14, 0xa9, 0x3f, 0x44, 0xb0, 0x31, 0x11, 0xb8, 0x6a, 0xce, 0xeb, 0xf0, 0xa4, 0xa4, 0x1a, + 0xab, 0xb5, 0x30, 0x63, 0x77, 0x92, 0x10, 0xbc, 0x93, 0x83, 0xf6, 0x85, 0xa9, 0x68, 0x65, 0xe9, + 0x11, 0xb8, 0x3f, 0x23, 0x58, 0x17, 0x70, 0x9b, 0x49, 0x43, 0x14, 0xe4, 0xc7, 0xdf, 0xe1, 0x11, + 0x45, 0xce, 0xa7, 0x14, 0x39, 0xda, 0xfe, 0xc2, 0xa9, 0xdb, 0xff, 0x0f, 0x82, 0xe5, 0x14, 0x15, + 0xfc, 0x21, 0x68, 0x91, 0x6a, 0xbf, 0x7d, 0x2a, 0x2e, 0xa5, 0x24, 0xbc, 0x79, 0x22, 0x4e, 0x1b, + 0x70, 0x56, 0x06, 0x8e, 0x7e, 0xc6, 0x4f, 0xc9, 0x4d, 0xf5, 0xbd, 0x5f, 0x81, 0xa2, 0x70, 0x61, + 0xdc, 0xe1, 0x84, 0x95, 0x16, 0xaa, 0x85, 0xda, 0xd3, 0x5b, 0x5a, 0x76, 0x72, 0xd1, 0x88, 0x37, + 0x63, 0x17, 0x0b, 0xc2, 0x64, 0xc9, 0xf4, 0x6f, 0x10, 0x3c, 0x3b, 0xe6, 0xf4, 0x94, 0xcc, 0xae, + 0xa6, 0x65, 0x56, 0xcd, 0xa4, 0x4e, 0xc5, 0xfe, 0x67, 0x52, 0x3b, 0x48, 0xa6, 0x55, 0x93, 0x74, + 0x6e, 0xfd, 0xbf, 0x55, 0xf6, 0x15, 0x02, 0x18, 0xb0, 0x98, 0x3c, 0x6b, 0x33, 0x2a, 0x98, 0xcf, + 0x51, 0xc1, 0x0e, 0x14, 0x19, 0xe9, 0xdc, 0xb2, 0xd5, 0xbc, 0x94, 0xc8, 0xaa, 0xf9, 0x13, 0x61, + 0x50, 0x58, 0x1d, 0x15, 0xb0, 0xe3, 0x1d, 0xfd, 0x01, 0x52, 0x03, 0x79, 0xa4, 0xc9, 0x4a, 0x0c, + 0x57, 0xd2, 0x62, 0x28, 0x67, 0xc5, 0x90, 0x4e, 0xfe, 0xd8, 0x75, 0xb0, 0xf5, 0xe3, 0x19, 0x78, + 0x42, 0x40, 0xc4, 0x9f, 0x21, 0x58, 0x94, 0x57, 0x32, 0xde, 0xc8, 0x20, 0xc9, 0xde, 0xfb, 0xda, + 0xf3, 0x93, 0x9d, 0x64, 0x2d, 0xdd, 0xf8, 0xf4, 0xd7, 0xbf, 0xbe, 0x98, 0xaf, 0xe1, 0x8b, 0xe6, + 0x75, 0xe1, 0xbd, 0x17, 0xbf, 0x24, 0xda, 0xb4, 0x63, 0xe6, 0x3f, 0x43, 0xf0, 0x03, 0x04, 0x67, + 0x47, 0x2e, 0x76, 0x5c, 0xcf, 0xaf, 0x93, 0xf7, 0x36, 0xd0, 0x5e, 0x9a, 0xc9, 0x57, 0x41, 0x7b, + 0x55, 0x40, 0x7b, 0x19, 0x1b, 0xd3, 0xa0, 0xb5, 0x65, 0xb8, 0x2d, 0x55, 0x84, 0x7f, 0x40, 0x50, + 0x1c, 0xba, 0x0d, 0x70, 0x2d, 0xbf, 0x68, 0xf6, 0x19, 0xa0, 0xbd, 0x38, 0x83, 0xa7, 0x02, 0xf7, + 0xae, 0x00, 0xf7, 0x36, 0xbe, 0x3e, 0x0d, 0x9c, 0x58, 0x28, 0xa9, 0x9a, 0xf7, 0x8e, 0x95, 0x7f, + 0xdf, 0xbc, 0x97, 0xf9, 0x86, 0xef, 0xe3, 0xdf, 0x11, 0x3c, 0x93, 0x7f, 0x15, 0xe2, 0xcb, 0x53, + 0xb1, 0x65, 0x6f, 0x7c, 0xed, 0x95, 0x93, 0x05, 0x29, 0x6e, 0xef, 0x09, 0x6e, 0xef, 0xe0, 0x1b, + 0x27, 0xe1, 0xc6, 0xec, 0x56, 0xdf, 0x4e, 0x46, 0x7f, 0x2e, 0xb9, 0x9f, 0x10, 0xac, 0xa4, 0x47, + 0x2f, 0xbe, 0x94, 0x8f, 0x70, 0xcc, 0x05, 0xab, 0x19, 0xb3, 0xba, 0x2b, 0x2a, 0x37, 0x04, 0x95, + 0x1d, 0x7c, 0x6d, 0x1a, 0x95, 0x01, 0x5e, 0x45, 0x27, 0x97, 0xc2, 0x43, 0x04, 0xc5, 0xa1, 0x59, + 0x31, 0x4e, 0x5a, 0xd9, 0x99, 0x3d, 0x4e, 0x5a, 0x39, 0x83, 0x47, 0xdf, 0x15, 0x98, 0x1b, 0xf8, + 0xea, 0x54, 0xcc, 0x83, 0x21, 0x98, 0x0b, 0xb7, 0x51, 0x3f, 0x38, 0xac, 0xa0, 0x47, 0x87, 0x15, + 0xf4, 0xe7, 0x61, 0x05, 0x7d, 0x7e, 0x54, 0x99, 0x7b, 0x74, 0x54, 0x99, 0xfb, 0xed, 0xa8, 0x32, + 0xf7, 0xd1, 0xca, 0xc7, 0x83, 0x34, 0xbc, 0x1f, 0x12, 0xd6, 0x5a, 0x14, 0xff, 0x43, 0x5c, 0xfe, + 0x37, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x85, 0xcb, 0x6e, 0x3c, 0x0d, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // CurrentWindow returns the current derived window boundaries at the current chain height. + CurrentWindow(ctx context.Context, in *QueryCurrentWindowRequest, opts ...grpc.CallOption) (*QueryCurrentWindowResponse, error) + AuditReport(ctx context.Context, in *QueryAuditReportRequest, opts ...grpc.CallOption) (*QueryAuditReportResponse, error) + AuditReportsByReporter(ctx context.Context, in *QueryAuditReportsByReporterRequest, opts ...grpc.CallOption) (*QueryAuditReportsByReporterResponse, error) + // SupernodeReports returns all reports that include observations about the given supernode_account. + SupernodeReports(ctx context.Context, in *QuerySupernodeReportsRequest, opts ...grpc.CallOption) (*QuerySupernodeReportsResponse, error) + // SelfReports returns self-reports submitted by the given supernode_account across windows. + SelfReports(ctx context.Context, in *QuerySelfReportsRequest, opts ...grpc.CallOption) (*QuerySelfReportsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) CurrentWindow(ctx context.Context, in *QueryCurrentWindowRequest, opts ...grpc.CallOption) (*QueryCurrentWindowResponse, error) { + out := new(QueryCurrentWindowResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/CurrentWindow", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AuditReport(ctx context.Context, in *QueryAuditReportRequest, opts ...grpc.CallOption) (*QueryAuditReportResponse, error) { + out := new(QueryAuditReportResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/AuditReport", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AuditReportsByReporter(ctx context.Context, in *QueryAuditReportsByReporterRequest, opts ...grpc.CallOption) (*QueryAuditReportsByReporterResponse, error) { + out := new(QueryAuditReportsByReporterResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/AuditReportsByReporter", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) SupernodeReports(ctx context.Context, in *QuerySupernodeReportsRequest, opts ...grpc.CallOption) (*QuerySupernodeReportsResponse, error) { + out := new(QuerySupernodeReportsResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/SupernodeReports", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) SelfReports(ctx context.Context, in *QuerySelfReportsRequest, opts ...grpc.CallOption) (*QuerySelfReportsResponse, error) { + out := new(QuerySelfReportsResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/SelfReports", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // CurrentWindow returns the current derived window boundaries at the current chain height. + CurrentWindow(context.Context, *QueryCurrentWindowRequest) (*QueryCurrentWindowResponse, error) + AuditReport(context.Context, *QueryAuditReportRequest) (*QueryAuditReportResponse, error) + AuditReportsByReporter(context.Context, *QueryAuditReportsByReporterRequest) (*QueryAuditReportsByReporterResponse, error) + // SupernodeReports returns all reports that include observations about the given supernode_account. + SupernodeReports(context.Context, *QuerySupernodeReportsRequest) (*QuerySupernodeReportsResponse, error) + // SelfReports returns self-reports submitted by the given supernode_account across windows. + SelfReports(context.Context, *QuerySelfReportsRequest) (*QuerySelfReportsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) CurrentWindow(ctx context.Context, req *QueryCurrentWindowRequest) (*QueryCurrentWindowResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CurrentWindow not implemented") +} +func (*UnimplementedQueryServer) AuditReport(ctx context.Context, req *QueryAuditReportRequest) (*QueryAuditReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AuditReport not implemented") +} +func (*UnimplementedQueryServer) AuditReportsByReporter(ctx context.Context, req *QueryAuditReportsByReporterRequest) (*QueryAuditReportsByReporterResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AuditReportsByReporter not implemented") +} +func (*UnimplementedQueryServer) SupernodeReports(ctx context.Context, req *QuerySupernodeReportsRequest) (*QuerySupernodeReportsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SupernodeReports not implemented") +} +func (*UnimplementedQueryServer) SelfReports(ctx context.Context, req *QuerySelfReportsRequest) (*QuerySelfReportsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SelfReports not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_CurrentWindow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCurrentWindowRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CurrentWindow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/CurrentWindow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CurrentWindow(ctx, req.(*QueryCurrentWindowRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AuditReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAuditReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AuditReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/AuditReport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AuditReport(ctx, req.(*QueryAuditReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AuditReportsByReporter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAuditReportsByReporterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AuditReportsByReporter(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/AuditReportsByReporter", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AuditReportsByReporter(ctx, req.(*QueryAuditReportsByReporterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_SupernodeReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySupernodeReportsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SupernodeReports(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/SupernodeReports", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SupernodeReports(ctx, req.(*QuerySupernodeReportsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_SelfReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySelfReportsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SelfReports(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/SelfReports", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SelfReports(ctx, req.(*QuerySelfReportsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var Query_serviceDesc = _Query_serviceDesc +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "lumera.audit.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "CurrentWindow", + Handler: _Query_CurrentWindow_Handler, + }, + { + MethodName: "AuditReport", + Handler: _Query_AuditReport_Handler, + }, + { + MethodName: "AuditReportsByReporter", + Handler: _Query_AuditReportsByReporter_Handler, + }, + { + MethodName: "SupernodeReports", + Handler: _Query_SupernodeReports_Handler, + }, + { + MethodName: "SelfReports", + Handler: _Query_SelfReports_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "lumera/audit/v1/query.proto", +} + +func (m *QueryParamsRequest) 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 *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) 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 *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.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 *QueryCurrentWindowRequest) 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 *QueryCurrentWindowRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCurrentWindowRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryCurrentWindowResponse) 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 *QueryCurrentWindowResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCurrentWindowResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.WindowEndHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowEndHeight)) + i-- + dAtA[i] = 0x18 + } + if m.WindowStartHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowStartHeight)) + i-- + dAtA[i] = 0x10 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditReportRequest) 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 *QueryAuditReportRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0x12 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditReportResponse) 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 *QueryAuditReportResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Report.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 *QueryAuditReportsByReporterRequest) 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 *QueryAuditReportsByReporterRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditReportsByReporterResponse) 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 *QueryAuditReportsByReporterResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportsByReporterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Reports) > 0 { + for iNdEx := len(m.Reports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Reports[iNdEx].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 *QuerySupernodeReportsRequest) 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 *QuerySupernodeReportsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySupernodeReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x10 + } + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SupernodeReport) 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 *SupernodeReport) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SupernodeReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PortStates) > 0 { + dAtA7 := make([]byte, len(m.PortStates)*10) + var j6 int + for _, num := range m.PortStates { + for num >= 1<<7 { + dAtA7[j6] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j6++ + } + dAtA7[j6] = uint8(num) + j6++ + } + i -= j6 + copy(dAtA[i:], dAtA7[:j6]) + i = encodeVarintQuery(dAtA, i, uint64(j6)) + i-- + dAtA[i] = 0x22 + } + if m.ReportHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.ReportHeight)) + i-- + dAtA[i] = 0x18 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x10 + } + if len(m.ReporterSupernodeAccount) > 0 { + i -= len(m.ReporterSupernodeAccount) + copy(dAtA[i:], m.ReporterSupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ReporterSupernodeAccount))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QuerySupernodeReportsResponse) 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 *QuerySupernodeReportsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySupernodeReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Reports) > 0 { + for iNdEx := len(m.Reports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Reports[iNdEx].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 *QuerySelfReportsRequest) 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 *QuerySelfReportsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySelfReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x10 + } + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SelfReport) 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 *SelfReport) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.SelfReport.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.ReportHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.ReportHeight)) + i-- + dAtA[i] = 0x10 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QuerySelfReportsResponse) 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 *QuerySelfReportsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySelfReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Reports) > 0 { + for iNdEx := len(m.Reports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Reports[iNdEx].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 encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryCurrentWindowRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryCurrentWindowResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + if m.WindowStartHeight != 0 { + n += 1 + sovQuery(uint64(m.WindowStartHeight)) + } + if m.WindowEndHeight != 0 { + n += 1 + sovQuery(uint64(m.WindowEndHeight)) + } + return n +} + +func (m *QueryAuditReportRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + l = len(m.SupernodeAccount) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAuditReportResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Report.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAuditReportsByReporterRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SupernodeAccount) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAuditReportsByReporterResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Reports) > 0 { + for _, e := range m.Reports { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySupernodeReportsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SupernodeAccount) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *SupernodeReport) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ReporterSupernodeAccount) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + if m.ReportHeight != 0 { + n += 1 + sovQuery(uint64(m.ReportHeight)) + } + if len(m.PortStates) > 0 { + l = 0 + for _, e := range m.PortStates { + l += sovQuery(uint64(e)) + } + n += 1 + sovQuery(uint64(l)) + l + } + return n +} + +func (m *QuerySupernodeReportsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Reports) > 0 { + for _, e := range m.Reports { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySelfReportsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SupernodeAccount) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *SelfReport) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + if m.ReportHeight != 0 { + n += 1 + sovQuery(uint64(m.ReportHeight)) + } + l = m.SelfReport.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QuerySelfReportsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Reports) > 0 { + for _, e := range m.Reports { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) 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: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: 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 *QueryParamsResponse) 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: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryCurrentWindowRequest) 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: QueryCurrentWindowRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCurrentWindowRequest: 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 *QueryCurrentWindowResponse) 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: QueryCurrentWindowResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCurrentWindowResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowStartHeight", wireType) + } + m.WindowStartHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowStartHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowEndHeight", wireType) + } + m.WindowEndHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowEndHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *QueryAuditReportRequest) 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: QueryAuditReportRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAuditReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", 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.SupernodeAccount = 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 *QueryAuditReportResponse) 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: QueryAuditReportResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAuditReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Report", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Report.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryAuditReportsByReporterRequest) 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: QueryAuditReportsByReporterRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAuditReportsByReporterRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", 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.SupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryAuditReportsByReporterResponse) 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: QueryAuditReportsByReporterResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAuditReportsByReporterResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reports = append(m.Reports, AuditReport{}) + if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QuerySupernodeReportsRequest) 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: QuerySupernodeReportsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySupernodeReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", 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.SupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *SupernodeReport) 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: SupernodeReport: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SupernodeReport: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReporterSupernodeAccount", 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.ReporterSupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReportHeight", wireType) + } + m.ReportHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ReportHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType == 0 { + var v PortState + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PortStates = append(m.PortStates, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + if elementCount != 0 && len(m.PortStates) == 0 { + m.PortStates = make([]PortState, 0, elementCount) + } + for iNdEx < postIndex { + var v PortState + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= PortState(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PortStates = append(m.PortStates, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field PortStates", wireType) + } + 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 } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAuditStatusRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) } - return n -} -func (m *QueryAuditStatusResponse) Size() (n int) { - if m == nil { - return 0 + if iNdEx > l { + return io.ErrUnexpectedEOF } - var l int - _ = l - l = m.Status.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QuerySupernodeReportsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -561,12 +2991,82 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySupernodeReportsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySupernodeReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reports = append(m.Reports, SupernodeReport{}) + if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -588,7 +3088,7 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { +func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -611,15 +3111,66 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySelfReportsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySelfReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", 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.SupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -646,7 +3197,10 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -671,7 +3225,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAuditStatusRequest) Unmarshal(dAtA []byte) error { +func (m *SelfReport) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -694,17 +3248,55 @@ func (m *QueryAuditStatusRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAuditStatusRequest: wiretype end group for non-group") + return fmt.Errorf("proto: SelfReport: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAuditStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SelfReport: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReportHeight", wireType) + } + m.ReportHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ReportHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SelfReport", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -714,23 +3306,24 @@ func (m *QueryAuditStatusRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + if err := m.SelfReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -753,7 +3346,7 @@ func (m *QueryAuditStatusRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAuditStatusResponse) Unmarshal(dAtA []byte) error { +func (m *QuerySelfReportsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -776,15 +3369,15 @@ func (m *QueryAuditStatusResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAuditStatusResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySelfReportsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAuditStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySelfReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Reports", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -811,7 +3404,44 @@ func (m *QueryAuditStatusResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Reports = append(m.Reports, SelfReport{}) + if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/audit/v1/types/query.pb.gw.go b/x/audit/v1/types/query.pb.gw.go index 4cf76f3..b474deb 100644 --- a/x/audit/v1/types/query.pb.gw.go +++ b/x/audit/v1/types/query.pb.gw.go @@ -51,8 +51,26 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } -func request_Query_AuditStatus_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAuditStatusRequest +func request_Query_CurrentWindow_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCurrentWindowRequest + var metadata runtime.ServerMetadata + + msg, err := client.CurrentWindow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_CurrentWindow_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCurrentWindowRequest + var metadata runtime.ServerMetadata + + msg, err := server.CurrentWindow(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAuditReportRequest var metadata runtime.ServerMetadata var ( @@ -62,24 +80,35 @@ func request_Query_AuditStatus_0(ctx context.Context, marshaler runtime.Marshale _ = err ) - val, ok = pathParams["validator_address"] + val, ok = pathParams["window_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "window_id") + } + + protoReq.WindowId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "window_id", err) + } + + val, ok = pathParams["supernode_account"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "validator_address") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") } - protoReq.ValidatorAddress, err = runtime.String(val) + protoReq.SupernodeAccount, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "validator_address", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) } - msg, err := client.AuditStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AuditReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_AuditStatus_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAuditStatusRequest +func local_request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAuditReportRequest var metadata runtime.ServerMetadata var ( @@ -89,18 +118,245 @@ func local_request_Query_AuditStatus_0(ctx context.Context, marshaler runtime.Ma _ = err ) - val, ok = pathParams["validator_address"] + val, ok = pathParams["window_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "window_id") + } + + protoReq.WindowId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "window_id", err) + } + + val, ok = pathParams["supernode_account"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "validator_address") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") } - protoReq.ValidatorAddress, err = runtime.String(val) + protoReq.SupernodeAccount, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "validator_address", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) } - msg, err := server.AuditStatus(ctx, &protoReq) + msg, err := server.AuditReport(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_AuditReportsByReporter_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_AuditReportsByReporter_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAuditReportsByReporterRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["supernode_account"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") + } + + protoReq.SupernodeAccount, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AuditReportsByReporter_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AuditReportsByReporter(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AuditReportsByReporter_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAuditReportsByReporterRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["supernode_account"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") + } + + protoReq.SupernodeAccount, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AuditReportsByReporter_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AuditReportsByReporter(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_SupernodeReports_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_SupernodeReports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySupernodeReportsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["supernode_account"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") + } + + protoReq.SupernodeAccount, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SupernodeReports_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SupernodeReports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SupernodeReports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySupernodeReportsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["supernode_account"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") + } + + protoReq.SupernodeAccount, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SupernodeReports_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SupernodeReports(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_SelfReports_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_SelfReports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySelfReportsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["supernode_account"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") + } + + protoReq.SupernodeAccount, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SelfReports_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SelfReports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SelfReports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySelfReportsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["supernode_account"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") + } + + protoReq.SupernodeAccount, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SelfReports_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SelfReports(ctx, &protoReq) return msg, metadata, err } @@ -134,7 +390,99 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_AuditStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_CurrentWindow_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_CurrentWindow_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_CurrentWindow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AuditReport_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_AuditReport_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_AuditReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AuditReportsByReporter_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_AuditReportsByReporter_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_AuditReportsByReporter_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SupernodeReports_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_SupernodeReports_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_SupernodeReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SelfReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -145,7 +493,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_AuditStatus_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_SelfReports_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 { @@ -153,7 +501,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_AuditStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_SelfReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -218,7 +566,67 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_AuditStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_CurrentWindow_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_CurrentWindow_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_CurrentWindow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AuditReport_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_AuditReport_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_AuditReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AuditReportsByReporter_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_AuditReportsByReporter_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_AuditReportsByReporter_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SupernodeReports_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) @@ -227,14 +635,34 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_AuditStatus_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_SupernodeReports_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_AuditStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_SupernodeReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_SelfReports_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_SelfReports_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_SelfReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -244,11 +672,27 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AuditStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_status", "validator_address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_CurrentWindow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "current_window"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AuditReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_report", "window_id", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AuditReportsByReporter_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_reports_by_reporter", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_SupernodeReports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "supernode_reports", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_SelfReports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "self_reports", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_AuditStatus_0 = runtime.ForwardResponseMessage + forward_Query_CurrentWindow_0 = runtime.ForwardResponseMessage + + forward_Query_AuditReport_0 = runtime.ForwardResponseMessage + + forward_Query_AuditReportsByReporter_0 = runtime.ForwardResponseMessage + + forward_Query_SupernodeReports_0 = runtime.ForwardResponseMessage + + forward_Query_SelfReports_0 = runtime.ForwardResponseMessage ) From 470cffcf13f71be41573b115683dc070b4cdc149 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Tue, 27 Jan 2026 19:18:46 +0500 Subject: [PATCH 03/18] audit: stable window math across param changes --- AuditSpec.md | 66 +++--- x/audit/v1/README.md | 17 +- x/audit/v1/keeper/abci.go | 9 +- x/audit/v1/keeper/assignment/assignment.go | 7 +- x/audit/v1/keeper/msg_submit_audit_report.go | 14 +- x/audit/v1/keeper/msg_update_params.go | 8 + x/audit/v1/keeper/query_current_window.go | 19 +- x/audit/v1/keeper/window.go | 21 +- x/audit/v1/keeper/window_state.go | 206 +++++++++++++++++++ x/audit/v1/keeper/window_state_test.go | 123 +++++++++++ x/audit/v1/types/keys.go | 20 ++ 11 files changed, 443 insertions(+), 67 deletions(-) create mode 100644 x/audit/v1/keeper/window_state.go create mode 100644 x/audit/v1/keeper/window_state_test.go diff --git a/AuditSpec.md b/AuditSpec.md index 7a3dc46..51a3258 100644 --- a/AuditSpec.md +++ b/AuditSpec.md @@ -32,45 +32,58 @@ Assumption: - `supernode_account` is treated as the stable identifier for audit storage and queries. ### 2.2 High-level flow (per window) -1) The chain derives `window_id` from block height and a stored `origin_height`. +1) The module maintains a persisted “current window” state derived from block height. 2) At `window_start_height`, the module stores a `WindowSnapshot` containing the per-window prober → targets mapping (`assignments`). 3) Each reporter submits `MsgSubmitAuditReport` for a specific `window_id` during the acceptance period. 4) The module stores the report. ### Summary -- Time is divided into fixed-size **reporting windows** (a set number of blocks). Window IDs/boundaries are derived deterministically from block height and a one-time **origin height** stored on first use. +- Time is divided into **reporting windows**. The module persists the current window boundaries and advances them deterministically as height increases. - At the **first block of each window**, the chain writes a **window snapshot** that freezes, for that window: - the **prober → targets mapping** (`assignments`) - Each supernode can submit **at most one report per window**. A report is signed by the supernode account and stored under `supernode_account`. - A report contains self metrics plus optional peer observations. Peer observations include port states aligned by index to `required_open_ports` (position `i` refers to the `i`th configured port). - A report is **accepted** only if: - - the chain is within the window’s acceptance period (window start through window end) + - the report targets the **current window_id** at the current height (window start through window end) - the reporter has not already submitted a report for that window - When accepted, the chain stores the report as-is. - Penalties and aggregation are intentionally out-of-scope for the current implementation. ## 3. Reporting Windows -Window sizing is block-based and deterministic. The module stores an `origin_height` once and uses it to derive window boundaries. - -### 3.1 Window origin -`origin_height` is stored in module state on first use and remains fixed for the lifetime of the chain. - -### 3.2 Window derivation -Let: -- `origin = origin_height` -- `W = reporting_window_blocks` -- `H = current block height` - -Then: -- `window_id = floor((H - origin) / W)` for `H >= origin` (else `0`) -- `window_start_height(window_id) = origin + window_id * W` -- `window_end_height(window_id) = window_start_height(window_id) + W - 1` - -### 3.3 Report acceptance period -A report for `window_id` is accepted only when the current height is within: -- `[window_start_height(window_id), window_end_height(window_id)]` - -Outside this range, `MsgSubmitAuditReport` is rejected. +Window sizing is block-based and deterministic. The module persists the current window boundaries and advances them as the chain height increases. + +### 3.1 Window state +The module persists a “current window” record containing: +- `window_id` +- `window_start_height` +- `window_end_height` +- `window_blocks` (effective window size for the current window) + +Initialization: +- On first run (e.g., at the first `BeginBlock` after module activation), the module writes the initial window: + - `window_id = 0` + - `window_start_height = H_init` (the current block height at initialization) + - `window_blocks = reporting_window_blocks` (from params at initialization) + - `window_end_height = window_start_height + window_blocks - 1` + +Advancement: +- If `H > window_end_height`, the module advances windows until `H` is within the current window. +- Each advance increments `window_id` by 1 and sets: + - `next_start = previous_end + 1` + - `window_start_height = next_start` + - `window_end_height = next_start + window_blocks - 1` (using the effective window size for that new window) + +### 3.2 Report acceptance period +A report is accepted only when: +- `window_id` equals the module’s current `window_id` at the current height, and +- the current height is within `[window_start_height, window_end_height]` of that current window. + +Otherwise, `MsgSubmitAuditReport` is rejected. + +### 3.3 Window size changes (`reporting_window_blocks`) +`reporting_window_blocks` may be updated by governance. To preserve stable window boundaries, the change is applied **at the next window boundary**: +- the current window’s `start_height`/`end_height` do not change mid-window +- the new `reporting_window_blocks` value takes effect starting at `previous_end_height + 1` ## 4. Parameters Parameters are represented by the `Params` message. @@ -260,12 +273,13 @@ message QuerySelfReportsResponse { repeated SelfReport reports = 1; } ## 8. On-Chain State This section describes the minimum state persisted by the module: -- `origin_height` (int64) stored once. +- Current window state (window_id, start/end, effective window size). +- Pending next window size (optional; applied at the next boundary when present). - `WindowSnapshot` stored per `window_id`. - `AuditReport` stored per `(window_id, supernode_account)`. State growth considerations: -- State must remain bounded. The module MAY prune per-window state (`WindowSnapshot`, `AuditReport`) for any `window_id` once the acceptance period for that window has ended (section 3.3). +- State must remain bounded. The module MAY prune per-window state (`WindowSnapshot`, `AuditReport`) for any `window_id` once the acceptance period for that window has ended (section 3.2). - Current implementation note: pruning is not yet implemented; per-window state accumulates over time. ## 11. Out of Scope diff --git a/x/audit/v1/README.md b/x/audit/v1/README.md index 21a2e2d..30ca8f0 100644 --- a/x/audit/v1/README.md +++ b/x/audit/v1/README.md @@ -51,12 +51,23 @@ Key fields: - `max_probe_targets_per_window` - `required_open_ports` -### 2. Window Origin and Window IDs +### 2. Window State and Window IDs -On first use, the module stores an `origin_height` and uses it to derive: +The module maintains a persisted **current window state** in KV-store and advances it deterministically as the chain height increases. + +The current window state includes: - `window_id` - `window_start_height` - `window_end_height` +- `window_blocks` (effective window size for the current window) + +#### Window size changes (`reporting_window_blocks`) + +`reporting_window_blocks` may be updated by governance. To keep historical window boundaries stable, any change is applied **at the next window boundary**: +- the current window’s start/end heights do not change mid-window +- the new window size takes effect starting at `window_end_height + 1` + +Implementation note: the module persists a pending “next window size” value and consumes it when advancing into the next window. ### 3. Window Snapshots @@ -82,7 +93,7 @@ Uniqueness is guaranteed (one report per reporter per window). On `MsgSubmitAuditReport`: 1. Resolve reporter supernode from `supernode_account` via `x/supernode`. -2. Validate window acceptance (from `window_start_height` through `window_end_height`). +2. Validate window acceptance (only the current `window_id` at the current height is accepted). 3. Ensure per-window uniqueness for the reporter. 4. Persist the report. diff --git a/x/audit/v1/keeper/abci.go b/x/audit/v1/keeper/abci.go index 24bfe51..b691d62 100644 --- a/x/audit/v1/keeper/abci.go +++ b/x/audit/v1/keeper/abci.go @@ -10,9 +10,12 @@ func (k Keeper) BeginBlocker(ctx context.Context) error { sdkCtx := sdk.UnwrapSDKContext(ctx) params := k.GetParams(ctx).WithDefaults() - origin := k.getOrInitWindowOriginHeight(sdkCtx) - currentWindowID := k.windowIDAtHeight(origin, params, sdkCtx.BlockHeight()) - windowStart := k.windowStartHeight(origin, params, currentWindowID) + ws, err := k.getCurrentWindowState(sdkCtx, params) + if err != nil { + return err + } + currentWindowID := ws.WindowID + windowStart := ws.StartHeight // Only create the snapshot exactly at the window start height. if sdkCtx.BlockHeight() != windowStart { diff --git a/x/audit/v1/keeper/assignment/assignment.go b/x/audit/v1/keeper/assignment/assignment.go index 05577d9..e0d304a 100644 --- a/x/audit/v1/keeper/assignment/assignment.go +++ b/x/audit/v1/keeper/assignment/assignment.go @@ -54,10 +54,6 @@ func ComputeKWindowFromParams(params types.Params, sendersCount, receiversCount } func computeAssignmentsFromInputs(senders []string, receivers []string, kWindow uint32, seedBytes []byte) ([]types.ProberTargets, error) { - if len(seedBytes) < 8 { - return nil, fmt.Errorf("seed must be at least 8 bytes") - } - assignments := make([]types.ProberTargets, 0, len(senders)) if kWindow == 0 || len(receivers) == 0 { for _, sender := range senders { @@ -68,6 +64,9 @@ func computeAssignmentsFromInputs(senders []string, receivers []string, kWindow } return assignments, nil } + if len(seedBytes) < 8 { + return nil, fmt.Errorf("seed must be at least 8 bytes") + } offsetU64 := binary.BigEndian.Uint64(seedBytes[:8]) n := len(receivers) diff --git a/x/audit/v1/keeper/msg_submit_audit_report.go b/x/audit/v1/keeper/msg_submit_audit_report.go index d1c0cef..e7aa547 100644 --- a/x/audit/v1/keeper/msg_submit_audit_report.go +++ b/x/audit/v1/keeper/msg_submit_audit_report.go @@ -16,12 +16,16 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu sdkCtx := sdk.UnwrapSDKContext(ctx) params := m.GetParams(ctx).WithDefaults() - origin := m.getOrInitWindowOriginHeight(sdkCtx) - // Validate window_id acceptance: allow submitting for a window until end. - windowStart := m.windowStartHeight(origin, params, req.WindowId) - windowEnd := m.windowEndHeight(origin, params, req.WindowId) - if sdkCtx.BlockHeight() < windowStart || sdkCtx.BlockHeight() > windowEnd { + // Validate window_id acceptance: only the current window_id is accepted at the current height. + ws, err := m.getCurrentWindowState(sdkCtx, params) + if err != nil { + return nil, err + } + if req.WindowId != ws.WindowID { + return nil, errorsmod.Wrapf(types.ErrInvalidWindowID, "window_id %d not accepted at height %d", req.WindowId, sdkCtx.BlockHeight()) + } + if sdkCtx.BlockHeight() < ws.StartHeight || sdkCtx.BlockHeight() > ws.EndHeight { return nil, errorsmod.Wrapf(types.ErrInvalidWindowID, "window_id not accepted at height %d", sdkCtx.BlockHeight()) } diff --git a/x/audit/v1/keeper/msg_update_params.go b/x/audit/v1/keeper/msg_update_params.go index 5d00d7e..04c1711 100644 --- a/x/audit/v1/keeper/msg_update_params.go +++ b/x/audit/v1/keeper/msg_update_params.go @@ -4,6 +4,7 @@ import ( "context" errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) @@ -13,6 +14,8 @@ func (m msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) return nil, errorsmod.Wrap(types.ErrInvalidSigner, "empty request") } + sdkCtx := sdk.UnwrapSDKContext(ctx) + authority, err := m.addressCodec.BytesToString(m.authority) if err != nil { return nil, err @@ -26,6 +29,11 @@ func (m msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) return nil, err } + // If reporting_window_blocks changes, schedule the new size to take effect at the next boundary. + if err := m.scheduleReportingWindowBlocksChangeAtNextBoundary(sdkCtx, m.GetParams(ctx).WithDefaults(), params.ReportingWindowBlocks); err != nil { + return nil, err + } + if err := m.SetParams(ctx, params); err != nil { return nil, err } diff --git a/x/audit/v1/keeper/query_current_window.go b/x/audit/v1/keeper/query_current_window.go index ebcf5fb..b2d8304 100644 --- a/x/audit/v1/keeper/query_current_window.go +++ b/x/audit/v1/keeper/query_current_window.go @@ -16,20 +16,17 @@ func (q queryServer) CurrentWindow(ctx context.Context, req *types.QueryCurrentW } sdkCtx := sdk.UnwrapSDKContext(ctx) - params := q.k.GetParams(ctx).WithDefaults() - - origin, found := q.k.getWindowOriginHeight(sdkCtx) + ws, found, err := q.k.getWindowState(sdkCtx) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } if !found { - return nil, status.Error(codes.NotFound, "window origin height not initialized") + return nil, status.Error(codes.NotFound, "current window not initialized") } - windowID := q.k.windowIDAtHeight(origin, params, sdkCtx.BlockHeight()) - windowStart := q.k.windowStartHeight(origin, params, windowID) - windowEnd := q.k.windowEndHeight(origin, params, windowID) - return &types.QueryCurrentWindowResponse{ - WindowId: windowID, - WindowStartHeight: windowStart, - WindowEndHeight: windowEnd, + WindowId: ws.WindowID, + WindowStartHeight: ws.StartHeight, + WindowEndHeight: ws.EndHeight, }, nil } diff --git a/x/audit/v1/keeper/window.go b/x/audit/v1/keeper/window.go index 276a4c8..462b454 100644 --- a/x/audit/v1/keeper/window.go +++ b/x/audit/v1/keeper/window.go @@ -36,21 +36,6 @@ func (k Keeper) getOrInitWindowOriginHeight(ctx sdk.Context) int64 { return origin } -func (k Keeper) windowStartHeight(origin int64, params types.Params, windowID uint64) int64 { - return origin + int64(windowID)*int64(params.ReportingWindowBlocks) -} - -func (k Keeper) windowEndHeight(origin int64, params types.Params, windowID uint64) int64 { - return k.windowStartHeight(origin, params, windowID) + int64(params.ReportingWindowBlocks) - 1 -} - -func (k Keeper) windowIDAtHeight(origin int64, params types.Params, height int64) uint64 { - if height < origin { - return 0 - } - return uint64((height - origin) / int64(params.ReportingWindowBlocks)) -} - func (k Keeper) GetWindowSnapshot(ctx sdk.Context, windowID uint64) (types.WindowSnapshot, bool) { store := k.kvStore(ctx) bz := store.Get(types.WindowSnapshotKey(windowID)) @@ -102,6 +87,12 @@ func (k Keeper) CreateWindowSnapshotIfNeeded(ctx sdk.Context, windowID uint64, p } seedBytes := ctx.HeaderHash() + // Some test harnesses do not populate HeaderHash(). We only need a deterministic per-window seed, + // so fall back to the window start height (which equals ctx.BlockHeight() here). + if len(seedBytes) < 8 { + seedBytes = make([]byte, 8) + binary.BigEndian.PutUint64(seedBytes, uint64(ctx.BlockHeight())) + } assignments, err := assignment.ComputeSnapshotAssignments(params, senders, receivers, seedBytes) if err != nil { return err diff --git a/x/audit/v1/keeper/window_state.go b/x/audit/v1/keeper/window_state.go new file mode 100644 index 0000000..9614c93 --- /dev/null +++ b/x/audit/v1/keeper/window_state.go @@ -0,0 +1,206 @@ +package keeper + +import ( + "encoding/binary" + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +type windowState struct { + WindowID uint64 + StartHeight int64 + EndHeight int64 + WindowBlocks uint64 +} + +func (ws windowState) validate() error { + if ws.WindowBlocks == 0 { + return fmt.Errorf("window_blocks must be > 0") + } + if ws.StartHeight < 0 || ws.EndHeight < 0 { + return fmt.Errorf("window heights must be >= 0") + } + if ws.EndHeight < ws.StartHeight { + return fmt.Errorf("window_end_height must be >= window_start_height") + } + if ws.EndHeight-ws.StartHeight+1 != int64(ws.WindowBlocks) { + return fmt.Errorf("window length mismatch: blocks=%d start=%d end=%d", ws.WindowBlocks, ws.StartHeight, ws.EndHeight) + } + return nil +} + +func (k Keeper) getWindowState(ctx sdk.Context) (windowState, bool, error) { + store := k.kvStore(ctx) + bz := store.Get(types.CurrentWindowStateKey()) + if bz == nil { + return windowState{}, false, nil + } + if len(bz) != 32 { + return windowState{}, false, fmt.Errorf("invalid current window state length: %d", len(bz)) + } + + ws := windowState{ + WindowID: binary.BigEndian.Uint64(bz[0:8]), + StartHeight: int64(binary.BigEndian.Uint64(bz[8:16])), + EndHeight: int64(binary.BigEndian.Uint64(bz[16:24])), + WindowBlocks: binary.BigEndian.Uint64(bz[24:32]), + } + if err := ws.validate(); err != nil { + return windowState{}, false, err + } + return ws, true, nil +} + +func (k Keeper) setWindowState(ctx sdk.Context, ws windowState) error { + if err := ws.validate(); err != nil { + return err + } + + bz := make([]byte, 32) + binary.BigEndian.PutUint64(bz[0:8], ws.WindowID) + binary.BigEndian.PutUint64(bz[8:16], uint64(ws.StartHeight)) + binary.BigEndian.PutUint64(bz[16:24], uint64(ws.EndHeight)) + binary.BigEndian.PutUint64(bz[24:32], ws.WindowBlocks) + + store := k.kvStore(ctx) + store.Set(types.CurrentWindowStateKey(), bz) + return nil +} + +func (k Keeper) getNextWindowBlocks(ctx sdk.Context) (uint64, bool, error) { + store := k.kvStore(ctx) + bz := store.Get(types.NextWindowBlocksKey()) + if bz == nil { + return 0, false, nil + } + if len(bz) != 8 { + return 0, false, fmt.Errorf("invalid next window blocks length: %d", len(bz)) + } + v := binary.BigEndian.Uint64(bz) + if v == 0 { + return 0, false, fmt.Errorf("invalid next window blocks: 0") + } + return v, true, nil +} + +func (k Keeper) setNextWindowBlocks(ctx sdk.Context, windowBlocks uint64) error { + if windowBlocks == 0 { + return fmt.Errorf("window_blocks must be > 0") + } + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, windowBlocks) + store := k.kvStore(ctx) + store.Set(types.NextWindowBlocksKey(), bz) + return nil +} + +func (k Keeper) clearNextWindowBlocks(ctx sdk.Context) { + store := k.kvStore(ctx) + store.Delete(types.NextWindowBlocksKey()) +} + +// initWindowStateIfNeeded writes initial window state once. It prefers initializing from an existing +// origin_height (for compatibility), otherwise it uses the current block height as the first window start. +func (k Keeper) initWindowStateIfNeeded(ctx sdk.Context, params types.Params) (windowState, error) { + if ws, found, err := k.getWindowState(ctx); err != nil { + return windowState{}, err + } else if found { + return ws, nil + } + + windowBlocks := params.ReportingWindowBlocks + if windowBlocks == 0 { + return windowState{}, fmt.Errorf("reporting_window_blocks must be > 0") + } + + // Compatibility: if origin_height exists, derive the current window by the legacy math once. + if origin, found := k.getWindowOriginHeight(ctx); found { + if ctx.BlockHeight() < origin { + ws := windowState{ + WindowID: 0, + StartHeight: origin, + EndHeight: origin + int64(windowBlocks) - 1, + WindowBlocks: windowBlocks, + } + return ws, k.setWindowState(ctx, ws) + } + windowID := uint64((ctx.BlockHeight() - origin) / int64(windowBlocks)) + start := origin + int64(windowID)*int64(windowBlocks) + ws := windowState{ + WindowID: windowID, + StartHeight: start, + EndHeight: start + int64(windowBlocks) - 1, + WindowBlocks: windowBlocks, + } + return ws, k.setWindowState(ctx, ws) + } + + start := ctx.BlockHeight() + ws := windowState{ + WindowID: 0, + StartHeight: start, + EndHeight: start + int64(windowBlocks) - 1, + WindowBlocks: windowBlocks, + } + return ws, k.setWindowState(ctx, ws) +} + +func (k Keeper) getCurrentWindowState(ctx sdk.Context, params types.Params) (windowState, error) { + ws, err := k.initWindowStateIfNeeded(ctx, params) + if err != nil { + return windowState{}, err + } + return k.advanceWindowIfNeeded(ctx, params, ws) +} + +func (k Keeper) advanceWindowIfNeeded(ctx sdk.Context, params types.Params, ws windowState) (windowState, error) { + for ctx.BlockHeight() > ws.EndHeight { + nextBlocks, hasNext, err := k.getNextWindowBlocks(ctx) + if err != nil { + return windowState{}, err + } + if hasNext { + k.clearNextWindowBlocks(ctx) + ws.WindowBlocks = nextBlocks + } + if ws.WindowBlocks == 0 { + ws.WindowBlocks = params.ReportingWindowBlocks + } + if ws.WindowBlocks == 0 { + return windowState{}, fmt.Errorf("reporting_window_blocks must be > 0") + } + + nextStart := ws.EndHeight + 1 + ws.WindowID++ + ws.StartHeight = nextStart + ws.EndHeight = nextStart + int64(ws.WindowBlocks) - 1 + + if err := k.setWindowState(ctx, ws); err != nil { + return windowState{}, err + } + } + return ws, nil +} + +// scheduleReportingWindowBlocksChangeAtNextBoundary stores a pending window size that will take effect +// at the next window boundary (end(current)+1). Multiple updates before the boundary overwrite the pending value. +func (k Keeper) scheduleReportingWindowBlocksChangeAtNextBoundary(ctx sdk.Context, params types.Params, newWindowBlocks uint64) error { + if newWindowBlocks == 0 { + return fmt.Errorf("reporting_window_blocks must be > 0") + } + + ws, err := k.getCurrentWindowState(ctx, params) + if err != nil { + return err + } + if ws.WindowBlocks == newWindowBlocks { + // No change needed. + k.clearNextWindowBlocks(ctx) + return nil + } + + return k.setNextWindowBlocks(ctx, newWindowBlocks) +} diff --git a/x/audit/v1/keeper/window_state_test.go b/x/audit/v1/keeper/window_state_test.go new file mode 100644 index 0000000..c6325ae --- /dev/null +++ b/x/audit/v1/keeper/window_state_test.go @@ -0,0 +1,123 @@ +package keeper + +import ( + "testing" + + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/address" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + supernodemocks "github.com/LumeraProtocol/lumera/x/supernode/v1/mocks" +) + +func newAuditKeeperForWindowTests(t testing.TB) (Keeper, sdk.Context) { + t.Helper() + + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + db := dbm.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + storeService := runtime.NewKVStoreService(storeKey) + + ctrl := gomock.NewController(t) + t.Cleanup(ctrl.Finish) + + supernodeKeeper := supernodemocks.NewMockSupernodeKeeper(ctrl) + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addrCodec := address.NewBech32Codec("lumera") + + k := NewKeeper( + cdc, + addrCodec, + storeService, + log.NewNopLogger(), + authority, + supernodeKeeper, + ) + + ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) + return k, ctx +} + +func TestWindowState_AdvancesAndAppliesPendingWindowBlocks(t *testing.T) { + k, ctx := newAuditKeeperForWindowTests(t) + + params := types.DefaultParams() + params.ReportingWindowBlocks = 10 + + ctx = ctx.WithBlockHeight(100) + ws, err := k.getCurrentWindowState(ctx, params) + require.NoError(t, err) + require.Equal(t, uint64(0), ws.WindowID) + require.Equal(t, int64(100), ws.StartHeight) + require.Equal(t, int64(109), ws.EndHeight) + require.Equal(t, uint64(10), ws.WindowBlocks) + + // Schedule a change; it should not affect the current window. + ctx = ctx.WithBlockHeight(105) + require.NoError(t, k.scheduleReportingWindowBlocksChangeAtNextBoundary(ctx, params, 7)) + ws, err = k.getCurrentWindowState(ctx, params) + require.NoError(t, err) + require.Equal(t, uint64(0), ws.WindowID) + require.Equal(t, int64(100), ws.StartHeight) + require.Equal(t, int64(109), ws.EndHeight) + + // Crossing the boundary advances the window and applies the pending size. + ctx = ctx.WithBlockHeight(110) + ws, err = k.getCurrentWindowState(ctx, params) + require.NoError(t, err) + require.Equal(t, uint64(1), ws.WindowID) + require.Equal(t, int64(110), ws.StartHeight) + require.Equal(t, int64(116), ws.EndHeight) + require.Equal(t, uint64(7), ws.WindowBlocks) + + // Next boundary uses the current window size (no pending). + ctx = ctx.WithBlockHeight(117) + ws, err = k.getCurrentWindowState(ctx, params) + require.NoError(t, err) + require.Equal(t, uint64(2), ws.WindowID) + require.Equal(t, int64(117), ws.StartHeight) + require.Equal(t, int64(123), ws.EndHeight) + require.Equal(t, uint64(7), ws.WindowBlocks) +} + +func TestWindowState_PendingOverwrite(t *testing.T) { + k, ctx := newAuditKeeperForWindowTests(t) + + params := types.DefaultParams() + params.ReportingWindowBlocks = 10 + + ctx = ctx.WithBlockHeight(50) + _, err := k.getCurrentWindowState(ctx, params) + require.NoError(t, err) + + ctx = ctx.WithBlockHeight(55) + require.NoError(t, k.scheduleReportingWindowBlocksChangeAtNextBoundary(ctx, params, 9)) + require.NoError(t, k.scheduleReportingWindowBlocksChangeAtNextBoundary(ctx, params, 8)) + + ctx = ctx.WithBlockHeight(60) + ws, err := k.getCurrentWindowState(ctx, params) + require.NoError(t, err) + require.Equal(t, uint64(1), ws.WindowID) + require.Equal(t, uint64(8), ws.WindowBlocks) + require.Equal(t, int64(60), ws.StartHeight) + require.Equal(t, int64(67), ws.EndHeight) +} + diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go index c37998f..bfaaa1e 100644 --- a/x/audit/v1/types/keys.go +++ b/x/audit/v1/types/keys.go @@ -24,9 +24,17 @@ var ( // - The snapshot is intended to be an immutable per-window source-of-truth for: // - prober -> targets mapping (assignments) // + // Window state: + // - Window math is derived from persisted "current window" state: + // - current window_id, start_height, end_height, window_blocks + // - When reporting_window_blocks is changed via governance, the new size is scheduled to take effect + // at the next window boundary (end(current)+1) by persisting a pending next_window_blocks value. + // // Formats: // - WindowOriginHeightKey: "origin_height" -> 8 bytes (u64be(height)) // - WindowSnapshotKey: "ws/" + u64be(window_id) + // - CurrentWindowStateKey: "win/current" -> 32 bytes: u64be(window_id) + u64be(start_height) + u64be(end_height) + u64be(window_blocks) + // - NextWindowBlocksKey: "win/next_blocks" -> 8 bytes (u64be(window_blocks)) // - ReportKey: "r/" + u64be(window_id) + reporter_supernode_account // - ReportIndexKey: "ri/" + reporter_supernode_account + "/" + u64be(window_id) // - SupernodeReportIndexKey: "sr/" + supernode_account + "/" + u64be(window_id) + "/" + reporter_supernode_account @@ -38,6 +46,8 @@ var ( // - EvidenceKey(1, "") => "e/" + u64be(1) + "" windowOriginHeightKey = []byte("origin_height") + currentWindowStateKey = []byte("win/current") + nextWindowBlocksKey = []byte("win/next_blocks") windowSnapshotPrefix = []byte("ws/") reportPrefix = []byte("r/") @@ -67,6 +77,16 @@ func WindowSnapshotKey(windowID uint64) []byte { return key } +// CurrentWindowStateKey returns the store key for the persisted current-window state. +func CurrentWindowStateKey() []byte { + return currentWindowStateKey +} + +// NextWindowBlocksKey returns the store key for the persisted pending next-window size. +func NextWindowBlocksKey() []byte { + return nextWindowBlocksKey +} + // ReportKey returns the store key for the AuditReport identified by (windowID, reporterSupernodeAccount). func ReportKey(windowID uint64, reporterSupernodeAccount string) []byte { key := make([]byte, 0, len(reportPrefix)+8+len(reporterSupernodeAccount)) // "r/" + u64be(window_id) + reporter From 98e5fd99717c4b37ee4d46aa50e607e7a1f9e952 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 28 Jan 2026 14:26:34 +0500 Subject: [PATCH 04/18] audit: enforce postponement + retention --- AuditSpec.md | 78 ++++- proto/lumera/audit/v1/params.proto | 15 + x/audit/v1/POSTPONEMENT_RULES.md | 21 ++ x/audit/v1/README.md | 11 + x/audit/v1/keeper/abci.go | 20 +- x/audit/v1/keeper/enforcement.go | 301 +++++++++++++++++++ x/audit/v1/keeper/msg_submit_audit_report.go | 47 +++ x/audit/v1/keeper/prune.go | 153 ++++++++++ x/audit/v1/types/params.go | 84 +++++- x/audit/v1/types/params.pb.go | 247 +++++++++++++-- 10 files changed, 931 insertions(+), 46 deletions(-) create mode 100644 x/audit/v1/POSTPONEMENT_RULES.md create mode 100644 x/audit/v1/keeper/enforcement.go create mode 100644 x/audit/v1/keeper/prune.go diff --git a/AuditSpec.md b/AuditSpec.md index 51a3258..bd7ffba 100644 --- a/AuditSpec.md +++ b/AuditSpec.md @@ -11,8 +11,9 @@ This document specifies the `audit/v1` on-chain contract: protobuf shapes, windo 6. Messages (tx) 7. Queries 8. On-Chain State -11. Out of Scope -12. Events +9. Postponement and Recovery (Draft) +10. Out of Scope +11. Events @@ -47,7 +48,7 @@ Assumption: - the report targets the **current window_id** at the current height (window start through window end) - the reporter has not already submitted a report for that window - When accepted, the chain stores the report as-is. -- Penalties and aggregation are intentionally out-of-scope for the current implementation. +- Economic penalties and aggregation are intentionally out-of-scope for the current implementation. ## 3. Reporting Windows Window sizing is block-based and deterministic. The module persists the current window boundaries and advances them as the chain height increases. @@ -94,6 +95,11 @@ Default values: - `min_probe_targets_per_window` (uint32): `3` - `max_probe_targets_per_window` (uint32): `5` - `required_open_ports` (repeated uint32): `[4444, 4445, 8002]` +- `min_cpu_free_percent` (uint32): `0` (disabled) +- `min_mem_free_percent` (uint32): `0` (disabled) +- `min_disk_free_percent` (uint32): `0` (disabled) +- `consecutive_windows_to_postpone` (uint32): `1` +- `keep_last_window_entries` (uint64): `200` ## 5. Data Types (audit/v1) The module defines its reachability types under `audit/v1`. @@ -204,7 +210,7 @@ message MsgSubmitAuditReport { ### 6.4 Message validation rules On `MsgSubmitAuditReport`: -1) Reject if current height is outside the acceptance period for `window_id` (section 3.3). +1) Reject if current height is outside the acceptance period for `window_id` (section 3.2). 2) Resolve reporter supernode from `supernode_account` via `x/supernode`; reject if not found. 3) Reject duplicates: at most one report per `(window_id, supernode_account)`. @@ -280,10 +286,66 @@ This section describes the minimum state persisted by the module: State growth considerations: - State must remain bounded. The module MAY prune per-window state (`WindowSnapshot`, `AuditReport`) for any `window_id` once the acceptance period for that window has ended (section 3.2). -- Current implementation note: pruning is not yet implemented; per-window state accumulates over time. +- Current implementation note: pruning is implemented at window end and keeps the last `keep_last_window_entries` windows of window-scoped state. -## 11. Out of Scope -This specification does not define penalties or participation requirements for audit reports in its current scope. +## 9. Postponement and Recovery (Draft) -## 12. Events +This section defines draft rules to set a supernode to `POSTPONED` (and recover to `ACTIVE`) based on audit reports. + +Important note: +- Peer-observation assignment/gating is enforced **when `MsgSubmitAuditReport` is accepted**. Enforcement later assumes only gated observations are stored. + +### 9.1 Self-report based postponement (host requirements) + +Inputs: +- `AuditSelfReport.cpu_usage_percent`, `mem_usage_percent`, `disk_usage_percent` + +Planned params: +- `min_cpu_free_percent` +- `min_mem_free_percent` +- `min_disk_free_percent` + +Compute free%: +- `cpu_free_percent = 100 - cpu_usage_percent` +- `mem_free_percent = 100 - mem_usage_percent` +- `disk_free_percent = 100 - disk_usage_percent` + +Unknown special case: +- If a usage% is `0`, treat that metric as unknown and do not postpone based on it. + +Rule: +- If any known free% is below its minimum, set the supernode to `POSTPONED`. + +Non-rules (for now): +- Ignore `failed_actions_count`. +- Ignore `inbound_port_states` (self inbound traffic is not reachability). + +### 9.2 Peer-report based postponement (ports) + +Inputs: +- Peer observations for required ports (index-aligned to `required_open_ports`). + +Planned param: +- `consecutive_windows_to_postpone` (default `1`) + +Per window `W` and required port index `i`, “port i is closed for target T in window W” is true only if: +- there are at least **2** distinct peer reporters about `T` in `W`, and +- **all** those peer reporters report `PORT_STATE_CLOSED` for port index `i` for `T`. + +Rule: +- If any required port index `i` is closed for `consecutive_windows_to_postpone` consecutive windows, set `T` to `POSTPONED`. + +### 9.3 Recovery (POSTPONED -> ACTIVE) + +Rule: +- A `POSTPONED` supernode becomes `ACTIVE` after, in a single window: + - one compliant self report (meets host requirements; treating 0 values as unknown), and + - one compliant peer report, meaning: + - at least **2** distinct peer reporters about the target in that window, and + - for each required port index `i`, all those peer reporters report `PORT_STATE_OPEN`. + +## 10. Out of Scope +This specification does not define economic penalties (e.g. slashing, jailing, rewards) for audit reports in its current scope. + +## 11. Events The current implementation does not emit audit-specific events. diff --git a/proto/lumera/audit/v1/params.proto b/proto/lumera/audit/v1/params.proto index e54ca57..3475a34 100644 --- a/proto/lumera/audit/v1/params.proto +++ b/proto/lumera/audit/v1/params.proto @@ -17,4 +17,19 @@ message Params { uint32 max_probe_targets_per_window = 5; repeated uint32 required_open_ports = 6; + + // Minimum required host free capacity (self reported). + // free% = 100 - usage% + // A usage% of 0 is treated as "unknown" (no action). + uint32 min_cpu_free_percent = 7; + uint32 min_mem_free_percent = 8; + uint32 min_disk_free_percent = 9; + + // Number of consecutive windows a required port must be unanimously reported CLOSED + // by peers (with at least 2 peer reports per window) before postponing the supernode. + uint32 consecutive_windows_to_postpone = 10; + + // How many completed windows to keep in state for window-scoped data like WindowSnapshot, + // AuditReport, and related indices. Pruning runs at window end. + uint64 keep_last_window_entries = 11; } diff --git a/x/audit/v1/POSTPONEMENT_RULES.md b/x/audit/v1/POSTPONEMENT_RULES.md new file mode 100644 index 0000000..772c337 --- /dev/null +++ b/x/audit/v1/POSTPONEMENT_RULES.md @@ -0,0 +1,21 @@ +# Postponement Rules (Draft) + +Minimal rules for switching a supernode between `ACTIVE` and `POSTPONED`, based on `MsgSubmitAuditReport` + `WindowSnapshot`. + +1) **Enforcement timing**: rules are evaluated only at **window end** (`window_end_height`). + +2) **Gating location**: peer assignment/target gating is enforced only when `MsgSubmitAuditReport` is accepted. Enforcement assumes stored peer observations already passed gating. + +3) **Self host metrics → POSTPONE**: if a self report violates any enabled minimum free% threshold, postpone. + - Params: `min_cpu_free_percent`, `min_mem_free_percent`, `min_disk_free_percent` (free% = `100 - usage%`). + - Special case: if `*_usage_percent == 0`, treat as **unknown** and skip any action for that metric. + +4) **Self non-rules (for now)**: ignore `failed_actions_count` and ignore `inbound_port_states` (self ports reflect inbound traffic, not reachability). + +5) **Peer ports → POSTPONE**: for any required port index `i`, if peers unanimously report that port as `CLOSED` for `consecutive_windows_to_postpone` consecutive windows, postpone. + - Param: `consecutive_windows_to_postpone` (default `1`). + - A window counts only if there are **at least 2** distinct peer reporters about the target in that window, and **all** of them report `port_states[i] == PORT_STATE_CLOSED`. + +6) **Recovery (POSTPONED → ACTIVE)**: in a single window, require: + - one compliant self report (per rule 3), and + - one compliant peer report: **at least 2** distinct peer reporters about the target in that window, and **all** required ports unanimously `OPEN`. diff --git a/x/audit/v1/README.md b/x/audit/v1/README.md index 30ca8f0..ecdf3cc 100644 --- a/x/audit/v1/README.md +++ b/x/audit/v1/README.md @@ -27,6 +27,7 @@ High-level behavior: Notes: - This module currently focuses on windowing/snapshotting and report persistence. Penalties and aggregation are intentionally not implemented. +- Postponement/recovery enforcement is implemented; rules are documented in `x/audit/v1/POSTPONEMENT_RULES.md`. ## Genesis State Implementation @@ -50,6 +51,11 @@ Key fields: - `min_probe_targets_per_window` - `max_probe_targets_per_window` - `required_open_ports` +- `min_cpu_free_percent` +- `min_mem_free_percent` +- `min_disk_free_percent` +- `consecutive_windows_to_postpone` +- `keep_last_window_entries` ### 2. Window State and Window IDs @@ -172,6 +178,11 @@ Default values (as implemented in `x/audit/v1/types/params.go`): - `min_probe_targets_per_window`: `3` - `max_probe_targets_per_window`: `5` - `required_open_ports`: `[4444, 4445, 8002]` +- `min_cpu_free_percent`: `0` (disabled) +- `min_mem_free_percent`: `0` (disabled) +- `min_disk_free_percent`: `0` (disabled) +- `consecutive_windows_to_postpone`: `1` +- `keep_last_window_entries`: `200` ## Client diff --git a/x/audit/v1/keeper/abci.go b/x/audit/v1/keeper/abci.go index b691d62..8d901f1 100644 --- a/x/audit/v1/keeper/abci.go +++ b/x/audit/v1/keeper/abci.go @@ -26,6 +26,22 @@ func (k Keeper) BeginBlocker(ctx context.Context) error { } func (k Keeper) EndBlocker(ctx context.Context) error { - // Windowing/snapshotting only: no EndBlock side effects here. - return nil + sdkCtx := sdk.UnwrapSDKContext(ctx) + params := k.GetParams(ctx).WithDefaults() + + ws, err := k.getCurrentWindowState(sdkCtx, params) + if err != nil { + return err + } + + // Only enforce and prune exactly at the window end height. + if sdkCtx.BlockHeight() != ws.EndHeight { + return nil + } + + if err := k.EnforceWindowEnd(sdkCtx, ws.WindowID, params); err != nil { + return err + } + + return k.PruneOldWindows(sdkCtx, ws.WindowID, params) } diff --git a/x/audit/v1/keeper/enforcement.go b/x/audit/v1/keeper/enforcement.go new file mode 100644 index 0000000..2da4d3f --- /dev/null +++ b/x/audit/v1/keeper/enforcement.go @@ -0,0 +1,301 @@ +package keeper + +import ( + "fmt" + + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" +) + +const ( + // minPeerReportersPerWindow is the minimum number of distinct peer reporters required in a window + // before peer-port unanimity can be considered. + minPeerReportersPerWindow = 2 +) + +// EnforceWindowEnd evaluates the completed window and updates supernode states accordingly. +// It does not re-check peer assignment gating; that must be enforced at MsgSubmitAuditReport time. +func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types.Params) error { + params = params.WithDefaults() + + active, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStateActive) + if err != nil { + return err + } + postponed, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStatePostponed) + if err != nil { + return err + } + + // Postpone ACTIVE supernodes that fail criteria. + for _, sn := range active { + if sn.SupernodeAccount == "" { + continue + } + + shouldPostpone, err := k.shouldPostponeAtWindowEnd(ctx, sn.SupernodeAccount, windowID, params) + if err != nil { + return err + } + if !shouldPostpone { + continue + } + + if err := k.appendSupernodeState(ctx, sn, sntypes.SuperNodeStatePostponed); err != nil { + return err + } + } + + // Recover POSTPONED supernodes that meet recovery criteria. + for _, sn := range postponed { + if sn.SupernodeAccount == "" { + continue + } + + shouldRecover, err := k.shouldRecoverAtWindowEnd(ctx, sn.SupernodeAccount, windowID, params) + if err != nil { + return err + } + if !shouldRecover { + continue + } + + if err := k.appendSupernodeState(ctx, sn, sntypes.SuperNodeStateActive); err != nil { + return err + } + } + + return nil +} + +func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { + // Self host-metrics-based postponement (if a self report exists and violates minimums). + if ok, err := k.selfHostViolatesMinimums(ctx, supernodeAccount, windowID, params); err != nil { + return false, err + } else if ok { + return true, nil + } + + // Peer ports-based postponement. + requiredPortsLen := len(params.RequiredOpenPorts) + if requiredPortsLen == 0 { + return false, nil + } + + consecutive := params.ConsecutiveWindowsToPostpone + if consecutive == 0 { + consecutive = 1 + } + if consecutive > uint32(windowID+1) { + // Not enough history on-chain to satisfy the consecutive rule. + return false, nil + } + + for portIndex := 0; portIndex < requiredPortsLen; portIndex++ { + streak := uint32(0) + for offset := uint32(0); offset < consecutive; offset++ { + w := windowID - uint64(offset) + closed, err := k.peersUnanimousPortState(ctx, supernodeAccount, w, portIndex, types.PortState_PORT_STATE_CLOSED) + if err != nil { + return false, err + } + if !closed { + break + } + streak++ + } + if streak == consecutive { + return true, nil + } + } + + return false, nil +} + +func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { + // Need one compliant self report. + selfCompliant, err := k.selfHostCompliant(ctx, supernodeAccount, windowID, params) + if err != nil || !selfCompliant { + return false, err + } + + // Need one compliant peer report: >=2 peers and all required ports unanimously OPEN. + requiredPortsLen := len(params.RequiredOpenPorts) + if requiredPortsLen == 0 { + return true, nil + } + peers, err := k.peerReportersForTargetWindow(ctx, supernodeAccount, windowID) + if err != nil { + return false, err + } + if len(peers) < minPeerReportersPerWindow { + return false, nil + } + + for portIndex := 0; portIndex < requiredPortsLen; portIndex++ { + open, err := k.peersUnanimousPortStateWithPeers(ctx, supernodeAccount, windowID, portIndex, types.PortState_PORT_STATE_OPEN, peers) + if err != nil { + return false, err + } + if !open { + return false, nil + } + } + + return true, nil +} + +func (k Keeper) appendSupernodeState(ctx sdk.Context, sn sntypes.SuperNode, state sntypes.SuperNodeState) error { + if len(sn.States) > 0 { + last := sn.States[len(sn.States)-1] + if last != nil && last.State == state { + return nil + } + } + + sn.States = append(sn.States, &sntypes.SuperNodeStateRecord{ + State: state, + Height: ctx.BlockHeight(), + }) + + if err := k.supernodeKeeper.SetSuperNode(ctx, sn); err != nil { + return err + } + return nil +} + +func (k Keeper) selfHostViolatesMinimums(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { + r, found := k.GetReport(ctx, windowID, supernodeAccount) + if !found { + return false, nil + } + + // If any known metric is below minimum free%, postpone. + if violatesMinFree(r.SelfReport.CpuUsagePercent, params.MinCpuFreePercent) { + return true, nil + } + if violatesMinFree(r.SelfReport.MemUsagePercent, params.MinMemFreePercent) { + return true, nil + } + if violatesMinFree(r.SelfReport.DiskUsagePercent, params.MinDiskFreePercent) { + return true, nil + } + + return false, nil +} + +func (k Keeper) selfHostCompliant(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { + r, found := k.GetReport(ctx, windowID, supernodeAccount) + if !found { + return false, nil + } + + if !compliesMinFree(r.SelfReport.CpuUsagePercent, params.MinCpuFreePercent) { + return false, nil + } + if !compliesMinFree(r.SelfReport.MemUsagePercent, params.MinMemFreePercent) { + return false, nil + } + if !compliesMinFree(r.SelfReport.DiskUsagePercent, params.MinDiskFreePercent) { + return false, nil + } + + return true, nil +} + +func violatesMinFree(usagePercent float64, minFreePercent uint32) bool { + if minFreePercent == 0 { + return false + } + if usagePercent == 0 { + // Unknown: skip action. + return false + } + if usagePercent < 0 || usagePercent > 100 { + return true + } + free := 100.0 - usagePercent + return free < float64(minFreePercent) +} + +func compliesMinFree(usagePercent float64, minFreePercent uint32) bool { + if minFreePercent == 0 { + return true + } + if usagePercent == 0 { + // Unknown: does not block compliance. + return true + } + if usagePercent < 0 || usagePercent > 100 { + return false + } + free := 100.0 - usagePercent + return free >= float64(minFreePercent) +} + +func (k Keeper) peersUnanimousPortState(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState) (bool, error) { + peers, err := k.peerReportersForTargetWindow(ctx, target, windowID) + if err != nil { + return false, err + } + if len(peers) < minPeerReportersPerWindow { + return false, nil + } + return k.peersUnanimousPortStateWithPeers(ctx, target, windowID, portIndex, desired, peers) +} + +func (k Keeper) peersUnanimousPortStateWithPeers(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState, peers []string) (bool, error) { + if len(peers) < minPeerReportersPerWindow { + return false, nil + } + for _, reporter := range peers { + r, found := k.GetReport(ctx, windowID, reporter) + if !found { + return false, nil + } + + var obs *types.AuditPeerObservation + for i := range r.PeerObservations { + if r.PeerObservations[i] != nil && r.PeerObservations[i].TargetSupernodeAccount == target { + obs = r.PeerObservations[i] + break + } + } + if obs == nil { + return false, nil + } + if portIndex < 0 || portIndex >= len(obs.PortStates) { + return false, nil + } + if obs.PortStates[portIndex] != desired { + return false, nil + } + } + return true, nil +} + +func (k Keeper) peerReportersForTargetWindow(ctx sdk.Context, target string, windowID uint64) ([]string, error) { + store := k.kvStore(ctx) + prefix := types.SupernodeReportIndexWindowPrefix(target, windowID) + + it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) + defer it.Close() + + reporters := make([]string, 0, 8) + for ; it.Valid(); it.Next() { + // Key is "" under the window-specific prefix. + key := it.Key() + if len(key) < len(prefix) { + return nil, fmt.Errorf("invalid supernode report index key") + } + reporter := string(key[len(prefix):]) + if reporter == "" { + return nil, fmt.Errorf("empty reporter in supernode report index") + } + reporters = append(reporters, reporter) + } + return reporters, nil +} diff --git a/x/audit/v1/keeper/msg_submit_audit_report.go b/x/audit/v1/keeper/msg_submit_audit_report.go index e7aa547..ddcce19 100644 --- a/x/audit/v1/keeper/msg_submit_audit_report.go +++ b/x/audit/v1/keeper/msg_submit_audit_report.go @@ -37,6 +37,53 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu return nil, errorsmod.Wrap(types.ErrReporterNotFound, "unknown supernode_account") } + // Enforce peer-observation gating at submission time using the persisted window snapshot. + // Enforcement later assumes all stored peer observations were gated here. + snap, found := m.GetWindowSnapshot(sdkCtx, req.WindowId) + if !found { + return nil, errorsmod.Wrapf(types.ErrWindowSnapshotNotFound, "window snapshot not found for window_id %d", req.WindowId) + } + + allowedTargets := make(map[string]struct{}) + for _, a := range snap.Assignments { + if a.ProberSupernodeAccount != req.SupernodeAccount { + continue + } + for _, t := range a.TargetSupernodeAccounts { + allowedTargets[t] = struct{}{} + } + break + } + + requiredPortsLen := len(params.RequiredOpenPorts) + if len(req.PeerObservations) > 0 { + if len(allowedTargets) == 0 { + return nil, errorsmod.Wrap(types.ErrInvalidReporterState, "reporter not eligible for peer observations in this window") + } + + seenTargets := make(map[string]struct{}, len(req.PeerObservations)) + for _, obs := range req.PeerObservations { + target := obs.TargetSupernodeAccount + if target == "" { + return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "empty target_supernode_account") + } + if target == req.SupernodeAccount { + return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "self-targeting is not allowed") + } + if _, ok := allowedTargets[target]; !ok { + return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "target %q is not assigned to reporter in this window", target) + } + if _, dup := seenTargets[target]; dup { + return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "duplicate peer observation for target %q", target) + } + seenTargets[target] = struct{}{} + + if requiredPortsLen != 0 && len(obs.PortStates) != requiredPortsLen { + return nil, errorsmod.Wrapf(types.ErrInvalidPortStatesLength, "port_states length %d does not match required_open_ports length %d", len(obs.PortStates), requiredPortsLen) + } + } + } + reporterAccount := req.SupernodeAccount if m.HasReport(sdkCtx, req.WindowId, reporterAccount) { return nil, errorsmod.Wrap(types.ErrDuplicateReport, "report already submitted for this window") diff --git a/x/audit/v1/keeper/prune.go b/x/audit/v1/keeper/prune.go new file mode 100644 index 0000000..bdfe49a --- /dev/null +++ b/x/audit/v1/keeper/prune.go @@ -0,0 +1,153 @@ +package keeper + +import ( + "encoding/binary" + + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +// PruneOldWindows bounds audit storage by window_id, keeping only the last params.keep_last_window_entries windows +// (including the provided currentWindowID). +func (k Keeper) PruneOldWindows(ctx sdk.Context, currentWindowID uint64, params types.Params) error { + params = params.WithDefaults() + keepLastWindowEntries := params.KeepLastWindowEntries + + // Keep [minKeepWindowID .. currentWindowID]. + var minKeepWindowID uint64 + if currentWindowID+1 > keepLastWindowEntries { + minKeepWindowID = currentWindowID + 1 - keepLastWindowEntries + } else { + minKeepWindowID = 0 + } + + store := k.kvStore(ctx) + + // Snapshots: ws/ + if err := prunePrefixByWindowIDLeadingU64(store, []byte("ws/"), minKeepWindowID); err != nil { + return err + } + + // Reports: r/ + if err := prunePrefixByWindowIDLeadingU64(store, []byte("r/"), minKeepWindowID); err != nil { + return err + } + + // Indices: + // - ri// + // - ss// + // - sr/// + pruneReporterTrailingWindowID(store, []byte("ri/"), minKeepWindowID) + pruneReporterTrailingWindowID(store, []byte("ss/"), minKeepWindowID) + pruneSupernodeWindowReporter(store, []byte("sr/"), minKeepWindowID) + + return nil +} + +func prunePrefixByWindowIDLeadingU64(store storetypes.KVStore, prefix []byte, minKeepWindowID uint64) error { + it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) + defer it.Close() + + var toDelete [][]byte + + for ; it.Valid(); it.Next() { + key := it.Key() + if len(key) < len(prefix)+8 { + // Malformed; skip. + continue + } + windowID := binary.BigEndian.Uint64(key[len(prefix) : len(prefix)+8]) + if windowID >= minKeepWindowID { + // Keys are ordered by leading u64be(window_id); we can stop. + break + } + // Copy key before iterator advances. + kc := make([]byte, len(key)) + copy(kc, key) + toDelete = append(toDelete, kc) + } + + for _, k := range toDelete { + store.Delete(k) + } + return nil +} + +// pruneReporterTrailingWindowID prunes keys shaped like: +// +// "/" +// +// by parsing the final 8 bytes as the window id. +func pruneReporterTrailingWindowID(store storetypes.KVStore, prefix []byte, minKeepWindowID uint64) { + it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) + defer it.Close() + + var toDelete [][]byte + + for ; it.Valid(); it.Next() { + key := it.Key() + if len(key) < len(prefix)+1+8 { + continue + } + windowID := binary.BigEndian.Uint64(key[len(key)-8:]) + if windowID >= minKeepWindowID { + continue + } + kc := make([]byte, len(key)) + copy(kc, key) + toDelete = append(toDelete, kc) + } + + for _, k := range toDelete { + store.Delete(k) + } +} + +// pruneSupernodeWindowReporter prunes keys shaped like: +// +// sr/"/""/" +func pruneSupernodeWindowReporter(store storetypes.KVStore, prefix []byte, minKeepWindowID uint64) { + it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) + defer it.Close() + + var toDelete [][]byte + + for ; it.Valid(); it.Next() { + key := it.Key() + if len(key) < len(prefix)+1+8+1+1 { + continue + } + rest := key[len(prefix):] + sep := bytesIndexByte(rest, '/') + if sep <= 0 { + continue + } + if len(rest) < sep+1+8+1 { + continue + } + windowIDStart := sep + 1 + windowIDEnd := windowIDStart + 8 + windowID := binary.BigEndian.Uint64(rest[windowIDStart:windowIDEnd]) + if windowID >= minKeepWindowID { + continue + } + kc := make([]byte, len(key)) + copy(kc, key) + toDelete = append(toDelete, kc) + } + + for _, k := range toDelete { + store.Delete(k) + } +} + +func bytesIndexByte(b []byte, c byte) int { + for i := range b { + if b[i] == c { + return i + } + } + return -1 +} diff --git a/x/audit/v1/types/params.go b/x/audit/v1/types/params.go index 1c53db7..2ab9eec 100644 --- a/x/audit/v1/types/params.go +++ b/x/audit/v1/types/params.go @@ -10,19 +10,29 @@ import ( var _ paramtypes.ParamSet = (*Params)(nil) var ( - KeyReportingWindowBlocks = []byte("ReportingWindowBlocks") - KeyPeerQuorumReports = []byte("PeerQuorumReports") - KeyMinProbeTargetsPerWindow = []byte("MinProbeTargetsPerWindow") - KeyMaxProbeTargetsPerWindow = []byte("MaxProbeTargetsPerWindow") - KeyRequiredOpenPorts = []byte("RequiredOpenPorts") + KeyReportingWindowBlocks = []byte("ReportingWindowBlocks") + KeyPeerQuorumReports = []byte("PeerQuorumReports") + KeyMinProbeTargetsPerWindow = []byte("MinProbeTargetsPerWindow") + KeyMaxProbeTargetsPerWindow = []byte("MaxProbeTargetsPerWindow") + KeyRequiredOpenPorts = []byte("RequiredOpenPorts") + KeyMinCpuFreePercent = []byte("MinCpuFreePercent") + KeyMinMemFreePercent = []byte("MinMemFreePercent") + KeyMinDiskFreePercent = []byte("MinDiskFreePercent") + KeyConsecutiveWindowsToPostpone = []byte("ConsecutiveWindowsToPostpone") + KeyKeepLastWindowEntries = []byte("KeepLastWindowEntries") ) var ( - DefaultReportingWindowBlocks = uint64(400) - DefaultPeerQuorumReports = uint32(3) - DefaultMinProbeTargetsPerWindow = uint32(3) - DefaultMaxProbeTargetsPerWindow = uint32(5) - DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} + DefaultReportingWindowBlocks = uint64(400) + DefaultPeerQuorumReports = uint32(3) + DefaultMinProbeTargetsPerWindow = uint32(3) + DefaultMaxProbeTargetsPerWindow = uint32(5) + DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} + DefaultMinCpuFreePercent = uint32(0) + DefaultMinMemFreePercent = uint32(0) + DefaultMinDiskFreePercent = uint32(0) + DefaultConsecutiveWindowsToPostpone = uint32(1) + DefaultKeepLastWindowEntries = uint64(200) ) // Params notes @@ -31,6 +41,9 @@ var ( // - peer_quorum_reports: desired number of peer observations per receiver (drives k_window calculation). // - min/max_probe_targets_per_window: clamps k_window to a safe range. // - required_open_ports: ports every report must cover. +// - min_*_free_percent: minimum required free capacity from self report (0 disables). +// - consecutive_windows_to_postpone: consecutive windows of unanimous peer port CLOSED needed to postpone. +// - keep_last_window_entries: how many windows of window-scoped state to keep (pruning at window end). func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) @@ -42,13 +55,23 @@ func NewParams( minProbeTargetsPerWindow uint32, maxProbeTargetsPerWindow uint32, requiredOpenPorts []uint32, + minCpuFreePercent uint32, + minMemFreePercent uint32, + minDiskFreePercent uint32, + consecutiveWindowsToPostpone uint32, + keepLastWindowEntries uint64, ) Params { return Params{ - ReportingWindowBlocks: reportingWindowBlocks, - PeerQuorumReports: peerQuorumReports, - MinProbeTargetsPerWindow: minProbeTargetsPerWindow, - MaxProbeTargetsPerWindow: maxProbeTargetsPerWindow, - RequiredOpenPorts: requiredOpenPorts, + ReportingWindowBlocks: reportingWindowBlocks, + PeerQuorumReports: peerQuorumReports, + MinProbeTargetsPerWindow: minProbeTargetsPerWindow, + MaxProbeTargetsPerWindow: maxProbeTargetsPerWindow, + RequiredOpenPorts: requiredOpenPorts, + MinCpuFreePercent: minCpuFreePercent, + MinMemFreePercent: minMemFreePercent, + MinDiskFreePercent: minDiskFreePercent, + ConsecutiveWindowsToPostpone: consecutiveWindowsToPostpone, + KeepLastWindowEntries: keepLastWindowEntries, } } @@ -59,6 +82,11 @@ func DefaultParams() Params { DefaultMinProbeTargetsPerWindow, DefaultMaxProbeTargetsPerWindow, append([]uint32(nil), DefaultRequiredOpenPorts...), + DefaultMinCpuFreePercent, + DefaultMinMemFreePercent, + DefaultMinDiskFreePercent, + DefaultConsecutiveWindowsToPostpone, + DefaultKeepLastWindowEntries, ) } @@ -78,6 +106,12 @@ func (p Params) WithDefaults() Params { if len(p.RequiredOpenPorts) == 0 { p.RequiredOpenPorts = append([]uint32(nil), DefaultRequiredOpenPorts...) } + if p.ConsecutiveWindowsToPostpone == 0 { + p.ConsecutiveWindowsToPostpone = DefaultConsecutiveWindowsToPostpone + } + if p.KeepLastWindowEntries == 0 { + p.KeepLastWindowEntries = DefaultKeepLastWindowEntries + } return p } @@ -88,6 +122,11 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyMinProbeTargetsPerWindow, &p.MinProbeTargetsPerWindow, validateUint32), paramtypes.NewParamSetPair(KeyMaxProbeTargetsPerWindow, &p.MaxProbeTargetsPerWindow, validateUint32), paramtypes.NewParamSetPair(KeyRequiredOpenPorts, &p.RequiredOpenPorts, validateUint32Slice), + paramtypes.NewParamSetPair(KeyMinCpuFreePercent, &p.MinCpuFreePercent, validateUint32), + paramtypes.NewParamSetPair(KeyMinMemFreePercent, &p.MinMemFreePercent, validateUint32), + paramtypes.NewParamSetPair(KeyMinDiskFreePercent, &p.MinDiskFreePercent, validateUint32), + paramtypes.NewParamSetPair(KeyConsecutiveWindowsToPostpone, &p.ConsecutiveWindowsToPostpone, validateUint32), + paramtypes.NewParamSetPair(KeyKeepLastWindowEntries, &p.KeepLastWindowEntries, validateUint64), } } @@ -106,6 +145,21 @@ func (p Params) Validate() error { if len(p.RequiredOpenPorts) == 0 { return fmt.Errorf("required_open_ports must not be empty") } + if p.MinCpuFreePercent > 100 { + return fmt.Errorf("min_cpu_free_percent must be <= 100") + } + if p.MinMemFreePercent > 100 { + return fmt.Errorf("min_mem_free_percent must be <= 100") + } + if p.MinDiskFreePercent > 100 { + return fmt.Errorf("min_disk_free_percent must be <= 100") + } + if p.ConsecutiveWindowsToPostpone == 0 { + return fmt.Errorf("consecutive_windows_to_postpone must be > 0") + } + if p.KeepLastWindowEntries == 0 { + return fmt.Errorf("keep_last_window_entries must be > 0") + } ports := append([]uint32(nil), p.RequiredOpenPorts...) sort.Slice(ports, func(i, j int) bool { return ports[i] < ports[j] }) diff --git a/x/audit/v1/types/params.pb.go b/x/audit/v1/types/params.pb.go index c7309f6..06ddcbb 100644 --- a/x/audit/v1/types/params.pb.go +++ b/x/audit/v1/types/params.pb.go @@ -31,6 +31,18 @@ type Params struct { MinProbeTargetsPerWindow uint32 `protobuf:"varint,4,opt,name=min_probe_targets_per_window,json=minProbeTargetsPerWindow,proto3" json:"min_probe_targets_per_window,omitempty"` MaxProbeTargetsPerWindow uint32 `protobuf:"varint,5,opt,name=max_probe_targets_per_window,json=maxProbeTargetsPerWindow,proto3" json:"max_probe_targets_per_window,omitempty"` RequiredOpenPorts []uint32 `protobuf:"varint,6,rep,packed,name=required_open_ports,json=requiredOpenPorts,proto3" json:"required_open_ports,omitempty"` + // Minimum required host free capacity (self reported). + // free% = 100 - usage% + // A usage% of 0 is treated as "unknown" (no action). + MinCpuFreePercent uint32 `protobuf:"varint,7,opt,name=min_cpu_free_percent,json=minCpuFreePercent,proto3" json:"min_cpu_free_percent,omitempty"` + MinMemFreePercent uint32 `protobuf:"varint,8,opt,name=min_mem_free_percent,json=minMemFreePercent,proto3" json:"min_mem_free_percent,omitempty"` + MinDiskFreePercent uint32 `protobuf:"varint,9,opt,name=min_disk_free_percent,json=minDiskFreePercent,proto3" json:"min_disk_free_percent,omitempty"` + // Number of consecutive windows a required port must be unanimously reported CLOSED + // by peers (with at least 2 peer reports per window) before postponing the supernode. + ConsecutiveWindowsToPostpone uint32 `protobuf:"varint,10,opt,name=consecutive_windows_to_postpone,json=consecutiveWindowsToPostpone,proto3" json:"consecutive_windows_to_postpone,omitempty"` + // How many completed windows to keep in state for window-scoped data like WindowSnapshot, + // AuditReport, and related indices. Pruning runs at window end. + KeepLastWindowEntries uint64 `protobuf:"varint,11,opt,name=keep_last_window_entries,json=keepLastWindowEntries,proto3" json:"keep_last_window_entries,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -101,6 +113,41 @@ func (m *Params) GetRequiredOpenPorts() []uint32 { return nil } +func (m *Params) GetMinCpuFreePercent() uint32 { + if m != nil { + return m.MinCpuFreePercent + } + return 0 +} + +func (m *Params) GetMinMemFreePercent() uint32 { + if m != nil { + return m.MinMemFreePercent + } + return 0 +} + +func (m *Params) GetMinDiskFreePercent() uint32 { + if m != nil { + return m.MinDiskFreePercent + } + return 0 +} + +func (m *Params) GetConsecutiveWindowsToPostpone() uint32 { + if m != nil { + return m.ConsecutiveWindowsToPostpone + } + return 0 +} + +func (m *Params) GetKeepLastWindowEntries() uint64 { + if m != nil { + return m.KeepLastWindowEntries + } + return 0 +} + func init() { proto.RegisterType((*Params)(nil), "lumera.audit.v1.Params") } @@ -108,27 +155,35 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/params.proto", fileDescriptor_3788ca0fc7eb9d86) } var fileDescriptor_3788ca0fc7eb9d86 = []byte{ - // 311 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xbf, 0x4a, 0x03, 0x41, - 0x10, 0x87, 0xb3, 0x26, 0xa6, 0x58, 0x10, 0xcd, 0x45, 0xf1, 0x08, 0x61, 0x0d, 0x56, 0xc1, 0xe2, - 0x8e, 0x20, 0x58, 0x58, 0x58, 0xe4, 0x05, 0x3c, 0x83, 0x20, 0xd8, 0x2c, 0x1b, 0x33, 0x1c, 0x8b, - 0xd9, 0x3f, 0x99, 0xdb, 0x4b, 0xe2, 0x5b, 0xf8, 0x08, 0x56, 0x3e, 0x8b, 0x65, 0x4a, 0x4b, 0x49, - 0x1a, 0x1f, 0x43, 0x6e, 0x37, 0x6a, 0xa3, 0xcd, 0x32, 0xec, 0xf7, 0xfb, 0x76, 0x86, 0x1d, 0xda, - 0x9d, 0x96, 0x0a, 0x50, 0xa4, 0xa2, 0x9c, 0x48, 0x97, 0xce, 0x07, 0xa9, 0x15, 0x28, 0x54, 0x91, - 0x58, 0x34, 0xce, 0x44, 0xfb, 0x81, 0x26, 0x9e, 0x26, 0xf3, 0x41, 0xa7, 0x25, 0x94, 0xd4, 0x26, - 0xf5, 0x67, 0xc8, 0x74, 0x0e, 0x73, 0x93, 0x1b, 0x5f, 0xa6, 0x55, 0x15, 0x6e, 0x4f, 0x5f, 0x77, - 0x68, 0x33, 0xf3, 0x4f, 0x45, 0x17, 0xf4, 0x18, 0xc1, 0x1a, 0x74, 0x52, 0xe7, 0x7c, 0x21, 0xf5, - 0xc4, 0x2c, 0xf8, 0x78, 0x6a, 0x1e, 0x1e, 0x8b, 0x98, 0xf4, 0x48, 0xbf, 0x31, 0x3a, 0xfa, 0xc1, - 0x77, 0x9e, 0x0e, 0x3d, 0x8c, 0x12, 0xda, 0xb6, 0x00, 0xc8, 0x67, 0xa5, 0xc1, 0x52, 0xf1, 0x10, - 0x2a, 0xe2, 0x7a, 0x8f, 0xf4, 0xf7, 0x46, 0xad, 0x0a, 0xdd, 0x78, 0x32, 0x0a, 0x20, 0xba, 0xa2, - 0x5d, 0x25, 0x35, 0xb7, 0x68, 0xc6, 0xc0, 0x9d, 0xc0, 0x1c, 0x5c, 0xc1, 0x2d, 0xe0, 0xb6, 0x67, - 0xdc, 0xf0, 0x62, 0xac, 0xa4, 0xce, 0xaa, 0xc8, 0x6d, 0x48, 0x64, 0x80, 0xa1, 0xab, 0xf7, 0xc5, - 0xf2, 0x7f, 0x7f, 0x77, 0xeb, 0x8b, 0xe5, 0xdf, 0x7e, 0x42, 0xdb, 0x08, 0xb3, 0x52, 0x22, 0x4c, - 0xb8, 0xb1, 0xa0, 0x79, 0x98, 0xb7, 0xd9, 0xab, 0x57, 0xf3, 0x7e, 0xa3, 0x6b, 0x0b, 0x3a, 0xab, - 0xc0, 0x65, 0xe3, 0xf3, 0xe5, 0x84, 0x0c, 0xcf, 0xde, 0xd6, 0x8c, 0xac, 0xd6, 0x8c, 0x7c, 0xac, - 0x19, 0x79, 0xde, 0xb0, 0xda, 0x6a, 0xc3, 0x6a, 0xef, 0x1b, 0x56, 0xbb, 0x3f, 0x58, 0xfe, 0x6e, - 0xc5, 0x3d, 0x59, 0x28, 0xc6, 0x4d, 0xff, 0xb7, 0xe7, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x89, - 0x10, 0x5a, 0x8e, 0xb5, 0x01, 0x00, 0x00, + // 440 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0x8a, 0x13, 0x31, + 0x18, 0xc7, 0x3b, 0x6c, 0xad, 0x1a, 0x11, 0xdd, 0xd9, 0x5d, 0x1c, 0x96, 0x32, 0x5b, 0x3c, 0x2d, + 0x1e, 0x66, 0x28, 0x82, 0x82, 0x07, 0x0f, 0xab, 0xeb, 0x49, 0x71, 0x2c, 0x0b, 0x82, 0x97, 0x90, + 0x4e, 0x3f, 0x4b, 0x68, 0x93, 0x2f, 0xfb, 0x25, 0xd3, 0xad, 0x6f, 0xe1, 0x23, 0xf8, 0x1e, 0xbe, + 0x80, 0xc7, 0x3d, 0x7a, 0x94, 0xf6, 0xe2, 0x63, 0x48, 0x92, 0xe9, 0xda, 0x82, 0x5e, 0x86, 0x30, + 0xbf, 0xff, 0x6f, 0xbe, 0x7f, 0x26, 0x61, 0xfd, 0x79, 0xa3, 0x80, 0x44, 0x29, 0x9a, 0x89, 0x74, + 0xe5, 0x62, 0x58, 0x1a, 0x41, 0x42, 0xd9, 0xc2, 0x10, 0x3a, 0x4c, 0x1f, 0x44, 0x5a, 0x04, 0x5a, + 0x2c, 0x86, 0xc7, 0xfb, 0x42, 0x49, 0x8d, 0x65, 0x78, 0xc6, 0xcc, 0xf1, 0xe1, 0x14, 0xa7, 0x18, + 0x96, 0xa5, 0x5f, 0xc5, 0xb7, 0x8f, 0xbf, 0x77, 0x59, 0xaf, 0x0a, 0x9f, 0x4a, 0x9f, 0xb1, 0x47, + 0x04, 0x06, 0xc9, 0x49, 0x3d, 0xe5, 0x57, 0x52, 0x4f, 0xf0, 0x8a, 0x8f, 0xe7, 0x58, 0xcf, 0x6c, + 0x96, 0x0c, 0x92, 0xd3, 0xee, 0xe8, 0xe8, 0x06, 0x7f, 0x0c, 0xf4, 0x2c, 0xc0, 0xb4, 0x60, 0x07, + 0x06, 0x80, 0xf8, 0x65, 0x83, 0xd4, 0x28, 0x1e, 0x43, 0x36, 0xdb, 0x1b, 0x24, 0xa7, 0xf7, 0x47, + 0xfb, 0x1e, 0x7d, 0x08, 0x64, 0x14, 0x41, 0xfa, 0x92, 0xf5, 0x95, 0xd4, 0xdc, 0x10, 0x8e, 0x81, + 0x3b, 0x41, 0x53, 0x70, 0x96, 0x1b, 0xa0, 0x76, 0x66, 0xd6, 0x0d, 0x62, 0xa6, 0xa4, 0xae, 0x7c, + 0xe4, 0x22, 0x26, 0x2a, 0xa0, 0x38, 0x35, 0xf8, 0x62, 0xf9, 0x7f, 0xff, 0x56, 0xeb, 0x8b, 0xe5, + 0xbf, 0xfd, 0x82, 0x1d, 0x10, 0x5c, 0x36, 0x92, 0x60, 0xc2, 0xd1, 0x80, 0xe6, 0xb1, 0x6f, 0x6f, + 0xb0, 0xe7, 0xfb, 0x6e, 0xd0, 0x7b, 0x03, 0xba, 0x0a, 0x7d, 0x4b, 0x76, 0xe8, 0xfb, 0xd6, 0xa6, + 0xe1, 0x9f, 0x09, 0xc0, 0x8f, 0xaa, 0x41, 0xbb, 0xec, 0x76, 0xdc, 0xa0, 0x92, 0xfa, 0x95, 0x69, + 0xde, 0x10, 0x40, 0x15, 0xc1, 0x46, 0x50, 0xa0, 0x76, 0x85, 0x3b, 0x37, 0xc2, 0x3b, 0x50, 0xdb, + 0xc2, 0x90, 0x1d, 0x79, 0x61, 0x22, 0xed, 0x6c, 0xd7, 0xb8, 0x1b, 0x8c, 0x54, 0x49, 0xfd, 0x5a, + 0xda, 0xd9, 0xb6, 0x72, 0xce, 0x4e, 0x6a, 0xd4, 0x16, 0xea, 0xc6, 0xc9, 0x05, 0xb4, 0x5b, 0xb7, + 0xdc, 0x21, 0x37, 0x68, 0x9d, 0x41, 0x0d, 0x19, 0x0b, 0x72, 0x7f, 0x2b, 0x16, 0x7f, 0x80, 0xbd, + 0xc0, 0xaa, 0xcd, 0xa4, 0xcf, 0x59, 0x36, 0x03, 0x30, 0x7c, 0x2e, 0xac, 0xdb, 0x9c, 0x39, 0x68, + 0x47, 0x12, 0x6c, 0x76, 0x2f, 0x1e, 0xba, 0xe7, 0x6f, 0x85, 0x75, 0x51, 0x3e, 0x8f, 0xf0, 0x45, + 0xf7, 0xf7, 0xb7, 0x93, 0xe4, 0xec, 0xc9, 0x8f, 0x55, 0x9e, 0x5c, 0xaf, 0xf2, 0xe4, 0xd7, 0x2a, + 0x4f, 0xbe, 0xae, 0xf3, 0xce, 0xf5, 0x3a, 0xef, 0xfc, 0x5c, 0xe7, 0x9d, 0x4f, 0x0f, 0x97, 0x7f, + 0xaf, 0xaa, 0xfb, 0x62, 0xc0, 0x8e, 0x7b, 0xe1, 0xc2, 0x3d, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, + 0xc3, 0x4a, 0x6d, 0xab, 0xca, 0x02, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -170,6 +225,21 @@ func (this *Params) Equal(that interface{}) bool { return false } } + if this.MinCpuFreePercent != that1.MinCpuFreePercent { + return false + } + if this.MinMemFreePercent != that1.MinMemFreePercent { + return false + } + if this.MinDiskFreePercent != that1.MinDiskFreePercent { + return false + } + if this.ConsecutiveWindowsToPostpone != that1.ConsecutiveWindowsToPostpone { + return false + } + if this.KeepLastWindowEntries != that1.KeepLastWindowEntries { + return false + } return true } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -192,6 +262,31 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.KeepLastWindowEntries != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.KeepLastWindowEntries)) + i-- + dAtA[i] = 0x58 + } + if m.ConsecutiveWindowsToPostpone != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ConsecutiveWindowsToPostpone)) + i-- + dAtA[i] = 0x50 + } + if m.MinDiskFreePercent != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MinDiskFreePercent)) + i-- + dAtA[i] = 0x48 + } + if m.MinMemFreePercent != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MinMemFreePercent)) + i-- + dAtA[i] = 0x40 + } + if m.MinCpuFreePercent != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MinCpuFreePercent)) + i-- + dAtA[i] = 0x38 + } if len(m.RequiredOpenPorts) > 0 { dAtA2 := make([]byte, len(m.RequiredOpenPorts)*10) var j1 int @@ -269,6 +364,21 @@ func (m *Params) Size() (n int) { } n += 1 + sovParams(uint64(l)) + l } + if m.MinCpuFreePercent != 0 { + n += 1 + sovParams(uint64(m.MinCpuFreePercent)) + } + if m.MinMemFreePercent != 0 { + n += 1 + sovParams(uint64(m.MinMemFreePercent)) + } + if m.MinDiskFreePercent != 0 { + n += 1 + sovParams(uint64(m.MinDiskFreePercent)) + } + if m.ConsecutiveWindowsToPostpone != 0 { + n += 1 + sovParams(uint64(m.ConsecutiveWindowsToPostpone)) + } + if m.KeepLastWindowEntries != 0 { + n += 1 + sovParams(uint64(m.KeepLastWindowEntries)) + } return n } @@ -459,6 +569,101 @@ func (m *Params) Unmarshal(dAtA []byte) error { } else { return fmt.Errorf("proto: wrong wireType = %d for field RequiredOpenPorts", wireType) } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinCpuFreePercent", wireType) + } + m.MinCpuFreePercent = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinCpuFreePercent |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinMemFreePercent", wireType) + } + m.MinMemFreePercent = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinMemFreePercent |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinDiskFreePercent", wireType) + } + m.MinDiskFreePercent = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinDiskFreePercent |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsecutiveWindowsToPostpone", wireType) + } + m.ConsecutiveWindowsToPostpone = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ConsecutiveWindowsToPostpone |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field KeepLastWindowEntries", wireType) + } + m.KeepLastWindowEntries = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.KeepLastWindowEntries |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) From 13bc1fe3bc220820392329eeb0d000b2624adbca Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 28 Jan 2026 20:56:57 +0500 Subject: [PATCH 05/18] Add tests, reduce noise in CI test runner, Update CHNAGELOG --- AuditSpec.md | 83 +- docs/static/openapi.yml | 2 +- proto/lumera/audit/v1/query.proto | 34 + .../audit_host_requirements_bypass_test.go | 88 ++ ...udit_host_requirements_enforcement_test.go | 90 ++ .../audit_missing_report_enforcement_test.go | 44 +- ...udit_peer_observation_completeness_test.go | 47 + .../audit_peer_ports_enforcement_test.go | 91 ++ ...audit_postponed_reporter_self_only_test.go | 96 ++ .../audit_recovery_enforcement_test.go | 104 ++ .../audit_submit_and_query_test.go | 34 +- tests/systemtests/audit_test_helpers_test.go | 14 + tests/systemtests/get_top_supernodes_test.go | 2 +- tests/systemtests/register_supernode_test.go | 34 +- .../supernode_metrics_staleness_test.go | 2 +- tests/systemtests/supernode_metrics_test.go | 2 +- tests/systemtests/supernode_params_test.go | 2 +- x/audit/v1/POSTPONEMENT_RULES.md | 64 +- x/audit/v1/README.md | 35 +- .../assignment/DETERMINISTIC_ASSIGNMENT.md | 5 +- x/audit/v1/keeper/enforcement.go | 139 +- x/audit/v1/keeper/msg_submit_audit_report.go | 13 +- x/audit/v1/keeper/query_assigned_targets.go | 63 + x/audit/v1/keeper/query_audit_report.go | 13 + .../keeper/query_audit_reports_by_reporter.go | 13 + x/audit/v1/keeper/query_self_reports.go | 11 +- x/audit/v1/keeper/query_supernode_reports.go | 5 +- x/audit/v1/keeper/query_window_snapshot.go | 25 + x/audit/v1/keeper/window.go | 35 +- x/audit/v1/keeper/window_state.go | 25 +- x/audit/v1/types/keys.go | 9 - x/audit/v1/types/query.pb.go | 1397 +++++++++++++++-- x/audit/v1/types/query.pb.gw.go | 220 +++ x/supernode/v1/keeper/abci.go | 8 +- x/supernode/v1/keeper/supernode.go | 27 + x/supernode/v1/mocks/expected_keepers_mock.go | 28 + x/supernode/v1/types/expected_keepers.go | 28 +- 37 files changed, 2551 insertions(+), 381 deletions(-) create mode 100644 tests/systemtests/audit_host_requirements_bypass_test.go create mode 100644 tests/systemtests/audit_host_requirements_enforcement_test.go create mode 100644 tests/systemtests/audit_peer_observation_completeness_test.go create mode 100644 tests/systemtests/audit_peer_ports_enforcement_test.go create mode 100644 tests/systemtests/audit_postponed_reporter_self_only_test.go create mode 100644 tests/systemtests/audit_recovery_enforcement_test.go create mode 100644 x/audit/v1/keeper/query_assigned_targets.go create mode 100644 x/audit/v1/keeper/query_window_snapshot.go diff --git a/AuditSpec.md b/AuditSpec.md index bd7ffba..b702a77 100644 --- a/AuditSpec.md +++ b/AuditSpec.md @@ -1,6 +1,6 @@ # Audit Module Specification (audit/v1) -This document specifies the `audit/v1` on-chain contract: protobuf shapes, windowing, snapshots, and report storage/query surfaces. +This document specifies the `audit/v1` on-chain contract: protobuf shapes, windowing, snapshots, report storage/query surfaces, and postpone/recovery behavior. ## Contents 1. Abstract @@ -11,7 +11,7 @@ This document specifies the `audit/v1` on-chain contract: protobuf shapes, windo 6. Messages (tx) 7. Queries 8. On-Chain State -9. Postponement and Recovery (Draft) +9. Postponement and Recovery 10. Out of Scope 11. Events @@ -19,7 +19,7 @@ This document specifies the `audit/v1` on-chain contract: protobuf shapes, windo ## 1. Abstract The Audit module (`x/audit/v1`) provides deterministic, window-based reporting for supernodes: -- ACTIVE supernodes submit one audit report per window, containing a self report and optional peer reachability observations. +- ACTIVE supernodes submit one audit report per window, containing a self report and (when they are a prober for the window) peer reachability observations for all assigned targets. - At the start of each window, the module persists a `WindowSnapshot` that serves as the minimal source-of-truth for the prober → targets mapping for that window. ## 2. Overview @@ -43,7 +43,9 @@ Assumption: - At the **first block of each window**, the chain writes a **window snapshot** that freezes, for that window: - the **prober → targets mapping** (`assignments`) - Each supernode can submit **at most one report per window**. A report is signed by the supernode account and stored under `supernode_account`. -- A report contains self metrics plus optional peer observations. Peer observations include port states aligned by index to `required_open_ports` (position `i` refers to the `i`th configured port). +- A report contains self metrics plus peer observations. Peer observations include port states aligned by index to `required_open_ports` (position `i` refers to the `i`th configured port). + - If the reporter is a prober for the window (i.e. appears in `WindowSnapshot.assignments`), peer observations must cover **all** assigned targets for that prober. + - If the reporter is not a prober for the window (e.g. `POSTPONED`), peer observations must be empty (self-report only). - A report is **accepted** only if: - the report targets the **current window_id** at the current height (window start through window end) - the reporter has not already submitted a report for that window @@ -212,7 +214,8 @@ message MsgSubmitAuditReport { On `MsgSubmitAuditReport`: 1) Reject if current height is outside the acceptance period for `window_id` (section 3.2). 2) Resolve reporter supernode from `supernode_account` via `x/supernode`; reject if not found. -3) Reject duplicates: at most one report per `(window_id, supernode_account)`. +3) If the reporter is a prober for the window (per `WindowSnapshot.assignments`), require peer observations for **all** assigned targets. +4) Reject duplicates: at most one report per `(window_id, supernode_account)`. ## 7. Queries ```protobuf @@ -220,6 +223,9 @@ service Query { rpc Params(QueryParamsRequest) returns (QueryParamsResponse); rpc CurrentWindow(QueryCurrentWindowRequest) returns (QueryCurrentWindowResponse); + rpc WindowSnapshot(QueryWindowSnapshotRequest) returns (QueryWindowSnapshotResponse); + rpc AssignedTargets(QueryAssignedTargetsRequest) returns (QueryAssignedTargetsResponse); + rpc AuditReport(QueryAuditReportRequest) returns (QueryAuditReportResponse); rpc AuditReportsByReporter(QueryAuditReportsByReporterRequest) returns (QueryAuditReportsByReporterResponse); @@ -237,6 +243,21 @@ message QueryCurrentWindowResponse { int64 window_end_height = 3; } +message QueryWindowSnapshotRequest { uint64 window_id = 1; } +message QueryWindowSnapshotResponse { WindowSnapshot snapshot = 1; } + +message QueryAssignedTargetsRequest { + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + bool filter_by_window_id = 3; +} +message QueryAssignedTargetsResponse { + uint64 window_id = 1; + int64 window_start_height = 2; + repeated uint32 required_open_ports = 3; + repeated string target_supernode_accounts = 4 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; +} + message QueryAuditReportRequest { uint64 window_id = 1; string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; @@ -245,13 +266,18 @@ message QueryAuditReportResponse { AuditReport report = 1 [(gogoproto.nullable) message QueryAuditReportsByReporterRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - // pagination omitted in this spec; implementations may add pagination. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} +message QueryAuditReportsByReporterResponse { + repeated AuditReport reports = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryAuditReportsByReporterResponse { repeated AuditReport reports = 1; } message QuerySupernodeReportsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - // pagination omitted in this spec; implementations may add pagination. + uint64 window_id = 2; + cosmos.base.query.v1beta1.PageRequest pagination = 3; + bool filter_by_window_id = 4; } message SupernodeReport { @@ -261,11 +287,16 @@ message SupernodeReport { repeated PortState port_states = 4; } -message QuerySupernodeReportsResponse { repeated SupernodeReport reports = 1; } +message QuerySupernodeReportsResponse { + repeated SupernodeReport reports = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} message QuerySelfReportsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - // pagination omitted in this spec; implementations may add pagination. + uint64 window_id = 2; + cosmos.base.query.v1beta1.PageRequest pagination = 3; + bool filter_by_window_id = 4; } message SelfReport { @@ -274,7 +305,10 @@ message SelfReport { AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; } -message QuerySelfReportsResponse { repeated SelfReport reports = 1; } +message QuerySelfReportsResponse { + repeated SelfReport reports = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} ``` ## 8. On-Chain State @@ -287,10 +321,11 @@ This section describes the minimum state persisted by the module: State growth considerations: - State must remain bounded. The module MAY prune per-window state (`WindowSnapshot`, `AuditReport`) for any `window_id` once the acceptance period for that window has ended (section 3.2). - Current implementation note: pruning is implemented at window end and keeps the last `keep_last_window_entries` windows of window-scoped state. + - Operational note: `keep_last_window_entries` should be >= `consecutive_windows_to_postpone` so missing-report and peer-port rules always have enough history available. -## 9. Postponement and Recovery (Draft) +## 9. Postponement and Recovery -This section defines draft rules to set a supernode to `POSTPONED` (and recover to `ACTIVE`) based on audit reports. +This section defines the rules used to set a supernode to `POSTPONED` (and recover to `ACTIVE`) based on audit reports. Important note: - Peer-observation assignment/gating is enforced **when `MsgSubmitAuditReport` is accepted**. Enforcement later assumes only gated observations are stored. @@ -300,7 +335,7 @@ Important note: Inputs: - `AuditSelfReport.cpu_usage_percent`, `mem_usage_percent`, `disk_usage_percent` -Planned params: +Params: - `min_cpu_free_percent` - `min_mem_free_percent` - `min_disk_free_percent` @@ -316,7 +351,7 @@ Unknown special case: Rule: - If any known free% is below its minimum, set the supernode to `POSTPONED`. -Non-rules (for now): +Non-rules: - Ignore `failed_actions_count`. - Ignore `inbound_port_states` (self inbound traffic is not reachability). @@ -325,24 +360,30 @@ Non-rules (for now): Inputs: - Peer observations for required ports (index-aligned to `required_open_ports`). -Planned param: +Param: - `consecutive_windows_to_postpone` (default `1`) Per window `W` and required port index `i`, “port i is closed for target T in window W” is true only if: -- there are at least **2** distinct peer reporters about `T` in `W`, and +- there is at least **1** peer reporter about `T` in `W`, and - **all** those peer reporters report `PORT_STATE_CLOSED` for port index `i` for `T`. Rule: - If any required port index `i` is closed for `consecutive_windows_to_postpone` consecutive windows, set `T` to `POSTPONED`. -### 9.3 Recovery (POSTPONED -> ACTIVE) +### 9.3 Missing report based postponement + +Param: +- `consecutive_windows_to_postpone` (default `1`) + +Rule: +- If a supernode in state `ACTIVE` fails to submit any `MsgSubmitAuditReport` for `consecutive_windows_to_postpone` consecutive windows, set it to `POSTPONED`. + +### 9.4 Recovery (POSTPONED -> ACTIVE) Rule: - A `POSTPONED` supernode becomes `ACTIVE` after, in a single window: - one compliant self report (meets host requirements; treating 0 values as unknown), and - - one compliant peer report, meaning: - - at least **2** distinct peer reporters about the target in that window, and - - for each required port index `i`, all those peer reporters report `PORT_STATE_OPEN`. + - at least **1** peer report about the target in that window where all required ports are `PORT_STATE_OPEN`. ## 10. Out of Scope This specification does not define economic penalties (e.g. slashing, jailing, rewards) for audit reports in its current scope. diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index 5e9075e..2461282 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1 +1 @@ -{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_report/{window_id}/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReport","parameters":[{"type":"string","format":"uint64","name":"window_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_window":{"get":{"tags":["Query"],"summary":"CurrentWindow returns the current derived window boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentWindow","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentWindowResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin11","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SelfReports returns self-reports submitted by the given supernode_account across windows.","operationId":"GithubComLumeraProtocollumeraQuery_SelfReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySelfReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SupernodeReports returns all reports that include observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_SupernodeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySupernodeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin16","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin21","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin29","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the x/auth module\nparameters. The authority defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","operationId":"FeegrantMsg_Exec","parameters":[{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Grant":{"post":{"tags":["Msg"],"summary":"Grant grants the provided authorization to the grantee on the granter's\naccount with the provided expiration time. If there is already a grant\nfor the given (granter, grantee, Authorization) triple, then the grant\nwill be overwritten.","operationId":"FeegrantMsg_Grant","parameters":[{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Revoke":{"post":{"tags":["Msg"],"summary":"Revoke revokes any authorization corresponding to the provided method name on the\ngranter's account that has been granted to the grantee.","operationId":"FeegrantMsg_Revoke","parameters":[{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.autocli.v1.Query/AppOptions":{"post":{"tags":["Query"],"summary":"AppOptions returns the autocli options for all of the modules in an app.","operationId":"FeegrantQuery_AppOptions","parameters":[{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/MultiSend":{"post":{"tags":["Msg"],"summary":"MultiSend defines a method for sending coins from some accounts to other accounts.","operationId":"FeegrantMsg_MultiSend","parameters":[{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method for sending coins from one account to another account.","operationId":"FeegrantMsg_Send","parameters":[{"description":"MsgSend represents a message to send coins from one account to another.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/SetSendEnabled":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"SetSendEnabled is a governance operation for setting the SendEnabled flag\non any number of Denoms. Only the entries to add or update should be\nincluded. Entries that already exist in the store, but that aren't\nincluded in this message, will be left unchanged.","operationId":"FeegrantMsg_SetSendEnabled","parameters":[{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabled"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin50","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/AuthorizeCircuitBreaker":{"post":{"tags":["Msg"],"summary":"AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another\naccount's circuit breaker permissions.","operationId":"FeegrantMsg_AuthorizeCircuitBreaker","parameters":[{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/ResetCircuitBreaker":{"post":{"tags":["Msg"],"summary":"ResetCircuitBreaker resumes processing of Msg's in the state machine that\nhave been been paused using TripCircuitBreaker.","operationId":"FeegrantMsg_ResetCircuitBreaker","parameters":[{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/TripCircuitBreaker":{"post":{"tags":["Msg"],"summary":"TripCircuitBreaker pauses processing of Msg's in the state machine.","operationId":"FeegrantMsg_TripCircuitBreaker","parameters":[{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.consensus.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin63","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin65","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/VerifyInvariant":{"post":{"tags":["Msg"],"summary":"VerifyInvariant defines a method to verify a particular invariant.","operationId":"FeegrantMsg_VerifyInvariant","parameters":[{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/distribution module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"FeegrantMsg_CommunityPoolSpend","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/DepositValidatorRewardsPool":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"FeegrantMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"FeegrantMsg_FundCommunityPool","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress":{"post":{"tags":["Msg"],"summary":"SetWithdrawAddress defines a method to change the withdraw address\nfor a delegator (or validator self-delegation).","operationId":"FeegrantMsg_SetWithdrawAddress","parameters":[{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin76","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward":{"post":{"tags":["Msg"],"summary":"WithdrawDelegatorReward defines a method to withdraw rewards of delegator\nfrom a single validator.","operationId":"FeegrantMsg_WithdrawDelegatorReward","parameters":[{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission":{"post":{"tags":["Msg"],"summary":"WithdrawValidatorCommission defines a method to withdraw the\nfull commission to the validator address.","operationId":"FeegrantMsg_WithdrawValidatorCommission","parameters":[{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evidence.v1beta1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or\ncounterfactual signing.","operationId":"FeegrantMsg_SubmitEvidence","parameters":[{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/GrantAllowance":{"post":{"tags":["Msg"],"summary":"GrantAllowance grants fee allowance to the grantee on the granter's\naccount with the provided expiration time.","operationId":"FeegrantMsg_GrantAllowance","parameters":[{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/PruneAllowances":{"post":{"description":"Since cosmos-sdk 0.50","tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"FeegrantMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowances"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/RevokeAllowance":{"post":{"tags":["Msg"],"summary":"RevokeAllowance revokes any fee allowance of granter's account that\nhas been granted to the grantee.","operationId":"FeegrantMsg_RevokeAllowance","parameters":[{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/CancelProposal":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"FeegrantMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"FeegrantMsg_Deposit","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/ExecLegacyContent":{"post":{"tags":["Msg"],"summary":"ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal\nto execute a legacy content-based proposal.","operationId":"FeegrantMsg_ExecLegacyContent","parameters":[{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContent"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given the messages.","operationId":"FeegrantMsg_SubmitProposal","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"FeegrantMsg_UpdateParamsMixin89","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"FeegrantMsg_Vote","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"FeegrantMsg_VoteWeighted","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"FeegrantMsg_DepositMixin93","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given a content.","operationId":"FeegrantMsg_SubmitProposalMixin93","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"FeegrantMsg_VoteMixin93","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/VoteWeighted":{"post":{"description":"Since: cosmos-sdk 0.43","tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"FeegrantMsg_VoteWeightedMixin93","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroup":{"post":{"tags":["Msg"],"summary":"CreateGroup creates a new group with an admin account address, a list of members and some optional metadata.","operationId":"FeegrantMsg_CreateGroup","parameters":[{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupPolicy creates a new group policy using given DecisionPolicy.","operationId":"FeegrantMsg_CreateGroupPolicy","parameters":[{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupWithPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupWithPolicy creates a new group with policy.","operationId":"FeegrantMsg_CreateGroupWithPolicy","parameters":[{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec executes a proposal.","operationId":"FeegrantMsg_ExecMixin97","parameters":[{"description":"MsgExec is the Msg/Exec request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/LeaveGroup":{"post":{"tags":["Msg"],"summary":"LeaveGroup allows a group member to leave the group.","operationId":"FeegrantMsg_LeaveGroup","parameters":[{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal submits a new proposal.","operationId":"FeegrantMsg_SubmitProposalMixin97","parameters":[{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupAdmin updates the group admin with given group id and previous admin address.","operationId":"FeegrantMsg_UpdateGroupAdmin","parameters":[{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMembers":{"post":{"tags":["Msg"],"summary":"UpdateGroupMembers updates the group members with given group id and admin address.","operationId":"FeegrantMsg_UpdateGroupMembers","parameters":[{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembers"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupMetadata updates the group metadata with given group id and admin address.","operationId":"FeegrantMsg_UpdateGroupMetadata","parameters":[{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyAdmin updates a group policy admin.","operationId":"FeegrantMsg_UpdateGroupPolicyAdmin","parameters":[{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyDecisionPolicy":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated.","operationId":"FeegrantMsg_UpdateGroupPolicyDecisionPolicy","parameters":[{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyMetadata updates a group policy metadata.","operationId":"FeegrantMsg_UpdateGroupPolicyMetadata","parameters":[{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote allows a voter to vote on a proposal.","operationId":"FeegrantMsg_VoteMixin97","parameters":[{"description":"MsgVote is the Msg/Vote request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/WithdrawProposal":{"post":{"tags":["Msg"],"summary":"WithdrawProposal withdraws a proposal.","operationId":"FeegrantMsg_WithdrawProposal","parameters":[{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.mint.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/mint module\nparameters. The authority is defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParamsMixin102","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.nft.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method to send a nft from one account to another account.","operationId":"FeegrantMsg_SendMixin108","parameters":[{"description":"MsgSend represents a message to send a nft from one account to another account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/Unjail":{"post":{"tags":["Msg"],"summary":"Unjail defines a method for unjailing a jailed validator, thus returning\nthem into the bonded validator set, so they can begin receiving provisions\nand rewards again.","operationId":"FeegrantMsg_Unjail","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjail"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjailResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/slashing module\nparameters. The authority defaults to the x/gov module account.","operationId":"FeegrantMsg_UpdateParamsMixin115","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/BeginRedelegate":{"post":{"tags":["Msg"],"summary":"BeginRedelegate defines a method for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","operationId":"FeegrantMsg_BeginRedelegate","parameters":[{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"FeegrantMsg_CancelUnbondingDelegation","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegation"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CreateValidator":{"post":{"tags":["Msg"],"summary":"CreateValidator defines a method for creating a new validator.","operationId":"FeegrantMsg_CreateValidator","parameters":[{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Delegate":{"post":{"tags":["Msg"],"summary":"Delegate defines a method for performing a delegation of coins\nfrom a delegator to a validator.","operationId":"FeegrantMsg_Delegate","parameters":[{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/EditValidator":{"post":{"tags":["Msg"],"summary":"EditValidator defines a method for editing an existing validator.","operationId":"FeegrantMsg_EditValidator","parameters":[{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Undelegate":{"post":{"tags":["Msg"],"summary":"Undelegate defines a method for performing an undelegation from a\ndelegate and a validator.","operationId":"FeegrantMsg_Undelegate","parameters":[{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines an operation for updating the x/staking module\nparameters.\nSince: cosmos-sdk 0.47","operationId":"FeegrantMsg_UpdateParamsMixin120","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenCommit":{"post":{"tags":["ABCIListenerService"],"summary":"ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit","operationId":"FeegrantABCIListenerService_ListenCommit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenFinalizeBlock":{"post":{"tags":["ABCIListenerService"],"summary":"ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock","operationId":"FeegrantABCIListenerService_ListenFinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/CancelUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"FeegrantMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"FeegrantMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"FeegrantMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"FeegrantMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreateVestingAccount":{"post":{"tags":["Msg"],"summary":"CreateVestingAccount defines a method that enables creating a vesting\naccount.","operationId":"FeegrantMsg_CreateVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/account_info/{address}":{"get":{"description":"Since: cosmos-sdk 0.47","tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"FeegrantQuery_AccountInfo","parameters":[{"type":"string","description":"address is the account address string.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.43","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"FeegrantQuery_Accounts","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account details based on address.","operationId":"FeegrantQuery_Account","parameters":[{"type":"string","description":"address defines the address to query for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/address_by_id/{id}":{"get":{"description":"Since: cosmos-sdk 0.46.2","tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"FeegrantQuery_AccountAddressByID","parameters":[{"type":"string","format":"int64","description":"Deprecated, use account_id instead\n\nid is the account number of the address to be queried. This field\nshould have been an uint64 (like all account numbers), and will be\nupdated to uint64 in a future version of the auth query.","name":"id","in":"path","required":true},{"type":"string","format":"uint64","description":"account_id is the account number of the address to be queried.\n\nSince: cosmos-sdk 0.47","name":"account_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountAddressByIDResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"FeegrantQuery_Bech32Prefix","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.Bech32PrefixResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_bytes}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"FeegrantQuery_AddressBytesToString","parameters":[{"type":"string","format":"byte","name":"address_bytes","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressBytesToStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_string}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"FeegrantQuery_AddressStringToBytes","parameters":[{"type":"string","name":"address_string","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressStringToBytesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"FeegrantQuery_ModuleAccounts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts/{name}":{"get":{"tags":["Query"],"summary":"ModuleAccountByName returns the module account info by module name","operationId":"FeegrantQuery_ModuleAccountByName","parameters":[{"type":"string","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountByNameResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters.","operationId":"FeegrantQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants":{"get":{"tags":["Query"],"summary":"Returns list of `Authorization`, granted to the grantee by the granter.","operationId":"FeegrantQuery_Grants","parameters":[{"type":"string","name":"granter","in":"query"},{"type":"string","name":"grantee","in":"query"},{"type":"string","description":"Optional, msg_type_url, when set, will query only grants matching given msg type.","name":"msg_type_url","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/grantee/{grantee}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"FeegrantQuery_GranteeGrants","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranteeGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/granter/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"FeegrantQuery_GranterGrants","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranterGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"AllBalances queries the balance of all coins for a single account.","operationId":"FeegrantQuery_AllBalances","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"boolean","description":"resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.\n\nSince: cosmos-sdk 0.50","name":"resolve_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryAllBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}/by_denom":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a single coin for a single account.","operationId":"FeegrantQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners/{denom}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"FeegrantQuery_DenomOwners","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners_by_query":{"get":{"description":"Since: cosmos-sdk 0.50.3","tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"FeegrantQuery_DenomOwnersByQuery","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata":{"get":{"tags":["Query"],"summary":"DenomsMetadata queries the client metadata for all registered coin\ndenominations.","operationId":"FeegrantQuery_DenomsMetadata","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomsMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata/{denom}":{"get":{"tags":["Query"],"summary":"DenomMetadata queries the client metadata of a given coin denomination.","operationId":"FeegrantQuery_DenomMetadata","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata_by_query_string":{"get":{"tags":["Query"],"summary":"DenomMetadataByQueryString queries the client metadata of a given coin denomination.","operationId":"FeegrantQuery_DenomMetadataByQueryString","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/bank module.","operationId":"FeegrantQuery_ParamsMixin49","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/send_enabled":{"get":{"description":"This query only returns denominations that have specific SendEnabled settings.\nAny denomination that does not have a specific setting will use the default\nparams.default_send_enabled, and will not be returned by this query.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"FeegrantQuery_SendEnabled","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"denoms is the specific denoms you want look up. Leave empty to get all entries.","name":"denoms","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"FeegrantQuery_SpendableBalances","parameters":[{"type":"string","description":"address is the address to query spendable balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"FeegrantQuery_SpendableBalanceByDenom","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"TotalSupply queries the total supply of all coins.","operationId":"FeegrantQuery_TotalSupply","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryTotalSupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SupplyOf queries the supply of a single coin.","operationId":"FeegrantQuery_SupplyOf","parameters":[{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySupplyOfResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/config":{"get":{"tags":["Service"],"summary":"Config queries for the operator configuration.","operationId":"FeegrantService_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.ConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/status":{"get":{"tags":["Service"],"summary":"Status queries for the node status.","operationId":"FeegrantService_Status","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.StatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/authn":{"get":{"tags":["ReflectionService"],"summary":"GetAuthnDescriptor returns information on how to authenticate transactions in the application\nNOTE: this RPC is still experimental and might be subject to breaking changes or removal in\nfuture releases of the cosmos-sdk.","operationId":"FeegrantReflectionService_GetAuthnDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/chain":{"get":{"tags":["ReflectionService"],"summary":"GetChainDescriptor returns the description of the chain","operationId":"FeegrantReflectionService_GetChainDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/codec":{"get":{"tags":["ReflectionService"],"summary":"GetCodecDescriptor returns the descriptor of the codec of the application","operationId":"FeegrantReflectionService_GetCodecDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/configuration":{"get":{"tags":["ReflectionService"],"summary":"GetConfigurationDescriptor returns the descriptor for the sdk.Config of the application","operationId":"FeegrantReflectionService_GetConfigurationDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/query_services":{"get":{"tags":["ReflectionService"],"summary":"GetQueryServicesDescriptor returns the available gRPC queryable services of the application","operationId":"FeegrantReflectionService_GetQueryServicesDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/tx_descriptor":{"get":{"tags":["ReflectionService"],"summary":"GetTxDescriptor returns information on the used transaction object and available msgs that can be used","operationId":"FeegrantReflectionService_GetTxDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces":{"get":{"tags":["ReflectionService"],"summary":"ListAllInterfaces lists all the interfaces registered in the interface\nregistry.","operationId":"FeegrantReflectionService_ListAllInterfaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListAllInterfacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces/{interface_name}/implementations":{"get":{"tags":["ReflectionService"],"summary":"ListImplementations list all the concrete types that implement a given\ninterface.","operationId":"FeegrantReflectionService_ListImplementations","parameters":[{"type":"string","description":"interface_name defines the interface to query the implementations for.","name":"interface_name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListImplementationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/abci_query":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Service"],"summary":"ABCIQuery defines a query handler that supports ABCI queries directly to the\napplication, bypassing Tendermint completely. The ABCI query must contain\na valid and supported path, including app, custom, p2p, and store.","operationId":"FeegrantService_ABCIQuery","parameters":[{"type":"string","format":"byte","name":"data","in":"query"},{"type":"string","name":"path","in":"query"},{"type":"string","format":"int64","name":"height","in":"query"},{"type":"boolean","name":"prove","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ABCIQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/latest":{"get":{"tags":["Service"],"summary":"GetLatestBlock returns the latest block.","operationId":"FeegrantService_GetLatestBlock","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/{height}":{"get":{"tags":["Service"],"summary":"GetBlockByHeight queries block for given height.","operationId":"FeegrantService_GetBlockByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/node_info":{"get":{"tags":["Service"],"summary":"GetNodeInfo queries the current node info.","operationId":"FeegrantService_GetNodeInfo","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetNodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/syncing":{"get":{"tags":["Service"],"summary":"GetSyncing queries node syncing.","operationId":"FeegrantService_GetSyncing","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetSyncingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/latest":{"get":{"tags":["Service"],"summary":"GetLatestValidatorSet queries latest validator-set.","operationId":"FeegrantService_GetLatestValidatorSet","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/{height}":{"get":{"tags":["Service"],"summary":"GetValidatorSetByHeight queries validator-set at a given height.","operationId":"FeegrantService_GetValidatorSetByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"FeegrantQuery_AccountsMixin59","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"FeegrantQuery_AccountMixin59","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/disable_list":{"get":{"tags":["Query"],"summary":"DisabledList returns a list of disabled message urls","operationId":"FeegrantQuery_DisabledList","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.DisabledListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/consensus/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/consensus module.","operationId":"FeegrantQuery_ParamsMixin62","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"FeegrantQuery_CommunityPool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards":{"get":{"tags":["Query"],"summary":"DelegationTotalRewards queries the total rewards accrued by each\nvalidator.","operationId":"FeegrantQuery_DelegationTotalRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}":{"get":{"tags":["Query"],"summary":"DelegationRewards queries the total rewards accrued by a delegation.","operationId":"FeegrantQuery_DelegationRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true},{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators":{"get":{"tags":["Query"],"summary":"DelegatorValidators queries the validators of a delegator.","operationId":"FeegrantQuery_DelegatorValidators","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address":{"get":{"tags":["Query"],"summary":"DelegatorWithdrawAddress queries withdraw address of a delegator.","operationId":"FeegrantQuery_DelegatorWithdrawAddress","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries params of the distribution module.","operationId":"FeegrantQuery_ParamsMixin75","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}":{"get":{"tags":["Query"],"summary":"ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator","operationId":"FeegrantQuery_ValidatorDistributionInfo","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/commission":{"get":{"tags":["Query"],"summary":"ValidatorCommission queries accumulated commission for a validator.","operationId":"FeegrantQuery_ValidatorCommission","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards":{"get":{"tags":["Query"],"summary":"ValidatorOutstandingRewards queries rewards of a validator address.","operationId":"FeegrantQuery_ValidatorOutstandingRewards","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes":{"get":{"tags":["Query"],"summary":"ValidatorSlashes queries slash events of a validator.","operationId":"FeegrantQuery_ValidatorSlashes","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true},{"type":"string","format":"uint64","description":"starting_height defines the optional starting height to query the slashes.","name":"starting_height","in":"query"},{"type":"string","format":"uint64","description":"starting_height defines the optional ending height to query the slashes.","name":"ending_height","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorSlashesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence":{"get":{"tags":["Query"],"summary":"AllEvidence queries all evidence.","operationId":"FeegrantQuery_AllEvidence","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryAllEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence/{hash}":{"get":{"tags":["Query"],"summary":"Evidence queries evidence based on evidence hash.","operationId":"FeegrantQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.\n\nSince: cosmos-sdk 0.47","name":"hash","in":"path","required":true},{"type":"string","format":"byte","description":"evidence_hash defines the hash of the requested evidence.\nDeprecated: Use hash, a HEX encoded string, instead.","name":"evidence_hash","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}":{"get":{"tags":["Query"],"summary":"Allowance returns granted allwance to the grantee by the granter.","operationId":"FeegrantQuery_Allowance","parameters":[{"type":"string","description":"granter is the address of the user granting an allowance of their funds.","name":"granter","in":"path","required":true},{"type":"string","description":"grantee is the address of the user being granted an allowance of another user's funds.","name":"grantee","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowances/{grantee}":{"get":{"tags":["Query"],"summary":"Allowances returns all the grants for the given grantee address.","operationId":"FeegrantQuery_Allowances","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/issued/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"FeegrantQuery_AllowancesByGranter","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/constitution":{"get":{"tags":["Query"],"summary":"Constitution queries the chain's constitution.","operationId":"FeegrantQuery_Constitution","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryConstitutionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"FeegrantQuery_ParamsMixin88","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"FeegrantQuery_Proposals","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"FeegrantQuery_Proposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"FeegrantQuery_Deposits","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositAddr.","operationId":"FeegrantQuery_Deposit","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"FeegrantQuery_TallyResult","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"FeegrantQuery_Votes","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"FeegrantQuery_Vote","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"FeegrantQuery_ParamsMixin92","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"FeegrantQuery_ProposalsMixin92","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"FeegrantQuery_ProposalMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"FeegrantQuery_DepositsMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositor address.","operationId":"FeegrantQuery_DepositMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"FeegrantQuery_TallyResultMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"FeegrantQuery_VotesMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"FeegrantQuery_VoteMixin92","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_info/{group_id}":{"get":{"tags":["Query"],"summary":"GroupInfo queries group info based on group id.","operationId":"FeegrantQuery_GroupInfo","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_members/{group_id}":{"get":{"tags":["Query"],"summary":"GroupMembers queries members of a group by group id.","operationId":"FeegrantQuery_GroupMembers","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByAdmin queries group policies by admin address.","operationId":"FeegrantQuery_GroupPoliciesByAdmin","parameters":[{"type":"string","description":"admin is the admin address of the group policy.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_group/{group_id}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByGroup queries group policies by group id.","operationId":"FeegrantQuery_GroupPoliciesByGroup","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group policy's group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policy_info/{address}":{"get":{"tags":["Query"],"summary":"GroupPolicyInfo queries group policy info based on account address of group policy.","operationId":"FeegrantQuery_GroupPolicyInfo","parameters":[{"type":"string","description":"address is the account address of the group policy.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPolicyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups":{"get":{"description":"Since: cosmos-sdk 0.47.1","tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"FeegrantQuery_Groups","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupsByAdmin queries groups by admin address.","operationId":"FeegrantQuery_GroupsByAdmin","parameters":[{"type":"string","description":"admin is the account address of a group's admin.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_member/{address}":{"get":{"tags":["Query"],"summary":"GroupsByMember queries groups by member address.","operationId":"FeegrantQuery_GroupsByMember","parameters":[{"type":"string","description":"address is the group member address.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByMemberResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries a proposal based on proposal id.","operationId":"FeegrantQuery_ProposalMixin96","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult returns the tally result of a proposal. If the proposal is\nstill in voting period, then this query computes the current tally state,\nwhich might not be final. On the other hand, if the proposal is final,\nthen it simply returns the `final_tally_result` state stored in the\nproposal itself.","operationId":"FeegrantQuery_TallyResultMixin96","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique id of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals_by_group_policy/{address}":{"get":{"tags":["Query"],"summary":"ProposalsByGroupPolicy queries proposals based on account address of group policy.","operationId":"FeegrantQuery_ProposalsByGroupPolicy","parameters":[{"type":"string","description":"address is the account address of the group policy related to proposals.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalsByGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}":{"get":{"tags":["Query"],"summary":"VoteByProposalVoter queries a vote by proposal id and voter.","operationId":"FeegrantQuery_VoteByProposalVoter","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVoteByProposalVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"VotesByProposal queries a vote by proposal id.","operationId":"FeegrantQuery_VotesByProposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_voter/{voter}":{"get":{"tags":["Query"],"summary":"VotesByVoter queries a vote by voter.","operationId":"FeegrantQuery_VotesByVoter","parameters":[{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/annual_provisions":{"get":{"tags":["Query"],"summary":"AnnualProvisions current minting annual provisions value.","operationId":"FeegrantQuery_AnnualProvisions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryAnnualProvisionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/inflation":{"get":{"tags":["Query"],"summary":"Inflation returns the current minting inflation value.","operationId":"FeegrantQuery_Inflation","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryInflationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of minting parameters.","operationId":"FeegrantQuery_ParamsMixin101","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/balance/{owner}/{class_id}":{"get":{"tags":["Query"],"summary":"Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721","operationId":"FeegrantQuery_BalanceMixin107","parameters":[{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"path","required":true},{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes":{"get":{"tags":["Query"],"summary":"Classes queries all NFT classes","operationId":"FeegrantQuery_Classes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes/{class_id}":{"get":{"tags":["Query"],"summary":"Class queries an NFT class based on its id","operationId":"FeegrantQuery_Class","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts":{"get":{"tags":["Query"],"summary":"NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in\nERC721Enumerable","operationId":"FeegrantQuery_NFTs","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"query"},{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"NFT queries an NFT based on its class and id.","operationId":"FeegrantQuery_NFT","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/owner/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721","operationId":"FeegrantQuery_Owner","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryOwnerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/supply/{class_id}":{"get":{"tags":["Query"],"summary":"Supply queries the number of NFTs from the given class, same as totalSupply of ERC721.","operationId":"FeegrantQuery_Supply","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QuerySupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries a specific parameter of a module, given its subspace and\nkey.","operationId":"FeegrantQuery_ParamsMixin110","parameters":[{"type":"string","description":"subspace defines the module to query the parameter for.","name":"subspace","in":"query"},{"type":"string","description":"key defines the key of the parameter in the subspace.","name":"key","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/subspaces":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"FeegrantQuery_Subspaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QuerySubspacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of slashing module","operationId":"FeegrantQuery_ParamsMixin113","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos":{"get":{"tags":["Query"],"summary":"SigningInfos queries signing info of all validators","operationId":"FeegrantQuery_SigningInfos","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos/{cons_address}":{"get":{"tags":["Query"],"summary":"SigningInfo queries the signing info of given cons address","operationId":"FeegrantQuery_SigningInfo","parameters":[{"type":"string","description":"cons_address is the address to query signing info of","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegations/{delegator_addr}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorDelegations queries all delegations of a given delegator address.","operationId":"FeegrantQuery_DelegatorDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Redelegations queries redelegations of given address.","operationId":"FeegrantQuery_Redelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"src_validator_addr defines the validator address to redelegate from.","name":"src_validator_addr","in":"query"},{"type":"string","description":"dst_validator_addr defines the validator address to redelegate to.","name":"dst_validator_addr","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryRedelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorUnbondingDelegations queries all unbonding delegations of a given\ndelegator address.","operationId":"FeegrantQuery_DelegatorUnbondingDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorValidators queries all validators info for given delegator\naddress.","operationId":"FeegrantQuery_DelegatorValidatorsMixin118","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"DelegatorValidator queries validator info for given delegator validator\npair.","operationId":"FeegrantQuery_DelegatorValidator","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/historical_info/{height}":{"get":{"tags":["Query"],"summary":"HistoricalInfo queries the historical info for given height.","operationId":"FeegrantQuery_HistoricalInfo","parameters":[{"type":"string","format":"int64","description":"height defines at which height to query the historical info.","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryHistoricalInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the staking parameters.","operationId":"FeegrantQuery_ParamsMixin118","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/pool":{"get":{"tags":["Query"],"summary":"Pool queries the pool info.","operationId":"FeegrantQuery_Pool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Validators queries all validators that match the given status.","operationId":"FeegrantQuery_Validators","parameters":[{"type":"string","description":"status enables to query for validators matching a given status.","name":"status","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"Validator queries validator info for given validator address.","operationId":"FeegrantQuery_Validator","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorDelegations queries delegate info for given validator.","operationId":"FeegrantQuery_ValidatorDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}":{"get":{"tags":["Query"],"summary":"Delegation queries delegate info for given validator delegator pair.","operationId":"FeegrantQuery_Delegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation":{"get":{"tags":["Query"],"summary":"UnbondingDelegation queries unbonding info for given validator delegator\npair.","operationId":"FeegrantQuery_UnbondingDelegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorUnbondingDelegations queries unbonding delegations of a validator.","operationId":"FeegrantQuery_ValidatorUnbondingDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"FeegrantService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"FeegrantService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"FeegrantService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"FeegrantService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/simulate":{"post":{"tags":["Service"],"summary":"Simulate simulates executing a transaction for estimating gas usage.","operationId":"FeegrantService_Simulate","parameters":[{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs":{"get":{"tags":["Service"],"summary":"GetTxsEvent fetches txs by event.","operationId":"FeegrantService_GetTxsEvent","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"events is the list of transaction event type.\nDeprecated post v0.47.x: use query instead, which should contain a valid\nevents query.","name":"events","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"],"type":"string","default":"ORDER_BY_UNSPECIFIED","description":" - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","name":"order_by","in":"query"},{"type":"string","format":"uint64","description":"page is the page number to query, starts at 1. If not provided, will\ndefault to first page.","name":"page","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"limit","in":"query"},{"type":"string","description":"query defines the transaction event query that is proxied to Tendermint's\nTxSearch RPC method. The query must be valid.\n\nSince cosmos-sdk 0.50","name":"query","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}},"post":{"tags":["Service"],"summary":"BroadcastTx broadcast transaction.","operationId":"FeegrantService_BroadcastTx","parameters":[{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/block/{height}":{"get":{"description":"Since: cosmos-sdk 0.45.2","tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"FeegrantService_GetBlockWithTxs","parameters":[{"type":"string","format":"int64","description":"height is the height of the block to query.","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetBlockWithTxsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/{hash}":{"get":{"tags":["Service"],"summary":"GetTx fetches a tx by hash.","operationId":"FeegrantService_GetTx","parameters":[{"type":"string","description":"hash is the tx hash to query, encoded as a hex string.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/applied_plan/{name}":{"get":{"tags":["Query"],"summary":"AppliedPlan queries a previously applied upgrade plan by its name.","operationId":"FeegrantQuery_AppliedPlan","parameters":[{"type":"string","description":"name is the name of the applied plan to query for.","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAppliedPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/authority":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"FeegrantQuery_Authority","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAuthorityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/current_plan":{"get":{"tags":["Query"],"summary":"CurrentPlan queries the current upgrade plan.","operationId":"FeegrantQuery_CurrentPlan","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryCurrentPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/module_versions":{"get":{"description":"Since: cosmos-sdk 0.43","tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"FeegrantQuery_ModuleVersions","parameters":[{"type":"string","description":"module_name is a field to query a specific module\nconsensus version from state. Leaving this empty will\nfetch the full list of module versions from state","name":"module_name","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryModuleVersionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries the consensus state that will serve\nas a trusted kernel for the next version of this chain. It will only be\nstored at the last height of this chain.\nUpgradedConsensusState RPC not supported with legacy querier\nThis rpc is deprecated now that IBC has its own replacement\n(https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)","operationId":"FeegrantQuery_UpgradedConsensusState","parameters":[{"type":"string","format":"int64","description":"last height of the current chain must be sent in request\nas this is the height under which next consensus state is stored","name":"last_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/AddCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"AddCodeUploadParamsAddresses defines a governance operation for\nadding addresses to code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_AddCodeUploadParamsAddresses","parameters":[{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ClearAdmin":{"post":{"tags":["Msg"],"summary":"ClearAdmin removes any admin stored for a smart contract","operationId":"WasmMsg_ClearAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ExecuteContract":{"post":{"tags":["Msg"],"summary":"Execute submits the given message data to a smart contract","operationId":"WasmMsg_ExecuteContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract":{"post":{"tags":["Msg"],"summary":"InstantiateContract creates a new smart contract instance for the given\n code id.","operationId":"WasmMsg_InstantiateContract","parameters":[{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract2":{"post":{"tags":["Msg"],"summary":"InstantiateContract2 creates a new smart contract instance for the given\n code id with a predictable address","operationId":"WasmMsg_InstantiateContract2","parameters":[{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"Migrate runs a code upgrade/ downgrade for a smart contract","operationId":"WasmMsg_MigrateContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/PinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"PinCodes defines a governance operation for pinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_PinCodes","parameters":[{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/RemoveCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"RemoveCodeUploadParamsAddresses defines a governance operation for\nremoving addresses from code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_RemoveCodeUploadParamsAddresses","parameters":[{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndInstantiateContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"StoreAndInstantiateContract defines a governance operation for storing\nand instantiating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndInstantiateContract","parameters":[{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndMigrateContract":{"post":{"description":"Since: 0.42","tags":["Msg"],"summary":"StoreAndMigrateContract defines a governance operation for storing\nand migrating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndMigrateContract","parameters":[{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode to submit Wasm code to the system","operationId":"WasmMsg_StoreCode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/SudoContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"SudoContract defines a governance operation for calling sudo\non a contract. The authority is defined in the keeper.","operationId":"WasmMsg_SudoContract","parameters":[{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UnpinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UnpinCodes defines a governance operation for unpinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_UnpinCodes","parameters":[{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateAdmin":{"post":{"tags":["Msg"],"summary":"UpdateAdmin sets a new admin for a smart contract","operationId":"WasmMsg_UpdateAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateContractLabel":{"post":{"description":"Since: 0.43","tags":["Msg"],"summary":"UpdateContractLabel sets a new label for a smart contract","operationId":"WasmMsg_UpdateContractLabel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateInstantiateConfig":{"post":{"tags":["Msg"],"summary":"UpdateInstantiateConfig updates instantiate config for a smart contract","operationId":"WasmMsg_UpdateInstantiateConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateParams":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/wasm\nmodule parameters. The authority is defined in the keeper.","operationId":"WasmMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code":{"get":{"tags":["Query"],"summary":"Codes gets the metadata for all stored wasm codes","operationId":"WasmQuery_Codes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code-info/{code_id}":{"get":{"tags":["Query"],"summary":"CodeInfo gets the metadata for a single wasm code","operationId":"WasmQuery_CodeInfo","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}":{"get":{"tags":["Query"],"summary":"Code gets the binary code and metadata for a single wasm code","operationId":"WasmQuery_Code","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}/contracts":{"get":{"tags":["Query"],"summary":"ContractsByCode lists all smart contracts for a code id","operationId":"WasmQuery_ContractsByCode","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/params":{"get":{"tags":["Query"],"summary":"Params gets the module params","operationId":"WasmQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/pinned":{"get":{"tags":["Query"],"summary":"PinnedCodes gets the pinned code ids","operationId":"WasmQuery_PinnedCodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryPinnedCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/build_address":{"get":{"tags":["Query"],"summary":"BuildAddress builds a contract address","operationId":"WasmQuery_BuildAddress","parameters":[{"type":"string","description":"CodeHash is the hash of the code","name":"code_hash","in":"query"},{"type":"string","description":"CreatorAddress is the address of the contract instantiator","name":"creator_address","in":"query"},{"type":"string","description":"Salt is a hex encoded salt","name":"salt","in":"query"},{"type":"string","format":"byte","description":"InitArgs are optional json encoded init args to be used in contract address\nbuilding if provided","name":"init_args","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryBuildAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}":{"get":{"tags":["Query"],"summary":"ContractInfo gets the contract meta data","operationId":"WasmQuery_ContractInfo","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/history":{"get":{"tags":["Query"],"summary":"ContractHistory gets the contract code history","operationId":"WasmQuery_ContractHistory","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractHistoryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}":{"get":{"tags":["Query"],"summary":"RawContractState gets single key from the raw store data of a contract","operationId":"WasmQuery_RawContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryRawContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}":{"get":{"tags":["Query"],"summary":"SmartContractState get smart query result from the contract","operationId":"WasmQuery_SmartContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"QueryData contains the query data passed to the contract","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QuerySmartContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/state":{"get":{"tags":["Query"],"summary":"AllContractState gets all raw store data for a single contract","operationId":"WasmQuery_AllContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryAllContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contracts/creator/{creator_address}":{"get":{"tags":["Query"],"summary":"ContractsByCreator gets the contracts by creator","operationId":"WasmQuery_ContractsByCreator","parameters":[{"type":"string","description":"CreatorAddress is the address of contract creator","name":"creator_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/wasm-limits-config":{"get":{"tags":["Query"],"summary":"WasmLimitsConfig gets the configured limits for static validation of Wasm\nfiles, encoded in JSON.","operationId":"WasmQuery_WasmLimitsConfig","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/RegisterInterchainAccount":{"post":{"tags":["Msg"],"summary":"RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount.","operationId":"ControllerMsg_RegisterInterchainAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/SendTx":{"post":{"tags":["Msg"],"summary":"SendTx defines a rpc handler for MsgSendTx.","operationId":"ControllerMsg_SendTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/ModuleQuerySafe":{"post":{"tags":["Msg"],"summary":"ModuleQuerySafe defines a rpc handler for MsgModuleQuerySafe.","operationId":"ControllerMsg_ModuleQuerySafe","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin157","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/Transfer":{"post":{"tags":["Msg"],"summary":"Transfer defines a rpc handler method for MsgTransfer.","operationId":"ControllerMsg_Transfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin168","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_Acknowledgement","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseConfirm":{"post":{"tags":["Msg"],"summary":"ChannelCloseConfirm defines a rpc handler method for\nMsgChannelCloseConfirm.","operationId":"ControllerMsg_ChannelCloseConfirm","parameters":[{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseInit":{"post":{"tags":["Msg"],"summary":"ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit.","operationId":"ControllerMsg_ChannelCloseInit","parameters":[{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenAck":{"post":{"tags":["Msg"],"summary":"ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck.","operationId":"ControllerMsg_ChannelOpenAck","parameters":[{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenConfirm":{"post":{"tags":["Msg"],"summary":"ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm.","operationId":"ControllerMsg_ChannelOpenConfirm","parameters":[{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenInit":{"post":{"tags":["Msg"],"summary":"ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit.","operationId":"ControllerMsg_ChannelOpenInit","parameters":[{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenTry":{"post":{"tags":["Msg"],"summary":"ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry.","operationId":"ControllerMsg_ChannelOpenTry","parameters":[{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacket","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_Timeout","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/TimeoutOnClose":{"post":{"tags":["Msg"],"summary":"TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose.","operationId":"ControllerMsg_TimeoutOnClose","parameters":[{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnCloseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_AcknowledgementMixin176","parameters":[{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacketMixin176","parameters":[{"description":"MsgRecvPacket receives an incoming IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/SendPacket":{"post":{"tags":["Msg"],"summary":"SendPacket defines a rpc handler method for MsgSendPacket.","operationId":"ControllerMsg_SendPacket","parameters":[{"description":"MsgSendPacket sends an outgoing IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_TimeoutMixin176","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/CreateClient":{"post":{"tags":["Msg"],"summary":"CreateClient defines a rpc handler method for MsgCreateClient.","operationId":"ControllerMsg_CreateClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/DeleteClientCreator":{"post":{"tags":["Msg"],"summary":"DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator.","operationId":"ControllerMsg_DeleteClientCreator","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/IBCSoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade.","operationId":"ControllerMsg_IBCSoftwareUpgrade","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/RecoverClient":{"post":{"tags":["Msg"],"summary":"RecoverClient defines a rpc handler method for MsgRecoverClient.","operationId":"ControllerMsg_RecoverClient","parameters":[{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/SubmitMisbehaviour":{"post":{"tags":["Msg"],"summary":"SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.","operationId":"ControllerMsg_SubmitMisbehaviour","parameters":[{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviour"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviourResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClient":{"post":{"tags":["Msg"],"summary":"UpdateClient defines a rpc handler method for MsgUpdateClient.","operationId":"ControllerMsg_UpdateClient","parameters":[{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClientParams":{"post":{"tags":["Msg"],"summary":"UpdateClientParams defines a rpc handler method for MsgUpdateParams.","operationId":"ControllerMsg_UpdateClientParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpgradeClient":{"post":{"tags":["Msg"],"summary":"UpgradeClient defines a rpc handler method for MsgUpgradeClient.","operationId":"ControllerMsg_UpgradeClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/RegisterCounterparty":{"post":{"tags":["Msg"],"summary":"RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty.","operationId":"ControllerMsg_RegisterCounterparty","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterparty"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterpartyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/UpdateClientConfig":{"post":{"tags":["Msg"],"summary":"UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig.","operationId":"ControllerMsg_UpdateClientConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenAck":{"post":{"tags":["Msg"],"summary":"ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck.","operationId":"ControllerMsg_ConnectionOpenAck","parameters":[{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenConfirm":{"post":{"tags":["Msg"],"summary":"ConnectionOpenConfirm defines a rpc handler method for\nMsgConnectionOpenConfirm.","operationId":"ControllerMsg_ConnectionOpenConfirm","parameters":[{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenInit":{"post":{"tags":["Msg"],"summary":"ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit.","operationId":"ControllerMsg_ConnectionOpenInit","parameters":[{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenTry":{"post":{"tags":["Msg"],"summary":"ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry.","operationId":"ControllerMsg_ConnectionOpenTry","parameters":[{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/UpdateConnectionParams":{"post":{"tags":["Msg"],"summary":"UpdateConnectionParams defines a rpc handler method for\nMsgUpdateParams.","operationId":"ControllerMsg_UpdateConnectionParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"MigrateContract defines a rpc handler method for MsgMigrateContract.","operationId":"ControllerMsg_MigrateContract","parameters":[{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/RemoveChecksum":{"post":{"tags":["Msg"],"summary":"RemoveChecksum defines a rpc handler method for MsgRemoveChecksum.","operationId":"ControllerMsg_RemoveChecksum","parameters":[{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode defines a rpc handler method for MsgStoreCode.","operationId":"ControllerMsg_StoreCode","parameters":[{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"InterchainAccount returns the interchain account address for a given owner address on a given connection","operationId":"ControllerQuery_InterchainAccount","parameters":[{"type":"string","name":"owner","in":"path","required":true},{"type":"string","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA controller submodule.","operationId":"ControllerQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/host/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA host submodule.","operationId":"ControllerQuery_ParamsMixin156","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address":{"get":{"tags":["Query"],"summary":"EscrowAddress returns the escrow address for a particular port and channel id.","operationId":"ControllerQuery_EscrowAddress","parameters":[{"type":"string","description":"unique channel identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"unique port identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryEscrowAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denom_hashes/{trace}":{"get":{"tags":["Query"],"summary":"DenomHash queries a denomination hash information.","operationId":"ControllerQuery_DenomHash","parameters":[{"pattern":".+","type":"string","description":"The denomination trace ([port_id]/[channel_id])+/[denom]","name":"trace","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomHashResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms":{"get":{"tags":["Query"],"summary":"Denoms queries all denominations","operationId":"ControllerQuery_Denoms","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms/{hash}":{"get":{"tags":["Query"],"summary":"Denom queries a denomination","operationId":"ControllerQuery_Denom","parameters":[{"pattern":".+","type":"string","description":"hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ibc-transfer module.","operationId":"ControllerQuery_ParamsMixin165","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/total_escrow/{denom}":{"get":{"tags":["Query"],"summary":"TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.","operationId":"ControllerQuery_TotalEscrowForDenom","parameters":[{"pattern":".+","type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels":{"get":{"tags":["Query"],"summary":"Channels queries all the IBC channels of a chain.","operationId":"ControllerQuery_Channels","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}":{"get":{"tags":["Query"],"summary":"Channel queries an IBC Channel.","operationId":"ControllerQuery_Channel","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state":{"get":{"tags":["Query"],"summary":"ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.","operationId":"ControllerQuery_ChannelClientState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ChannelConsensusState queries for the consensus state for the channel\nassociated with the provided channel identifiers.","operationId":"ControllerQuery_ChannelConsensusState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"revision number of the consensus state","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"revision height of the consensus state","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence":{"get":{"tags":["Query"],"summary":"NextSequenceReceive returns the next receive sequence for a given channel.","operationId":"ControllerQuery_NextSequenceReceive","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceReceiveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSend","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all the packet acknowledgements associated\nwith a channel.","operationId":"ControllerQuery_PacketAcknowledgements","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored packet acknowledgement hash.","operationId":"ControllerQuery_PacketAcknowledgement","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments returns all the packet commitments hashes associated\nwith a channel.","operationId":"ControllerQuery_PacketCommitments","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated\nwith a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcks","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a\nchannel and sequences.","operationId":"ControllerQuery_UnreceivedPackets","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"packet_commitment_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitment","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries if a given packet sequence has been received on the\nqueried chain","operationId":"ControllerQuery_PacketReceipt","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/connections/{connection}/channels":{"get":{"tags":["Query"],"summary":"ConnectionChannels queries all the channels associated with a connection\nend.","operationId":"ControllerQuery_ConnectionChannels","parameters":[{"type":"string","description":"connection unique identifier","name":"connection","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryConnectionChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSendMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all packet acknowledgements associated with a channel.","operationId":"ControllerQuery_PacketAcknowledgementsMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored acknowledgement commitment hash.","operationId":"ControllerQuery_PacketAcknowledgementMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentsMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcksMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedPacketsMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries a stored packet receipt.","operationId":"ControllerQuery_PacketReceiptMixin175","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_creator/{client_id}":{"get":{"tags":["Query"],"summary":"ClientCreator queries the creator of a given client.","operationId":"ControllerQuery_ClientCreator","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states":{"get":{"tags":["Query"],"summary":"ClientStates queries all the IBC light clients of a chain.","operationId":"ControllerQuery_ClientStates","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states/{client_id}":{"get":{"tags":["Query"],"summary":"ClientState queries an IBC light client.","operationId":"ControllerQuery_ClientState","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_status/{client_id}":{"get":{"tags":["Query"],"summary":"Status queries the status of an IBC client.","operationId":"ControllerQuery_ClientStatus","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}":{"get":{"tags":["Query"],"summary":"ConsensusStates queries all the consensus state associated with a given\nclient.","operationId":"ControllerQuery_ConsensusStates","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/heights":{"get":{"tags":["Query"],"summary":"ConsensusStateHeights queries the height of every consensus states associated with a given client.","operationId":"ControllerQuery_ConsensusStateHeights","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateHeightsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConsensusState queries a consensus state associated with a client state at\na given height.","operationId":"ControllerQuery_ConsensusState","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision number","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision height","name":"revision_height","in":"path","required":true},{"type":"boolean","description":"latest_height overrides the height field and queries the latest stored\nConsensusState","name":"latest_height","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/params":{"get":{"tags":["Query"],"summary":"ClientParams queries all parameters of the ibc client submodule.","operationId":"ControllerQuery_ClientParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_client_states":{"get":{"tags":["Query"],"summary":"UpgradedClientState queries an Upgraded IBC light client.","operationId":"ControllerQuery_UpgradedClientState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_consensus_states":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries an Upgraded IBC consensus state.","operationId":"ControllerQuery_UpgradedConsensusState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/verify_membership":{"post":{"tags":["Query"],"summary":"VerifyMembership queries an IBC light client for proof verification of a value at a given key path.","operationId":"ControllerQuery_VerifyMembership","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/config/{client_id}":{"get":{"tags":["Query"],"summary":"Config queries the IBC client v2 configuration for a given client.","operationId":"ControllerQuery_Config","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/counterparty_info/{client_id}":{"get":{"tags":["Query"],"summary":"CounterpartyInfo queries an IBC light counter party info.","operationId":"ControllerQuery_CounterpartyInfo","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryCounterpartyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/client_connections/{client_id}":{"get":{"tags":["Query"],"summary":"ClientConnections queries the connection paths associated with a client\nstate.","operationId":"ControllerQuery_ClientConnections","parameters":[{"type":"string","description":"client identifier associated with a connection","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryClientConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections":{"get":{"tags":["Query"],"summary":"Connections queries all the IBC connections of a chain.","operationId":"ControllerQuery_Connections","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"Connection queries an IBC connection end.","operationId":"ControllerQuery_Connection","parameters":[{"type":"string","description":"connection unique identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/client_state":{"get":{"tags":["Query"],"summary":"ConnectionClientState queries the client state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionClientState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConnectionConsensusState queries the consensus state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionConsensusState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/params":{"get":{"tags":["Query"],"summary":"ConnectionParams queries all parameters of the ibc connection submodule.","operationId":"ControllerQuery_ConnectionParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums":{"get":{"tags":["Query"],"summary":"Get all Wasm checksums","operationId":"ControllerQuery_Checksums","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryChecksumsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums/{checksum}/code":{"get":{"tags":["Query"],"summary":"Get Wasm code for given checksum","operationId":"ControllerQuery_Code","parameters":[{"type":"string","description":"checksum is a hex encoded string of the code stored.","name":"checksum","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitAuditReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitAuditReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin12","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin17","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin22","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin33","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ApplySnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestApplySnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/CheckTx":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_CheckTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCheckTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCheckTx"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Commit":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Commit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCommit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Echo":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Echo","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestEcho"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseEcho"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ExtendVote":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ExtendVote","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestExtendVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseExtendVote"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/FinalizeBlock":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_FinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Flush":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Flush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFlush"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFlush"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Info":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Info","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInfo"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInfo"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/InitChain":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_InitChain","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInitChain"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInitChain"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ListSnapshots":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ListSnapshots","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestListSnapshots"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseListSnapshots"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/LoadSnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_LoadSnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestLoadSnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseLoadSnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/OfferSnapshot":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_OfferSnapshot","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestOfferSnapshot"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/PrepareProposal":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_PrepareProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestPrepareProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponsePrepareProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ProcessProposal":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_ProcessProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestProcessProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Query":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_Query","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestQuery"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseQuery"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/VerifyVoteExtension":{"post":{"tags":["ABCI"],"operationId":"FeegrantABCI_VerifyVoteExtension","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestVerifyVoteExtension"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.auth.v1beta1.AddressBytesToStringResponse":{"description":"AddressBytesToStringResponse is the response type for AddressString rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_bytes":{"type":"string","format":"byte"}}},"cosmos.auth.v1beta1.BaseAccount":{"description":"BaseAccount defines a base account type. It contains all the necessary fields\nfor basic account functionality. Any custom account type should extend this\ntype for additional functionality (e.g. vesting).","type":"object","properties":{"account_number":{"type":"string","format":"uint64"},"address":{"type":"string"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"sequence":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.Bech32PrefixResponse":{"description":"Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/auth parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.auth.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.auth.v1beta1.Params":{"description":"Params defines the parameters for the auth module.","type":"object","properties":{"max_memo_characters":{"type":"string","format":"uint64"},"sig_verify_cost_ed25519":{"type":"string","format":"uint64"},"sig_verify_cost_secp256k1":{"type":"string","format":"uint64"},"tx_sig_limit":{"type":"string","format":"uint64"},"tx_size_cost_per_byte":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.QueryAccountAddressByIDResponse":{"description":"Since: cosmos-sdk 0.46.2","type":"object","title":"QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method","properties":{"account_address":{"type":"string"}}},"cosmos.auth.v1beta1.QueryAccountInfoResponse":{"description":"QueryAccountInfoResponse is the Query/AccountInfo response type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"info":{"description":"info is the account info which is represented by BaseAccount.","$ref":"#/definitions/cosmos.auth.v1beta1.BaseAccount"}}},"cosmos.auth.v1beta1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"account":{"description":"account defines the account of the corresponding address.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryAccountsResponse":{"description":"QueryAccountsResponse is the response type for the Query/Accounts RPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"accounts":{"type":"array","title":"accounts are the existing accounts","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.auth.v1beta1.QueryModuleAccountByNameResponse":{"description":"QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method.","type":"object","properties":{"account":{"$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryModuleAccountsResponse":{"description":"QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.auth.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.authz.v1beta1.Grant":{"description":"Grant gives permissions to execute\nthe provide method with expiration time.","type":"object","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time","title":"time when the grant will expire and will be pruned. If null, then the grant\ndoesn't have a time expiration (other conditions in `authorization`\nmay apply to invalidate the grant)"}}},"cosmos.authz.v1beta1.GrantAuthorization":{"type":"object","title":"GrantAuthorization extends a grant with both the addresses of the grantee and granter.\nIt is used in genesis.proto and query.proto","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgExec":{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","type":"object","properties":{"grantee":{"type":"string"},"msgs":{"description":"Execute Msg.\nThe x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg))\ntriple and validate it.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.authz.v1beta1.MsgExecResponse":{"description":"MsgExecResponse defines the Msg/MsgExecResponse response type.","type":"object","properties":{"results":{"type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.authz.v1beta1.MsgGrant":{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","type":"object","properties":{"grant":{"$ref":"#/definitions/cosmos.authz.v1beta1.Grant"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgGrantResponse":{"description":"MsgGrantResponse defines the Msg/MsgGrant response type.","type":"object"},"cosmos.authz.v1beta1.MsgRevoke":{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","type":"object","properties":{"grantee":{"type":"string"},"granter":{"type":"string"},"msg_type_url":{"type":"string"}}},"cosmos.authz.v1beta1.MsgRevokeResponse":{"description":"MsgRevokeResponse defines the Msg/MsgRevokeResponse response type.","type":"object"},"cosmos.authz.v1beta1.QueryGranteeGrantsResponse":{"description":"QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted to the grantee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGranterGrantsResponse":{"description":"QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGrantsResponse":{"description":"QueryGrantsResponse is the response type for the Query/Authorizations RPC method.","type":"object","properties":{"grants":{"description":"authorizations is a list of grants granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.autocli.v1.AppOptionsRequest":{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","type":"object"},"cosmos.autocli.v1.AppOptionsResponse":{"description":"AppOptionsResponse is the RemoteInfoService/AppOptions response type.","type":"object","properties":{"module_options":{"description":"module_options is a map of module name to autocli module options.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ModuleOptions"}}}},"cosmos.autocli.v1.FlagOptions":{"description":"FlagOptions are options for flags generated from rpc request fields.\nBy default, all request fields are configured as flags based on the\nkebab-case name of the field. Fields can be turned into positional arguments\ninstead by using RpcCommandOptions.positional_args.","type":"object","properties":{"default_value":{"description":"default_value is the default value as text.","type":"string"},"deprecated":{"description":"deprecated is the usage text to show if this flag is deprecated.","type":"string"},"hidden":{"type":"boolean","title":"hidden hides the flag from help/usage text"},"name":{"description":"name is an alternate name to use for the field flag.","type":"string"},"shorthand":{"description":"shorthand is a one-letter abbreviated flag.","type":"string"},"shorthand_deprecated":{"description":"shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated.","type":"string"},"usage":{"description":"usage is the help message.","type":"string"}}},"cosmos.autocli.v1.ModuleOptions":{"description":"ModuleOptions describes the CLI options for a Cosmos SDK module.","type":"object","properties":{"query":{"description":"query describes the queries commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"},"tx":{"description":"tx describes the tx commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}},"cosmos.autocli.v1.PositionalArgDescriptor":{"description":"PositionalArgDescriptor describes a positional argument.","type":"object","properties":{"proto_field":{"description":"proto_field specifies the proto field to use as the positional arg. Any\nfields used as positional args will not have a flag generated.","type":"string"},"varargs":{"description":"varargs makes a positional parameter a varargs parameter. This can only be\napplied to last positional parameter and the proto_field must a repeated\nfield.","type":"boolean"}}},"cosmos.autocli.v1.RpcCommandOptions":{"description":"RpcCommandOptions specifies options for commands generated from protobuf\nrpc methods.","type":"object","properties":{"alias":{"description":"alias is an array of aliases that can be used instead of the first word in Use.","type":"array","items":{"type":"string"}},"deprecated":{"description":"deprecated defines, if this command is deprecated and should print this string when used.","type":"string"},"example":{"description":"example is examples of how to use the command.","type":"string"},"flag_options":{"description":"flag_options are options for flags generated from rpc request fields.\nBy default all request fields are configured as flags. They can\nalso be configured as positional args instead using positional_args.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.FlagOptions"}},"long":{"description":"long is the long message shown in the 'help \u003cthis-command\u003e' output.","type":"string"},"positional_args":{"description":"positional_args specifies positional arguments for the command.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.PositionalArgDescriptor"}},"rpc_method":{"description":"rpc_method is short name of the protobuf rpc method that this command is\ngenerated from.","type":"string"},"short":{"description":"short is the short description shown in the 'help' output.","type":"string"},"skip":{"description":"skip specifies whether to skip this rpc method when generating commands.","type":"boolean"},"suggest_for":{"description":"suggest_for is an array of command names for which this command will be suggested -\nsimilar to aliases but only suggests.","type":"array","items":{"type":"string"}},"use":{"description":"use is the one-line usage method. It also allows specifying an alternate\nname for the command as the first word of the usage text.\n\nBy default the name of an rpc command is the kebab-case short name of the\nrpc method.","type":"string"},"version":{"description":"version defines the version for this command. If this value is non-empty and the command does not\ndefine a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\nwill print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\ncommand does not define one.","type":"string"}}},"cosmos.autocli.v1.ServiceCommandDescriptor":{"description":"ServiceCommandDescriptor describes a CLI command based on a protobuf service.","type":"object","properties":{"rpc_command_options":{"description":"rpc_command_options are options for commands generated from rpc methods.\nIf no options are specified for a given rpc method on the service, a\ncommand will be generated for that method with the default options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.RpcCommandOptions"}},"service":{"description":"service is the fully qualified name of the protobuf service to build\nthe command from. It can be left empty if sub_commands are used instead\nwhich may be the case if a module provides multiple tx and/or query services.","type":"string"},"sub_commands":{"description":"sub_commands is a map of optional sub-commands for this command based on\ndifferent protobuf services. The map key is used as the name of the\nsub-command.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}}},"cosmos.bank.v1beta1.DenomOwner":{"description":"DenomOwner defines structure representing an account that owns or holds a\nparticular denominated token. It contains the account address and account\nbalance of the denominated token.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address":{"description":"address defines the address that owns a particular denomination.","type":"string"},"balance":{"description":"balance is the balance of the denominated coin for an account.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.DenomUnit":{"description":"DenomUnit represents a struct that describes a given\ndenomination unit of the basic token.","type":"object","properties":{"aliases":{"type":"array","title":"aliases is a list of string aliases for the given denom","items":{"type":"string"}},"denom":{"description":"denom represents the string name of the given denom unit (e.g uatom).","type":"string"},"exponent":{"description":"exponent represents power of 10 exponent that one must\nraise the base_denom to in order to equal the given DenomUnit's denom\n1 denom = 10^exponent base_denom\n(e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\nexponent = 6, thus: 1 atom = 10^6 uatom).","type":"integer","format":"int64"}}},"cosmos.bank.v1beta1.Input":{"description":"Input models transaction input.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Metadata":{"description":"Metadata represents a struct that describes\na basic token.","type":"object","properties":{"base":{"description":"base represents the base denom (should be the DenomUnit with exponent = 0).","type":"string"},"denom_units":{"type":"array","title":"denom_units represents the list of DenomUnit's for a given coin","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomUnit"}},"description":{"type":"string"},"display":{"description":"display indicates the suggested denom that should be\ndisplayed in clients.","type":"string"},"name":{"description":"Since: cosmos-sdk 0.43","type":"string","title":"name defines the name of the token (eg: Cosmos Atom)"},"symbol":{"description":"symbol is the token symbol usually shown on exchanges (eg: ATOM). This can\nbe the same as the display.\n\nSince: cosmos-sdk 0.43","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"},"uri_hash":{"description":"URIHash is a sha256 hash of a document pointed by URI. It's used to verify that\nthe document didn't change. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"}}},"cosmos.bank.v1beta1.MsgMultiSend":{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","type":"object","properties":{"inputs":{"description":"Inputs, despite being `repeated`, only allows one sender input. This is\nchecked in MsgMultiSend's ValidateBasic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Input"}},"outputs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Output"}}}},"cosmos.bank.v1beta1.MsgMultiSendResponse":{"description":"MsgMultiSendResponse defines the Msg/MultiSend response type.","type":"object"},"cosmos.bank.v1beta1.MsgSend":{"description":"MsgSend represents a message to send coins from one account to another.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.bank.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.bank.v1beta1.MsgSetSendEnabled":{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module.","type":"string"},"send_enabled":{"description":"send_enabled is the list of entries to add or update.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}},"use_default_for":{"description":"use_default_for is a list of denoms that should use the params.default_send_enabled value.\nDenoms listed here will have their SendEnabled entries deleted.\nIf a denom is included that doesn't have a SendEnabled entry,\nit will be ignored.","type":"array","items":{"type":"string"}}}},"cosmos.bank.v1beta1.MsgSetSendEnabledResponse":{"description":"MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/bank parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.Output":{"description":"Output models transaction outputs.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Params":{"description":"Params defines the parameters for the bank module.","type":"object","properties":{"default_send_enabled":{"type":"boolean"},"send_enabled":{"description":"Deprecated: Use of SendEnabled in params is deprecated.\nFor genesis, use the newly added send_enabled field in the genesis object.\nStorage, lookup, and manipulation of this information is now in the keeper.\n\nAs of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QueryAllBalancesResponse":{"description":"QueryAllBalancesResponse is the response type for the Query/AllBalances RPC\nmethod.","type":"object","properties":{"balances":{"description":"balances is the balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse":{"description":"QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC\nmethod. Identical with QueryDenomMetadataResponse but receives denom as query string in request.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomMetadataResponse":{"description":"QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC\nmethod.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse":{"description":"QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query.\n\nSince: cosmos-sdk 0.50.3","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomOwnersResponse":{"description":"QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomsMetadataResponse":{"description":"QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC\nmethod.","type":"object","properties":{"metadatas":{"description":"metadata provides the client information for all the registered tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/bank parameters.","type":"object","properties":{"params":{"description":"params provides the parameters of the bank module.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.QuerySendEnabledResponse":{"description":"QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response. This field is only\npopulated if the denoms field in the request is empty.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"send_enabled":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse":{"description":"QuerySpendableBalanceByDenomResponse defines the gRPC response structure for\nquerying an account's spendable balance for a specific denom.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QuerySpendableBalancesResponse":{"description":"QuerySpendableBalancesResponse defines the gRPC response structure for querying\nan account's spendable balances.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"balances":{"description":"balances is the spendable balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QuerySupplyOfResponse":{"description":"QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method.","type":"object","properties":{"amount":{"description":"amount is the supply of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryTotalSupplyResponse":{"type":"object","title":"QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC\nmethod","properties":{"pagination":{"description":"pagination defines the pagination in the response.\n\nSince: cosmos-sdk 0.43","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supply":{"type":"array","title":"supply is the supply of the coins","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.SendEnabled":{"description":"SendEnabled maps coin denom to a send_enabled status (whether a denom is\nsendable).","type":"object","properties":{"denom":{"type":"string"},"enabled":{"type":"boolean"}}},"cosmos.base.abci.v1beta1.ABCIMessageLog":{"description":"ABCIMessageLog defines a structure containing an indexed tx ABCI message log.","type":"object","properties":{"events":{"description":"Events contains a slice of Event objects that were emitted during some\nexecution.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.StringEvent"}},"log":{"type":"string"},"msg_index":{"type":"integer","format":"int64"}}},"cosmos.base.abci.v1beta1.Attribute":{"description":"Attribute defines an attribute wrapper where the key and value are\nstrings instead of raw bytes.","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"cosmos.base.abci.v1beta1.GasInfo":{"description":"GasInfo defines tx execution gas context.","type":"object","properties":{"gas_used":{"description":"GasUsed is the amount of gas actually consumed.","type":"string","format":"uint64"},"gas_wanted":{"description":"GasWanted is the maximum units of work we allow this tx to perform.","type":"string","format":"uint64"}}},"cosmos.base.abci.v1beta1.Result":{"description":"Result is the union of ResponseFormat and ResponseCheckTx.","type":"object","properties":{"data":{"description":"Data is any data returned from message or handler execution. It MUST be\nlength prefixed in order to separate data from multiple message executions.\nDeprecated. This field is still populated, but prefer msg_response instead\nbecause it also contains the Msg response typeURL.","type":"string","format":"byte"},"events":{"description":"Events contains a slice of Event objects that were emitted during message\nor handler execution.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"log":{"description":"Log contains the log information from message or handler execution.","type":"string"},"msg_responses":{"description":"msg_responses contains the Msg handler responses type packed in Anys.\n\nSince: cosmos-sdk 0.46","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.base.abci.v1beta1.StringEvent":{"description":"StringEvent defines en Event object wrapper where all the attributes\ncontain key/value pairs that are strings instead of raw bytes.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.Attribute"}},"type":{"type":"string"}}},"cosmos.base.abci.v1beta1.TxResponse":{"description":"TxResponse defines a structure containing relevant tx data and metadata. The\ntags are stringified and the log is JSON decoded.","type":"object","properties":{"code":{"description":"Response code.","type":"integer","format":"int64"},"codespace":{"type":"string","title":"Namespace for the Code"},"data":{"description":"Result bytes, if any.","type":"string"},"events":{"description":"Events defines all the events emitted by processing a transaction. Note,\nthese events include those emitted by processing all the messages and those\nemitted from the ante. Whereas Logs contains the events, with\nadditional metadata, emitted only by processing the messages.\n\nSince: cosmos-sdk 0.42.11, 0.44.5, 0.45","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"description":"Amount of gas consumed by transaction.","type":"string","format":"int64"},"gas_wanted":{"description":"Amount of gas requested for transaction.","type":"string","format":"int64"},"height":{"type":"string","format":"int64","title":"The block height"},"info":{"description":"Additional information. May be non-deterministic.","type":"string"},"logs":{"description":"The output of the application's logger (typed). May be non-deterministic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.ABCIMessageLog"}},"raw_log":{"description":"The output of the application's logger (raw string). May be\nnon-deterministic.","type":"string"},"timestamp":{"description":"Time of the previous block. For heights \u003e 1, it's the weighted median of\nthe timestamps of the valid votes in the block.LastCommit. For height == 1,\nit's genesis time.","type":"string"},"tx":{"description":"The request transaction bytes.","$ref":"#/definitions/google.protobuf.Any"},"txhash":{"description":"The transaction hash.","type":"string"}}},"cosmos.base.node.v1beta1.ConfigResponse":{"description":"ConfigResponse defines the response structure for the Config gRPC query.","type":"object","properties":{"halt_height":{"type":"string","format":"uint64"},"minimum_gas_price":{"type":"string"},"pruning_interval":{"type":"string"},"pruning_keep_recent":{"type":"string"}}},"cosmos.base.node.v1beta1.StatusResponse":{"description":"StateResponse defines the response structure for the status of a node.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"app hash of the current block"},"earliest_store_height":{"type":"string","format":"uint64","title":"earliest block height available in the store"},"height":{"type":"string","format":"uint64","title":"current block height"},"timestamp":{"type":"string","format":"date-time","title":"block height timestamp"},"validator_hash":{"type":"string","format":"byte","title":"validator hash provided by the consensus header"}}},"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.reflection.v1beta1.ListAllInterfacesResponse":{"description":"ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC.","type":"object","properties":{"interface_names":{"description":"interface_names is an array of all the registered interfaces.","type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v1beta1.ListImplementationsResponse":{"description":"ListImplementationsResponse is the response type of the ListImplementations\nRPC.","type":"object","properties":{"implementation_message_names":{"type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v2alpha1.AuthnDescriptor":{"type":"object","title":"AuthnDescriptor provides information on how to sign transactions without relying\non the online RPCs GetTxMetadata and CombineUnsignedTxAndSignatures","properties":{"sign_modes":{"type":"array","title":"sign_modes defines the supported signature algorithm","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.SigningModeDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ChainDescriptor":{"type":"object","title":"ChainDescriptor describes chain information of the application","properties":{"id":{"type":"string","title":"id is the chain id"}}},"cosmos.base.reflection.v2alpha1.CodecDescriptor":{"type":"object","title":"CodecDescriptor describes the registered interfaces and provides metadata information on the types","properties":{"interfaces":{"type":"array","title":"interfaces is a list of the registerted interfaces descriptors","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ConfigurationDescriptor":{"type":"object","title":"ConfigurationDescriptor contains metadata information on the sdk.Config","properties":{"bech32_account_address_prefix":{"type":"string","title":"bech32_account_address_prefix is the account address prefix"}}},"cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse":{"type":"object","title":"GetAuthnDescriptorResponse is the response returned by the GetAuthnDescriptor RPC","properties":{"authn":{"title":"authn describes how to authenticate to the application when sending transactions","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.AuthnDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse":{"type":"object","title":"GetChainDescriptorResponse is the response returned by the GetChainDescriptor RPC","properties":{"chain":{"title":"chain describes application chain information","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ChainDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse":{"type":"object","title":"GetCodecDescriptorResponse is the response returned by the GetCodecDescriptor RPC","properties":{"codec":{"title":"codec describes the application codec such as registered interfaces and implementations","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.CodecDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse":{"type":"object","title":"GetConfigurationDescriptorResponse is the response returned by the GetConfigurationDescriptor RPC","properties":{"config":{"title":"config describes the application's sdk.Config","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ConfigurationDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse":{"type":"object","title":"GetQueryServicesDescriptorResponse is the response returned by the GetQueryServicesDescriptor RPC","properties":{"queries":{"title":"queries provides information on the available queryable services","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServicesDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse":{"type":"object","title":"GetTxDescriptorResponse is the response returned by the GetTxDescriptor RPC","properties":{"tx":{"title":"tx provides information on msgs that can be forwarded to the application\nalongside the accepted transaction protobuf type","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.TxDescriptor"}}},"cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor":{"type":"object","title":"InterfaceAcceptingMessageDescriptor describes a protobuf message which contains\nan interface represented as a google.protobuf.Any","properties":{"field_descriptor_names":{"type":"array","title":"field_descriptor_names is a list of the protobuf name (not fullname) of the field\nwhich contains the interface as google.protobuf.Any (the interface is the same, but\nit can be in multiple fields of the same proto message)","items":{"type":"string"}},"fullname":{"type":"string","title":"fullname is the protobuf fullname of the type containing the interface"}}},"cosmos.base.reflection.v2alpha1.InterfaceDescriptor":{"type":"object","title":"InterfaceDescriptor describes the implementation of an interface","properties":{"fullname":{"type":"string","title":"fullname is the name of the interface"},"interface_accepting_messages":{"type":"array","title":"interface_accepting_messages contains information regarding the proto messages which contain the interface as\ngoogle.protobuf.Any field","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor"}},"interface_implementers":{"type":"array","title":"interface_implementers is a list of the descriptors of the interface implementers","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor"}}}},"cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor":{"type":"object","title":"InterfaceImplementerDescriptor describes an interface implementer","properties":{"fullname":{"type":"string","title":"fullname is the protobuf queryable name of the interface implementer"},"type_url":{"type":"string","title":"type_url defines the type URL used when marshalling the type as any\nthis is required so we can provide type safe google.protobuf.Any marshalling and\nunmarshalling, making sure that we don't accept just 'any' type\nin our interface fields"}}},"cosmos.base.reflection.v2alpha1.MsgDescriptor":{"type":"object","title":"MsgDescriptor describes a cosmos-sdk message that can be delivered with a transaction","properties":{"msg_type_url":{"description":"msg_type_url contains the TypeURL of a sdk.Msg.","type":"string"}}},"cosmos.base.reflection.v2alpha1.QueryMethodDescriptor":{"type":"object","title":"QueryMethodDescriptor describes a queryable method of a query service\nno other info is provided beside method name and tendermint queryable path\nbecause it would be redundant with the grpc reflection service","properties":{"full_query_path":{"type":"string","title":"full_query_path is the path that can be used to query\nthis method via tendermint abci.Query"},"name":{"type":"string","title":"name is the protobuf name (not fullname) of the method"}}},"cosmos.base.reflection.v2alpha1.QueryServiceDescriptor":{"type":"object","title":"QueryServiceDescriptor describes a cosmos-sdk queryable service","properties":{"fullname":{"type":"string","title":"fullname is the protobuf fullname of the service descriptor"},"is_module":{"type":"boolean","title":"is_module describes if this service is actually exposed by an application's module"},"methods":{"type":"array","title":"methods provides a list of query service methods","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryMethodDescriptor"}}}},"cosmos.base.reflection.v2alpha1.QueryServicesDescriptor":{"type":"object","title":"QueryServicesDescriptor contains the list of cosmos-sdk queriable services","properties":{"query_services":{"type":"array","title":"query_services is a list of cosmos-sdk QueryServiceDescriptor","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServiceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.SigningModeDescriptor":{"type":"object","title":"SigningModeDescriptor provides information on a signing flow of the application\nNOTE(fdymylja): here we could go as far as providing an entire flow on how\nto sign a message given a SigningModeDescriptor, but it's better to think about\nthis another time","properties":{"authn_info_provider_method_fullname":{"type":"string","title":"authn_info_provider_method_fullname defines the fullname of the method to call to get\nthe metadata required to authenticate using the provided sign_modes"},"name":{"type":"string","title":"name defines the unique name of the signing mode"},"number":{"type":"integer","format":"int32","title":"number is the unique int32 identifier for the sign_mode enum"}}},"cosmos.base.reflection.v2alpha1.TxDescriptor":{"type":"object","title":"TxDescriptor describes the accepted transaction type","properties":{"fullname":{"description":"fullname is the protobuf fullname of the raw transaction type (for instance the tx.Tx type)\nit is not meant to support polymorphism of transaction types, it is supposed to be used by\nreflection clients to understand if they can handle a specific transaction type in an application.","type":"string"},"msgs":{"type":"array","title":"msgs lists the accepted application messages (sdk.Msg)","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.MsgDescriptor"}}}},"cosmos.base.tendermint.v1beta1.ABCIQueryResponse":{"description":"ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query.\n\nNote: This type is a duplicate of the ResponseQuery proto type defined in\nTendermint.","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"type":"string","title":"nondeterministic"},"proof_ops":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOps"},"value":{"type":"string","format":"byte"}}},"cosmos.base.tendermint.v1beta1.Block":{"description":"Block is tendermint type Block, with the Header proposer address\nfield converted to bech32 string.","type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse":{"description":"GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestBlockResponse":{"description":"GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse":{"description":"GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.GetNodeInfoResponse":{"description":"GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method.","type":"object","properties":{"application_version":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.VersionInfo"},"default_node_info":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfo"}}},"cosmos.base.tendermint.v1beta1.GetSyncingResponse":{"description":"GetSyncingResponse is the response type for the Query/GetSyncing RPC method.","type":"object","properties":{"syncing":{"type":"boolean"}}},"cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse":{"description":"GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.Header":{"description":"Header defines the structure of a Tendermint block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"description":"proposer_address is the original block proposer address, formatted as a Bech32 string.\nIn Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\nfor better UX.\n\noriginal proposer of the block","type":"string"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"cosmos.base.tendermint.v1beta1.Module":{"type":"object","title":"Module is the type for VersionInfo","properties":{"path":{"type":"string","title":"module path"},"sum":{"type":"string","title":"checksum"},"version":{"type":"string","title":"module version"}}},"cosmos.base.tendermint.v1beta1.ProofOp":{"description":"ProofOp defines an operation used for calculating Merkle root. The data could\nbe arbitrary format, providing necessary data for example neighbouring node\nhash.\n\nNote: This type is a duplicate of the ProofOp proto type defined in Tendermint.","type":"object","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"cosmos.base.tendermint.v1beta1.ProofOps":{"description":"ProofOps is Merkle proof defined by the list of ProofOps.\n\nNote: This type is a duplicate of the ProofOps proto type defined in Tendermint.","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOp"}}}},"cosmos.base.tendermint.v1beta1.Validator":{"description":"Validator is the type for the validator-set.","type":"object","properties":{"address":{"type":"string"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"voting_power":{"type":"string","format":"int64"}}},"cosmos.base.tendermint.v1beta1.VersionInfo":{"description":"VersionInfo is the type for the GetNodeInfoResponse message.","type":"object","properties":{"app_name":{"type":"string"},"build_deps":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Module"}},"build_tags":{"type":"string"},"cosmos_sdk_version":{"type":"string","title":"Since: cosmos-sdk 0.43"},"git_commit":{"type":"string"},"go_version":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.base.v1beta1.DecCoin":{"description":"DecCoin defines a token with a denomination and a decimal amount.\n\nNOTE: The amount field is an Dec which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.circuit.v1.AccountResponse":{"description":"AccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"permission":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.AccountsResponse":{"description":"AccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.circuit.v1.GenesisAccountPermissions"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.circuit.v1.DisabledListResponse":{"description":"DisabledListResponse is the response type for the Query/DisabledList RPC method.","type":"object","properties":{"disabled_list":{"type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.GenesisAccountPermissions":{"type":"object","title":"GenesisAccountPermissions is the account permissions for the circuit breaker in genesis","properties":{"address":{"type":"string"},"permissions":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreaker":{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","type":"object","properties":{"grantee":{"description":"grantee is the account authorized with the provided permissions.","type":"string"},"granter":{"description":"granter is the granter of the circuit breaker permissions and must have\nLEVEL_SUPER_ADMIN.","type":"string"},"permissions":{"description":"permissions are the circuit breaker permissions that the grantee receives.\nThese will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can\nbe specified to revoke all permissions.","$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse":{"description":"MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgResetCircuitBreaker":{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip or reset the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of Msg type URLs to resume processing. If\nit is left empty all Msg processing for type URLs that the account is\nauthorized to trip will resume.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgResetCircuitBreakerResponse":{"description":"MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgTripCircuitBreaker":{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of type URLs to immediately stop processing.\nIF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY.\nThis value is validated against the authority's permissions and if the\nauthority does not have permissions to trip the specified msg type URLs\n(or all URLs), the operation will fail.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgTripCircuitBreakerResponse":{"description":"MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.Permissions":{"description":"Permissions are the permissions that an account has to trip\nor reset the circuit breaker.","type":"object","properties":{"level":{"description":"level is the level of permissions granted to this account.","$ref":"#/definitions/cosmos.circuit.v1.Permissions.Level"},"limit_type_urls":{"description":"limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type\nURLs that the account can trip. It is an error to use limit_type_urls with\na level other than LEVEL_SOME_MSGS.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.Permissions.Level":{"description":"Level is the permission level.\n\n - LEVEL_NONE_UNSPECIFIED: LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit\nbreaker permissions.\n - LEVEL_SOME_MSGS: LEVEL_SOME_MSGS indicates that the account will have permission to\ntrip or reset the circuit breaker for some Msg type URLs. If this level\nis chosen, a non-empty list of Msg type URLs must be provided in\nlimit_type_urls.\n - LEVEL_ALL_MSGS: LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit\nbreaker for Msg's of all type URLs.\n - LEVEL_SUPER_ADMIN: LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker\nactions and can grant permissions to other accounts.","type":"string","default":"LEVEL_NONE_UNSPECIFIED","enum":["LEVEL_NONE_UNSPECIFIED","LEVEL_SOME_MSGS","LEVEL_ALL_MSGS","LEVEL_SUPER_ADMIN"]},"cosmos.consensus.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"abci":{"title":"Since: cosmos-sdk 0.50","$ref":"#/definitions/tendermint.types.ABCIParams"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"block":{"description":"params defines the x/consensus parameters to update.\nVersionsParams is not included in this Msg because it is tracked\nsepararately in x/upgrade.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"}}},"cosmos.consensus.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.consensus.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/consensus parameters.","type":"object","properties":{"params":{"description":"params are the tendermint consensus params stored in the consensus module.\nPlease note that `params.version` is not populated in this response, it is\ntracked separately in the x/upgrade module.","$ref":"#/definitions/tendermint.types.ConsensusParams"}}},"cosmos.crisis.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"constant_fee":{"description":"constant_fee defines the x/crisis parameter.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.crisis.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.crisis.v1beta1.MsgVerifyInvariant":{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","type":"object","properties":{"invariant_module_name":{"description":"name of the invariant module.","type":"string"},"invariant_route":{"description":"invariant_route is the msg's invariant route.","type":"string"},"sender":{"description":"sender is the account address of private key to send coins to fee collector account.","type":"string"}}},"cosmos.crisis.v1beta1.MsgVerifyInvariantResponse":{"description":"MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type.","type":"object"},"cosmos.crypto.multisig.v1beta1.CompactBitArray":{"description":"CompactBitArray is an implementation of a space efficient bit array.\nThis is used to ensure that the encoded data takes up a minimal amount of\nspace after proto encoding.\nThis is not thread safe, and is not intended for concurrent usage.","type":"object","properties":{"elems":{"type":"string","format":"byte"},"extra_bits_stored":{"type":"integer","format":"int64"}}},"cosmos.distribution.v1beta1.DelegationDelegatorReward":{"description":"DelegationDelegatorReward represents the properties\nof a delegator's delegation reward.","type":"object","properties":{"reward":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse":{"description":"MsgDepositValidatorRewardsPoolResponse defines the response to executing a\nMsgDepositValidatorRewardsPool message.\n\nSince: cosmos-sdk 0.50","type":"object"},"cosmos.distribution.v1beta1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.distribution.v1beta1.MsgSetWithdrawAddress":{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","type":"object","properties":{"delegator_address":{"type":"string"},"withdraw_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse":{"description":"MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response\ntype.","type":"object"},"cosmos.distribution.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/distribution parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward":{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse":{"description":"MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward\nresponse type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission":{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","type":"object","properties":{"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse":{"description":"MsgWithdrawValidatorCommissionResponse defines the\nMsg/WithdrawValidatorCommission response type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.Params":{"description":"Params defines the set of params for the distribution module.","type":"object","properties":{"base_proposer_reward":{"description":"Deprecated: The base_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"bonus_proposer_reward":{"description":"Deprecated: The bonus_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"community_tax":{"type":"string"},"withdraw_addr_enabled":{"type":"boolean"}}},"cosmos.distribution.v1beta1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationRewardsResponse":{"description":"QueryDelegationRewardsResponse is the response type for the\nQuery/DelegationRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines the rewards accrued by a delegation.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse":{"description":"QueryDelegationTotalRewardsResponse is the response type for the\nQuery/DelegationTotalRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines all the rewards accrued by a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.DelegationDelegatorReward"}},"total":{"description":"total defines the sum of all the rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is the response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"validators":{"description":"validators defines the validators a delegator is delegating for.","type":"array","items":{"type":"string"}}}},"cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse":{"description":"QueryDelegatorWithdrawAddressResponse is the response type for the\nQuery/DelegatorWithdrawAddress RPC method.","type":"object","properties":{"withdraw_address":{"description":"withdraw_address defines the delegator address to query for.","type":"string"}}},"cosmos.distribution.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.QueryValidatorCommissionResponse":{"type":"object","title":"QueryValidatorCommissionResponse is the response type for the\nQuery/ValidatorCommission RPC method","properties":{"commission":{"description":"commission defines the commission the validator received.","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorAccumulatedCommission"}}},"cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse":{"description":"QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method.","type":"object","properties":{"commission":{"description":"commission defines the commission the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"operator_address":{"description":"operator_address defines the validator operator address.","type":"string"},"self_bond_rewards":{"description":"self_bond_rewards defines the self delegations rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse":{"description":"QueryValidatorOutstandingRewardsResponse is the response type for the\nQuery/ValidatorOutstandingRewards RPC method.","type":"object","properties":{"rewards":{"$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorOutstandingRewards"}}},"cosmos.distribution.v1beta1.QueryValidatorSlashesResponse":{"description":"QueryValidatorSlashesResponse is the response type for the\nQuery/ValidatorSlashes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"slashes":{"description":"slashes defines the slashes the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorSlashEvent"}}}},"cosmos.distribution.v1beta1.ValidatorAccumulatedCommission":{"description":"ValidatorAccumulatedCommission represents accumulated commission\nfor a validator kept as a running counter, can be withdrawn at any time.","type":"object","properties":{"commission":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorOutstandingRewards":{"description":"ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\nfor a validator inexpensive to track, allows simple sanity checks.","type":"object","properties":{"rewards":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorSlashEvent":{"description":"ValidatorSlashEvent represents a validator slash event.\nHeight is implicit within the store key.\nThis is needed to calculate appropriate amount of staking tokens\nfor delegations which are withdrawn after a slash has occurred.","type":"object","properties":{"fraction":{"type":"string"},"validator_period":{"type":"string","format":"uint64"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidence":{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","type":"object","properties":{"evidence":{"description":"evidence defines the evidence of misbehavior.","$ref":"#/definitions/google.protobuf.Any"},"submitter":{"description":"submitter is the signer account address of evidence.","type":"string"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse":{"description":"MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.","type":"object","properties":{"hash":{"description":"hash defines the hash of the evidence.","type":"string","format":"byte"}}},"cosmos.evidence.v1beta1.QueryAllEvidenceResponse":{"description":"QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC\nmethod.","type":"object","properties":{"evidence":{"description":"evidence returns all evidences.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.evidence.v1beta1.QueryEvidenceResponse":{"description":"QueryEvidenceResponse is the response type for the Query/Evidence RPC method.","type":"object","properties":{"evidence":{"description":"evidence returns the requested evidence.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.feegrant.v1beta1.Grant":{"type":"object","title":"Grant is stored in the KVStore to record a grant with full context","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowance":{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","type":"object","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse":{"description":"MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgPruneAllowances":{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","type":"object","properties":{"pruner":{"description":"pruner is the address of the user pruning expired allowances.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse":{"description":"MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type.\n\nSince cosmos-sdk 0.50","type":"object"},"cosmos.feegrant.v1beta1.MsgRevokeAllowance":{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","type":"object","properties":{"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse":{"description":"MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.QueryAllowanceResponse":{"description":"QueryAllowanceResponse is the response type for the Query/Allowance RPC method.","type":"object","properties":{"allowance":{"description":"allowance is a allowance granted for grantee by granter.","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}}},"cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse":{"description":"QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"allowances":{"description":"allowances that have been issued by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.feegrant.v1beta1.QueryAllowancesResponse":{"description":"QueryAllowancesResponse is the response type for the Query/Allowances RPC method.","type":"object","properties":{"allowances":{"description":"allowances are allowance's granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1.MsgCancelProposal":{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1.MsgCancelProposalResponse":{"description":"MsgCancelProposalResponse defines the response structure for executing a\nMsgCancelProposal message.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"canceled_height":{"description":"canceled_height defines the block height at which the proposal is canceled.","type":"string","format":"uint64"},"canceled_time":{"description":"canceled_time is the time when proposal is canceled.","type":"string","format":"date-time"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1.MsgExecLegacyContent":{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","type":"object","properties":{"authority":{"description":"authority must be the gov module address.","type":"string"},"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.gov.v1.MsgExecLegacyContentResponse":{"description":"MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type.","type":"object"},"cosmos.gov.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited or not"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"messages":{"description":"messages are the arbitrary messages to be executed if proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.gov.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/gov parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.gov.v1.Params"}}},"cosmos.gov.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.gov.v1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the Vote.","type":"string"},"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the VoteWeighted.","type":"string"},"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1.Params":{"description":"Params defines the parameters for the x/gov module.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"burn_proposal_deposit_prevote":{"type":"boolean","title":"burn deposits if the proposal does not enter voting period"},"burn_vote_quorum":{"type":"boolean","title":"burn deposits if a proposal does not meet quorum"},"burn_vote_veto":{"type":"boolean","title":"burn deposits if quorum with vote type no_veto is met"},"expedited_min_deposit":{"description":"Minimum expedited deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"expedited_threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.67.\n\nSince: cosmos-sdk 0.50","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.\n\nSince: cosmos-sdk 0.50","type":"string"},"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"min_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value minimum that must be met when making a deposit.\nDefault value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be\nrequired.\n\nSince: cosmos-sdk 0.50","type":"string"},"min_initial_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value that must be paid at proposal submission.","type":"string"},"proposal_cancel_dest":{"description":"The address which will receive (proposal_cancel_ratio * deposit) proposal deposits.\nIf empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned.\n\nSince: cosmos-sdk 0.50","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.\n\nSince: cosmos-sdk 0.50","type":"string"},"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\n considered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\n vetoed. Default value: 1/3.","type":"string"},"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"description":"Since: cosmos-sdk 0.50","type":"string","title":"failed_reason defines the reason why the proposal failed"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"},"id":{"description":"id defines the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages are the arbitrary messages to be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/gov#proposal-3"},"proposer":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"proposer is the address of the proposal sumbitter"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1.QueryConstitutionResponse":{"type":"object","title":"QueryConstitutionResponse is the response type for the Query/Constitution RPC method","properties":{"constitution":{"type":"string"}}},"cosmos.gov.v1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1.Deposit"}}},"cosmos.gov.v1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"Deprecated: Prefer to use `params` instead.\ndeposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1.DepositParams"},"params":{"description":"params defines all the paramaters of x/gov module.\n\nSince: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.gov.v1.Params"},"tally_params":{"description":"Deprecated: Prefer to use `params` instead.\ntally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1.TallyParams"},"voting_params":{"description":"Deprecated: Prefer to use `params` instead.\nvoting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1.VotingParams"}}},"cosmos.gov.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"description":"proposal is the requested governance proposal.","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}},"cosmos.gov.v1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}}},"cosmos.gov.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"}}},"cosmos.gov.v1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1.Vote"}}},"cosmos.gov.v1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Vote"}}}},"cosmos.gov.v1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string"}}},"cosmos.gov.v1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the number of abstain votes on a proposal.","type":"string"},"no_count":{"description":"no_count is the number of no votes on a proposal.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the number of no with veto votes on a proposal.","type":"string"},"yes_count":{"description":"yes_count is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.gov.v1beta1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1beta1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1beta1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1beta1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1beta1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.\n\nSince: cosmos-sdk 0.43","type":"object"},"cosmos.gov.v1beta1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1beta1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1beta1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1beta1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}}},"cosmos.gov.v1beta1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"deposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.DepositParams"},"tally_params":{"description":"tally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyParams"},"voting_params":{"description":"voting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1beta1.VotingParams"}}},"cosmos.gov.v1beta1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}},"cosmos.gov.v1beta1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}}},"cosmos.gov.v1beta1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"}}},"cosmos.gov.v1beta1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}},"cosmos.gov.v1beta1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}}},"cosmos.gov.v1beta1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string","format":"byte"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string","format":"byte"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string","format":"byte"}}},"cosmos.gov.v1beta1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain":{"description":"abstain is the number of abstain votes on a proposal.","type":"string"},"no":{"description":"no is the number of no votes on a proposal.","type":"string"},"no_with_veto":{"description":"no_with_veto is the number of no with veto votes on a proposal.","type":"string"},"yes":{"description":"yes is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1beta1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"option":{"description":"Deprecated: Prefer to use `options` instead. This field is set in queries\nif and only if `len(options) == 1` and that option has weight 1. In all\nother cases, this field will default to VOTE_OPTION_UNSPECIFIED.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"options":{"description":"options is the weighted vote options.\n\nSince: cosmos-sdk 0.43","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1beta1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1beta1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1beta1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.group.v1.Exec":{"description":"Exec defines modes of execution of a proposal on creation or on new vote.\n\n - EXEC_UNSPECIFIED: An empty value means that there should be a separate\nMsgExec request for the proposal to execute.\n - EXEC_TRY: Try to execute the proposal immediately.\nIf the proposal is not allowed per the DecisionPolicy,\nthe proposal will still be open and could\nbe executed at a later point.","type":"string","default":"EXEC_UNSPECIFIED","enum":["EXEC_UNSPECIFIED","EXEC_TRY"]},"cosmos.group.v1.GroupInfo":{"description":"GroupInfo represents the high-level on-chain information for a group.","type":"object","properties":{"admin":{"description":"admin is the account address of the group's admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group was created.","type":"string","format":"date-time"},"id":{"description":"id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata to attached to the group.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1"},"total_weight":{"description":"total_weight is the sum of the group members' weights.","type":"string"},"version":{"type":"string","format":"uint64","title":"version is used to track changes to a group's membership structure that\nwould break existing proposals. Whenever any members weight is changed,\nor any member is added or removed this version is incremented and will\ncause proposals based on older versions of this group to fail"}}},"cosmos.group.v1.GroupMember":{"description":"GroupMember represents the relationship between a group and a member.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member":{"description":"member is the member data.","$ref":"#/definitions/cosmos.group.v1.Member"}}},"cosmos.group.v1.GroupPolicyInfo":{"description":"GroupPolicyInfo represents the high-level on-chain information for a group policy.","type":"object","properties":{"address":{"description":"address is the account address of group policy.","type":"string"},"admin":{"description":"admin is the account address of the group admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group policy was created.","type":"string","format":"date-time"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the group policy.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#decision-policy-1"},"version":{"description":"version is used to track changes to a group's GroupPolicyInfo structure that\nwould create a different result on a running proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.Member":{"description":"Member represents a group member with an account address,\nnon-zero weight, metadata and added_at timestamp.","type":"object","properties":{"added_at":{"description":"added_at is a timestamp specifying when a member was added.","type":"string","format":"date-time"},"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MemberRequest":{"description":"MemberRequest represents a group member to be used in Msg server requests.\nContrary to `Member`, it doesn't have any `added_at` field\nsince this field cannot be set as part of requests.","type":"object","properties":{"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MsgCreateGroup":{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}},"metadata":{"description":"metadata is any arbitrary metadata to attached to the group.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicy":{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is any arbitrary metadata attached to the group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicyResponse":{"description":"MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type.","type":"object","properties":{"address":{"description":"address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupResponse":{"description":"MsgCreateGroupResponse is the Msg/CreateGroup response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgCreateGroupWithPolicy":{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group and group policy admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_metadata":{"description":"group_metadata is any arbitrary metadata attached to the group.","type":"string"},"group_policy_as_admin":{"description":"group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group\nand group policy admin.","type":"boolean"},"group_policy_metadata":{"description":"group_policy_metadata is any arbitrary metadata attached to the group policy.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgCreateGroupWithPolicyResponse":{"description":"MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group with policy.","type":"string","format":"uint64"},"group_policy_address":{"description":"group_policy_address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgExec":{"description":"MsgExec is the Msg/Exec request type.","type":"object","properties":{"executor":{"description":"executor is the account address used to execute the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgExecResponse":{"description":"MsgExecResponse is the Msg/Exec request type.","type":"object","properties":{"result":{"description":"result is the final result of the proposal execution.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"}}},"cosmos.group.v1.MsgLeaveGroup":{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","type":"object","properties":{"address":{"description":"address is the account address of the group member.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgLeaveGroupResponse":{"description":"MsgLeaveGroupResponse is the Msg/LeaveGroup response type.","type":"object"},"cosmos.group.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","type":"object","properties":{"exec":{"description":"exec defines the mode of execution of the proposal,\nwhether it should be executed immediately on creation or not.\nIf so, proposers signatures are considered as Yes votes.","$ref":"#/definitions/cosmos.group.v1.Exec"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposers":{"description":"proposers are the account addresses of the proposers.\nProposers signatures will be counted as yes votes.","type":"array","items":{"type":"string"}},"summary":{"description":"summary is the summary of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.group.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse is the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgUpdateGroupAdmin":{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the current account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"new_admin":{"description":"new_admin is the group new admin account address.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupAdminResponse":{"description":"MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMembers":{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member_updates":{"description":"member_updates is the list of members to update,\nset weight to 0 to remove a member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgUpdateGroupMembersResponse":{"description":"MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMetadata":{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is the updated group's metadata.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupMetadataResponse":{"description":"MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyAdmin":{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of the group policy.","type":"string"},"new_admin":{"description":"new_admin is the new group policy admin.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse":{"description":"MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy":{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy is the updated group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse":{"description":"MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyMetadata":{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"metadata":{"description":"metadata is the group policy metadata to be updated.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse":{"description":"MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type.","type":"object"},"cosmos.group.v1.MsgVote":{"description":"MsgVote is the Msg/Vote request type.","type":"object","properties":{"exec":{"description":"exec defines whether the proposal should be executed\nimmediately after voting or not.","$ref":"#/definitions/cosmos.group.v1.Exec"},"metadata":{"description":"metadata is any arbitrary metadata attached to the vote.","type":"string"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter account address.","type":"string"}}},"cosmos.group.v1.MsgVoteResponse":{"description":"MsgVoteResponse is the Msg/Vote response type.","type":"object"},"cosmos.group.v1.MsgWithdrawProposal":{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","type":"object","properties":{"address":{"description":"address is the admin of the group policy or one of the proposer of the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgWithdrawProposalResponse":{"description":"MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type.","type":"object"},"cosmos.group.v1.Proposal":{"description":"Proposal defines a group proposal. Any member of a group can submit a proposal\nfor a group policy to decide upon.\nA proposal consists of a set of `sdk.Msg`s that will be executed if the proposal\npasses as well as some optional metadata associated with the proposal.","type":"object","properties":{"executor_result":{"description":"executor_result is the final result of the proposal execution. Initial value is NotRun.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"},"final_tally_result":{"description":"final_tally_result contains the sums of all weighted votes for this\nproposal for each vote option. It is empty at submission, and only\npopulated after tallying, at voting period end or at proposal execution,\nwhichever happens first.","$ref":"#/definitions/cosmos.group.v1.TallyResult"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"group_policy_version":{"description":"group_policy_version tracks the version of the group policy at proposal submission.\nWhen a decision policy is changed, existing proposals from previous policy\nversions will become invalid with the `ABORTED` status.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"group_version":{"description":"group_version tracks the version of the group at proposal submission.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"id":{"description":"id is the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#proposal-4"},"proposers":{"description":"proposers are the account addresses of the proposers.","type":"array","items":{"type":"string"}},"status":{"description":"status represents the high level position in the life cycle of the proposal. Initial value is Submitted.","$ref":"#/definitions/cosmos.group.v1.ProposalStatus"},"submit_time":{"description":"submit_time is a timestamp specifying when a proposal was submitted.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"voting_period_end":{"description":"voting_period_end is the timestamp before which voting must be done.\nUnless a successful MsgExec is called before (to execute a proposal whose\ntally is successful before the voting period ends), tallying will be done\nat this point, and the `final_tally_result`and `status` fields will be\naccordingly updated.","type":"string","format":"date-time"}}},"cosmos.group.v1.ProposalExecutorResult":{"description":"ProposalExecutorResult defines types of proposal executor results.\n\n - PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED: An empty value is not allowed.\n - PROPOSAL_EXECUTOR_RESULT_NOT_RUN: We have not yet run the executor.\n - PROPOSAL_EXECUTOR_RESULT_SUCCESS: The executor was successful and proposed action updated state.\n - PROPOSAL_EXECUTOR_RESULT_FAILURE: The executor returned an error and proposed action didn't update state.","type":"string","default":"PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","enum":["PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","PROPOSAL_EXECUTOR_RESULT_NOT_RUN","PROPOSAL_EXECUTOR_RESULT_SUCCESS","PROPOSAL_EXECUTOR_RESULT_FAILURE"]},"cosmos.group.v1.ProposalStatus":{"description":"ProposalStatus defines proposal statuses.\n\n - PROPOSAL_STATUS_UNSPECIFIED: An empty value is invalid and not allowed.\n - PROPOSAL_STATUS_SUBMITTED: Initial status of a proposal when submitted.\n - PROPOSAL_STATUS_ACCEPTED: Final status of a proposal when the final tally is done and the outcome\npasses the group policy's decision policy.\n - PROPOSAL_STATUS_REJECTED: Final status of a proposal when the final tally is done and the outcome\nis rejected by the group policy's decision policy.\n - PROPOSAL_STATUS_ABORTED: Final status of a proposal when the group policy is modified before the\nfinal tally.\n - PROPOSAL_STATUS_WITHDRAWN: A proposal can be withdrawn before the voting start time by the owner.\nWhen this happens the final status is Withdrawn.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_SUBMITTED","PROPOSAL_STATUS_ACCEPTED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_ABORTED","PROPOSAL_STATUS_WITHDRAWN"]},"cosmos.group.v1.QueryGroupInfoResponse":{"description":"QueryGroupInfoResponse is the Query/GroupInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupInfo of the group.","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}}},"cosmos.group.v1.QueryGroupMembersResponse":{"description":"QueryGroupMembersResponse is the Query/GroupMembersResponse response type.","type":"object","properties":{"members":{"description":"members are the members of the group with given group_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupMember"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByAdminResponse":{"description":"QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info with provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByGroupResponse":{"description":"QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info associated with the provided group.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPolicyInfoResponse":{"description":"QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupPolicyInfo of the group policy.","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}}},"cosmos.group.v1.QueryGroupsByAdminResponse":{"description":"QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsByMemberResponse":{"description":"QueryGroupsByMemberResponse is the Query/GroupsByMember response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided group member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsResponse":{"description":"QueryGroupsResponse is the Query/Groups response type.\n\nSince: cosmos-sdk 0.47.1","type":"object","properties":{"groups":{"description":"`groups` is all the groups present in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the Query/Proposal response type.","type":"object","properties":{"proposal":{"description":"proposal is the proposal info.","$ref":"#/definitions/cosmos.group.v1.Proposal"}}},"cosmos.group.v1.QueryProposalsByGroupPolicyResponse":{"description":"QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals are the proposals with given group policy.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Proposal"}}}},"cosmos.group.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the Query/TallyResult response type.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.group.v1.TallyResult"}}},"cosmos.group.v1.QueryVoteByProposalVoterResponse":{"description":"QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type.","type":"object","properties":{"vote":{"description":"vote is the vote with given proposal_id and voter.","$ref":"#/definitions/cosmos.group.v1.Vote"}}},"cosmos.group.v1.QueryVotesByProposalResponse":{"description":"QueryVotesByProposalResponse is the Query/VotesByProposal response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes for given proposal_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.QueryVotesByVoterResponse":{"description":"QueryVotesByVoterResponse is the Query/VotesByVoter response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes by given voter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.TallyResult":{"description":"TallyResult represents the sum of weighted votes for each vote option.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the weighted sum of abstainers.","type":"string"},"no_count":{"description":"no_count is the weighted sum of no votes.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the weighted sum of veto.","type":"string"},"yes_count":{"description":"yes_count is the weighted sum of yes votes.","type":"string"}}},"cosmos.group.v1.Vote":{"type":"object","title":"Vote represents a vote for a proposal.string metadata","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"submit_time":{"description":"submit_time is the timestamp when the vote was submitted.","type":"string","format":"date-time"},"voter":{"description":"voter is the account address of the voter.","type":"string"}}},"cosmos.group.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will\nreturn an error.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.mint.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.mint.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.mint.v1beta1.Params":{"description":"Params defines the parameters for the x/mint module.","type":"object","properties":{"blocks_per_year":{"type":"string","format":"uint64","title":"expected blocks per year"},"goal_bonded":{"type":"string","title":"goal of percent bonded atoms"},"inflation_max":{"type":"string","title":"maximum inflation rate"},"inflation_min":{"type":"string","title":"minimum inflation rate"},"inflation_rate_change":{"type":"string","title":"maximum annual change in inflation rate"},"mint_denom":{"type":"string","title":"type of coin to mint"}}},"cosmos.mint.v1beta1.QueryAnnualProvisionsResponse":{"description":"QueryAnnualProvisionsResponse is the response type for the\nQuery/AnnualProvisions RPC method.","type":"object","properties":{"annual_provisions":{"description":"annual_provisions is the current minting annual provisions value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryInflationResponse":{"description":"QueryInflationResponse is the response type for the Query/Inflation RPC\nmethod.","type":"object","properties":{"inflation":{"description":"inflation is the current minting inflation value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.nft.v1beta1.Class":{"description":"Class defines the class of the nft type.","type":"object","properties":{"data":{"title":"data is the app specific metadata of the NFT class. Optional","$ref":"#/definitions/google.protobuf.Any"},"description":{"type":"string","title":"description is a brief description of nft classification. Optional"},"id":{"type":"string","title":"id defines the unique identifier of the NFT classification, similar to the contract address of ERC721"},"name":{"type":"string","title":"name defines the human-readable name of the NFT classification. Optional"},"symbol":{"type":"string","title":"symbol is an abbreviated name for nft classification. Optional"},"uri":{"type":"string","title":"uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri. Optional"}}},"cosmos.nft.v1beta1.MsgSend":{"description":"MsgSend represents a message to send a nft from one account to another account.","type":"object","properties":{"class_id":{"type":"string","title":"class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721"},"id":{"type":"string","title":"id defines the unique identification of nft"},"receiver":{"type":"string","title":"receiver is the receiver address of nft"},"sender":{"type":"string","title":"sender is the address of the owner of nft"}}},"cosmos.nft.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.nft.v1beta1.NFT":{"description":"NFT defines the NFT.","type":"object","properties":{"class_id":{"type":"string","title":"class_id associated with the NFT, similar to the contract address of ERC721"},"data":{"title":"data is an app specific data of the NFT. Optional","$ref":"#/definitions/google.protobuf.Any"},"id":{"type":"string","title":"id is a unique identifier of the NFT"},"uri":{"type":"string","title":"uri for the NFT metadata stored off chain"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri"}}},"cosmos.nft.v1beta1.QueryBalanceResponse":{"type":"object","title":"QueryBalanceResponse is the response type for the Query/Balance RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs of a given class owned by the owner"}}},"cosmos.nft.v1beta1.QueryClassResponse":{"type":"object","title":"QueryClassResponse is the response type for the Query/Class RPC method","properties":{"class":{"description":"class defines the class of the nft type.","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}}},"cosmos.nft.v1beta1.QueryClassesResponse":{"type":"object","title":"QueryClassesResponse is the response type for the Query/Classes RPC method","properties":{"classes":{"description":"class defines the class of the nft type.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryNFTResponse":{"type":"object","title":"QueryNFTResponse is the response type for the Query/NFT RPC method","properties":{"nft":{"title":"owner is the owner address of the nft","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}}},"cosmos.nft.v1beta1.QueryNFTsResponse":{"type":"object","title":"QueryNFTsResponse is the response type for the Query/NFTs RPC methods","properties":{"nfts":{"type":"array","title":"NFT defines the NFT","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryOwnerResponse":{"type":"object","title":"QueryOwnerResponse is the response type for the Query/Owner RPC method","properties":{"owner":{"type":"string","title":"owner is the owner address of the nft"}}},"cosmos.nft.v1beta1.QuerySupplyResponse":{"type":"object","title":"QuerySupplyResponse is the response type for the Query/Supply RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs from the given class"}}},"cosmos.params.v1beta1.ParamChange":{"description":"ParamChange defines an individual parameter change, for use in\nParameterChangeProposal.","type":"object","properties":{"key":{"type":"string"},"subspace":{"type":"string"},"value":{"type":"string"}}},"cosmos.params.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"param":{"description":"param defines the queried parameter.","$ref":"#/definitions/cosmos.params.v1beta1.ParamChange"}}},"cosmos.params.v1beta1.QuerySubspacesResponse":{"description":"QuerySubspacesResponse defines the response types for querying for all\nregistered subspaces and all keys for a subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"subspaces":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.params.v1beta1.Subspace"}}}},"cosmos.params.v1beta1.Subspace":{"description":"Subspace defines a parameter subspace name and all the keys that exist for\nthe subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjail":{"type":"object","title":"MsgUnjail defines the Msg/Unjail request type","properties":{"validator_addr":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjailResponse":{"type":"object","title":"MsgUnjailResponse defines the Msg/Unjail response type"},"cosmos.slashing.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/slashing parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.slashing.v1beta1.Params":{"description":"Params represents the parameters used for by the slashing module.","type":"object","properties":{"downtime_jail_duration":{"type":"string"},"min_signed_per_window":{"type":"string","format":"byte"},"signed_blocks_window":{"type":"string","format":"int64"},"slash_fraction_double_sign":{"type":"string","format":"byte"},"slash_fraction_downtime":{"type":"string","format":"byte"}}},"cosmos.slashing.v1beta1.QueryParamsResponse":{"type":"object","title":"QueryParamsResponse is the response type for the Query/Params RPC method","properties":{"params":{"$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.QuerySigningInfoResponse":{"type":"object","title":"QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC\nmethod","properties":{"val_signing_info":{"title":"val_signing_info is the signing info of requested val cons address","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}}},"cosmos.slashing.v1beta1.QuerySigningInfosResponse":{"type":"object","title":"QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC\nmethod","properties":{"info":{"type":"array","title":"info is the signing info of all validators","items":{"type":"object","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.slashing.v1beta1.ValidatorSigningInfo":{"description":"ValidatorSigningInfo defines a validator's signing info for monitoring their\nliveness activity.","type":"object","properties":{"address":{"type":"string"},"index_offset":{"description":"Index which is incremented every time a validator is bonded in a block and\n_may_ have signed a pre-commit or not. This in conjunction with the\nsigned_blocks_window param determines the index in the missed block bitmap.","type":"string","format":"int64"},"jailed_until":{"description":"Timestamp until which the validator is jailed due to liveness downtime.","type":"string","format":"date-time"},"missed_blocks_counter":{"description":"A counter of missed (unsigned) blocks. It is used to avoid unnecessary\nreads in the missed block bitmap.","type":"string","format":"int64"},"start_height":{"type":"string","format":"int64","title":"Height at which validator was first a candidate OR was un-jailed"},"tombstoned":{"description":"Whether or not a validator has been tombstoned (killed out of validator\nset). It is set once the validator commits an equivocation or for any other\nconfigured misbehavior.","type":"boolean"}}},"cosmos.staking.v1beta1.BondStatus":{"description":"BondStatus is the status of a validator.\n\n - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.","type":"string","default":"BOND_STATUS_UNSPECIFIED","enum":["BOND_STATUS_UNSPECIFIED","BOND_STATUS_UNBONDED","BOND_STATUS_UNBONDING","BOND_STATUS_BONDED"]},"cosmos.staking.v1beta1.Commission":{"description":"Commission defines commission parameters for a given validator.","type":"object","properties":{"commission_rates":{"description":"commission_rates defines the initial commission rates to be used for creating a validator.","$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"update_time":{"description":"update_time is the last time the commission rate was changed.","type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.CommissionRates":{"description":"CommissionRates defines the initial commission rates to be used for creating\na validator.","type":"object","properties":{"max_change_rate":{"description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction.","type":"string"},"max_rate":{"description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction.","type":"string"},"rate":{"description":"rate is the commission rate charged to delegators, as a fraction.","type":"string"}}},"cosmos.staking.v1beta1.Delegation":{"description":"Delegation represents the bond with tokens held by an account. It is\nowned by one delegator, and is associated with the voting power of one\nvalidator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"shares":{"description":"shares define the delegation shares received.","type":"string"},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.DelegationResponse":{"description":"DelegationResponse is equivalent to Delegation except that it contains a\nbalance in addition to shares which is more suitable for client responses.","type":"object","properties":{"balance":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Delegation"}}},"cosmos.staking.v1beta1.Description":{"description":"Description defines a validator description.","type":"object","properties":{"details":{"description":"details define other optional details.","type":"string"},"identity":{"description":"identity defines an optional identity signature (ex. UPort or Keybase).","type":"string"},"moniker":{"description":"moniker defines a human-readable name for the validator.","type":"string"},"security_contact":{"description":"security_contact defines an optional email for security contact.","type":"string"},"website":{"description":"website defines an optional website link.","type":"string"}}},"cosmos.staking.v1beta1.HistoricalInfo":{"description":"HistoricalInfo contains header and validator information for a given block.\nIt is stored as part of staking module's state, which persists the `n` most\nrecent HistoricalInfo\n(`n` is set by the staking module's `historical_entries` parameter).","type":"object","properties":{"header":{"$ref":"#/definitions/tendermint.types.Header"},"valset":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgBeginRedelegateResponse":{"description":"MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegation":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator","properties":{"amount":{"title":"amount is always less than or equal to unbonding delegation entry balance","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegationResponse"},"cosmos.staking.v1beta1.MsgCreateValidator":{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","type":"object","properties":{"commission":{"$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"delegator_address":{"description":"Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated.\nThe validator address bytes and delegator address bytes refer to the same account while creating validator (defer\nonly in bech32 notation).","type":"string"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"pubkey":{"$ref":"#/definitions/google.protobuf.Any"},"validator_address":{"type":"string"},"value":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.staking.v1beta1.MsgCreateValidatorResponse":{"description":"MsgCreateValidatorResponse defines the Msg/CreateValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgDelegate":{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgDelegateResponse":{"description":"MsgDelegateResponse defines the Msg/Delegate response type.","type":"object"},"cosmos.staking.v1beta1.MsgEditValidator":{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","type":"object","properties":{"commission_rate":{"type":"string","title":"We pass a reference to the new commission rate and min self delegation as\nit's not mandatory to update. If not updated, the deserialized rate will be\nzero with no way to distinguish if an update was intended.\nREF: #2373"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgEditValidatorResponse":{"description":"MsgEditValidatorResponse defines the Msg/EditValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgUndelegate":{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgUndelegateResponse":{"description":"MsgUndelegateResponse defines the Msg/Undelegate response type.","type":"object","properties":{"amount":{"description":"Since: cosmos-sdk 0.50","title":"amount returns the amount of undelegated coins","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/staking parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.staking.v1beta1.Params":{"description":"Params defines the parameters for the x/staking module.","type":"object","properties":{"bond_denom":{"description":"bond_denom defines the bondable coin denomination.","type":"string"},"historical_entries":{"description":"historical_entries is the number of historical entries to persist.","type":"integer","format":"int64"},"max_entries":{"description":"max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio).","type":"integer","format":"int64"},"max_validators":{"description":"max_validators is the maximum number of validators.","type":"integer","format":"int64"},"min_commission_rate":{"type":"string","title":"min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators"},"unbonding_time":{"description":"unbonding_time is the time duration of unbonding.","type":"string"}}},"cosmos.staking.v1beta1.Pool":{"description":"Pool is used for tracking bonded and not-bonded token supply of the bond\ndenomination.","type":"object","properties":{"bonded_tokens":{"type":"string"},"not_bonded_tokens":{"type":"string"}}},"cosmos.staking.v1beta1.QueryDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/Delegation RPC method.","type":"object","properties":{"delegation_response":{"description":"delegation_responses defines the delegation info of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse":{"description":"QueryDelegatorDelegationsResponse is response type for the\nQuery/DelegatorDelegations RPC method.","type":"object","properties":{"delegation_responses":{"description":"delegation_responses defines all the delegations' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse":{"description":"QueryUnbondingDelegatorDelegationsResponse is response type for the\nQuery/UnbondingDelegatorDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorResponse":{"description":"QueryDelegatorValidatorResponse response type for the\nQuery/DelegatorValidator RPC method.","type":"object","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators defines the validators' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.QueryHistoricalInfoResponse":{"description":"QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC\nmethod.","type":"object","properties":{"hist":{"description":"hist defines the historical info at the given height.","$ref":"#/definitions/cosmos.staking.v1beta1.HistoricalInfo"}}},"cosmos.staking.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.QueryPoolResponse":{"description":"QueryPoolResponse is response type for the Query/Pool RPC method.","type":"object","properties":{"pool":{"description":"pool defines the pool info.","$ref":"#/definitions/cosmos.staking.v1beta1.Pool"}}},"cosmos.staking.v1beta1.QueryRedelegationsResponse":{"description":"QueryRedelegationsResponse is response type for the Query/Redelegations RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"redelegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationResponse"}}}},"cosmos.staking.v1beta1.QueryUnbondingDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/UnbondingDelegation\nRPC method.","type":"object","properties":{"unbond":{"description":"unbond defines the unbonding information of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}},"cosmos.staking.v1beta1.QueryValidatorDelegationsResponse":{"type":"object","title":"QueryValidatorDelegationsResponse is response type for the\nQuery/ValidatorDelegations RPC method","properties":{"delegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryValidatorResponse":{"type":"object","title":"QueryValidatorResponse is response type for the Query/Validator RPC method","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse":{"description":"QueryValidatorUnbondingDelegationsResponse is response type for the\nQuery/ValidatorUnbondingDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryValidatorsResponse":{"type":"object","title":"QueryValidatorsResponse is response type for the Query/Validators RPC method","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators contains all the queried validators.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.Redelegation":{"description":"Redelegation contains the list of a particular delegator's redelegating bonds\nfrom a particular source validator to a particular destination validator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the bech32-encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the redelegation entries.\n\nredelegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}},"validator_dst_address":{"description":"validator_dst_address is the validator redelegation destination operator address.","type":"string"},"validator_src_address":{"description":"validator_src_address is the validator redelegation source operator address.","type":"string"}}},"cosmos.staking.v1beta1.RedelegationEntry":{"description":"RedelegationEntry defines a redelegation object with relevant metadata.","type":"object","properties":{"completion_time":{"description":"completion_time defines the unix time for redelegation completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height defines the height which the redelegation took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the initial balance when redelegation started.","type":"string"},"shares_dst":{"description":"shares_dst is the amount of destination-validator shares created by redelegation.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.RedelegationEntryResponse":{"description":"RedelegationEntryResponse is equivalent to a RedelegationEntry except that it\ncontains a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"balance":{"type":"string"},"redelegation_entry":{"$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}}},"cosmos.staking.v1beta1.RedelegationResponse":{"description":"RedelegationResponse is equivalent to a Redelegation except that its entries\ncontain a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntryResponse"}},"redelegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Redelegation"}}},"cosmos.staking.v1beta1.UnbondingDelegation":{"description":"UnbondingDelegation stores all of a single delegator's unbonding bonds\nfor a single validator in an time-ordered list.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the unbonding delegation entries.\n\nunbonding delegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegationEntry"}},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.UnbondingDelegationEntry":{"description":"UnbondingDelegationEntry defines an unbonding object with relevant metadata.","type":"object","properties":{"balance":{"description":"balance defines the tokens to receive at completion.","type":"string"},"completion_time":{"description":"completion_time is the unix time for unbonding completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the tokens initially scheduled to receive at completion.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.Validator":{"description":"Validator defines a validator, together with the total amount of the\nValidator's bond shares and their exchange rate to coins. Slashing results in\na decrease in the exchange rate, allowing correct calculation of future\nundelegations without iterating over delegators. When coins are delegated to\nthis validator, the validator is credited with a delegation whose number of\nbond shares is based on the amount of coins delegated divided by the current\nexchange rate. Voting power can be calculated as total bonded shares\nmultiplied by exchange rate.","type":"object","properties":{"commission":{"description":"commission defines the commission parameters.","$ref":"#/definitions/cosmos.staking.v1beta1.Commission"},"consensus_pubkey":{"description":"consensus_pubkey is the consensus public key of the validator, as a Protobuf Any.","$ref":"#/definitions/google.protobuf.Any"},"delegator_shares":{"description":"delegator_shares defines total shares issued to a validator's delegators.","type":"string"},"description":{"description":"description defines the description terms for the validator.","$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"jailed":{"description":"jailed defined whether the validator has been jailed from bonded status or not.","type":"boolean"},"min_self_delegation":{"description":"min_self_delegation is the validator's self declared minimum self delegation.\n\nSince: cosmos-sdk 0.46","type":"string"},"operator_address":{"description":"operator_address defines the address of the validator's operator; bech encoded in JSON.","type":"string"},"status":{"description":"status is the validator status (bonded/unbonding/unbonded).","$ref":"#/definitions/cosmos.staking.v1beta1.BondStatus"},"tokens":{"description":"tokens define the delegated tokens (incl. self-delegation).","type":"string"},"unbonding_height":{"description":"unbonding_height defines, if unbonding, the height at which this validator has begun unbonding.","type":"string","format":"int64"},"unbonding_ids":{"type":"array","title":"list of unbonding ids, each uniquely identifing an unbonding of this validator","items":{"type":"string","format":"uint64"}},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"strictly positive if this validator's unbonding has been stopped by external modules"},"unbonding_time":{"description":"unbonding_time defines, if unbonding, the min time for the validator to complete unbonding.","type":"string","format":"date-time"}}},"cosmos.store.streaming.abci.ListenCommitRequest":{"type":"object","title":"ListenCommitRequest is the request type for the ListenCommit RPC method","properties":{"block_height":{"type":"string","format":"int64","title":"explicitly pass in block height as ResponseCommit does not contain this info"},"change_set":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.store.v1beta1.StoreKVPair"}},"res":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}}},"cosmos.store.streaming.abci.ListenCommitResponse":{"type":"object","title":"ListenCommitResponse is the response type for the ListenCommit RPC method"},"cosmos.store.streaming.abci.ListenFinalizeBlockRequest":{"type":"object","title":"ListenEndBlockRequest is the request type for the ListenEndBlock RPC method","properties":{"req":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"},"res":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}}},"cosmos.store.streaming.abci.ListenFinalizeBlockResponse":{"type":"object","title":"ListenEndBlockResponse is the response type for the ListenEndBlock RPC method"},"cosmos.store.v1beta1.StoreKVPair":{"description":"Since: cosmos-sdk 0.43","type":"object","title":"StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes)\nIt optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and\nDeletes","properties":{"delete":{"type":"boolean","title":"true indicates a delete operation, false indicates a set operation"},"key":{"type":"string","format":"byte"},"store_key":{"type":"string","title":"the store key for the KVStore this pair originates from"},"value":{"type":"string","format":"byte"}}},"cosmos.tx.signing.v1beta1.SignMode":{"description":"SignMode represents a signing mode with its own security guarantees.\n\nThis enum should be considered a registry of all known sign modes\nin the Cosmos ecosystem. Apps are not expected to support all known\nsign modes. Apps that would like to support custom sign modes are\nencouraged to open a small PR against this file to add a new case\nto this SignMode enum describing their sign mode so that different\napps have a consistent version of this enum.\n\n - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\nrejected.\n - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\nverified with raw bytes from Tx.\n - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\nhuman-readable textual representation on top of the binary representation\nfrom SIGN_MODE_DIRECT.\n\nSince: cosmos-sdk 0.50\n - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\nSignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\nrequire signers signing over other signers' `signer_info`.\n\nSince: cosmos-sdk 0.46\n - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\nAmino JSON and will be removed in the future.\n - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\nSDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\nCurrently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\nbut is not implemented on the SDK by default. To enable EIP-191, you need\nto pass a custom `TxConfig` that has an implementation of\n`SignModeHandler` for EIP-191. The SDK may decide to fully support\nEIP-191 in the future.\n\nSince: cosmos-sdk 0.45.2","type":"string","default":"SIGN_MODE_UNSPECIFIED","enum":["SIGN_MODE_UNSPECIFIED","SIGN_MODE_DIRECT","SIGN_MODE_TEXTUAL","SIGN_MODE_DIRECT_AUX","SIGN_MODE_LEGACY_AMINO_JSON","SIGN_MODE_EIP_191"]},"cosmos.tx.v1beta1.AuthInfo":{"description":"AuthInfo describes the fee and signer modes that are used to sign a\ntransaction.","type":"object","properties":{"fee":{"description":"Fee is the fee and gas limit for the transaction. The first signer is the\nprimary signer and the one which pays the fee. The fee can be calculated\nbased on the cost of evaluating the body and doing signature verification\nof the signers. This can be estimated via simulation.","$ref":"#/definitions/cosmos.tx.v1beta1.Fee"},"signer_infos":{"description":"signer_infos defines the signing modes for the required signers. The number\nand order of elements must match the required signers from TxBody's\nmessages. The first element is the primary signer and the one which pays\nthe fee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.SignerInfo"}},"tip":{"description":"Tip is the optional tip used for transactions fees paid in another denom.\n\nThis field is ignored if the chain didn't enable tips, i.e. didn't add the\n`TipDecorator` in its posthandler.\n\nSince: cosmos-sdk 0.46","$ref":"#/definitions/cosmos.tx.v1beta1.Tip"}}},"cosmos.tx.v1beta1.BroadcastMode":{"description":"BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\nmethod.\n\n - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\nBROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits\nfor a CheckTx execution response only.\n - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client\nreturns immediately.","type":"string","default":"BROADCAST_MODE_UNSPECIFIED","enum":["BROADCAST_MODE_UNSPECIFIED","BROADCAST_MODE_BLOCK","BROADCAST_MODE_SYNC","BROADCAST_MODE_ASYNC"]},"cosmos.tx.v1beta1.BroadcastTxRequest":{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","type":"object","properties":{"mode":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastMode"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.BroadcastTxResponse":{"description":"BroadcastTxResponse is the response type for the\nService.BroadcastTx method.","type":"object","properties":{"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.Fee":{"description":"Fee includes the amount of coins paid in fees and the maximum\ngas to be used by the transaction. The ratio yields an effective \"gasprice\",\nwhich must be above some miminum to be accepted into the mempool.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of coins to be paid as a fee","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"gas_limit":{"type":"string","format":"uint64","title":"gas_limit is the maximum gas that can be used in transaction processing\nbefore an out of gas error occurs"},"granter":{"type":"string","title":"if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used\nto pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\nnot support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees.\nthe payer must be a tx signer (and thus have signed this field in AuthInfo).\nsetting this field does *not* change the ordering of required signers for the transaction.","type":"string"}}},"cosmos.tx.v1beta1.GetBlockWithTxsResponse":{"description":"GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs\nmethod.\n\nSince: cosmos-sdk 0.45.2","type":"object","properties":{"block":{"$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"pagination":{"description":"pagination defines a pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"txs":{"description":"txs are the transactions in the block.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.GetTxResponse":{"description":"GetTxResponse is the response type for the Service.GetTx method.","type":"object","properties":{"tx":{"description":"tx is the queried transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.GetTxsEventResponse":{"description":"GetTxsEventResponse is the response type for the Service.TxsByEvents\nRPC method.","type":"object","properties":{"pagination":{"description":"pagination defines a pagination for the response.\nDeprecated post v0.46.x: use total instead.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64","title":"total is total number of results available"},"tx_responses":{"description":"tx_responses is the list of queried TxResponses.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}},"txs":{"description":"txs is the list of queried transactions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.ModeInfo":{"description":"ModeInfo describes the signing mode of a single or nested multisig signer.","type":"object","properties":{"multi":{"title":"multi represents a nested multisig signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi"},"single":{"title":"single represents a single signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Single"}}},"cosmos.tx.v1beta1.ModeInfo.Multi":{"type":"object","title":"Multi is the mode info for a multisig public key","properties":{"bitarray":{"title":"bitarray specifies which keys within the multisig are signing","$ref":"#/definitions/cosmos.crypto.multisig.v1beta1.CompactBitArray"},"mode_infos":{"type":"array","title":"mode_infos is the corresponding modes of the signers of the multisig\nwhich could include nested multisig public keys","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"}}}},"cosmos.tx.v1beta1.ModeInfo.Single":{"type":"object","title":"Single is the mode info for a single signer. It is structured as a message\nto allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\nfuture","properties":{"mode":{"title":"mode is the signing mode of the single signer","$ref":"#/definitions/cosmos.tx.signing.v1beta1.SignMode"}}},"cosmos.tx.v1beta1.OrderBy":{"description":"- ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","type":"string","title":"OrderBy defines the sorting order","default":"ORDER_BY_UNSPECIFIED","enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"]},"cosmos.tx.v1beta1.SignerInfo":{"description":"SignerInfo describes the public key and signing mode of a single top-level\nsigner.","type":"object","properties":{"mode_info":{"title":"mode_info describes the signing mode of the signer and is a nested\nstructure to support nested multisig pubkey's","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"},"public_key":{"description":"public_key is the public key of the signer. It is optional for accounts\nthat already exist in state. If unset, the verifier can use the required \\\nsigner address for this position and lookup the public key.","$ref":"#/definitions/google.protobuf.Any"},"sequence":{"description":"sequence is the sequence of the account, which describes the\nnumber of committed transactions signed by a given address. It is used to\nprevent replay attacks.","type":"string","format":"uint64"}}},"cosmos.tx.v1beta1.SimulateRequest":{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to simulate.\nDeprecated. Send raw tx bytes instead.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_bytes":{"description":"tx_bytes is the raw transaction.\n\nSince: cosmos-sdk 0.43","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.SimulateResponse":{"description":"SimulateResponse is the response type for the\nService.SimulateRPC method.","type":"object","properties":{"gas_info":{"description":"gas_info is the information about gas used in the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.GasInfo"},"result":{"description":"result is the result of the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.Result"}}},"cosmos.tx.v1beta1.Tip":{"description":"Tip is the tip used for meta-transactions.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of the tip","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"tipper":{"type":"string","title":"tipper is the address of the account paying for the tip"}}},"cosmos.tx.v1beta1.Tx":{"description":"Tx is the standard type used for broadcasting transactions.","type":"object","properties":{"auth_info":{"title":"auth_info is the authorization related content of the transaction,\nspecifically signers, signer modes and fee","$ref":"#/definitions/cosmos.tx.v1beta1.AuthInfo"},"body":{"title":"body is the processable content of the transaction","$ref":"#/definitions/cosmos.tx.v1beta1.TxBody"},"signatures":{"description":"signatures is a list of signatures that matches the length and order of\nAuthInfo's signer_infos to allow connecting signature meta information like\npublic key and signing mode by position.","type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.tx.v1beta1.TxBody":{"description":"TxBody is the body of a transaction that all signers sign over.","type":"object","properties":{"extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, the transaction will be rejected","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"memo":{"description":"memo is any arbitrary note/comment to be added to the transaction.\nWARNING: in clients, any publicly exposed text should not be called memo,\nbut should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).","type":"string"},"messages":{"description":"messages is a list of messages to be executed. The required signers of\nthose messages define the number and order of elements in AuthInfo's\nsigner_infos and Tx's signatures. Each required signer address is added to\nthe list only the first time it occurs.\nBy convention, the first required signer (usually from the first message)\nis referred to as the primary signer and pays the fee for the whole\ntransaction.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"non_critical_extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, they will be ignored","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"timeout_height":{"type":"string","format":"uint64","title":"timeout is the block height after which this transaction will not\nbe processed by the chain"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeAminoResponse":{"description":"TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeResponse":{"description":"TxDecodeResponse is the response type for the\nService.TxDecode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the decoded transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeAminoRequest":{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxEncodeRequest":{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the transaction to encode.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeResponse":{"description":"TxEncodeResponse is the response type for the\nService.TxEncode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the encoded transaction bytes.","type":"string","format":"byte"}}},"cosmos.upgrade.v1beta1.ModuleVersion":{"description":"ModuleVersion specifies a module and its consensus version.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"name":{"type":"string","title":"name of the app module"},"version":{"type":"string","format":"uint64","title":"consensus version of the app module"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgrade":{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse":{"description":"MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"plan":{"description":"plan is the upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse":{"description":"MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.Plan":{"description":"Plan specifies information about a planned upgrade and when it should occur.","type":"object","properties":{"height":{"description":"The height at which the upgrade must be performed.","type":"string","format":"int64"},"info":{"type":"string","title":"Any application specific upgrade info to be included on-chain\nsuch as a git commit that validators could automatically upgrade to"},"name":{"description":"Sets the name for the upgrade. This name will be used by the upgraded\nversion of the software to apply any special \"on-upgrade\" commands during\nthe first BeginBlock method after the upgrade is applied. It is also used\nto detect whether a software version can handle a given upgrade. If no\nupgrade handler with this name has been set in the software, it will be\nassumed that the software is out-of-date when the upgrade Time or Height is\nreached and the software will exit.","type":"string"},"time":{"description":"Deprecated: Time based upgrades have been deprecated. Time based upgrade logic\nhas been removed from the SDK.\nIf this field is not empty, an error will be thrown.","type":"string","format":"date-time"},"upgraded_client_state":{"description":"Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been\nmoved to the IBC module in the sub module 02-client.\nIf this field is not empty, an error will be thrown.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.upgrade.v1beta1.QueryAppliedPlanResponse":{"description":"QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC\nmethod.","type":"object","properties":{"height":{"description":"height is the block height at which the plan was applied.","type":"string","format":"int64"}}},"cosmos.upgrade.v1beta1.QueryAuthorityResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"QueryAuthorityResponse is the response type for Query/Authority","properties":{"address":{"type":"string"}}},"cosmos.upgrade.v1beta1.QueryCurrentPlanResponse":{"description":"QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC\nmethod.","type":"object","properties":{"plan":{"description":"plan is the current upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.QueryModuleVersionsResponse":{"description":"QueryModuleVersionsResponse is the response type for the Query/ModuleVersions\nRPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"module_versions":{"description":"module_versions is a list of module names with their consensus versions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.upgrade.v1beta1.ModuleVersion"}}}},"cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState\nRPC method.","type":"object","properties":{"upgraded_consensus_state":{"type":"string","format":"byte","title":"Since: cosmos-sdk 0.43"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"from_address":{"type":"string"},"start_time":{"description":"start of vesting as unix time (in seconds).","type":"string","format":"int64"},"to_address":{"type":"string"},"vesting_periods":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.vesting.v1beta1.Period"}}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount\nresponse type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse":{"description":"MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreateVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"delayed":{"type":"boolean"},"end_time":{"description":"end of vesting as unix time (in seconds).","type":"string","format":"int64"},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type.","type":"object"},"cosmos.vesting.v1beta1.Period":{"description":"Period defines a length of time and amount of coins that will vest.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"length":{"description":"Period duration in seconds.","type":"string","format":"int64"}}},"cosmwasm.wasm.v1.AbsoluteTxPosition":{"description":"AbsoluteTxPosition is a unique transaction position that allows for global\nordering of transactions.","type":"object","properties":{"block_height":{"type":"string","format":"uint64","title":"BlockHeight is the block the contract was created at"},"tx_index":{"type":"string","format":"uint64","title":"TxIndex is a monotonic counter within the block (actual transaction index,\nor gas consumed)"}}},"cosmwasm.wasm.v1.AccessConfig":{"description":"AccessConfig access control type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.AccessType":{"description":"- ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty value\n - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses","type":"string","title":"AccessType permission types","default":"ACCESS_TYPE_UNSPECIFIED","enum":["ACCESS_TYPE_UNSPECIFIED","ACCESS_TYPE_NOBODY","ACCESS_TYPE_EVERYBODY","ACCESS_TYPE_ANY_OF_ADDRESSES"]},"cosmwasm.wasm.v1.CodeInfoResponse":{"type":"object","title":"CodeInfoResponse contains code meta data from CodeInfo","properties":{"code_id":{"type":"string","format":"uint64","title":"id for legacy support"},"creator":{"type":"string"},"data_hash":{"type":"string","format":"byte"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.ContractCodeHistoryEntry":{"description":"ContractCodeHistoryEntry metadata to a contract.","type":"object","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"msg":{"type":"string","format":"byte"},"operation":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryOperationType"},"updated":{"description":"Updated Tx position when the operation was executed.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"}}},"cosmwasm.wasm.v1.ContractCodeHistoryOperationType":{"description":"- CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data","type":"string","title":"ContractCodeHistoryOperationType actions that caused a code change","default":"CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","enum":["CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT","CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE","CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS"]},"cosmwasm.wasm.v1.ContractInfo":{"type":"object","title":"ContractInfo stores a WASM contract instance","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored Wasm code"},"created":{"description":"Created Tx position when the contract was instantiated.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"},"creator":{"type":"string","title":"Creator address who initially instantiated the contract"},"extension":{"description":"Extension is an extension point to store custom metadata within the\npersistence model.","$ref":"#/definitions/google.protobuf.Any"},"ibc2_port_id":{"type":"string"},"ibc_port_id":{"type":"string"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"}}},"cosmwasm.wasm.v1.Model":{"type":"object","title":"Model is a struct that holds a KV pair","properties":{"key":{"type":"string","format":"byte","title":"hex-encode key to read it better (this is often ascii)"},"value":{"type":"string","format":"byte","title":"base64-encode raw value"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses":{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse":{"description":"MsgAddCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgAddCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgClearAdmin":{"type":"object","title":"MsgClearAdmin removes any admin stored for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgClearAdminResponse":{"type":"object","title":"MsgClearAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgExecuteContract":{"type":"object","title":"MsgExecuteContract submits the given message data to a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on execution","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgExecuteContractResponse":{"description":"MsgExecuteContractResponse returns execution result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContract":{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2":{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"fix_msg":{"type":"boolean","title":"FixMsg include the msg value into the hash for the predictable address.\nDefault is false"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"salt":{"description":"Salt is an arbitrary value provided by the sender. Size can be 1 to 64.","type":"string","format":"byte"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2Response":{"type":"object","title":"MsgInstantiateContract2Response return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContractResponse":{"type":"object","title":"MsgInstantiateContractResponse return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgMigrateContract":{"type":"object","title":"MsgMigrateContract runs a code upgrade/ downgrade for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the new WASM code"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgMigrateContractResponse":{"description":"MsgMigrateContractResponse returns contract migration result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains same raw bytes returned as data from the wasm contract.\n(May be empty)"}}},"cosmwasm.wasm.v1.MsgPinCodes":{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the new WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgPinCodesResponse":{"description":"MsgPinCodesResponse defines the response structure for executing a\nMsgPinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses":{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse":{"description":"MsgRemoveCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgRemoveCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContract":{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"authority":{"description":"Authority is the address of the governance account.","type":"string"},"builder":{"type":"string","title":"Builder is the docker image used to build the code deterministically, used\nfor smart contract verification"},"code_hash":{"type":"string","format":"byte","title":"CodeHash is the SHA256 sum of the code outputted by builder, used for smart\ncontract verification"},"funds":{"type":"array","title":"Funds coins that are transferred from the authority account to the contract\non instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"source":{"type":"string","title":"Source is the URL where the code is hosted"},"unpin_code":{"description":"UnpinCode code on upload, optional. As default the uploaded contract is\npinned to cache.","type":"boolean"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse":{"description":"MsgStoreAndInstantiateContractResponse defines the response structure\nfor executing a MsgStoreAndInstantiateContract message.\n\nSince: 0.40","type":"object","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContract":{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse":{"description":"MsgStoreAndMigrateContractResponse defines the response structure\nfor executing a MsgStoreAndMigrateContract message.\n\nSince: 0.42","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreCode":{"type":"object","title":"MsgStoreCode submit Wasm code to the system","properties":{"instantiate_permission":{"title":"InstantiatePermission access control to apply on contract creation,\noptional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreCodeResponse":{"description":"MsgStoreCodeResponse returns store result data.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"}}},"cosmwasm.wasm.v1.MsgSudoContract":{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract as sudo"}}},"cosmwasm.wasm.v1.MsgSudoContractResponse":{"description":"MsgSudoContractResponse defines the response structure for executing a\nMsgSudoContract message.\n\nSince: 0.40","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgUnpinCodes":{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgUnpinCodesResponse":{"description":"MsgUnpinCodesResponse defines the response structure for executing a\nMsgUnpinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgUpdateAdmin":{"type":"object","title":"MsgUpdateAdmin sets a new admin for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_admin":{"type":"string","title":"NewAdmin address to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateAdminResponse":{"type":"object","title":"MsgUpdateAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateContractLabel":{"type":"object","title":"MsgUpdateContractLabel sets a new label for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_label":{"type":"string","title":"NewLabel string to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateContractLabelResponse":{"type":"object","title":"MsgUpdateContractLabelResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfig":{"type":"object","title":"MsgUpdateInstantiateConfig updates instantiate config for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the stored WASM code"},"new_instantiate_permission":{"title":"NewInstantiatePermission is the new access control","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse":{"type":"object","title":"MsgUpdateInstantiateConfigResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/wasm parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.Params":{"description":"Params defines the set of wasm parameters.","type":"object","properties":{"code_upload_access":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"instantiate_default_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.QueryAllContractStateResponse":{"type":"object","title":"QueryAllContractStateResponse is the response type for the\nQuery/AllContractState RPC method","properties":{"models":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.Model"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryBuildAddressResponse":{"description":"QueryBuildAddressResponse is the response type for the Query/BuildAddress RPC\nmethod.","type":"object","properties":{"address":{"type":"string","title":"Address is the contract address"}}},"cosmwasm.wasm.v1.QueryCodeInfoResponse":{"type":"object","title":"QueryCodeInfoResponse is the response type for the Query/CodeInfo RPC method","properties":{"checksum":{"type":"string","format":"byte"},"code_id":{"type":"string","format":"uint64"},"creator":{"type":"string"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.QueryCodeResponse":{"type":"object","title":"QueryCodeResponse is the response type for the Query/Code RPC method","properties":{"code_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"},"data":{"type":"string","format":"byte"}}},"cosmwasm.wasm.v1.QueryCodesResponse":{"type":"object","title":"QueryCodesResponse is the response type for the Query/Codes RPC method","properties":{"code_infos":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractHistoryResponse":{"type":"object","title":"QueryContractHistoryResponse is the response type for the\nQuery/ContractHistory RPC method","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryEntry"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractInfoResponse":{"type":"object","title":"QueryContractInfoResponse is the response type for the Query/ContractInfo RPC\nmethod","properties":{"address":{"type":"string","title":"address is the address of the contract"},"contract_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractInfo"}}},"cosmwasm.wasm.v1.QueryContractsByCodeResponse":{"type":"object","title":"QueryContractsByCodeResponse is the response type for the\nQuery/ContractsByCode RPC method","properties":{"contracts":{"type":"array","title":"contracts are a set of contract addresses","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractsByCreatorResponse":{"description":"QueryContractsByCreatorResponse is the response type for the\nQuery/ContractsByCreator RPC method.","type":"object","properties":{"contract_addresses":{"type":"array","title":"ContractAddresses result set","items":{"type":"string"}},"pagination":{"description":"Pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.QueryPinnedCodesResponse":{"type":"object","title":"QueryPinnedCodesResponse is the response type for the\nQuery/PinnedCodes RPC method","properties":{"code_ids":{"type":"array","items":{"type":"string","format":"uint64"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryRawContractStateResponse":{"type":"object","title":"QueryRawContractStateResponse is the response type for the\nQuery/RawContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the raw store data"}}},"cosmwasm.wasm.v1.QuerySmartContractStateResponse":{"type":"object","title":"QuerySmartContractStateResponse is the response type for the\nQuery/SmartContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the json data returned from the smart contract"}}},"cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse":{"description":"QueryWasmLimitsConfigResponse is the response type for the\nQuery/WasmLimitsConfig RPC method. It contains the JSON encoded limits for\nstatic validation of Wasm files.","type":"object","properties":{"config":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount":{"type":"object","title":"MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount","properties":{"connection_id":{"type":"string"},"ordering":{"$ref":"#/definitions/ibc.core.channel.v1.Order"},"owner":{"type":"string"},"version":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse":{"type":"object","title":"MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTx":{"type":"object","title":"MsgSendTx defines the payload for Msg/SendTx","properties":{"connection_id":{"type":"string"},"owner":{"type":"string"},"packet_data":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.InterchainAccountPacketData"},"relative_timeout":{"description":"Relative timeout timestamp provided will be added to the current block time during transaction execution.\nThe timeout timestamp must be non-zero.","type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse":{"type":"object","title":"MsgSendTxResponse defines the response for MsgSendTx","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/controller parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.controller.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the controller submodule.","type":"object","properties":{"controller_enabled":{"description":"controller_enabled enables or disables the controller submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse":{"description":"QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method.","type":"object","properties":{"address":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe":{"type":"object","title":"MsgModuleQuerySafe defines the payload for Msg/ModuleQuerySafe","properties":{"requests":{"description":"requests defines the module safe queries to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryRequest"}},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse":{"type":"object","title":"MsgModuleQuerySafeResponse defines the response for Msg/ModuleQuerySafe","properties":{"height":{"type":"string","format":"uint64","title":"height at which the responses were queried"},"responses":{"type":"array","title":"protobuf encoded responses for each query","items":{"type":"string","format":"byte"}}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/host parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.host.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the host submodule.","type":"object","properties":{"allow_messages":{"description":"allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain.","type":"array","items":{"type":"string"}},"host_enabled":{"description":"host_enabled enables or disables the host submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.host.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.QueryRequest":{"description":"QueryRequest defines the parameters for a particular query request\nby an interchain account.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"data defines the payload of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"},"path":{"type":"string","title":"path defines the path of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"}}},"ibc.applications.interchain_accounts.v1.InterchainAccountPacketData":{"description":"InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.","type":"object","properties":{"data":{"type":"string","format":"byte"},"memo":{"type":"string"},"type":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.Type"}}},"ibc.applications.interchain_accounts.v1.Type":{"description":"- TYPE_UNSPECIFIED: Default zero value enumeration\n - TYPE_EXECUTE_TX: Execute a transaction on an interchain accounts host chain","type":"string","title":"Type defines a classification of message issued from a controller chain to its associated interchain accounts\nhost","default":"TYPE_UNSPECIFIED","enum":["TYPE_UNSPECIFIED","TYPE_EXECUTE_TX"]},"ibc.applications.transfer.v1.Denom":{"description":"Denom holds the base denom of a Token and a trace of the chains it was sent through.","type":"object","properties":{"base":{"type":"string","title":"the base token denomination"},"trace":{"type":"array","title":"the trace of the token","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Hop"}}}},"ibc.applications.transfer.v1.Hop":{"type":"object","title":"Hop defines a port ID, channel ID pair specifying a unique \"hop\" in a trace","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.transfer.v1.MsgTransfer":{"type":"object","title":"MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between\nICS20 enabled chains. See ICS Spec here:\nhttps://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures","properties":{"encoding":{"type":"string","title":"optional encoding"},"memo":{"type":"string","title":"optional memo"},"receiver":{"type":"string","title":"the recipient address on the destination chain"},"sender":{"type":"string","title":"the sender address"},"source_channel":{"type":"string","title":"the channel by which the packet will be sent"},"source_port":{"type":"string","title":"the port on which the packet will be sent"},"timeout_height":{"description":"Timeout height relative to the current block height.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted.","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"description":"Timeout timestamp in absolute nanoseconds since unix epoch.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set.","type":"string","format":"uint64"},"token":{"title":"token to be transferred","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.applications.transfer.v1.MsgTransferResponse":{"description":"MsgTransferResponse defines the Msg/Transfer response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64","title":"sequence number of the transfer packet sent"}}},"ibc.applications.transfer.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"params":{"description":"params defines the transfer parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.transfer.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibc.applications.transfer.v1.Params":{"description":"Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false.","type":"object","properties":{"receive_enabled":{"description":"receive_enabled enables or disables all cross-chain token transfers to this\nchain.","type":"boolean"},"send_enabled":{"description":"send_enabled enables or disables all cross-chain token transfers from this\nchain.","type":"boolean"}}},"ibc.applications.transfer.v1.QueryDenomHashResponse":{"description":"QueryDenomHashResponse is the response type for the Query/DenomHash RPC\nmethod.","type":"object","properties":{"hash":{"description":"hash (in hex format) of the denomination trace information.","type":"string"}}},"ibc.applications.transfer.v1.QueryDenomResponse":{"description":"QueryDenomResponse is the response type for the Query/Denom RPC\nmethod.","type":"object","properties":{"denom":{"description":"denom returns the requested denomination.","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}}},"ibc.applications.transfer.v1.QueryDenomsResponse":{"description":"QueryDenomsResponse is the response type for the Query/Denoms RPC\nmethod.","type":"object","properties":{"denoms":{"description":"denoms returns all denominations.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.applications.transfer.v1.QueryEscrowAddressResponse":{"description":"QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.","type":"object","properties":{"escrow_address":{"type":"string","title":"the escrow account address"}}},"ibc.applications.transfer.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"}}},"ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse":{"description":"QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.core.channel.v1.Channel":{"description":"Channel defines pipeline for exactly-once packet delivery between specific\nmodules on separate blockchains, which has at least one end capable of\nsending packets and one end capable of receiving packets.","type":"object","properties":{"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.Counterparty":{"type":"object","title":"Counterparty defines a channel end counterparty","properties":{"channel_id":{"type":"string","title":"channel end on the counterparty chain"},"port_id":{"description":"port on the counterparty chain which owns the other end of the channel.","type":"string"}}},"ibc.core.channel.v1.IdentifiedChannel":{"description":"IdentifiedChannel defines a channel with additional port and channel\nidentifier fields.","type":"object","properties":{"channel_id":{"type":"string","title":"channel identifier"},"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"port_id":{"type":"string","title":"port identifier"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.MsgAcknowledgement":{"type":"object","title":"MsgAcknowledgement receives incoming IBC acknowledgement","properties":{"acknowledgement":{"type":"string","format":"byte"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgChannelCloseConfirm":{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseConfirmResponse":{"description":"MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelCloseInit":{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseInitResponse":{"description":"MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenAck":{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"counterparty_channel_id":{"type":"string"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenAckResponse":{"description":"MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenConfirm":{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenConfirmResponse":{"description":"MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenInit":{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","type":"object","properties":{"channel":{"$ref":"#/definitions/ibc.core.channel.v1.Channel"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenInitResponse":{"description":"MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTry":{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","type":"object","properties":{"channel":{"description":"NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC.","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"previous_channel_id":{"description":"Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC.","type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTryResponse":{"description":"MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacket":{"type":"object","title":"MsgRecvPacket receives incoming IBC packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnClose":{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","type":"object","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_close":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnCloseResponse":{"description":"MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.Order":{"description":"- ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\nwhich they were sent.\n - ORDER_ORDERED: packets are delivered exactly in the order which they were sent","type":"string","title":"Order defines if a channel is ORDERED or UNORDERED","default":"ORDER_NONE_UNSPECIFIED","enum":["ORDER_NONE_UNSPECIFIED","ORDER_UNORDERED","ORDER_ORDERED"]},"ibc.core.channel.v1.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"data":{"type":"string","format":"byte","title":"actual opaque bytes transferred directly to the application module"},"destination_channel":{"description":"identifies the channel end on the receiving chain.","type":"string"},"destination_port":{"description":"identifies the port on the receiving chain.","type":"string"},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_channel":{"description":"identifies the channel end on the sending chain.","type":"string"},"source_port":{"description":"identifies the port on the sending chain.","type":"string"},"timeout_height":{"title":"block height after which the packet times out","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"type":"string","format":"uint64","title":"block timestamp (in nanoseconds) after which the packet times out"}}},"ibc.core.channel.v1.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"channel_id":{"description":"channel unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"port_id":{"description":"channel port identifier.","type":"string"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v1.QueryChannelClientStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelConsensusStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelResponse":{"description":"QueryChannelResponse is the response type for the Query/Channel RPC method.\nBesides the Channel end, it includes a proof and the height from which the\nproof was retrieved.","type":"object","properties":{"channel":{"title":"channel associated with the request identifiers","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelsResponse":{"description":"QueryChannelsResponse is the response type for the Query/Channels RPC method.","type":"object","properties":{"channels":{"description":"list of stored channels of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryConnectionChannelsResponse":{"type":"object","title":"QueryConnectionChannelsResponse is the Response type for the\nQuery/QueryConnectionChannels RPC method","properties":{"channels":{"description":"list of channels associated with a connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryNextSequenceReceiveResponse":{"type":"object","title":"QuerySequenceResponse is the response type for the\nQuery/QueryNextSequenceReceiveResponse RPC method","properties":{"next_sequence_receive":{"type":"string","format":"uint64","title":"next sequence receive number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the request type for the\nQuery/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementResponse":{"type":"object","title":"QueryPacketAcknowledgementResponse defines the client query response for a\npacket which also includes a proof and the height from which the\nproof was retrieved","properties":{"acknowledgement":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketCommitmentResponse":{"type":"object","title":"QueryPacketCommitmentResponse defines the client query response for a packet\nwhich also includes a proof and the height from which the proof was\nretrieved","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketCommitmentsResponse":{"type":"object","title":"QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method","properties":{"commitments":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketReceiptResponse":{"type":"object","title":"QueryPacketReceiptResponse defines the client query response for a packet\nreceipt which also includes a proof, and the height from which the proof was\nretrieved","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v1.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.channel.v1.State":{"description":"State defines if a channel is in one of the following states:\nCLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A channel has just started the opening handshake.\n - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n - STATE_OPEN: A channel has completed the handshake. Open channels are\nready to send and receive packets.\n - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\npackets.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN","STATE_CLOSED"]},"ibc.core.channel.v2.Acknowledgement":{"description":"Acknowledgement contains a list of all ack results associated with a single packet.\nIn the case of a successful receive, the acknowledgement will contain an app acknowledgement\nfor each application that received a payload in the same order that the payloads were sent\nin the packet.\nIf the receive is not successful, the acknowledgement will contain a single app acknowledgment\nwhich will be a constant error acknowledgment as defined by the IBC v2 protocol.","type":"object","properties":{"app_acknowledgements":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.channel.v2.MsgAcknowledgement":{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","type":"object","properties":{"acknowledgement":{"$ref":"#/definitions/ibc.core.channel.v2.Acknowledgement"},"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgRecvPacket":{"description":"MsgRecvPacket receives an incoming IBC packet.","type":"object","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgSendPacket":{"description":"MsgSendPacket sends an outgoing IBC packet.","type":"object","properties":{"payloads":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"signer":{"type":"string"},"source_client":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgSendPacketResponse":{"description":"MsgSendPacketResponse defines the Msg/SendPacket response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"destination_client":{"description":"identifies the receiving client on the receiving chain.","type":"string"},"payloads":{"description":"a list of payloads, each one for a specific application.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_client":{"description":"identifies the sending client on the sending chain.","type":"string"},"timeout_timestamp":{"description":"timeout timestamp in seconds after which the packet times out.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"client_id":{"description":"client unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.Payload":{"type":"object","title":"Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes)","properties":{"destination_port":{"description":"specifies the destination port of the packet.","type":"string"},"encoding":{"description":"the encoding used for the provided value.","type":"string"},"source_port":{"description":"specifies the source port of the packet.","type":"string"},"value":{"description":"the raw bytes for the payload.","type":"string","format":"byte"},"version":{"description":"version of the specified application.","type":"string"}}},"ibc.core.channel.v2.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementResponse":{"description":"QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method.","type":"object","properties":{"acknowledgement":{"type":"string","format":"byte","title":"acknowledgement associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketCommitmentResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketCommitmentsResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitments":{"description":"collection of packet commitments for the requested channel identifier.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"description":"query block height.","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"description":"pagination response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketReceiptResponse":{"description":"QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method.","type":"object","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence or absence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v2.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.client.v1.ConsensusStateWithHeight":{"description":"ConsensusStateWithHeight defines a consensus state with an additional height\nfield.","type":"object","properties":{"consensus_state":{"title":"consensus state","$ref":"#/definitions/google.protobuf.Any"},"height":{"title":"consensus state height","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.Height":{"description":"Normally the RevisionHeight is incremented at each height while keeping\nRevisionNumber the same. However some consensus algorithms may choose to\nreset the height in certain conditions e.g. hard forks, state-machine\nbreaking changes In these cases, the RevisionNumber is incremented so that\nheight continues to be monitonically increasing even as the RevisionHeight\ngets reset\n\nPlease note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag.\nThis enforces the Go json marshaller to always emit zero values for both revision_number and revision_height.","type":"object","title":"Height is a monotonically increasing data type\nthat can be compared against another Height for the purposes of updating and\nfreezing clients","properties":{"revision_height":{"type":"string","format":"uint64","title":"the height within the given revision"},"revision_number":{"type":"string","format":"uint64","title":"the revision that the client is currently on"}}},"ibc.core.client.v1.IdentifiedClientState":{"description":"IdentifiedClientState defines a client state with an additional client\nidentifier field.","type":"object","properties":{"client_id":{"type":"string","title":"client identifier"},"client_state":{"title":"client state","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgCreateClient":{"type":"object","title":"MsgCreateClient defines a message to create an IBC client","properties":{"client_state":{"title":"light client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"description":"consensus state associated with the client that corresponds to a given\nheight.","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgCreateClientResponse":{"description":"MsgCreateClientResponse defines the Msg/CreateClient response type.","type":"object","properties":{"client_id":{"type":"string"}}},"ibc.core.client.v1.MsgDeleteClientCreator":{"type":"object","title":"MsgDeleteClientCreator defines a message to delete the client creator of a client","properties":{"client_id":{"type":"string","title":"client identifier"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgDeleteClientCreatorResponse":{"description":"MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type.","type":"object"},"ibc.core.client.v1.MsgIBCSoftwareUpgrade":{"type":"object","title":"MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal","properties":{"plan":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"},"signer":{"type":"string","title":"signer address"},"upgraded_client_state":{"description":"An UpgradedClientState must be provided to perform an IBC breaking upgrade.\nThis will make the chain commit to the correct upgraded (self) client state\nbefore the upgrade occurs, so that connecting chains can verify that the\nnew upgraded client is valid by verifying a proof on the previous version\nof the chain. This will allow IBC connections to persist smoothly across\nplanned chain upgrades. Correspondingly, the UpgradedClientState field has been\ndeprecated in the Cosmos SDK to allow for this logic to exist solely in\nthe 02-client module.","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse":{"description":"MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type.","type":"object"},"ibc.core.client.v1.MsgRecoverClient":{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"subject_client_id":{"type":"string","title":"the client identifier for the client to be updated if the proposal passes"},"substitute_client_id":{"type":"string","title":"the substitute client identifier for the client which will replace the subject\nclient"}}},"ibc.core.client.v1.MsgRecoverClientResponse":{"description":"MsgRecoverClientResponse defines the Msg/RecoverClient response type.","type":"object"},"ibc.core.client.v1.MsgSubmitMisbehaviour":{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"misbehaviour":{"title":"misbehaviour used for freezing the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgSubmitMisbehaviourResponse":{"description":"MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response\ntype.","type":"object"},"ibc.core.client.v1.MsgUpdateClient":{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_message":{"title":"client message to update the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateClientResponse":{"description":"MsgUpdateClientResponse defines the Msg/UpdateClient response type.","type":"object"},"ibc.core.client.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","type":"object","properties":{"params":{"description":"params defines the client parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.client.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.client.v1.MsgUpgradeClient":{"type":"object","title":"MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client\nstate","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_state":{"title":"upgraded client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"title":"upgraded consensus state, only contains enough information to serve as a\nbasis of trust in update logic","$ref":"#/definitions/google.protobuf.Any"},"proof_upgrade_client":{"type":"string","format":"byte","title":"proof that old chain committed to new client"},"proof_upgrade_consensus_state":{"type":"string","format":"byte","title":"proof that old chain committed to new consensus state"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpgradeClientResponse":{"description":"MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.","type":"object"},"ibc.core.client.v1.Params":{"description":"Params defines the set of IBC light client parameters.","type":"object","properties":{"allowed_clients":{"description":"allowed_clients defines the list of allowed client state types which can be created\nand interacted with. If a client type is removed from the allowed clients list, usage\nof this client will be disabled until it is added again to the list.","type":"array","items":{"type":"string"}}}},"ibc.core.client.v1.QueryClientCreatorResponse":{"description":"QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC\nmethod.","type":"object","properties":{"creator":{"type":"string","title":"creator of the client"}}},"ibc.core.client.v1.QueryClientParamsResponse":{"description":"QueryClientParamsResponse is the response type for the Query/ClientParams RPC\nmethod.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.client.v1.Params"}}},"ibc.core.client.v1.QueryClientStateResponse":{"description":"QueryClientStateResponse is the response type for the Query/ClientState RPC\nmethod. Besides the client state, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryClientStatesResponse":{"description":"QueryClientStatesResponse is the response type for the Query/ClientStates RPC\nmethod.","type":"object","properties":{"client_states":{"description":"list of stored ClientStates of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryClientStatusResponse":{"description":"QueryClientStatusResponse is the response type for the Query/ClientStatus RPC\nmethod. It returns the current status of the IBC client.","type":"object","properties":{"status":{"type":"string"}}},"ibc.core.client.v1.QueryConsensusStateHeightsResponse":{"type":"object","title":"QueryConsensusStateHeightsResponse is the response type for the\nQuery/ConsensusStateHeights RPC method","properties":{"consensus_state_heights":{"type":"array","title":"consensus state heights","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.Height"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryConsensusStateResponse":{"type":"object","title":"QueryConsensusStateResponse is the response type for the Query/ConsensusState\nRPC method","properties":{"consensus_state":{"title":"consensus state associated with the client identifier at the given height","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryConsensusStatesResponse":{"type":"object","title":"QueryConsensusStatesResponse is the response type for the\nQuery/ConsensusStates RPC method","properties":{"consensus_states":{"type":"array","title":"consensus states associated with the identifier","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.ConsensusStateWithHeight"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryUpgradedClientStateResponse":{"description":"QueryUpgradedClientStateResponse is the response type for the\nQuery/UpgradedClientState RPC method.","type":"object","properties":{"upgraded_client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the\nQuery/UpgradedConsensusState RPC method.","type":"object","properties":{"upgraded_consensus_state":{"title":"Consensus state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryVerifyMembershipRequest":{"type":"object","title":"QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method","properties":{"block_delay":{"type":"string","format":"uint64","title":"optional block delay"},"client_id":{"description":"client unique identifier.","type":"string"},"merkle_path":{"description":"the commitment key path.","$ref":"#/definitions/ibc.core.commitment.v2.MerklePath"},"proof":{"description":"the proof to be verified by the client.","type":"string","format":"byte"},"proof_height":{"description":"the height of the commitment root at which the proof is verified.","$ref":"#/definitions/ibc.core.client.v1.Height"},"time_delay":{"type":"string","format":"uint64","title":"optional time delay"},"value":{"description":"the value which is proven.","type":"string","format":"byte"}}},"ibc.core.client.v1.QueryVerifyMembershipResponse":{"type":"object","title":"QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method","properties":{"success":{"description":"boolean indicating success or failure of proof verification.","type":"boolean"}}},"ibc.core.client.v2.Config":{"type":"object","title":"Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages\nfor a given client.\nIf it is set, then only relayers in the allow list can send v2 messages\nIf it is not set, then the client allows permissionless relaying of v2 messages","properties":{"allowed_relayers":{"type":"array","title":"allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client","items":{"type":"string"}}}},"ibc.core.client.v2.CounterpartyInfo":{"type":"object","title":"CounterpartyInfo defines the key that the counterparty will use to message our client","properties":{"client_id":{"type":"string","title":"client identifier is the identifier used to send packet messages to our client"},"merkle_prefix":{"type":"array","title":"merkle prefix key is the prefix that ics provable keys are stored under","items":{"type":"string","format":"byte"}}}},"ibc.core.client.v2.MsgRegisterCounterparty":{"type":"object","title":"MsgRegisterCounterparty defines a message to register a counterparty on a client","properties":{"client_id":{"type":"string","title":"client identifier"},"counterparty_client_id":{"type":"string","title":"counterparty client identifier"},"counterparty_merkle_prefix":{"type":"array","title":"counterparty merkle prefix","items":{"type":"string","format":"byte"}},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgRegisterCounterpartyResponse":{"description":"MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type.","type":"object"},"ibc.core.client.v2.MsgUpdateClientConfig":{"type":"object","title":"MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client","properties":{"client_id":{"type":"string","title":"client identifier"},"config":{"description":"NOTE: All fields in the config must be supplied.","title":"allowed relayers","$ref":"#/definitions/ibc.core.client.v2.Config"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgUpdateClientConfigResponse":{"description":"MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type.","type":"object"},"ibc.core.client.v2.QueryConfigResponse":{"type":"object","title":"QueryConfigResponse is the response type for the Query/Config RPC method","properties":{"config":{"$ref":"#/definitions/ibc.core.client.v2.Config"}}},"ibc.core.client.v2.QueryCounterpartyInfoResponse":{"description":"QueryCounterpartyInfoResponse is the response type for the\nQuery/CounterpartyInfo RPC method.","type":"object","properties":{"counterparty_info":{"$ref":"#/definitions/ibc.core.client.v2.CounterpartyInfo"}}},"ibc.core.commitment.v1.MerklePrefix":{"type":"object","title":"MerklePrefix is merkle path prefixed to the key.\nThe constructed key from the Path and the key will be append(Path.KeyPath,\nappend(Path.KeyPrefix, key...))","properties":{"key_prefix":{"type":"string","format":"byte"}}},"ibc.core.commitment.v2.MerklePath":{"description":"MerklePath is the path used to verify commitment proofs, which can be an\narbitrary structured object (defined by a commitment type).\nICS-23 verification supports membership proofs for nested merkle trees.\nThe ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix.\nThe IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash\nstored in the consensus state of the client.\nEach element of the path represents the key of a merkle tree from the root to the leaf.\nThe elements of the path before the final element must be the path to the tree that contains\nthe ICS24 provable store. Thus, it should remain constant for all ICS24 proofs.\nThe final element of the path is the key of the leaf in the ICS24 provable store,\nThus IBC core will append the ICS24 path to the final element of the MerklePath\nstored in the counterparty to create the full path to the leaf for proof verification.\nExamples:\nCosmos SDK:\nThe Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes\nare hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"ibc\", \"\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"ibc\", \"{packetCommitmentPath}\"] which will then be used for final verification.\nEthereum:\nThe Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed\nby the smart contract state. Each smart contract has a specific prefix reserved within the global trie.\nThus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie.\nSince there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"IBCCoreContractAddressStoragePrefix\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"IBCCoreContractAddressStoragePrefix{packetCommitmentPath}\"] which will then be used for final\nverification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the\nconsensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24\nprovable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified\nby the client against the root hash in the client's consensus state.","type":"object","properties":{"key_path":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.connection.v1.ConnectionEnd":{"description":"ConnectionEnd defines a stateful object on a chain connected to another\nseparate one.\nNOTE: there must only be 2 defined ConnectionEnds to establish\na connection between two chains.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period that must pass before a consensus state can be used for\npacket-verification NOTE: delay period logic is only implemented by some\nclients.","type":"string","format":"uint64"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"description":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.Counterparty":{"description":"Counterparty defines the counterparty chain associated with a connection end.","type":"object","properties":{"client_id":{"description":"identifies the client on the counterparty chain associated with a given\nconnection.","type":"string"},"connection_id":{"description":"identifies the connection end on the counterparty chain associated with a\ngiven connection.","type":"string"},"prefix":{"description":"commitment merkle prefix of the counterparty chain.","$ref":"#/definitions/ibc.core.commitment.v1.MerklePrefix"}}},"ibc.core.connection.v1.IdentifiedConnection":{"description":"IdentifiedConnection defines a connection with additional connection\nidentifier field.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period associated with this connection.","type":"string","format":"uint64"},"id":{"description":"connection identifier.","type":"string"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"type":"array","title":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.MsgConnectionOpenAck":{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","type":"object","properties":{"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"connection_id":{"type":"string"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty_connection_id":{"type":"string"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain B: `UNINITIALIZED -\u003e\nTRYOPEN`"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenAckResponse":{"description":"MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenConfirm":{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","type":"object","properties":{"connection_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte","title":"proof for the change of the connection state on Chain A: `INIT -\u003e OPEN`"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenConfirmResponse":{"description":"MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm\nresponse type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenInit":{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","type":"object","properties":{"client_id":{"type":"string"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"type":"string","format":"uint64"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenInitResponse":{"description":"MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response\ntype.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenTry":{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","type":"object","properties":{"client_id":{"type":"string"},"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"counterparty_versions":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}},"delay_period":{"type":"string","format":"uint64"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"previous_connection_id":{"description":"Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC.","type":"string"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain A: `UNINITIALIZED -\u003e\nINIT`"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenTryResponse":{"description":"MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type.","type":"object"},"ibc.core.connection.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","type":"object","properties":{"params":{"description":"params defines the connection parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.connection.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.connection.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.connection.v1.Params":{"description":"Params defines the set of Connection parameters.","type":"object","properties":{"max_expected_time_per_block":{"description":"maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the\nlargest amount of time that the chain might reasonably take to produce the next block under normal operating\nconditions. A safe choice is 3-5x the expected time per block.","type":"string","format":"uint64"}}},"ibc.core.connection.v1.QueryClientConnectionsResponse":{"type":"object","title":"QueryClientConnectionsResponse is the response type for the\nQuery/ClientConnections RPC method","properties":{"connection_paths":{"description":"slice of all the connection paths associated with a client.","type":"array","items":{"type":"string"}},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was generated","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionClientStateResponse":{"type":"object","title":"QueryConnectionClientStateResponse is the response type for the\nQuery/ConnectionClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionConsensusStateResponse":{"type":"object","title":"QueryConnectionConsensusStateResponse is the response type for the\nQuery/ConnectionConsensusState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionParamsResponse":{"description":"QueryConnectionParamsResponse is the response type for the Query/ConnectionParams RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.connection.v1.Params"}}},"ibc.core.connection.v1.QueryConnectionResponse":{"description":"QueryConnectionResponse is the response type for the Query/Connection RPC\nmethod. Besides the connection end, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"connection":{"title":"connection associated with the request identifier","$ref":"#/definitions/ibc.core.connection.v1.ConnectionEnd"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionsResponse":{"description":"QueryConnectionsResponse is the response type for the Query/Connections RPC\nmethod.","type":"object","properties":{"connections":{"description":"list of stored connections of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.IdentifiedConnection"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.connection.v1.State":{"description":"State defines if a connection is in one of the following states:\nINIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A connection end has just started the opening handshake.\n - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\nchain.\n - STATE_OPEN: A connection end has completed the handshake.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN"]},"ibc.core.connection.v1.Version":{"description":"Version defines the versioning scheme used to negotiate the IBC version in\nthe connection handshake.","type":"object","properties":{"features":{"type":"array","title":"list of features compatible with the specified identifier","items":{"type":"string"}},"identifier":{"type":"string","title":"unique version identifier"}}},"ibc.lightclients.wasm.v1.MsgMigrateContract":{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the new wasm byte code for the contract"},"client_id":{"type":"string","title":"the client id of the contract"},"msg":{"type":"string","format":"byte","title":"the json encoded message to be passed to the contract on migration"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgMigrateContractResponse":{"type":"object","title":"MsgMigrateContractResponse defines the response type for the MigrateContract rpc"},"ibc.lightclients.wasm.v1.MsgRemoveChecksum":{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash to be removed from the store"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse":{"type":"object","title":"MsgStoreChecksumResponse defines the response type for the StoreCode rpc"},"ibc.lightclients.wasm.v1.MsgStoreCode":{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"wasm_byte_code":{"type":"string","format":"byte","title":"wasm byte code of light client contract. It can be raw or gzip compressed"}}},"ibc.lightclients.wasm.v1.MsgStoreCodeResponse":{"type":"object","title":"MsgStoreCodeResponse defines the response type for the StoreCode rpc","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the stored code"}}},"ibc.lightclients.wasm.v1.QueryChecksumsResponse":{"description":"QueryChecksumsResponse is the response type for the Query/Checksums RPC method.","type":"object","properties":{"checksums":{"description":"checksums is a list of the hex encoded checksums of all wasm codes stored.","type":"array","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.lightclients.wasm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC method.","type":"object","properties":{"data":{"type":"string","format":"byte"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.AuditPeerObservation":{"type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the window.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.AuditReport":{"type":"object","properties":{"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.AuditSelfReport":{"type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.MsgSubmitAuditReport":{"type":"object","properties":{"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgSubmitAuditReportResponse":{"type":"object"},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"max_probe_targets_per_window":{"type":"integer","format":"int64"},"min_probe_targets_per_window":{"type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"reporting_window_blocks":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.QueryAuditReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.AuditReport"}}},"lumera.audit.v1.QueryAuditReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditReport"}}}},"lumera.audit.v1.QueryCurrentWindowResponse":{"type":"object","properties":{"window_end_height":{"type":"string","format":"int64"},"window_id":{"type":"string","format":"uint64"},"window_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QuerySelfReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SelfReport"}}}},"lumera.audit.v1.QuerySupernodeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SupernodeReport"}}}},"lumera.audit.v1.SelfReport":{"type":"object","properties":{"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.SupernodeReport":{"type":"object","properties":{"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"tendermint.abci.CheckTxType":{"type":"string","default":"NEW","enum":["NEW","RECHECK"]},"tendermint.abci.CommitInfo":{"type":"object","properties":{"round":{"type":"integer","format":"int32"},"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.VoteInfo"}}}},"tendermint.abci.Event":{"description":"Event allows application developers to attach additional information to\nResponseFinalizeBlock and ResponseCheckTx.\nLater, transactions may be queried using these events.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.EventAttribute"}},"type":{"type":"string"}}},"tendermint.abci.EventAttribute":{"description":"EventAttribute is a single key-value pair, associated with an event.","type":"object","properties":{"index":{"type":"boolean","title":"nondeterministic"},"key":{"type":"string"},"value":{"type":"string"}}},"tendermint.abci.ExecTxResult":{"description":"ExecTxResult contains results of executing one individual transaction.\n\n* Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","title":"nondeterministic","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ExtendedCommitInfo":{"description":"ExtendedCommitInfo is similar to CommitInfo except that it is only used in\nthe PrepareProposal request such that CometBFT can provide vote extensions\nto the application.","type":"object","properties":{"round":{"description":"The round at which the block proposer decided in the previous height.","type":"integer","format":"int32"},"votes":{"description":"List of validators' addresses in the last validator set with their voting\ninformation, including vote extensions.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExtendedVoteInfo"}}}},"tendermint.abci.ExtendedVoteInfo":{"type":"object","properties":{"block_id_flag":{"title":"block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all","$ref":"#/definitions/tendermint.types.BlockIDFlag"},"extension_signature":{"type":"string","format":"byte","title":"Vote extension signature created by CometBFT"},"validator":{"description":"The validator that sent the vote.","$ref":"#/definitions/tendermint.abci.Validator"},"vote_extension":{"description":"Non-deterministic extension provided by the sending validator's application.","type":"string","format":"byte"}}},"tendermint.abci.Misbehavior":{"type":"object","properties":{"height":{"type":"string","format":"int64","title":"The height when the offense occurred"},"time":{"type":"string","format":"date-time","title":"The corresponding time where the offense occurred"},"total_voting_power":{"type":"string","format":"int64","title":"Total voting power of the validator set in case the ABCI application does\nnot store historical validators.\nhttps://github.com/tendermint/tendermint/issues/4581"},"type":{"$ref":"#/definitions/tendermint.abci.MisbehaviorType"},"validator":{"title":"The offending validator","$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.abci.MisbehaviorType":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","DUPLICATE_VOTE","LIGHT_CLIENT_ATTACK"]},"tendermint.abci.RequestApplySnapshotChunk":{"type":"object","title":"Applies a snapshot chunk","properties":{"chunk":{"type":"string","format":"byte"},"index":{"type":"integer","format":"int64"},"sender":{"type":"string"}}},"tendermint.abci.RequestCheckTx":{"type":"object","properties":{"tx":{"type":"string","format":"byte"},"type":{"$ref":"#/definitions/tendermint.abci.CheckTxType"}}},"tendermint.abci.RequestCommit":{"type":"object"},"tendermint.abci.RequestEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.RequestExtendVote":{"type":"object","title":"Extends a vote with application-injected data","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this vote may be referring to"},"height":{"type":"string","format":"int64","title":"the height of the extended vote"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time","title":"info of the block that this vote may be referring to"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFinalizeBlock":{"type":"object","properties":{"decided_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"hash":{"description":"hash is the merkle root hash of the fields of the decided block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"proposer_address is the address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFlush":{"type":"object"},"tendermint.abci.RequestInfo":{"type":"object","properties":{"abci_version":{"type":"string"},"block_version":{"type":"string","format":"uint64"},"p2p_version":{"type":"string","format":"uint64"},"version":{"type":"string"}}},"tendermint.abci.RequestInitChain":{"type":"object","properties":{"app_state_bytes":{"type":"string","format":"byte"},"chain_id":{"type":"string"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"initial_height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.RequestListSnapshots":{"type":"object","title":"lists available snapshots"},"tendermint.abci.RequestLoadSnapshotChunk":{"type":"object","title":"loads a snapshot chunk","properties":{"chunk":{"type":"integer","format":"int64"},"format":{"type":"integer","format":"int64"},"height":{"type":"string","format":"uint64"}}},"tendermint.abci.RequestOfferSnapshot":{"type":"object","title":"offers a snapshot to the application","properties":{"app_hash":{"type":"string","format":"byte","title":"light client-verified app hash for snapshot height"},"snapshot":{"title":"snapshot offered by peers","$ref":"#/definitions/tendermint.abci.Snapshot"}}},"tendermint.abci.RequestPrepareProposal":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"local_last_commit":{"$ref":"#/definitions/tendermint.abci.ExtendedCommitInfo"},"max_tx_bytes":{"description":"the modified transactions cannot exceed this size.","type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"address of the public key of the validator proposing the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"description":"txs is an array of transactions that will be included in a block,\nsent to the app for possible modifications.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestProcessProposal":{"type":"object","properties":{"hash":{"description":"hash is the merkle root hash of the fields of the proposed block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestQuery":{"type":"object","properties":{"data":{"type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"path":{"type":"string"},"prove":{"type":"boolean"}}},"tendermint.abci.RequestVerifyVoteExtension":{"type":"object","title":"Verify the vote extension","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this received vote corresponds to"},"height":{"type":"string","format":"int64"},"validator_address":{"type":"string","format":"byte","title":"the validator that signed the vote extension"},"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseApplySnapshotChunk":{"type":"object","properties":{"refetch_chunks":{"type":"array","title":"Chunks to refetch and reapply","items":{"type":"integer","format":"int64"}},"reject_senders":{"type":"array","title":"Chunk senders to reject and ban","items":{"type":"string"}},"result":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk.Result"}}},"tendermint.abci.ResponseApplySnapshotChunk.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Chunk successfully accepted\n - ABORT: Abort all snapshot restoration\n - RETRY: Retry chunk (combine with refetch and reject)\n - RETRY_SNAPSHOT: Retry snapshot (combine with refetch and reject)\n - REJECT_SNAPSHOT: Reject this snapshot, try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","RETRY","RETRY_SNAPSHOT","REJECT_SNAPSHOT"]},"tendermint.abci.ResponseCheckTx":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ResponseCommit":{"type":"object","properties":{"retain_height":{"type":"string","format":"int64"}}},"tendermint.abci.ResponseEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.ResponseExtendVote":{"type":"object","properties":{"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseFinalizeBlock":{"type":"object","properties":{"app_hash":{"description":"app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was\ndeterministic. It is up to the application to decide which algorithm to use.","type":"string","format":"byte"},"consensus_param_updates":{"description":"updates to the consensus params, if any.","$ref":"#/definitions/tendermint.types.ConsensusParams"},"events":{"type":"array","title":"set of block events emmitted as part of executing the block","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"tx_results":{"type":"array","title":"the result of executing each transaction including the events\nthe particular transction emitted. This should match the order\nof the transactions delivered in the block itself","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExecTxResult"}},"validator_updates":{"description":"a list of updates to the validator set. These will reflect the validator set at current height + 2.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseFlush":{"type":"object"},"tendermint.abci.ResponseInfo":{"type":"object","properties":{"app_version":{"type":"string","format":"uint64"},"data":{"type":"string"},"last_block_app_hash":{"type":"string","format":"byte"},"last_block_height":{"type":"string","format":"int64"},"version":{"type":"string"}}},"tendermint.abci.ResponseInitChain":{"type":"object","properties":{"app_hash":{"type":"string","format":"byte"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseListSnapshots":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Snapshot"}}}},"tendermint.abci.ResponseLoadSnapshotChunk":{"type":"object","properties":{"chunk":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseOfferSnapshot":{"type":"object","properties":{"result":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot.Result"}}},"tendermint.abci.ResponseOfferSnapshot.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Snapshot accepted, apply chunks\n - ABORT: Abort all snapshot restoration\n - REJECT: Reject this specific snapshot, try others\n - REJECT_FORMAT: Reject all snapshots of this format, try others\n - REJECT_SENDER: Reject all snapshots from the sender(s), try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","REJECT","REJECT_FORMAT","REJECT_SENDER"]},"tendermint.abci.ResponsePrepareProposal":{"type":"object","properties":{"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.ResponseProcessProposal":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal.ProposalStatus"}}},"tendermint.abci.ResponseProcessProposal.ProposalStatus":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.ResponseQuery":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"description":"bytes data = 2; // use \"value\" instead.\n\nnondeterministic","type":"string"},"proof_ops":{"$ref":"#/definitions/tendermint.crypto.ProofOps"},"value":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseVerifyVoteExtension":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus"}}},"tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus":{"description":" - REJECT: Rejecting the vote extension will reject the entire precommit by the sender.\nIncorrectly implementing this thus has liveness implications as it may affect\nCometBFT's ability to receive 2/3+ valid votes to finalize the block.\nHonest nodes should never be rejected.","type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.Snapshot":{"type":"object","properties":{"chunks":{"type":"integer","format":"int64","title":"Number of chunks in the snapshot"},"format":{"type":"integer","format":"int64","title":"The application-specific snapshot format"},"hash":{"type":"string","format":"byte","title":"Arbitrary snapshot hash, equal only if identical"},"height":{"type":"string","format":"uint64","title":"The height at which the snapshot was taken"},"metadata":{"type":"string","format":"byte","title":"Arbitrary application metadata"}}},"tendermint.abci.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte","title":"The first 20 bytes of SHA256(public key)"},"power":{"description":"The voting power","type":"string","format":"int64","title":"PubKey pub_key = 2 [(gogoproto.nullable)=false];"}}},"tendermint.abci.ValidatorUpdate":{"type":"object","properties":{"power":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"}}},"tendermint.abci.VoteInfo":{"type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"validator":{"$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.crypto.ProofOp":{"type":"object","title":"ProofOp defines an operation used for calculating Merkle root\nThe data could be arbitrary format, providing nessecary data\nfor example neighbouring node hash","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"tendermint.crypto.ProofOps":{"type":"object","title":"ProofOps is Merkle proof defined by the list of ProofOps","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.crypto.ProofOp"}}}},"tendermint.crypto.PublicKey":{"type":"object","title":"PublicKey defines the keys available for use with Validators","properties":{"ed25519":{"type":"string","format":"byte"},"secp256k1":{"type":"string","format":"byte"}}},"tendermint.p2p.DefaultNodeInfo":{"type":"object","properties":{"channels":{"type":"string","format":"byte"},"default_node_id":{"type":"string"},"listen_addr":{"type":"string"},"moniker":{"type":"string"},"network":{"type":"string"},"other":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfoOther"},"protocol_version":{"$ref":"#/definitions/tendermint.p2p.ProtocolVersion"},"version":{"type":"string"}}},"tendermint.p2p.DefaultNodeInfoOther":{"type":"object","properties":{"rpc_address":{"type":"string"},"tx_index":{"type":"string"}}},"tendermint.p2p.ProtocolVersion":{"type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"},"p2p":{"type":"string","format":"uint64"}}},"tendermint.types.ABCIParams":{"description":"ABCIParams configure functionality specific to the Application Blockchain Interface.","type":"object","properties":{"vote_extensions_enable_height":{"description":"vote_extensions_enable_height configures the first height during which\nvote extensions will be enabled. During this specified height, and for all\nsubsequent heights, precommit messages that do not contain valid extension data\nwill be considered invalid. Prior to this height, vote extensions will not\nbe used or accepted by validators on the network.\n\nOnce enabled, vote extensions will be created by the application in ExtendVote,\npassed to the application for validation in VerifyVoteExtension and given\nto the application to use when proposing a block during PrepareProposal.","type":"string","format":"int64"}}},"tendermint.types.Block":{"type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/tendermint.types.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"tendermint.types.BlockID":{"type":"object","title":"BlockID","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"$ref":"#/definitions/tendermint.types.PartSetHeader"}}},"tendermint.types.BlockIDFlag":{"description":"- BLOCK_ID_FLAG_UNKNOWN: indicates an error condition\n - BLOCK_ID_FLAG_ABSENT: the vote was not received\n - BLOCK_ID_FLAG_COMMIT: voted for the block that received the majority\n - BLOCK_ID_FLAG_NIL: voted for nil","type":"string","title":"BlockIdFlag indicates which BlockID the signature is for","default":"BLOCK_ID_FLAG_UNKNOWN","enum":["BLOCK_ID_FLAG_UNKNOWN","BLOCK_ID_FLAG_ABSENT","BLOCK_ID_FLAG_COMMIT","BLOCK_ID_FLAG_NIL"]},"tendermint.types.BlockParams":{"description":"BlockParams contains limits on the block size.","type":"object","properties":{"max_bytes":{"type":"string","format":"int64","title":"Max block size, in bytes.\nNote: must be greater than 0"},"max_gas":{"type":"string","format":"int64","title":"Max gas per block.\nNote: must be greater or equal to -1"}}},"tendermint.types.Commit":{"description":"Commit contains the evidence that a block was committed by a set of validators.","type":"object","properties":{"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signatures":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.CommitSig"}}}},"tendermint.types.CommitSig":{"description":"CommitSig is a part of the Vote included in a Commit.","type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"signature":{"type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"validator_address":{"type":"string","format":"byte"}}},"tendermint.types.ConsensusParams":{"description":"ConsensusParams contains consensus critical parameters that determine the\nvalidity of blocks.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"block":{"$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"},"version":{"$ref":"#/definitions/tendermint.types.VersionParams"}}},"tendermint.types.Data":{"type":"object","title":"Data contains the set of transactions included in the block","properties":{"txs":{"description":"Txs that will be applied by state @ block.Height+1.\nNOTE: not all txs here are valid. We're just agreeing on the order first.\nThis means that block.AppHash does not include these txs.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.types.DuplicateVoteEvidence":{"description":"DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.","type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"},"validator_power":{"type":"string","format":"int64"},"vote_a":{"$ref":"#/definitions/tendermint.types.Vote"},"vote_b":{"$ref":"#/definitions/tendermint.types.Vote"}}},"tendermint.types.Evidence":{"type":"object","properties":{"duplicate_vote_evidence":{"$ref":"#/definitions/tendermint.types.DuplicateVoteEvidence"},"light_client_attack_evidence":{"$ref":"#/definitions/tendermint.types.LightClientAttackEvidence"}}},"tendermint.types.EvidenceList":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Evidence"}}}},"tendermint.types.EvidenceParams":{"description":"EvidenceParams determine how we handle evidence of malfeasance.","type":"object","properties":{"max_age_duration":{"description":"Max age of evidence, in time.\n\nIt should correspond with an app's \"unbonding period\" or other similar\nmechanism for handling [Nothing-At-Stake\nattacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).","type":"string"},"max_age_num_blocks":{"description":"Max age of evidence, in blocks.\n\nThe basic formula for calculating this is: MaxAgeDuration / {average block\ntime}.","type":"string","format":"int64"},"max_bytes":{"type":"string","format":"int64","title":"This sets the maximum size of total evidence in bytes that can be committed in a single block.\nand should fall comfortably under the max block bytes.\nDefault is 1048576 or 1MB"}}},"tendermint.types.Header":{"description":"Header defines the structure of a block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"type":"string","format":"byte","title":"original proposer of the block"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"tendermint.types.LightBlock":{"type":"object","properties":{"signed_header":{"$ref":"#/definitions/tendermint.types.SignedHeader"},"validator_set":{"$ref":"#/definitions/tendermint.types.ValidatorSet"}}},"tendermint.types.LightClientAttackEvidence":{"description":"LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.","type":"object","properties":{"byzantine_validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}},"common_height":{"type":"string","format":"int64"},"conflicting_block":{"$ref":"#/definitions/tendermint.types.LightBlock"},"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"}}},"tendermint.types.PartSetHeader":{"type":"object","title":"PartsetHeader","properties":{"hash":{"type":"string","format":"byte"},"total":{"type":"integer","format":"int64"}}},"tendermint.types.SignedHeader":{"type":"object","properties":{"commit":{"$ref":"#/definitions/tendermint.types.Commit"},"header":{"$ref":"#/definitions/tendermint.types.Header"}}},"tendermint.types.SignedMsgType":{"description":"SignedMsgType is a type of signed message in the consensus.\n\n - SIGNED_MSG_TYPE_PREVOTE: Votes\n - SIGNED_MSG_TYPE_PROPOSAL: Proposals","type":"string","default":"SIGNED_MSG_TYPE_UNKNOWN","enum":["SIGNED_MSG_TYPE_UNKNOWN","SIGNED_MSG_TYPE_PREVOTE","SIGNED_MSG_TYPE_PRECOMMIT","SIGNED_MSG_TYPE_PROPOSAL"]},"tendermint.types.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"},"voting_power":{"type":"string","format":"int64"}}},"tendermint.types.ValidatorParams":{"description":"ValidatorParams restrict the public key types validators can use.\nNOTE: uses ABCI pubkey naming, not Amino names.","type":"object","properties":{"pub_key_types":{"type":"array","items":{"type":"string"}}}},"tendermint.types.ValidatorSet":{"type":"object","properties":{"proposer":{"$ref":"#/definitions/tendermint.types.Validator"},"total_voting_power":{"type":"string","format":"int64"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}}}},"tendermint.types.VersionParams":{"description":"VersionParams contains the ABCI application version.","type":"object","properties":{"app":{"type":"string","format":"uint64"}}},"tendermint.types.Vote":{"description":"Vote represents a prevote or precommit vote from validators for\nconsensus.","type":"object","properties":{"block_id":{"description":"zero if vote is nil.","$ref":"#/definitions/tendermint.types.BlockID"},"extension":{"description":"Vote extension provided by the application. Only valid for precommit\nmessages.","type":"string","format":"byte"},"extension_signature":{"description":"Vote extension signature by the validator if they participated in\nconsensus for the associated block.\nOnly valid for precommit messages.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signature":{"description":"Vote signature by the validator if they participated in consensus for the\nassociated block.","type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"type":{"$ref":"#/definitions/tendermint.types.SignedMsgType"},"validator_address":{"type":"string","format":"byte"},"validator_index":{"type":"integer","format":"int32"}}},"tendermint.version.Consensus":{"description":"Consensus captures the consensus rules for processing a block in the blockchain,\nincluding all blockchain data structures and the rules of the application's\nstate transition machine.","type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"}}}},"tags":[{"name":"Query"},{"name":"Msg"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file +{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}":{"get":{"tags":["Query"],"summary":"AssignedTargets returns the prober -\u003e targets assignment for a given supernode_account.\nIf filter_by_window_id is false, it returns the assignments for the current window.","operationId":"GithubComLumeraProtocollumeraQuery_AssignedTargets","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"boolean","name":"filter_by_window_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAssignedTargetsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_report/{window_id}/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReport","parameters":[{"type":"string","format":"uint64","name":"window_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_window":{"get":{"tags":["Query"],"summary":"CurrentWindow returns the current derived window boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentWindow","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentWindowResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin11","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SelfReports returns self-reports submitted by the given supernode_account across windows.","operationId":"GithubComLumeraProtocollumeraQuery_SelfReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_window_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySelfReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SupernodeReports returns all reports that include observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_SupernodeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_window_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySupernodeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/window_snapshot/{window_id}":{"get":{"tags":["Query"],"summary":"WindowSnapshot returns the persisted window snapshot for the given window_id.","operationId":"GithubComLumeraProtocollumeraQuery_WindowSnapshot","parameters":[{"type":"string","format":"uint64","name":"window_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryWindowSnapshotResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin16","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin21","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin29","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitAuditReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitAuditReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin12","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin17","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin22","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin33","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.AuditPeerObservation":{"type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the window.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.AuditReport":{"type":"object","properties":{"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.AuditSelfReport":{"type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.MsgSubmitAuditReport":{"type":"object","properties":{"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgSubmitAuditReportResponse":{"type":"object"},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"consecutive_windows_to_postpone":{"description":"Number of consecutive windows a required port must be unanimously reported CLOSED\nby peers (with at least 2 peer reports per window) before postponing the supernode.","type":"integer","format":"int64"},"keep_last_window_entries":{"description":"How many completed windows to keep in state for window-scoped data like WindowSnapshot,\nAuditReport, and related indices. Pruning runs at window end.","type":"string","format":"uint64"},"max_probe_targets_per_window":{"type":"integer","format":"int64"},"min_cpu_free_percent":{"description":"Minimum required host free capacity (self reported).\nfree% = 100 - usage%\nA usage% of 0 is treated as \"unknown\" (no action).","type":"integer","format":"int64"},"min_disk_free_percent":{"type":"integer","format":"int64"},"min_mem_free_percent":{"type":"integer","format":"int64"},"min_probe_targets_per_window":{"type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"reporting_window_blocks":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.ProberTargets":{"description":"ProberTargets captures the deterministic prober -\u003e targets mapping for a window.","type":"object","properties":{"prober_supernode_account":{"type":"string"},"target_supernode_accounts":{"type":"array","items":{"type":"string"}}}},"lumera.audit.v1.QueryAssignedTargetsResponse":{"type":"object","properties":{"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"target_supernode_accounts":{"type":"array","items":{"type":"string"}},"window_id":{"type":"string","format":"uint64"},"window_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryAuditReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.AuditReport"}}},"lumera.audit.v1.QueryAuditReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditReport"}}}},"lumera.audit.v1.QueryCurrentWindowResponse":{"type":"object","properties":{"window_end_height":{"type":"string","format":"int64"},"window_id":{"type":"string","format":"uint64"},"window_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QuerySelfReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SelfReport"}}}},"lumera.audit.v1.QuerySupernodeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SupernodeReport"}}}},"lumera.audit.v1.QueryWindowSnapshotResponse":{"type":"object","properties":{"snapshot":{"$ref":"#/definitions/lumera.audit.v1.WindowSnapshot"}}},"lumera.audit.v1.SelfReport":{"type":"object","properties":{"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.SupernodeReport":{"type":"object","properties":{"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.WindowSnapshot":{"type":"object","properties":{"assignments":{"description":"assignments is the minimal per-window source-of-truth for prober -\u003e targets mapping.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.ProberTargets"}},"window_id":{"type":"string","format":"uint64"},"window_start_height":{"type":"string","format":"int64"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}}},"tags":[{"name":"Query"},{"name":"Msg"}]} \ No newline at end of file diff --git a/proto/lumera/audit/v1/query.proto b/proto/lumera/audit/v1/query.proto index cea912a..534f93c 100644 --- a/proto/lumera/audit/v1/query.proto +++ b/proto/lumera/audit/v1/query.proto @@ -24,6 +24,17 @@ service Query { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/current_window"; } + // WindowSnapshot returns the persisted window snapshot for the given window_id. + rpc WindowSnapshot(QueryWindowSnapshotRequest) returns (QueryWindowSnapshotResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/window_snapshot/{window_id}"; + } + + // AssignedTargets returns the prober -> targets assignment for a given supernode_account. + // If filter_by_window_id is false, it returns the assignments for the current window. + rpc AssignedTargets(QueryAssignedTargetsRequest) returns (QueryAssignedTargetsResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}"; + } + rpc AuditReport(QueryAuditReportRequest) returns (QueryAuditReportResponse) { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_report/{window_id}/{supernode_account}"; } @@ -57,6 +68,27 @@ message QueryCurrentWindowResponse { int64 window_end_height = 3; } +message QueryWindowSnapshotRequest { + uint64 window_id = 1; +} + +message QueryWindowSnapshotResponse { + WindowSnapshot snapshot = 1 [(gogoproto.nullable) = false]; +} + +message QueryAssignedTargetsRequest { + string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + uint64 window_id = 2; + bool filter_by_window_id = 3; +} + +message QueryAssignedTargetsResponse { + uint64 window_id = 1; + int64 window_start_height = 2; + repeated uint32 required_open_ports = 3; + repeated string target_supernode_accounts = 4 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; +} + message QueryAuditReportRequest { uint64 window_id = 1; string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; @@ -80,6 +112,7 @@ message QuerySupernodeReportsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; uint64 window_id = 2; cosmos.base.query.v1beta1.PageRequest pagination = 3; + bool filter_by_window_id = 4; } message SupernodeReport { @@ -98,6 +131,7 @@ message QuerySelfReportsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; uint64 window_id = 2; cosmos.base.query.v1beta1.PageRequest pagination = 3; + bool filter_by_window_id = 4; } message SelfReport { diff --git a/tests/systemtests/audit_host_requirements_bypass_test.go b/tests/systemtests/audit_host_requirements_bypass_test.go new file mode 100644 index 0000000..faa59dc --- /dev/null +++ b/tests/systemtests/audit_host_requirements_bypass_test.go @@ -0,0 +1,88 @@ +//go:build system_test + +package system + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tidwall/sjson" +) + +func TestAuditHostRequirements_UsageZeroBypassesMinimums(t *testing.T) { + const ( + reportingWindowBlocks = uint64(10) + ) + const originHeight = int64(1) + + sut.ModifyGenesisJSON(t, + setSupernodeParamsForAuditTests(t), + setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + func(genesis []byte) []byte { + // Avoid missing-report postponement before/around the tested window. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("10")) + require.NoError(t, err) + + // Enforce host requirements, but allow "unknown" usage values to bypass (usage_percent==0). + state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) + require.NoError(t, err) + return state + }, + ) + sut.StartChain(t) + + cli := NewLumeradCLI(t, sut, true) + n0 := getNodeIdentity(t, cli, "node0") + n1 := getNodeIdentity(t, cli, "node1") + + registerSupernode(t, cli, n0, "192.168.1.1") + registerSupernode(t, cli, n1, "192.168.1.2") + + currentHeight := sut.AwaitNextBlock(t) + windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) + enforceHeight := windowStartHeight + int64(reportingWindowBlocks) + + awaitAtLeastHeight(t, windowStartHeight) + + seed := headerHashAtHeight(t, sut.rpcAddr, windowStartHeight) + senders := sortedStrings(n0.accAddr, n1.accAddr) + receivers := sortedStrings(n0.accAddr, n1.accAddr) + kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kWindow) + + targets0, ok := assignedTargets(seed, senders, receivers, kWindow, n0.accAddr) + require.True(t, ok) + require.Len(t, targets0, 1) + targets1, ok := assignedTargets(seed, senders, receivers, kWindow, n1.accAddr) + require.True(t, ok) + require.Len(t, targets1, 1) + + unknownSelfBz, err := json.Marshal(map[string]any{ + "cpu_usage_percent": 0.0, + "mem_usage_percent": 0.0, + "disk_usage_percent": 0.0, + "inbound_port_states": []string{"PORT_STATE_OPEN"}, + "failed_actions_count": 0, + }) + require.NoError(t, err) + unknownSelf := string(unknownSelfBz) + + okSelf := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + + // node0 reports "unknown" cpu usage (0), which must not trigger host-requirements postponement. + tx0 := submitAuditReport(t, cli, n0.nodeName, windowID, unknownSelf, []string{ + auditPeerObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx0) + + tx1 := submitAuditReport(t, cli, n1.nodeName, windowID, okSelf, []string{ + auditPeerObservationJSON(targets1[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx1) + + awaitAtLeastHeight(t, enforceHeight) + + require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n0.valAddr)) + require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n1.valAddr)) +} diff --git a/tests/systemtests/audit_host_requirements_enforcement_test.go b/tests/systemtests/audit_host_requirements_enforcement_test.go new file mode 100644 index 0000000..055edcf --- /dev/null +++ b/tests/systemtests/audit_host_requirements_enforcement_test.go @@ -0,0 +1,90 @@ +//go:build system_test + +package system + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tidwall/sjson" +) + +func TestAuditHostRequirementsPostponesActiveSupernode(t *testing.T) { + const ( + // Keep windows small so AwaitBlockHeight timeouts don't flake. + reportingWindowBlocks = uint64(10) + ) + const originHeight = int64(1) + + sut.ModifyGenesisJSON(t, + setSupernodeParamsForAuditTests(t), + setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + func(genesis []byte) []byte { + // Avoid missing-report postponement before the first tested window. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("10")) + require.NoError(t, err) + + // Enforce host requirements. + state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) + require.NoError(t, err) + return state + }, + ) + sut.StartChain(t) + + cli := NewLumeradCLI(t, sut, true) + n0 := getNodeIdentity(t, cli, "node0") + n1 := getNodeIdentity(t, cli, "node1") + + registerSupernode(t, cli, n0, "192.168.1.1") + registerSupernode(t, cli, n1, "192.168.1.2") + + currentHeight := sut.AwaitNextBlock(t) + windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) + enforceHeight := windowStartHeight + int64(reportingWindowBlocks) + + awaitAtLeastHeight(t, windowStartHeight) + + seed := headerHashAtHeight(t, sut.rpcAddr, windowStartHeight) + senders := sortedStrings(n0.accAddr, n1.accAddr) + receivers := sortedStrings(n0.accAddr, n1.accAddr) + kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kWindow) + + targets0, ok := assignedTargets(seed, senders, receivers, kWindow, n0.accAddr) + require.True(t, ok) + require.Len(t, targets0, 1) + targets1, ok := assignedTargets(seed, senders, receivers, kWindow, n1.accAddr) + require.True(t, ok) + require.Len(t, targets1, 1) + + badSelfBz, err := json.Marshal(map[string]any{ + "cpu_usage_percent": 99.0, + "mem_usage_percent": 1.0, + "disk_usage_percent": 1.0, + "inbound_port_states": []string{"PORT_STATE_OPEN"}, + "failed_actions_count": 0, + }) + require.NoError(t, err) + badSelf := string(badSelfBz) + + okSelf := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + + // node0 violates host requirements. + tx0 := submitAuditReport(t, cli, n0.nodeName, windowID, badSelf, []string{ + auditPeerObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx0) + + // node1 stays compliant (and also submits to avoid missing-report enforcement). + tx1 := submitAuditReport(t, cli, n1.nodeName, windowID, okSelf, []string{ + auditPeerObservationJSON(targets1[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx1) + + awaitAtLeastHeight(t, enforceHeight) + + require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n0.valAddr)) + require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n1.valAddr)) +} diff --git a/tests/systemtests/audit_missing_report_enforcement_test.go b/tests/systemtests/audit_missing_report_enforcement_test.go index cbcc3dd..a0ef2d2 100644 --- a/tests/systemtests/audit_missing_report_enforcement_test.go +++ b/tests/systemtests/audit_missing_report_enforcement_test.go @@ -3,8 +3,8 @@ package system // This test validates missing-report enforcement in EndBlocker: -// - two ACTIVE supernodes are snapshotted as senders at window start -// - only one submits a report for the window +// - two ACTIVE supernodes exist during a window +// - only one submits a report for that window // - after `window_end + 1`, the missing sender is POSTPONED import ( @@ -15,7 +15,7 @@ import ( func TestAuditMissingReportPostponesSender(t *testing.T) { const ( - reportingWindowBlocks = uint64(5) + reportingWindowBlocks = uint64(10) ) const originHeight = int64(1) @@ -33,29 +33,29 @@ func TestAuditMissingReportPostponesSender(t *testing.T) { registerSupernode(t, cli, n1, "192.168.1.2") currentHeight := sut.AwaitNextBlock(t) - // Use the next window after registration so both supernodes are in the sender snapshot for that window. - windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) - enforceHeight := windowStartHeight + int64(reportingWindowBlocks) - - awaitAtLeastHeight(t, windowStartHeight) - - seed := headerHashAtHeight(t, sut.rpcAddr, windowStartHeight) - senders := sortedStrings(n0.accAddr, n1.accAddr) - receivers := sortedStrings(n0.accAddr, n1.accAddr) - kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kWindow) - - targets0, ok := assignedTargets(seed, senders, receivers, kWindow, n0.accAddr) - require.True(t, ok) - require.Len(t, targets0, 1) + blocks := int64(reportingWindowBlocks) + + var windowID uint64 + var windowStartHeight int64 + var windowEndHeight int64 + for { + windowID = uint64((currentHeight - originHeight) / blocks) + windowStartHeight = originHeight + int64(windowID)*blocks + windowEndHeight = windowStartHeight + blocks - 1 + // Ensure there's enough room in the window so the tx is committed before the next window starts. + if windowEndHeight-currentHeight >= 3 { + break + } + currentHeight = sut.AwaitNextBlock(t) + } + enforceHeight := windowEndHeight + 1 self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) - txResp := submitAuditReport(t, cli, n0.nodeName, windowID, self, []string{ - auditPeerObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), - }) + // node0 submits a report; node1 submits nothing in this window. + txResp := submitAuditReport(t, cli, n0.nodeName, windowID, self, nil) RequireTxSuccess(t, txResp) - // node1 does not submit any report for this window -> should be postponed at enforceHeight. + // node1 does not submit any report for this window -> should be postponed after the window ends. awaitAtLeastHeight(t, enforceHeight) require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) diff --git a/tests/systemtests/audit_peer_observation_completeness_test.go b/tests/systemtests/audit_peer_observation_completeness_test.go new file mode 100644 index 0000000..ddce4cd --- /dev/null +++ b/tests/systemtests/audit_peer_observation_completeness_test.go @@ -0,0 +1,47 @@ +//go:build system_test + +package system + +import ( + "strconv" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tidwall/sjson" +) + +// This test validates that ACTIVE probers must submit peer observations for all assigned targets. +func TestAuditSubmitReport_ProberRequiresAllPeerObservations(t *testing.T) { + const ( + // Keep windows long enough in real time to avoid end-blocker enforcement during the test. + reportingWindowBlocks = uint64(20) + ) + const originHeight = int64(1) + + sut.ModifyGenesisJSON(t, + setSupernodeParamsForAuditTests(t), + setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + func(genesis []byte) []byte { + // Avoid missing-report postponement before the window under test. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte(strconv.FormatUint(2, 10))) + require.NoError(t, err) + return state + }, + ) + sut.StartChain(t) + + cli := NewLumeradCLI(t, sut, true) + n0 := getNodeIdentity(t, cli, "node0") + n1 := getNodeIdentity(t, cli, "node1") + + registerSupernode(t, cli, n0, "192.168.1.1") + registerSupernode(t, cli, n1, "192.168.1.2") + + currentHeight := sut.AwaitNextBlock(t) + windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) + awaitAtLeastHeight(t, windowStartHeight) + + self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + txResp := submitAuditReport(t, cli, n0.nodeName, windowID, self, nil) + RequireTxFailure(t, txResp, "expected peer observations") +} diff --git a/tests/systemtests/audit_peer_ports_enforcement_test.go b/tests/systemtests/audit_peer_ports_enforcement_test.go new file mode 100644 index 0000000..0789c34 --- /dev/null +++ b/tests/systemtests/audit_peer_ports_enforcement_test.go @@ -0,0 +1,91 @@ +//go:build system_test + +package system + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/tidwall/sjson" +) + +func TestAuditPeerPortsUnanimousClosedPostponesAfterConsecutiveWindows(t *testing.T) { + const ( + reportingWindowBlocks = uint64(10) + ) + const originHeight = int64(1) + + sut.ModifyGenesisJSON(t, + setSupernodeParamsForAuditTests(t), + setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + func(genesis []byte) []byte { + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("2")) + require.NoError(t, err) + return state + }, + ) + sut.StartChain(t) + + cli := NewLumeradCLI(t, sut, true) + n0 := getNodeIdentity(t, cli, "node0") + n1 := getNodeIdentity(t, cli, "node1") + + registerSupernode(t, cli, n0, "192.168.1.1") + registerSupernode(t, cli, n1, "192.168.1.2") + + currentHeight := sut.AwaitNextBlock(t) + windowID1, window1Start := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) + windowID2 := windowID1 + 1 + window2Start := window1Start + int64(reportingWindowBlocks) + enforce2 := window2Start + int64(reportingWindowBlocks) + + senders := sortedStrings(n0.accAddr, n1.accAddr) + receivers := sortedStrings(n0.accAddr, n1.accAddr) + kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kWindow) + + selfOpen := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + + // Window 1: node0 reports node1 as CLOSED, node1 reports node0 as OPEN. + awaitAtLeastHeight(t, window1Start) + seed1 := headerHashAtHeight(t, sut.rpcAddr, window1Start) + targets0w1, ok := assignedTargets(seed1, senders, receivers, kWindow, n0.accAddr) + require.True(t, ok) + require.Len(t, targets0w1, 1) + targets1w1, ok := assignedTargets(seed1, senders, receivers, kWindow, n1.accAddr) + require.True(t, ok) + require.Len(t, targets1w1, 1) + + tx0w1 := submitAuditReport(t, cli, n0.nodeName, windowID1, selfOpen, []string{ + auditPeerObservationJSON(targets0w1[0], []string{"PORT_STATE_CLOSED"}), + }) + RequireTxSuccess(t, tx0w1) + tx1w1 := submitAuditReport(t, cli, n1.nodeName, windowID1, selfOpen, []string{ + auditPeerObservationJSON(targets1w1[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx1w1) + + // Window 2: repeat -> node1 should be POSTPONED at window end due to consecutive unanimous CLOSED. + awaitAtLeastHeight(t, window2Start) + seed2 := headerHashAtHeight(t, sut.rpcAddr, window2Start) + targets0w2, ok := assignedTargets(seed2, senders, receivers, kWindow, n0.accAddr) + require.True(t, ok) + require.Len(t, targets0w2, 1) + targets1w2, ok := assignedTargets(seed2, senders, receivers, kWindow, n1.accAddr) + require.True(t, ok) + require.Len(t, targets1w2, 1) + + tx0w2 := submitAuditReport(t, cli, n0.nodeName, windowID2, selfOpen, []string{ + auditPeerObservationJSON(targets0w2[0], []string{"PORT_STATE_CLOSED"}), + }) + RequireTxSuccess(t, tx0w2) + tx1w2 := submitAuditReport(t, cli, n1.nodeName, windowID2, selfOpen, []string{ + auditPeerObservationJSON(targets1w2[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx1w2) + + awaitAtLeastHeight(t, enforce2) + + require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n0.valAddr)) + require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) +} diff --git a/tests/systemtests/audit_postponed_reporter_self_only_test.go b/tests/systemtests/audit_postponed_reporter_self_only_test.go new file mode 100644 index 0000000..314a46e --- /dev/null +++ b/tests/systemtests/audit_postponed_reporter_self_only_test.go @@ -0,0 +1,96 @@ +//go:build system_test + +package system + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tidwall/sjson" +) + +func TestAuditSubmitReport_PostponedReporterSelfOnly(t *testing.T) { + const ( + // Keep windows long enough in real time to avoid missing-report postponement before the first tested window. + reportingWindowBlocks = uint64(20) + ) + const originHeight = int64(1) + + sut.ModifyGenesisJSON(t, + setSupernodeParamsForAuditTests(t), + setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + func(genesis []byte) []byte { + // Avoid missing-report postponement before the first tested window. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("2")) + require.NoError(t, err) + + // Make it easy to postpone node1 via self host requirements (independent of consecutive windows). + state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) + require.NoError(t, err) + return state + }, + ) + sut.StartChain(t) + + cli := NewLumeradCLI(t, sut, true) + n0 := getNodeIdentity(t, cli, "node0") + n1 := getNodeIdentity(t, cli, "node1") + + registerSupernode(t, cli, n0, "192.168.1.1") + registerSupernode(t, cli, n1, "192.168.1.2") + + currentHeight := sut.AwaitNextBlock(t) + windowID1, window1Start := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) + windowID2 := windowID1 + 1 + window2Start := window1Start + int64(reportingWindowBlocks) + + awaitAtLeastHeight(t, window1Start) + + seed1 := headerHashAtHeight(t, sut.rpcAddr, window1Start) + senders := sortedStrings(n0.accAddr, n1.accAddr) + receivers := sortedStrings(n0.accAddr, n1.accAddr) + kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kWindow) + + targets0, ok := assignedTargets(seed1, senders, receivers, kWindow, n0.accAddr) + require.True(t, ok) + require.Len(t, targets0, 1) + + self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + + node1BadSelfBz, err := json.Marshal(map[string]any{ + "cpu_usage_percent": 99.0, + "mem_usage_percent": 1.0, + "disk_usage_percent": 1.0, + "inbound_port_states": []string{"PORT_STATE_OPEN"}, + "failed_actions_count": 0, + }) + require.NoError(t, err) + node1BadSelf := string(node1BadSelfBz) + + // Both submit in window1 so missing-report enforcement doesn't interfere. + // node1 violates host minimums and should become POSTPONED at window end. + txResp0 := submitAuditReport(t, cli, n0.nodeName, windowID1, self, []string{ + auditPeerObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, txResp0) + + txResp1 := submitAuditReport(t, cli, n1.nodeName, windowID1, node1BadSelf, []string{ + auditPeerObservationJSON(n0.accAddr, []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, txResp1) + + awaitAtLeastHeight(t, window2Start) + require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) + + // POSTPONED reporter cannot submit peer observations. + txBad := submitAuditReport(t, cli, n1.nodeName, windowID2, self, []string{ + auditPeerObservationJSON(n0.accAddr, []string{"PORT_STATE_OPEN"}), + }) + RequireTxFailure(t, txBad, "reporter not eligible for peer observations in this window") + + // POSTPONED reporter can submit a self report only. + txOK := submitAuditReport(t, cli, n1.nodeName, windowID2, self, nil) + RequireTxSuccess(t, txOK) +} diff --git a/tests/systemtests/audit_recovery_enforcement_test.go b/tests/systemtests/audit_recovery_enforcement_test.go new file mode 100644 index 0000000..fd8d89b --- /dev/null +++ b/tests/systemtests/audit_recovery_enforcement_test.go @@ -0,0 +1,104 @@ +//go:build system_test + +package system + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tidwall/sjson" +) + +func TestAuditRecovery_PostponedBecomesActiveWithSelfAndPeerOpen(t *testing.T) { + const ( + reportingWindowBlocks = uint64(10) + ) + const originHeight = int64(1) + + sut.ModifyGenesisJSON(t, + setSupernodeParamsForAuditTests(t), + setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + func(genesis []byte) []byte { + // Keep missing-report / peer-port streaks from interfering with this recovery test. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("10")) + require.NoError(t, err) + + // Use host requirements to get into POSTPONED state deterministically. + state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) + require.NoError(t, err) + return state + }, + ) + sut.StartChain(t) + + cli := NewLumeradCLI(t, sut, true) + n0 := getNodeIdentity(t, cli, "node0") + n1 := getNodeIdentity(t, cli, "node1") + + registerSupernode(t, cli, n0, "192.168.1.1") + registerSupernode(t, cli, n1, "192.168.1.2") + + currentHeight := sut.AwaitNextBlock(t) + windowID1, window1Start := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) + windowID2 := windowID1 + 1 + window2Start := window1Start + int64(reportingWindowBlocks) + enforce2 := window2Start + int64(reportingWindowBlocks) + + senders := sortedStrings(n0.accAddr, n1.accAddr) + receivers := sortedStrings(n0.accAddr, n1.accAddr) + kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kWindow) + + selfOK := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + + badSelfBz, err := json.Marshal(map[string]any{ + "cpu_usage_percent": 99.0, + "mem_usage_percent": 1.0, + "disk_usage_percent": 1.0, + "inbound_port_states": []string{"PORT_STATE_OPEN"}, + "failed_actions_count": 0, + }) + require.NoError(t, err) + selfBad := string(badSelfBz) + + // Window 1: node1 violates host requirements -> becomes POSTPONED. + awaitAtLeastHeight(t, window1Start) + seed1 := headerHashAtHeight(t, sut.rpcAddr, window1Start) + targets0w1, ok := assignedTargets(seed1, senders, receivers, kWindow, n0.accAddr) + require.True(t, ok) + require.Len(t, targets0w1, 1) + targets1w1, ok := assignedTargets(seed1, senders, receivers, kWindow, n1.accAddr) + require.True(t, ok) + require.Len(t, targets1w1, 1) + + tx0w1 := submitAuditReport(t, cli, n0.nodeName, windowID1, selfOK, []string{ + auditPeerObservationJSON(targets0w1[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx0w1) + tx1w1 := submitAuditReport(t, cli, n1.nodeName, windowID1, selfBad, []string{ + auditPeerObservationJSON(targets1w1[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx1w1) + + awaitAtLeastHeight(t, window2Start) + require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) + + // Window 2: node1 submits compliant self report (no peer observations), + // and node0 submits an OPEN peer observation about node1 in the same window -> recovery at window end. + seed2 := headerHashAtHeight(t, sut.rpcAddr, window2Start) + targets0w2, ok := assignedTargets(seed2, senders, receivers, kWindow, n0.accAddr) + require.True(t, ok) + require.Len(t, targets0w2, 1) + + tx0w2 := submitAuditReport(t, cli, n0.nodeName, windowID2, selfOK, []string{ + auditPeerObservationJSON(targets0w2[0], []string{"PORT_STATE_OPEN"}), + }) + RequireTxSuccess(t, tx0w2) + + tx1w2 := submitAuditReport(t, cli, n1.nodeName, windowID2, selfOK, nil) + RequireTxSuccess(t, tx1w2) + + awaitAtLeastHeight(t, enforce2) + require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n1.valAddr)) +} diff --git a/tests/systemtests/audit_submit_and_query_test.go b/tests/systemtests/audit_submit_and_query_test.go index 6789ffe..0d7dba0 100644 --- a/tests/systemtests/audit_submit_and_query_test.go +++ b/tests/systemtests/audit_submit_and_query_test.go @@ -21,7 +21,6 @@ func TestAuditSubmitReportAndQuery(t *testing.T) { // Keep windows long enough in real time to avoid end-blocker enforcement during the test. reportingWindowBlocks = uint64(20) ) - const originHeight = int64(1) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), @@ -36,23 +35,32 @@ func TestAuditSubmitReportAndQuery(t *testing.T) { registerSupernode(t, cli, n0, "192.168.1.1") registerSupernode(t, cli, n1, "192.168.1.2") - currentHeight := sut.AwaitNextBlock(t) - // Always test against the next window boundary after registration so: - // - the snapshot includes the registered supernodes, - // - the window is guaranteed to be currently accepted at submission height. - windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) - awaitAtLeastHeight(t, windowStartHeight) - - // Construct a minimal report. + // These nodes register during window 0, after the window-0 snapshot was created at height 1. + // If they submit *no* report in window 0, EndBlock(0) will postpone them for "missing report" at height 20. + // Submit self-only reports in the current window to keep them ACTIVE for the next window. + ws0 := auditQueryAssignedTargets(t, 0, false, n0.accAddr) self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) - var peerObs []string + RequireTxSuccess(t, submitAuditReport(t, cli, n0.nodeName, ws0.WindowId, self, nil)) + RequireTxSuccess(t, submitAuditReport(t, cli, n1.nodeName, ws0.WindowId, self, nil)) + + // Now wait for the next window boundary so the snapshot includes the registered supernodes. + awaitAtLeastHeight(t, ws0.WindowStartHeight+int64(reportingWindowBlocks)) + ws1 := auditQueryAssignedTargets(t, 0, false, n0.accAddr) + require.Greater(t, len(ws1.TargetSupernodeAccounts), 0, "expected n0 to be assigned targets in window %d", ws1.WindowId) + + // Construct a minimal report. Since n0 is ACTIVE, it is a prober and must submit peer observations + // for all assigned targets for the window. + peerObs := make([]string, 0, len(ws1.TargetSupernodeAccounts)) + for _, target := range ws1.TargetSupernodeAccounts { + peerObs = append(peerObs, auditPeerObservationJSON(target, []string{"PORT_STATE_OPEN"})) + } - txResp := submitAuditReport(t, cli, n0.nodeName, windowID, self, peerObs) + txResp := submitAuditReport(t, cli, n0.nodeName, ws1.WindowId, self, peerObs) RequireTxSuccess(t, txResp) // Query via gRPC instead of CLI JSON because AuditReport contains float fields and // CLI JSON marshalling is currently broken ("unknown type float64") in this environment. - report := auditQueryReport(t, windowID, n0.accAddr) + report := auditQueryReport(t, ws1.WindowId, n0.accAddr) require.Equal(t, n0.accAddr, report.SupernodeAccount) - require.Equal(t, windowID, report.WindowId) + require.Equal(t, ws1.WindowId, report.WindowId) } diff --git a/tests/systemtests/audit_test_helpers_test.go b/tests/systemtests/audit_test_helpers_test.go index c941c93..17b04a1 100644 --- a/tests/systemtests/audit_test_helpers_test.go +++ b/tests/systemtests/audit_test_helpers_test.go @@ -355,3 +355,17 @@ func auditQueryReport(t *testing.T, windowID uint64, reporterSupernodeAccount st require.NoError(t, err) return resp.Report } + +func auditQueryAssignedTargets(t *testing.T, windowID uint64, filterByWindowID bool, proberSupernodeAccount string) audittypes.QueryAssignedTargetsResponse { + t.Helper() + qc, _ := newAuditQueryClient(t) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + resp, err := qc.AssignedTargets(ctx, &audittypes.QueryAssignedTargetsRequest{ + WindowId: windowID, + FilterByWindowId: filterByWindowID, + SupernodeAccount: proberSupernodeAccount, + }) + require.NoError(t, err) + return *resp +} diff --git a/tests/systemtests/get_top_supernodes_test.go b/tests/systemtests/get_top_supernodes_test.go index 4eb92b1..88be7e6 100644 --- a/tests/systemtests/get_top_supernodes_test.go +++ b/tests/systemtests/get_top_supernodes_test.go @@ -1,4 +1,4 @@ -//go:build system_test +//go:build system_test && supernode_test package system diff --git a/tests/systemtests/register_supernode_test.go b/tests/systemtests/register_supernode_test.go index 15d534d..f1cb73c 100644 --- a/tests/systemtests/register_supernode_test.go +++ b/tests/systemtests/register_supernode_test.go @@ -1,20 +1,20 @@ -//go:build system_test +//go:build system_test && supernode_test package system import ( + "fmt" "strconv" "strings" "testing" "time" - "fmt" "github.com/stretchr/testify/require" "github.com/tidwall/gjson" "github.com/tidwall/sjson" - sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" lcfg "github.com/LumeraProtocol/lumera/config" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) // Helper function to create a delayed vesting account @@ -29,7 +29,7 @@ func createDelayedVestingAccount(t *testing.T, cli *LumeradCli, keyName string, createCmd := []string{ "tx", "vesting", "create-vesting-account", address, // to_address - amount + lcfg.ChainDenom, // amount + amount + lcfg.ChainDenom, // amount strconv.FormatInt(endTime, 10), // end_time "--delayed", // make it delayed vesting "--from", "node0", @@ -55,7 +55,7 @@ func createPermanentlyLockedAccount(t *testing.T, cli *LumeradCli, keyName strin // Create permanently locked account createCmd := []string{ "tx", "vesting", "create-permanent-locked-account", - address, // to_address + address, // to_address amount + lcfg.ChainDenom, // amount "--from", "node0", } @@ -116,8 +116,8 @@ func TestSupernodeRegistrationSuccess(t *testing.T) { // Delegate from supernode account to validator to meet the minimum stake requirement delegateCmd := []string{ "tx", "staking", "delegate", - valAddr, // validator address - "150000000"+lcfg.ChainDenom, // delegation amount (more than minimum - self delegation) + valAddr, // validator address + "150000000" + lcfg.ChainDenom, // delegation amount (more than minimum - self delegation) "--from", "supernode_account", } resp := cli.CustomCommand(delegateCmd...) @@ -154,8 +154,8 @@ func TestSupernodeRegistrationSuccess(t *testing.T) { // Add additional self-delegation to meet minimum requirement delegateCmd := []string{ "tx", "staking", "delegate", - valAddr, // validator address - "60000000"+lcfg.ChainDenom, // enough to meet minimum with existing self-delegation + valAddr, // validator address + "60000000" + lcfg.ChainDenom, // enough to meet minimum with existing self-delegation "--from", "node0", } resp := cli.CustomCommand(delegateCmd...) @@ -453,13 +453,13 @@ func TestSupernodeRegistrationFailures(t *testing.T) { func TestSupernodeWithVestingDelegation(t *testing.T) { testCases := []struct { - name string - vestingAccountType string - createVestingAccount func(t *testing.T, cli *LumeradCli, keyName string, amount string) string - minimumStake string - selfDelegationAmount string + name string + vestingAccountType string + createVestingAccount func(t *testing.T, cli *LumeradCli, keyName string, amount string) string + minimumStake string + selfDelegationAmount string vestingDelegationAmount string - delayMonths int + delayMonths int }{ { name: "low_self_stake_with_delayed_vesting_delegation", @@ -520,7 +520,7 @@ func TestSupernodeWithVestingDelegation(t *testing.T) { cli.FundAddress(accountAddr, "50000000"+lcfg.ChainDenom) selfDelegateCmd := []string{ "tx", "staking", "delegate", - valAddr, // validator address + valAddr, // validator address tc.selfDelegationAmount + lcfg.ChainDenom, // small self-delegation (much less than minimum) "--from", "node0", } @@ -531,7 +531,7 @@ func TestSupernodeWithVestingDelegation(t *testing.T) { // Step 4: Delegate from vesting account to validator vestingDelegateCmd := []string{ "tx", "staking", "delegate", - valAddr, // validator address + valAddr, // validator address tc.vestingDelegationAmount + lcfg.ChainDenom, // delegation from vesting account to meet minimum "--from", "vesting_supernode", } diff --git a/tests/systemtests/supernode_metrics_staleness_test.go b/tests/systemtests/supernode_metrics_staleness_test.go index 091c7f7..74c34df 100644 --- a/tests/systemtests/supernode_metrics_staleness_test.go +++ b/tests/systemtests/supernode_metrics_staleness_test.go @@ -1,4 +1,4 @@ -//go:build system_test +//go:build system_test && supernode_metrics_tests package system diff --git a/tests/systemtests/supernode_metrics_test.go b/tests/systemtests/supernode_metrics_test.go index 245cf8b..ac5bdfc 100644 --- a/tests/systemtests/supernode_metrics_test.go +++ b/tests/systemtests/supernode_metrics_test.go @@ -1,4 +1,4 @@ -//go:build system_test +//go:build system_test && supernode_metrics_tests package system diff --git a/tests/systemtests/supernode_params_test.go b/tests/systemtests/supernode_params_test.go index fc34bb7..d0d5965 100644 --- a/tests/systemtests/supernode_params_test.go +++ b/tests/systemtests/supernode_params_test.go @@ -1,4 +1,4 @@ -//go:build system_test +//go:build system_test && supernode_test package system diff --git a/x/audit/v1/POSTPONEMENT_RULES.md b/x/audit/v1/POSTPONEMENT_RULES.md index 772c337..26e2287 100644 --- a/x/audit/v1/POSTPONEMENT_RULES.md +++ b/x/audit/v1/POSTPONEMENT_RULES.md @@ -1,21 +1,57 @@ -# Postponement Rules (Draft) +# Postponement and Recovery Rules (audit/v1) -Minimal rules for switching a supernode between `ACTIVE` and `POSTPONED`, based on `MsgSubmitAuditReport` + `WindowSnapshot`. +This document describes the on-chain rules implemented by `x/audit/v1` for switching a supernode between `ACTIVE` and `POSTPONED`, and for recovering back to `ACTIVE`. -1) **Enforcement timing**: rules are evaluated only at **window end** (`window_end_height`). +## Definitions -2) **Gating location**: peer assignment/target gating is enforced only when `MsgSubmitAuditReport` is accepted. Enforcement assumes stored peer observations already passed gating. +- **Window**: a contiguous block-height interval `[window_start_height, window_end_height]` derived from `reporting_window_blocks`. +- **Probers (reporters with assignments)**: supernodes that are `ACTIVE` at `window_start_height`. These appear as keys in `WindowSnapshot.assignments`. +- **Targets**: supernodes that are `ACTIVE` or `POSTPONED` at `window_start_height`. These may appear in `WindowSnapshot.assignments[*].target_supernode_accounts`. +- **Report**: `MsgSubmitAuditReport` stored under `(window_id, supernode_account)`. -3) **Self host metrics → POSTPONE**: if a self report violates any enabled minimum free% threshold, postpone. - - Params: `min_cpu_free_percent`, `min_mem_free_percent`, `min_disk_free_percent` (free% = `100 - usage%`). - - Special case: if `*_usage_percent == 0`, treat as **unknown** and skip any action for that metric. +## Enforcement timing -4) **Self non-rules (for now)**: ignore `failed_actions_count` and ignore `inbound_port_states` (self ports reflect inbound traffic, not reachability). +All postpone/recovery decisions are evaluated only at **window end** (`window_end_height`) in `EndBlocker`. -5) **Peer ports → POSTPONE**: for any required port index `i`, if peers unanimously report that port as `CLOSED` for `consecutive_windows_to_postpone` consecutive windows, postpone. - - Param: `consecutive_windows_to_postpone` (default `1`). - - A window counts only if there are **at least 2** distinct peer reporters about the target in that window, and **all** of them report `port_states[i] == PORT_STATE_CLOSED`. +## Submission-time gating and completeness -6) **Recovery (POSTPONED → ACTIVE)**: in a single window, require: - - one compliant self report (per rule 3), and - - one compliant peer report: **at least 2** distinct peer reporters about the target in that window, and **all** required ports unanimously `OPEN`. +Peer observation gating is enforced only when `MsgSubmitAuditReport` is accepted (enforcement later assumes stored observations already passed these checks): + +- If the reporter is a **prober** for the window (it has a non-empty assignment in `WindowSnapshot.assignments`), then: + - `peer_observations` must include **exactly one entry per assigned target** (no missing targets, no extra targets, no duplicates). + - For each `peer_observation`, `port_states` length must equal the configured `required_open_ports` length. +- If the reporter is **not** a prober for the window (e.g. `POSTPONED`), then: + - `peer_observations` must be empty (self-report only). + +## Postpone rules + +### 1) Missing reports + +If an `ACTIVE` supernode fails to submit any report for `consecutive_windows_to_postpone` consecutive windows, it is set to `POSTPONED`. + +This is evaluated by checking for a stored report in each of the last `N` windows. + +### 2) Host requirements (self report) + +If a submitted self report violates any enabled minimum free% threshold, the supernode is set to `POSTPONED`. + +- Params: `min_cpu_free_percent`, `min_mem_free_percent`, `min_disk_free_percent` (`free% = 100 - usage%`). +- Special case: if `*_usage_percent == 0`, that metric is treated as **unknown** and does not trigger postponement. + +The following self-report fields are currently ignored by postponement logic: +- `failed_actions_count` +- `inbound_port_states` + +### 3) Peer ports (peer observations) + +For any required port index `i`, a target is postponed if peers unanimously report that port as `CLOSED` for `consecutive_windows_to_postpone` consecutive windows. + +A window counts toward the consecutive requirement only if: +- there is at least **1** peer reporter about the target in that window, and +- **all** peer reporters about the target in that window report `PORT_STATE_CLOSED` for port index `i`. + +## Recovery rule (POSTPONED → ACTIVE) + +In a single window, a `POSTPONED` supernode becomes `ACTIVE` if: +- it submits one compliant self report (host requirements), and +- there exists at least **1** peer report about that supernode in the same window where **all** required ports are `PORT_STATE_OPEN`. diff --git a/x/audit/v1/README.md b/x/audit/v1/README.md index ecdf3cc..53495b6 100644 --- a/x/audit/v1/README.md +++ b/x/audit/v1/README.md @@ -23,7 +23,7 @@ High-level behavior: - At each window start, the module persists a `WindowSnapshot` containing the prober → targets mapping (`assignments`). - Supernodes submit one report per window containing: - self metrics (self-attested) - - peer reachability observations + - peer reachability observations (only when the reporter is a prober for the window) Notes: - This module currently focuses on windowing/snapshotting and report persistence. Penalties and aggregation are intentionally not implemented. @@ -100,8 +100,21 @@ Uniqueness is guaranteed (one report per reporter per window). On `MsgSubmitAuditReport`: 1. Resolve reporter supernode from `supernode_account` via `x/supernode`. 2. Validate window acceptance (only the current `window_id` at the current height is accepted). -3. Ensure per-window uniqueness for the reporter. -4. Persist the report. +3. If the reporter is a **prober** for the window (i.e., appears in `WindowSnapshot.assignments`), require peer observations for **all** assigned targets. + - If the reporter is **not** a prober for the window (e.g. `POSTPONED`), peer observations must be empty (self-report only). +4. Ensure per-window uniqueness for the reporter. +5. Persist the report. + +### Window end enforcement + +At `window_end_height`, the module evaluates the completed window and may transition supernodes: +- `ACTIVE` → `POSTPONED` for: + - missing reports for `consecutive_windows_to_postpone` consecutive windows + - host requirement failures (self report) + - peer port unanimity on `CLOSED` for `consecutive_windows_to_postpone` consecutive windows +- `POSTPONED` → `ACTIVE` if, in a single window, there is: + - one compliant self report, and + - at least one peer report about the supernode where all required ports are `OPEN` ## Messages @@ -159,12 +172,28 @@ Returns the current reporting window boundaries: Lists peer-observation chunks about a given supernode (by other reporters): - gRPC: `Query/SupernodeReports` - REST: `GET /LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}` +Notes: +- To filter by a specific window (including `window_id = 0`), use `filter_by_window_id = true`. ### SelfReports Lists self-report chunks for a supernode across windows: - gRPC: `Query/SelfReports` - REST: `GET /LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}` +Notes: +- To filter by a specific window (including `window_id = 0`), use `filter_by_window_id = true`. + +### WindowSnapshot + +Returns the persisted `WindowSnapshot` for a given window: +- gRPC: `Query/WindowSnapshot` +- REST: `GET /LumeraProtocol/lumera/audit/v1/window_snapshot/{window_id}` + +### AssignedTargets + +Returns the reporter’s assigned targets for a given window (or the current window by default): +- gRPC: `Query/AssignedTargets` +- REST: `GET /LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}` ## Events diff --git a/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md b/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md index a8397f4..6ec629a 100644 --- a/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md +++ b/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md @@ -21,7 +21,10 @@ At `window_start_height` for a given `window_id`, the module builds: - `peer_quorum_reports` - `min_probe_targets_per_window` - `max_probe_targets_per_window` -- `seedBytes`: `ctx.HeaderHash()` at `window_start_height` (only the first 8 bytes are used) +- `seedBytes`: `ctx.HeaderHash()` at `window_start_height` (the first 8 bytes are used) + +Note: +- Snapshot creation requires `len(ctx.HeaderHash()) >= 8` (otherwise snapshot creation fails). ## Ordering (determinism invariant) diff --git a/x/audit/v1/keeper/enforcement.go b/x/audit/v1/keeper/enforcement.go index 2da4d3f..640d943 100644 --- a/x/audit/v1/keeper/enforcement.go +++ b/x/audit/v1/keeper/enforcement.go @@ -10,12 +10,6 @@ import ( sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) -const ( - // minPeerReportersPerWindow is the minimum number of distinct peer reporters required in a window - // before peer-port unanimity can be considered. - minPeerReportersPerWindow = 2 -) - // EnforceWindowEnd evaluates the completed window and updates supernode states accordingly. // It does not re-check peer assignment gating; that must be enforced at MsgSubmitAuditReport time. func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types.Params) error { @@ -36,7 +30,7 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. continue } - shouldPostpone, err := k.shouldPostponeAtWindowEnd(ctx, sn.SupernodeAccount, windowID, params) + shouldPostpone, reason, err := k.shouldPostponeAtWindowEnd(ctx, sn.SupernodeAccount, windowID, params) if err != nil { return err } @@ -44,7 +38,7 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. continue } - if err := k.appendSupernodeState(ctx, sn, sntypes.SuperNodeStatePostponed); err != nil { + if err := k.setSupernodePostponed(ctx, sn, reason); err != nil { return err } } @@ -63,7 +57,7 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. continue } - if err := k.appendSupernodeState(ctx, sn, sntypes.SuperNodeStateActive); err != nil { + if err := k.recoverSupernodeActive(ctx, sn); err != nil { return err } } @@ -71,27 +65,32 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. return nil } -func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { +func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, string, error) { + // Missing-report based postponement. + consecutive := params.ConsecutiveWindowsToPostpone + if consecutive == 0 { + consecutive = 1 + } + if k.missingReportsForConsecutiveWindows(ctx, supernodeAccount, windowID, consecutive) { + return true, "audit_missing_reports", nil + } + // Self host-metrics-based postponement (if a self report exists and violates minimums). if ok, err := k.selfHostViolatesMinimums(ctx, supernodeAccount, windowID, params); err != nil { - return false, err + return false, "", err } else if ok { - return true, nil + return true, "audit_host_requirements", nil } // Peer ports-based postponement. requiredPortsLen := len(params.RequiredOpenPorts) if requiredPortsLen == 0 { - return false, nil + return false, "", nil } - consecutive := params.ConsecutiveWindowsToPostpone - if consecutive == 0 { - consecutive = 1 - } if consecutive > uint32(windowID+1) { // Not enough history on-chain to satisfy the consecutive rule. - return false, nil + return false, "", nil } for portIndex := 0; portIndex < requiredPortsLen; portIndex++ { @@ -100,7 +99,7 @@ func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount stri w := windowID - uint64(offset) closed, err := k.peersUnanimousPortState(ctx, supernodeAccount, w, portIndex, types.PortState_PORT_STATE_CLOSED) if err != nil { - return false, err + return false, "", err } if !closed { break @@ -108,11 +107,11 @@ func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount stri streak++ } if streak == consecutive { - return true, nil + return true, "audit_peer_ports", nil } } - return false, nil + return false, "", nil } func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { @@ -127,44 +126,49 @@ func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount strin if requiredPortsLen == 0 { return true, nil } + peers, err := k.peerReportersForTargetWindow(ctx, supernodeAccount, windowID) if err != nil { return false, err } - if len(peers) < minPeerReportersPerWindow { + if len(peers) == 0 { return false, nil } - for portIndex := 0; portIndex < requiredPortsLen; portIndex++ { - open, err := k.peersUnanimousPortStateWithPeers(ctx, supernodeAccount, windowID, portIndex, types.PortState_PORT_STATE_OPEN, peers) - if err != nil { - return false, err - } - if !open { - return false, nil + // Recovery requires at least one peer report that shows all required ports OPEN for this supernode in this window. + for _, reporter := range peers { + r, found := k.GetReport(ctx, windowID, reporter) + if !found { + continue } - } - return true, nil -} + var obs *types.AuditPeerObservation + for i := range r.PeerObservations { + if r.PeerObservations[i] != nil && r.PeerObservations[i].TargetSupernodeAccount == supernodeAccount { + obs = r.PeerObservations[i] + break + } + } + if obs == nil { + continue + } + if len(obs.PortStates) != requiredPortsLen { + continue + } -func (k Keeper) appendSupernodeState(ctx sdk.Context, sn sntypes.SuperNode, state sntypes.SuperNodeState) error { - if len(sn.States) > 0 { - last := sn.States[len(sn.States)-1] - if last != nil && last.State == state { - return nil + allOpen := true + for portIndex := 0; portIndex < requiredPortsLen; portIndex++ { + if obs.PortStates[portIndex] != types.PortState_PORT_STATE_OPEN { + allOpen = false + break + } + } + if allOpen { + return true, nil } } - sn.States = append(sn.States, &sntypes.SuperNodeStateRecord{ - State: state, - Height: ctx.BlockHeight(), - }) - - if err := k.supernodeKeeper.SetSuperNode(ctx, sn); err != nil { - return err - } - return nil + return false, nil } func (k Keeper) selfHostViolatesMinimums(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { @@ -241,14 +245,14 @@ func (k Keeper) peersUnanimousPortState(ctx sdk.Context, target string, windowID if err != nil { return false, err } - if len(peers) < minPeerReportersPerWindow { + if len(peers) == 0 { return false, nil } return k.peersUnanimousPortStateWithPeers(ctx, target, windowID, portIndex, desired, peers) } func (k Keeper) peersUnanimousPortStateWithPeers(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState, peers []string) (bool, error) { - if len(peers) < minPeerReportersPerWindow { + if len(peers) == 0 { return false, nil } for _, reporter := range peers { @@ -299,3 +303,42 @@ func (k Keeper) peerReportersForTargetWindow(ctx sdk.Context, target string, win } return reporters, nil } + +func (k Keeper) setSupernodePostponed(ctx sdk.Context, sn sntypes.SuperNode, reason string) error { + if sn.ValidatorAddress == "" { + return fmt.Errorf("missing validator address for supernode %q", sn.SupernodeAccount) + } + valAddr, err := sdk.ValAddressFromBech32(sn.ValidatorAddress) + if err != nil { + return err + } + return k.supernodeKeeper.SetSuperNodePostponed(ctx, valAddr, reason) +} + +func (k Keeper) recoverSupernodeActive(ctx sdk.Context, sn sntypes.SuperNode) error { + if sn.ValidatorAddress == "" { + return fmt.Errorf("missing validator address for supernode %q", sn.SupernodeAccount) + } + valAddr, err := sdk.ValAddressFromBech32(sn.ValidatorAddress) + if err != nil { + return err + } + return k.supernodeKeeper.RecoverSuperNodeFromPostponed(ctx, valAddr) +} + +func (k Keeper) missingReportsForConsecutiveWindows(ctx sdk.Context, supernodeAccount string, windowID uint64, consecutive uint32) bool { + if consecutive == 0 { + consecutive = 1 + } + if consecutive > uint32(windowID+1) { + // Not enough history on-chain to satisfy the consecutive rule. + return false + } + for offset := uint32(0); offset < consecutive; offset++ { + w := windowID - uint64(offset) + if k.HasReport(ctx, w, supernodeAccount) { + return false + } + } + return true +} diff --git a/x/audit/v1/keeper/msg_submit_audit_report.go b/x/audit/v1/keeper/msg_submit_audit_report.go index ddcce19..e219398 100644 --- a/x/audit/v1/keeper/msg_submit_audit_report.go +++ b/x/audit/v1/keeper/msg_submit_audit_report.go @@ -56,10 +56,16 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu } requiredPortsLen := len(params.RequiredOpenPorts) - if len(req.PeerObservations) > 0 { - if len(allowedTargets) == 0 { + if len(allowedTargets) == 0 { + // Not a prober for this window (e.g. POSTPONED). Peer observations are not accepted. + if len(req.PeerObservations) > 0 { return nil, errorsmod.Wrap(types.ErrInvalidReporterState, "reporter not eligible for peer observations in this window") } + } else { + // Probers must submit peer observations for all assigned targets for the window. + if len(req.PeerObservations) != len(allowedTargets) { + return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "expected peer observations for %d assigned targets; got %d", len(allowedTargets), len(req.PeerObservations)) + } seenTargets := make(map[string]struct{}, len(req.PeerObservations)) for _, obs := range req.PeerObservations { @@ -82,6 +88,9 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu return nil, errorsmod.Wrapf(types.ErrInvalidPortStatesLength, "port_states length %d does not match required_open_ports length %d", len(obs.PortStates), requiredPortsLen) } } + if len(seenTargets) != len(allowedTargets) { + return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "peer observations do not cover all assigned targets") + } } reporterAccount := req.SupernodeAccount diff --git a/x/audit/v1/keeper/query_assigned_targets.go b/x/audit/v1/keeper/query_assigned_targets.go new file mode 100644 index 0000000..bfb66e7 --- /dev/null +++ b/x/audit/v1/keeper/query_assigned_targets.go @@ -0,0 +1,63 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (q queryServer) AssignedTargets(ctx context.Context, req *types.QueryAssignedTargetsRequest) (*types.QueryAssignedTargetsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + if req.SupernodeAccount == "" { + return nil, status.Error(codes.InvalidArgument, "supernode_account is required") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + + // Validate prober is a registered supernode. + _, found, err := q.k.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.SupernodeAccount) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + if !found { + return nil, status.Error(codes.NotFound, "supernode not found") + } + + params := q.k.GetParams(ctx).WithDefaults() + + windowID := req.WindowId + if !req.FilterByWindowId { + ws, err := q.k.getCurrentWindowState(sdkCtx, params) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + windowID = ws.WindowID + } + + snap, found := q.k.GetWindowSnapshot(sdkCtx, windowID) + if !found { + return nil, status.Error(codes.NotFound, "window snapshot not found") + } + + var targets []string + for _, a := range snap.Assignments { + if a.ProberSupernodeAccount != req.SupernodeAccount { + continue + } + targets = append([]string(nil), a.TargetSupernodeAccounts...) + break + } + + return &types.QueryAssignedTargetsResponse{ + WindowId: windowID, + WindowStartHeight: snap.WindowStartHeight, + RequiredOpenPorts: append([]uint32(nil), params.RequiredOpenPorts...), + TargetSupernodeAccounts: targets, + }, nil +} diff --git a/x/audit/v1/keeper/query_audit_report.go b/x/audit/v1/keeper/query_audit_report.go index 921ce4d..9ffb31b 100644 --- a/x/audit/v1/keeper/query_audit_report.go +++ b/x/audit/v1/keeper/query_audit_report.go @@ -13,8 +13,21 @@ func (q queryServer) AuditReport(ctx context.Context, req *types.QueryAuditRepor if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } + if req.SupernodeAccount == "" { + return nil, status.Error(codes.InvalidArgument, "supernode_account is required") + } sdkCtx := sdk.UnwrapSDKContext(ctx) + + // Validate the reporter is a registered supernode. + _, foundSN, err := q.k.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.SupernodeAccount) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + if !foundSN { + return nil, status.Error(codes.NotFound, "supernode not found") + } + r, found := q.k.GetReport(sdkCtx, req.WindowId, req.SupernodeAccount) if !found { return nil, status.Error(codes.NotFound, "audit report not found") diff --git a/x/audit/v1/keeper/query_audit_reports_by_reporter.go b/x/audit/v1/keeper/query_audit_reports_by_reporter.go index 7bb8b8c..14597e0 100644 --- a/x/audit/v1/keeper/query_audit_reports_by_reporter.go +++ b/x/audit/v1/keeper/query_audit_reports_by_reporter.go @@ -17,8 +17,21 @@ func (q queryServer) AuditReportsByReporter(ctx context.Context, req *types.Quer if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } + if req.SupernodeAccount == "" { + return nil, status.Error(codes.InvalidArgument, "supernode_account is required") + } sdkCtx := sdk.UnwrapSDKContext(ctx) + + // Validate the reporter is a registered supernode. + _, found, err := q.k.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.SupernodeAccount) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + if !found { + return nil, status.Error(codes.NotFound, "supernode not found") + } + storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) store := prefix.NewStore(storeAdapter, types.ReportIndexPrefix(req.SupernodeAccount)) diff --git a/x/audit/v1/keeper/query_self_reports.go b/x/audit/v1/keeper/query_self_reports.go index cae228c..3e29f74 100644 --- a/x/audit/v1/keeper/query_self_reports.go +++ b/x/audit/v1/keeper/query_self_reports.go @@ -32,12 +32,14 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport pagination = &query.PageRequest{Limit: 100} } + useWindowFilter := req.FilterByWindowId || req.WindowId != 0 + pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { if len(key) != 8 { return status.Error(codes.Internal, "invalid self report index key") } windowID := binary.BigEndian.Uint64(key) - if req.WindowId != 0 && windowID != req.WindowId { + if useWindowFilter && windowID != req.WindowId { return nil } @@ -46,9 +48,9 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport return nil } reports = append(reports, types.SelfReport{ - WindowId: r.WindowId, - ReportHeight: r.ReportHeight, - SelfReport: r.SelfReport, + WindowId: r.WindowId, + ReportHeight: r.ReportHeight, + SelfReport: r.SelfReport, }) return nil }) @@ -61,4 +63,3 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport Pagination: pageRes, }, nil } - diff --git a/x/audit/v1/keeper/query_supernode_reports.go b/x/audit/v1/keeper/query_supernode_reports.go index c0baa1b..c8eb34a 100644 --- a/x/audit/v1/keeper/query_supernode_reports.go +++ b/x/audit/v1/keeper/query_supernode_reports.go @@ -25,7 +25,8 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) var store prefix.Store - if req.WindowId != 0 { + useWindowFilter := req.FilterByWindowId || req.WindowId != 0 + if useWindowFilter { store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexWindowPrefix(req.SupernodeAccount, req.WindowId)) } else { store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexPrefix(req.SupernodeAccount)) @@ -44,7 +45,7 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper reporter string ) - if req.WindowId != 0 { + if useWindowFilter { windowID = req.WindowId reporter = string(key) } else { diff --git a/x/audit/v1/keeper/query_window_snapshot.go b/x/audit/v1/keeper/query_window_snapshot.go new file mode 100644 index 0000000..4d41a0f --- /dev/null +++ b/x/audit/v1/keeper/query_window_snapshot.go @@ -0,0 +1,25 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (q queryServer) WindowSnapshot(ctx context.Context, req *types.QueryWindowSnapshotRequest) (*types.QueryWindowSnapshotResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + snap, found := q.k.GetWindowSnapshot(sdkCtx, req.WindowId) + if !found { + return nil, status.Error(codes.NotFound, "window snapshot not found") + } + + return &types.QueryWindowSnapshotResponse{Snapshot: snap}, nil +} diff --git a/x/audit/v1/keeper/window.go b/x/audit/v1/keeper/window.go index 462b454..9689344 100644 --- a/x/audit/v1/keeper/window.go +++ b/x/audit/v1/keeper/window.go @@ -11,31 +11,6 @@ import ( sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) -func (k Keeper) getWindowOriginHeight(ctx sdk.Context) (int64, bool) { - // The origin height is set once (on first use) and then kept stable forever. - // All window boundaries are derived from it to avoid drifting schedules. - store := k.kvStore(ctx) - bz := store.Get(types.WindowOriginHeightKey()) - if len(bz) != 8 { - return 0, false - } - return int64(binary.BigEndian.Uint64(bz)), true -} - -func (k Keeper) getOrInitWindowOriginHeight(ctx sdk.Context) int64 { - store := k.kvStore(ctx) - bz := store.Get(types.WindowOriginHeightKey()) - if len(bz) == 8 { - return int64(binary.BigEndian.Uint64(bz)) - } - - origin := ctx.BlockHeight() - out := make([]byte, 8) - binary.BigEndian.PutUint64(out, uint64(origin)) - store.Set(types.WindowOriginHeightKey(), out) - return origin -} - func (k Keeper) GetWindowSnapshot(ctx sdk.Context, windowID uint64) (types.WindowSnapshot, bool) { store := k.kvStore(ctx) bz := store.Get(types.WindowSnapshotKey(windowID)) @@ -87,12 +62,16 @@ func (k Keeper) CreateWindowSnapshotIfNeeded(ctx sdk.Context, windowID uint64, p } seedBytes := ctx.HeaderHash() - // Some test harnesses do not populate HeaderHash(). We only need a deterministic per-window seed, - // so fall back to the window start height (which equals ctx.BlockHeight() here). - if len(seedBytes) < 8 { + // In production (CometBFT), ctx.HeaderHash() should always be set and long enough. + // In simulation/benchmarks, the SDK often runs blocks with an empty header hash. + // Fall back to a deterministic 8-byte seed to keep simulation usable. + if len(seedBytes) == 0 { seedBytes = make([]byte, 8) binary.BigEndian.PutUint64(seedBytes, uint64(ctx.BlockHeight())) } + if len(seedBytes) < 8 { + return fmt.Errorf("header hash must be at least 8 bytes") + } assignments, err := assignment.ComputeSnapshotAssignments(params, senders, receivers, seedBytes) if err != nil { return err diff --git a/x/audit/v1/keeper/window_state.go b/x/audit/v1/keeper/window_state.go index 9614c93..d86b5b8 100644 --- a/x/audit/v1/keeper/window_state.go +++ b/x/audit/v1/keeper/window_state.go @@ -102,8 +102,7 @@ func (k Keeper) clearNextWindowBlocks(ctx sdk.Context) { store.Delete(types.NextWindowBlocksKey()) } -// initWindowStateIfNeeded writes initial window state once. It prefers initializing from an existing -// origin_height (for compatibility), otherwise it uses the current block height as the first window start. +// initWindowStateIfNeeded writes initial window state once, using the current block height as the first window start. func (k Keeper) initWindowStateIfNeeded(ctx sdk.Context, params types.Params) (windowState, error) { if ws, found, err := k.getWindowState(ctx); err != nil { return windowState{}, err @@ -116,28 +115,6 @@ func (k Keeper) initWindowStateIfNeeded(ctx sdk.Context, params types.Params) (w return windowState{}, fmt.Errorf("reporting_window_blocks must be > 0") } - // Compatibility: if origin_height exists, derive the current window by the legacy math once. - if origin, found := k.getWindowOriginHeight(ctx); found { - if ctx.BlockHeight() < origin { - ws := windowState{ - WindowID: 0, - StartHeight: origin, - EndHeight: origin + int64(windowBlocks) - 1, - WindowBlocks: windowBlocks, - } - return ws, k.setWindowState(ctx, ws) - } - windowID := uint64((ctx.BlockHeight() - origin) / int64(windowBlocks)) - start := origin + int64(windowID)*int64(windowBlocks) - ws := windowState{ - WindowID: windowID, - StartHeight: start, - EndHeight: start + int64(windowBlocks) - 1, - WindowBlocks: windowBlocks, - } - return ws, k.setWindowState(ctx, ws) - } - start := ctx.BlockHeight() ws := windowState{ WindowID: 0, diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go index bfaaa1e..7b6a97b 100644 --- a/x/audit/v1/types/keys.go +++ b/x/audit/v1/types/keys.go @@ -31,7 +31,6 @@ var ( // at the next window boundary (end(current)+1) by persisting a pending next_window_blocks value. // // Formats: - // - WindowOriginHeightKey: "origin_height" -> 8 bytes (u64be(height)) // - WindowSnapshotKey: "ws/" + u64be(window_id) // - CurrentWindowStateKey: "win/current" -> 32 bytes: u64be(window_id) + u64be(start_height) + u64be(end_height) + u64be(window_blocks) // - NextWindowBlocksKey: "win/next_blocks" -> 8 bytes (u64be(window_blocks)) @@ -43,9 +42,7 @@ var ( // Examples (shown as pseudo strings; the u64be bytes will appear as non-printable in raw dumps): // - WindowSnapshotKey(1) => "ws/" + u64be(1) // - ReportKey(1, "") => "r/" + u64be(1) + "" - // - EvidenceKey(1, "") => "e/" + u64be(1) + "" - windowOriginHeightKey = []byte("origin_height") currentWindowStateKey = []byte("win/current") nextWindowBlocksKey = []byte("win/next_blocks") @@ -63,12 +60,6 @@ var ( selfReportIndexPrefix = []byte("ss/") ) -// WindowOriginHeightKey returns the store key for the module's fixed window origin height. -// The stored value is u64be(height). -func WindowOriginHeightKey() []byte { - return windowOriginHeightKey -} - // WindowSnapshotKey returns the store key for the WindowSnapshot identified by windowID. func WindowSnapshotKey(windowID uint64) []byte { key := make([]byte, 0, len(windowSnapshotPrefix)+8) // "ws/" + u64be(window_id) diff --git a/x/audit/v1/types/query.pb.go b/x/audit/v1/types/query.pb.go index a8dd248..aa91a29 100644 --- a/x/audit/v1/types/query.pb.go +++ b/x/audit/v1/types/query.pb.go @@ -208,6 +208,222 @@ func (m *QueryCurrentWindowResponse) GetWindowEndHeight() int64 { return 0 } +type QueryWindowSnapshotRequest struct { + WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` +} + +func (m *QueryWindowSnapshotRequest) Reset() { *m = QueryWindowSnapshotRequest{} } +func (m *QueryWindowSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*QueryWindowSnapshotRequest) ProtoMessage() {} +func (*QueryWindowSnapshotRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{4} +} +func (m *QueryWindowSnapshotRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryWindowSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryWindowSnapshotRequest.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 *QueryWindowSnapshotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryWindowSnapshotRequest.Merge(m, src) +} +func (m *QueryWindowSnapshotRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryWindowSnapshotRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryWindowSnapshotRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryWindowSnapshotRequest proto.InternalMessageInfo + +func (m *QueryWindowSnapshotRequest) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +type QueryWindowSnapshotResponse struct { + Snapshot WindowSnapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot"` +} + +func (m *QueryWindowSnapshotResponse) Reset() { *m = QueryWindowSnapshotResponse{} } +func (m *QueryWindowSnapshotResponse) String() string { return proto.CompactTextString(m) } +func (*QueryWindowSnapshotResponse) ProtoMessage() {} +func (*QueryWindowSnapshotResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{5} +} +func (m *QueryWindowSnapshotResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryWindowSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryWindowSnapshotResponse.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 *QueryWindowSnapshotResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryWindowSnapshotResponse.Merge(m, src) +} +func (m *QueryWindowSnapshotResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryWindowSnapshotResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryWindowSnapshotResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryWindowSnapshotResponse proto.InternalMessageInfo + +func (m *QueryWindowSnapshotResponse) GetSnapshot() WindowSnapshot { + if m != nil { + return m.Snapshot + } + return WindowSnapshot{} +} + +type QueryAssignedTargetsRequest struct { + SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` + WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + FilterByWindowId bool `protobuf:"varint,3,opt,name=filter_by_window_id,json=filterByWindowId,proto3" json:"filter_by_window_id,omitempty"` +} + +func (m *QueryAssignedTargetsRequest) Reset() { *m = QueryAssignedTargetsRequest{} } +func (m *QueryAssignedTargetsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAssignedTargetsRequest) ProtoMessage() {} +func (*QueryAssignedTargetsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{6} +} +func (m *QueryAssignedTargetsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAssignedTargetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAssignedTargetsRequest.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 *QueryAssignedTargetsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAssignedTargetsRequest.Merge(m, src) +} +func (m *QueryAssignedTargetsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAssignedTargetsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAssignedTargetsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAssignedTargetsRequest proto.InternalMessageInfo + +func (m *QueryAssignedTargetsRequest) GetSupernodeAccount() string { + if m != nil { + return m.SupernodeAccount + } + return "" +} + +func (m *QueryAssignedTargetsRequest) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +func (m *QueryAssignedTargetsRequest) GetFilterByWindowId() bool { + if m != nil { + return m.FilterByWindowId + } + return false +} + +type QueryAssignedTargetsResponse struct { + WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + WindowStartHeight int64 `protobuf:"varint,2,opt,name=window_start_height,json=windowStartHeight,proto3" json:"window_start_height,omitempty"` + RequiredOpenPorts []uint32 `protobuf:"varint,3,rep,packed,name=required_open_ports,json=requiredOpenPorts,proto3" json:"required_open_ports,omitempty"` + TargetSupernodeAccounts []string `protobuf:"bytes,4,rep,name=target_supernode_accounts,json=targetSupernodeAccounts,proto3" json:"target_supernode_accounts,omitempty"` +} + +func (m *QueryAssignedTargetsResponse) Reset() { *m = QueryAssignedTargetsResponse{} } +func (m *QueryAssignedTargetsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAssignedTargetsResponse) ProtoMessage() {} +func (*QueryAssignedTargetsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{7} +} +func (m *QueryAssignedTargetsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAssignedTargetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAssignedTargetsResponse.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 *QueryAssignedTargetsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAssignedTargetsResponse.Merge(m, src) +} +func (m *QueryAssignedTargetsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAssignedTargetsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAssignedTargetsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAssignedTargetsResponse proto.InternalMessageInfo + +func (m *QueryAssignedTargetsResponse) GetWindowId() uint64 { + if m != nil { + return m.WindowId + } + return 0 +} + +func (m *QueryAssignedTargetsResponse) GetWindowStartHeight() int64 { + if m != nil { + return m.WindowStartHeight + } + return 0 +} + +func (m *QueryAssignedTargetsResponse) GetRequiredOpenPorts() []uint32 { + if m != nil { + return m.RequiredOpenPorts + } + return nil +} + +func (m *QueryAssignedTargetsResponse) GetTargetSupernodeAccounts() []string { + if m != nil { + return m.TargetSupernodeAccounts + } + return nil +} + type QueryAuditReportRequest struct { WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` SupernodeAccount string `protobuf:"bytes,2,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` @@ -217,7 +433,7 @@ func (m *QueryAuditReportRequest) Reset() { *m = QueryAuditReportRequest func (m *QueryAuditReportRequest) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportRequest) ProtoMessage() {} func (*QueryAuditReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{4} + return fileDescriptor_e98945621bbc9485, []int{8} } func (m *QueryAuditReportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -268,7 +484,7 @@ func (m *QueryAuditReportResponse) Reset() { *m = QueryAuditReportRespon func (m *QueryAuditReportResponse) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportResponse) ProtoMessage() {} func (*QueryAuditReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{5} + return fileDescriptor_e98945621bbc9485, []int{9} } func (m *QueryAuditReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -313,7 +529,7 @@ func (m *QueryAuditReportsByReporterRequest) Reset() { *m = QueryAuditRe func (m *QueryAuditReportsByReporterRequest) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportsByReporterRequest) ProtoMessage() {} func (*QueryAuditReportsByReporterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{6} + return fileDescriptor_e98945621bbc9485, []int{10} } func (m *QueryAuditReportsByReporterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -365,7 +581,7 @@ func (m *QueryAuditReportsByReporterResponse) Reset() { *m = QueryAuditR func (m *QueryAuditReportsByReporterResponse) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportsByReporterResponse) ProtoMessage() {} func (*QueryAuditReportsByReporterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{7} + return fileDescriptor_e98945621bbc9485, []int{11} } func (m *QueryAuditReportsByReporterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -412,13 +628,14 @@ type QuerySupernodeReportsRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` + FilterByWindowId bool `protobuf:"varint,4,opt,name=filter_by_window_id,json=filterByWindowId,proto3" json:"filter_by_window_id,omitempty"` } func (m *QuerySupernodeReportsRequest) Reset() { *m = QuerySupernodeReportsRequest{} } func (m *QuerySupernodeReportsRequest) String() string { return proto.CompactTextString(m) } func (*QuerySupernodeReportsRequest) ProtoMessage() {} func (*QuerySupernodeReportsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{8} + return fileDescriptor_e98945621bbc9485, []int{12} } func (m *QuerySupernodeReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -468,6 +685,13 @@ func (m *QuerySupernodeReportsRequest) GetPagination() *query.PageRequest { return nil } +func (m *QuerySupernodeReportsRequest) GetFilterByWindowId() bool { + if m != nil { + return m.FilterByWindowId + } + return false +} + type SupernodeReport struct { ReporterSupernodeAccount string `protobuf:"bytes,1,opt,name=reporter_supernode_account,json=reporterSupernodeAccount,proto3" json:"reporter_supernode_account,omitempty"` WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` @@ -479,7 +703,7 @@ func (m *SupernodeReport) Reset() { *m = SupernodeReport{} } func (m *SupernodeReport) String() string { return proto.CompactTextString(m) } func (*SupernodeReport) ProtoMessage() {} func (*SupernodeReport) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{9} + return fileDescriptor_e98945621bbc9485, []int{13} } func (m *SupernodeReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -545,7 +769,7 @@ func (m *QuerySupernodeReportsResponse) Reset() { *m = QuerySupernodeRep func (m *QuerySupernodeReportsResponse) String() string { return proto.CompactTextString(m) } func (*QuerySupernodeReportsResponse) ProtoMessage() {} func (*QuerySupernodeReportsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{10} + return fileDescriptor_e98945621bbc9485, []int{14} } func (m *QuerySupernodeReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -592,13 +816,14 @@ type QuerySelfReportsRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` + FilterByWindowId bool `protobuf:"varint,4,opt,name=filter_by_window_id,json=filterByWindowId,proto3" json:"filter_by_window_id,omitempty"` } func (m *QuerySelfReportsRequest) Reset() { *m = QuerySelfReportsRequest{} } func (m *QuerySelfReportsRequest) String() string { return proto.CompactTextString(m) } func (*QuerySelfReportsRequest) ProtoMessage() {} func (*QuerySelfReportsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{11} + return fileDescriptor_e98945621bbc9485, []int{15} } func (m *QuerySelfReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -648,6 +873,13 @@ func (m *QuerySelfReportsRequest) GetPagination() *query.PageRequest { return nil } +func (m *QuerySelfReportsRequest) GetFilterByWindowId() bool { + if m != nil { + return m.FilterByWindowId + } + return false +} + type SelfReport struct { WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` ReportHeight int64 `protobuf:"varint,2,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` @@ -658,7 +890,7 @@ func (m *SelfReport) Reset() { *m = SelfReport{} } func (m *SelfReport) String() string { return proto.CompactTextString(m) } func (*SelfReport) ProtoMessage() {} func (*SelfReport) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{12} + return fileDescriptor_e98945621bbc9485, []int{16} } func (m *SelfReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -717,7 +949,7 @@ func (m *QuerySelfReportsResponse) Reset() { *m = QuerySelfReportsRespon func (m *QuerySelfReportsResponse) String() string { return proto.CompactTextString(m) } func (*QuerySelfReportsResponse) ProtoMessage() {} func (*QuerySelfReportsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{13} + return fileDescriptor_e98945621bbc9485, []int{17} } func (m *QuerySelfReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -765,6 +997,10 @@ func init() { proto.RegisterType((*QueryParamsResponse)(nil), "lumera.audit.v1.QueryParamsResponse") proto.RegisterType((*QueryCurrentWindowRequest)(nil), "lumera.audit.v1.QueryCurrentWindowRequest") proto.RegisterType((*QueryCurrentWindowResponse)(nil), "lumera.audit.v1.QueryCurrentWindowResponse") + proto.RegisterType((*QueryWindowSnapshotRequest)(nil), "lumera.audit.v1.QueryWindowSnapshotRequest") + proto.RegisterType((*QueryWindowSnapshotResponse)(nil), "lumera.audit.v1.QueryWindowSnapshotResponse") + proto.RegisterType((*QueryAssignedTargetsRequest)(nil), "lumera.audit.v1.QueryAssignedTargetsRequest") + proto.RegisterType((*QueryAssignedTargetsResponse)(nil), "lumera.audit.v1.QueryAssignedTargetsResponse") proto.RegisterType((*QueryAuditReportRequest)(nil), "lumera.audit.v1.QueryAuditReportRequest") proto.RegisterType((*QueryAuditReportResponse)(nil), "lumera.audit.v1.QueryAuditReportResponse") proto.RegisterType((*QueryAuditReportsByReporterRequest)(nil), "lumera.audit.v1.QueryAuditReportsByReporterRequest") @@ -780,68 +1016,82 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/query.proto", fileDescriptor_e98945621bbc9485) } var fileDescriptor_e98945621bbc9485 = []byte{ - // 973 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xc4, 0x21, 0x34, 0xaf, 0x29, 0x49, 0xa6, 0x15, 0x71, 0xd7, 0xc1, 0x58, 0x1b, 0x54, - 0x8c, 0x51, 0x77, 0x49, 0x8a, 0x38, 0x50, 0x0e, 0x8d, 0x51, 0x49, 0x90, 0x5a, 0x48, 0xd7, 0x7c, - 0x08, 0x2e, 0xab, 0xb5, 0x77, 0xba, 0x5d, 0xc9, 0xde, 0xd9, 0xee, 0x8c, 0x53, 0xac, 0xaa, 0x12, - 0x82, 0x3f, 0x80, 0x84, 0x10, 0xd7, 0x1e, 0x11, 0xea, 0x81, 0x03, 0x42, 0x88, 0x13, 0xc7, 0x5c, - 0x90, 0x2a, 0xb8, 0x20, 0x0e, 0x08, 0x25, 0x48, 0x1c, 0xf8, 0x13, 0x68, 0x67, 0x66, 0x63, 0x7b, - 0x77, 0xfd, 0x91, 0xa8, 0x1c, 0xb8, 0x44, 0xe3, 0x79, 0xbf, 0x9e, 0xe7, 0x9d, 0x67, 0xdf, 0x99, - 0x40, 0xb9, 0xd3, 0xeb, 0x92, 0xc8, 0x31, 0x9d, 0x9e, 0xeb, 0x73, 0x73, 0x7f, 0xd3, 0xbc, 0xd3, - 0x23, 0x51, 0xdf, 0x08, 0x23, 0xca, 0x29, 0x5e, 0x96, 0x46, 0x43, 0x18, 0x8d, 0xfd, 0x4d, 0x6d, - 0xd5, 0xe9, 0xfa, 0x01, 0x35, 0xc5, 0x5f, 0xe9, 0xa3, 0x9d, 0xf7, 0xa8, 0x47, 0xc5, 0xd2, 0x8c, - 0x57, 0x6a, 0x77, 0xdd, 0xa3, 0xd4, 0xeb, 0x10, 0xd3, 0x09, 0x7d, 0xd3, 0x09, 0x02, 0xca, 0x1d, - 0xee, 0xd3, 0x80, 0x29, 0xeb, 0x85, 0x36, 0x65, 0x5d, 0xca, 0x6c, 0x19, 0x26, 0x7f, 0x28, 0x53, - 0x5d, 0xfe, 0x32, 0x5b, 0x0e, 0x23, 0x12, 0x8b, 0xb9, 0xbf, 0xd9, 0x22, 0xdc, 0xd9, 0x34, 0x43, - 0xc7, 0xf3, 0x03, 0x91, 0x27, 0x29, 0x92, 0xc6, 0x1e, 0x3a, 0x91, 0xd3, 0x4d, 0x32, 0x65, 0x98, - 0x49, 0x16, 0xc2, 0xa8, 0x9f, 0x07, 0x7c, 0x33, 0x4e, 0xbe, 0x27, 0x22, 0x2c, 0x72, 0xa7, 0x47, - 0x18, 0xd7, 0x6f, 0xc2, 0xb9, 0x91, 0x5d, 0x16, 0xd2, 0x80, 0x11, 0xfc, 0x1a, 0x2c, 0xca, 0xcc, - 0x25, 0x54, 0x45, 0xb5, 0xe2, 0xd6, 0x9a, 0x91, 0xea, 0x8b, 0x21, 0x03, 0x1a, 0x4b, 0x07, 0x7f, - 0x3c, 0x37, 0xf7, 0xf5, 0xdf, 0xdf, 0xd6, 0x91, 0xa5, 0x22, 0xf4, 0x32, 0x5c, 0x10, 0x29, 0xdf, - 0xe8, 0x45, 0x11, 0x09, 0xf8, 0x07, 0x7e, 0xe0, 0xd2, 0xbb, 0x49, 0xbd, 0x2f, 0x11, 0x68, 0x79, - 0x56, 0x55, 0xb7, 0x0c, 0x4b, 0x77, 0xc5, 0x8e, 0xed, 0xbb, 0xa2, 0xf4, 0x82, 0x75, 0x46, 0x6e, - 0xbc, 0xe5, 0x62, 0x03, 0xce, 0x29, 0x23, 0xe3, 0x4e, 0xc4, 0xed, 0xdb, 0xc4, 0xf7, 0x6e, 0xf3, - 0xd2, 0x7c, 0x15, 0xd5, 0x0a, 0xd6, 0xaa, 0x34, 0x35, 0x63, 0xcb, 0xae, 0x30, 0xe0, 0x3a, 0xa8, - 0x4d, 0x9b, 0x04, 0x6e, 0xe2, 0x5d, 0x10, 0xde, 0xcb, 0xd2, 0x70, 0x2d, 0x70, 0xa5, 0xaf, 0xfe, - 0x09, 0x82, 0x35, 0x81, 0x6b, 0x3b, 0x26, 0x68, 0x91, 0x90, 0x46, 0x5c, 0x61, 0x9e, 0x0c, 0x6a, - 0x17, 0x56, 0x59, 0x2f, 0x24, 0x51, 0x40, 0x5d, 0x62, 0x3b, 0xed, 0x36, 0xed, 0x05, 0x12, 0xd2, - 0x52, 0xa3, 0xfc, 0xcb, 0x77, 0x97, 0xd6, 0xd4, 0x51, 0x6f, 0xb7, 0xdb, 0xdb, 0xae, 0x1b, 0x11, - 0xc6, 0x9a, 0x3c, 0xf2, 0x03, 0xcf, 0x5a, 0x39, 0x8e, 0xda, 0x96, 0x41, 0xfa, 0xfb, 0x50, 0xca, - 0x22, 0x18, 0x9c, 0x47, 0x24, 0x76, 0xd4, 0x79, 0xac, 0x67, 0xce, 0x63, 0x28, 0xaa, 0xb1, 0x10, - 0x1f, 0x8a, 0xa5, 0x22, 0xf4, 0xef, 0x11, 0xe8, 0xe9, 0xc4, 0xac, 0xd1, 0x97, 0x0b, 0x12, 0x25, - 0x2c, 0x73, 0x89, 0xa0, 0x53, 0x10, 0xc1, 0x6f, 0x02, 0x0c, 0x84, 0x2b, 0x7a, 0x51, 0xdc, 0xba, - 0x68, 0xa8, 0xf8, 0x58, 0xe5, 0x86, 0xfc, 0xe2, 0x94, 0xca, 0x8d, 0x3d, 0xc7, 0x23, 0x0a, 0x85, - 0x35, 0x14, 0xa9, 0x3f, 0x44, 0xb0, 0x31, 0x11, 0xb8, 0x6a, 0xce, 0xeb, 0xf0, 0xa4, 0xa4, 0x1a, - 0xab, 0xb5, 0x30, 0x63, 0x77, 0x92, 0x10, 0xbc, 0x93, 0x83, 0xf6, 0x85, 0xa9, 0x68, 0x65, 0xe9, - 0x11, 0xb8, 0x3f, 0x23, 0x58, 0x17, 0x70, 0x9b, 0x49, 0x43, 0x14, 0xe4, 0xc7, 0xdf, 0xe1, 0x11, - 0x45, 0xce, 0xa7, 0x14, 0x39, 0xda, 0xfe, 0xc2, 0xa9, 0xdb, 0xff, 0x0f, 0x82, 0xe5, 0x14, 0x15, - 0xfc, 0x21, 0x68, 0x91, 0x6a, 0xbf, 0x7d, 0x2a, 0x2e, 0xa5, 0x24, 0xbc, 0x79, 0x22, 0x4e, 0x1b, - 0x70, 0x56, 0x06, 0x8e, 0x7e, 0xc6, 0x4f, 0xc9, 0x4d, 0xf5, 0xbd, 0x5f, 0x81, 0xa2, 0x70, 0x61, - 0xdc, 0xe1, 0x84, 0x95, 0x16, 0xaa, 0x85, 0xda, 0xd3, 0x5b, 0x5a, 0x76, 0x72, 0xd1, 0x88, 0x37, - 0x63, 0x17, 0x0b, 0xc2, 0x64, 0xc9, 0xf4, 0x6f, 0x10, 0x3c, 0x3b, 0xe6, 0xf4, 0x94, 0xcc, 0xae, - 0xa6, 0x65, 0x56, 0xcd, 0xa4, 0x4e, 0xc5, 0xfe, 0x67, 0x52, 0x3b, 0x48, 0xa6, 0x55, 0x93, 0x74, - 0x6e, 0xfd, 0xbf, 0x55, 0xf6, 0x15, 0x02, 0x18, 0xb0, 0x98, 0x3c, 0x6b, 0x33, 0x2a, 0x98, 0xcf, - 0x51, 0xc1, 0x0e, 0x14, 0x19, 0xe9, 0xdc, 0xb2, 0xd5, 0xbc, 0x94, 0xc8, 0xaa, 0xf9, 0x13, 0x61, - 0x50, 0x58, 0x1d, 0x15, 0xb0, 0xe3, 0x1d, 0xfd, 0x01, 0x52, 0x03, 0x79, 0xa4, 0xc9, 0x4a, 0x0c, - 0x57, 0xd2, 0x62, 0x28, 0x67, 0xc5, 0x90, 0x4e, 0xfe, 0xd8, 0x75, 0xb0, 0xf5, 0xe3, 0x19, 0x78, - 0x42, 0x40, 0xc4, 0x9f, 0x21, 0x58, 0x94, 0x57, 0x32, 0xde, 0xc8, 0x20, 0xc9, 0xde, 0xfb, 0xda, - 0xf3, 0x93, 0x9d, 0x64, 0x2d, 0xdd, 0xf8, 0xf4, 0xd7, 0xbf, 0xbe, 0x98, 0xaf, 0xe1, 0x8b, 0xe6, - 0x75, 0xe1, 0xbd, 0x17, 0xbf, 0x24, 0xda, 0xb4, 0x63, 0xe6, 0x3f, 0x43, 0xf0, 0x03, 0x04, 0x67, - 0x47, 0x2e, 0x76, 0x5c, 0xcf, 0xaf, 0x93, 0xf7, 0x36, 0xd0, 0x5e, 0x9a, 0xc9, 0x57, 0x41, 0x7b, - 0x55, 0x40, 0x7b, 0x19, 0x1b, 0xd3, 0xa0, 0xb5, 0x65, 0xb8, 0x2d, 0x55, 0x84, 0x7f, 0x40, 0x50, - 0x1c, 0xba, 0x0d, 0x70, 0x2d, 0xbf, 0x68, 0xf6, 0x19, 0xa0, 0xbd, 0x38, 0x83, 0xa7, 0x02, 0xf7, - 0xae, 0x00, 0xf7, 0x36, 0xbe, 0x3e, 0x0d, 0x9c, 0x58, 0x28, 0xa9, 0x9a, 0xf7, 0x8e, 0x95, 0x7f, - 0xdf, 0xbc, 0x97, 0xf9, 0x86, 0xef, 0xe3, 0xdf, 0x11, 0x3c, 0x93, 0x7f, 0x15, 0xe2, 0xcb, 0x53, - 0xb1, 0x65, 0x6f, 0x7c, 0xed, 0x95, 0x93, 0x05, 0x29, 0x6e, 0xef, 0x09, 0x6e, 0xef, 0xe0, 0x1b, - 0x27, 0xe1, 0xc6, 0xec, 0x56, 0xdf, 0x4e, 0x46, 0x7f, 0x2e, 0xb9, 0x9f, 0x10, 0xac, 0xa4, 0x47, - 0x2f, 0xbe, 0x94, 0x8f, 0x70, 0xcc, 0x05, 0xab, 0x19, 0xb3, 0xba, 0x2b, 0x2a, 0x37, 0x04, 0x95, - 0x1d, 0x7c, 0x6d, 0x1a, 0x95, 0x01, 0x5e, 0x45, 0x27, 0x97, 0xc2, 0x43, 0x04, 0xc5, 0xa1, 0x59, - 0x31, 0x4e, 0x5a, 0xd9, 0x99, 0x3d, 0x4e, 0x5a, 0x39, 0x83, 0x47, 0xdf, 0x15, 0x98, 0x1b, 0xf8, - 0xea, 0x54, 0xcc, 0x83, 0x21, 0x98, 0x0b, 0xb7, 0x51, 0x3f, 0x38, 0xac, 0xa0, 0x47, 0x87, 0x15, - 0xf4, 0xe7, 0x61, 0x05, 0x7d, 0x7e, 0x54, 0x99, 0x7b, 0x74, 0x54, 0x99, 0xfb, 0xed, 0xa8, 0x32, - 0xf7, 0xd1, 0xca, 0xc7, 0x83, 0x34, 0xbc, 0x1f, 0x12, 0xd6, 0x5a, 0x14, 0xff, 0x43, 0x5c, 0xfe, - 0x37, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x85, 0xcb, 0x6e, 0x3c, 0x0d, 0x00, 0x00, + // 1191 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xc1, 0x6f, 0xdc, 0xc4, + 0x17, 0xce, 0x64, 0xf3, 0xeb, 0x2f, 0x79, 0x4b, 0x9a, 0x64, 0x52, 0x91, 0x8d, 0x37, 0x6c, 0x57, + 0x0e, 0x2a, 0x21, 0x10, 0x9b, 0xa4, 0x08, 0x09, 0x02, 0x52, 0xb3, 0xa5, 0x4d, 0x2a, 0xa5, 0x34, + 0xf5, 0x16, 0x2a, 0xb8, 0x18, 0x67, 0x3d, 0xd9, 0x58, 0xda, 0xd8, 0x8e, 0xc7, 0x9b, 0x12, 0x55, + 0x95, 0x10, 0xfc, 0x03, 0x48, 0x08, 0x71, 0xed, 0x11, 0xa1, 0x1c, 0x2a, 0x81, 0x10, 0x07, 0x0e, + 0x1c, 0x7b, 0xac, 0xe0, 0x82, 0x38, 0x20, 0x94, 0x20, 0x71, 0xe0, 0x8a, 0xc4, 0x85, 0x03, 0xf2, + 0xcc, 0x73, 0x36, 0x6b, 0x7b, 0xb3, 0x9b, 0xa8, 0xe5, 0xc2, 0x25, 0x9a, 0x9d, 0xf7, 0xbe, 0x79, + 0xdf, 0x7b, 0xf3, 0xf9, 0xcd, 0x53, 0xa0, 0xd8, 0x68, 0x6e, 0xb1, 0xc0, 0xd2, 0xad, 0xa6, 0xed, + 0x84, 0xfa, 0xce, 0xbc, 0xbe, 0xdd, 0x64, 0xc1, 0xae, 0xe6, 0x07, 0x5e, 0xe8, 0xd1, 0x11, 0x69, + 0xd4, 0x84, 0x51, 0xdb, 0x99, 0x57, 0xc6, 0xac, 0x2d, 0xc7, 0xf5, 0x74, 0xf1, 0x57, 0xfa, 0x28, + 0xe7, 0xea, 0x5e, 0xdd, 0x13, 0x4b, 0x3d, 0x5a, 0xe1, 0xee, 0x54, 0xdd, 0xf3, 0xea, 0x0d, 0xa6, + 0x5b, 0xbe, 0xa3, 0x5b, 0xae, 0xeb, 0x85, 0x56, 0xe8, 0x78, 0x2e, 0x47, 0xeb, 0x64, 0xcd, 0xe3, + 0x5b, 0x1e, 0x37, 0x25, 0x4c, 0xfe, 0x40, 0xd3, 0xac, 0xfc, 0xa5, 0xaf, 0x5b, 0x9c, 0x49, 0x2e, + 0xfa, 0xce, 0xfc, 0x3a, 0x0b, 0xad, 0x79, 0xdd, 0xb7, 0xea, 0x8e, 0x2b, 0xce, 0x89, 0x83, 0x24, + 0xb9, 0xfb, 0x56, 0x60, 0x6d, 0xc5, 0x27, 0xa5, 0x32, 0x93, 0x59, 0x08, 0xa3, 0x7a, 0x0e, 0xe8, + 0xcd, 0xe8, 0xf0, 0x35, 0x81, 0x30, 0xd8, 0x76, 0x93, 0xf1, 0x50, 0xbd, 0x09, 0xe3, 0x6d, 0xbb, + 0xdc, 0xf7, 0x5c, 0xce, 0xe8, 0x6b, 0x70, 0x46, 0x9e, 0x5c, 0x20, 0x65, 0x32, 0x93, 0x5f, 0x98, + 0xd0, 0x12, 0x75, 0xd1, 0x24, 0xa0, 0x32, 0xf4, 0xf0, 0x97, 0xf3, 0x7d, 0x5f, 0xfc, 0xfe, 0x60, + 0x96, 0x18, 0x88, 0x50, 0x8b, 0x30, 0x29, 0x8e, 0xbc, 0xdc, 0x0c, 0x02, 0xe6, 0x86, 0xb7, 0x1d, + 0xd7, 0xf6, 0xee, 0xc4, 0xf1, 0x3e, 0x23, 0xa0, 0x64, 0x59, 0x31, 0x6e, 0x11, 0x86, 0xee, 0x88, + 0x1d, 0xd3, 0xb1, 0x45, 0xe8, 0x01, 0x63, 0x50, 0x6e, 0x5c, 0xb3, 0xa9, 0x06, 0xe3, 0x68, 0xe4, + 0xa1, 0x15, 0x84, 0xe6, 0x26, 0x73, 0xea, 0x9b, 0x61, 0xa1, 0xbf, 0x4c, 0x66, 0x72, 0xc6, 0x98, + 0x34, 0x55, 0x23, 0xcb, 0x8a, 0x30, 0xd0, 0x59, 0xc0, 0x4d, 0x93, 0xb9, 0x76, 0xec, 0x9d, 0x13, + 0xde, 0x23, 0xd2, 0x70, 0xc5, 0xb5, 0xa5, 0xaf, 0xfa, 0x2a, 0xd2, 0x92, 0x7c, 0xaa, 0xae, 0xe5, + 0xf3, 0x4d, 0x2f, 0x44, 0xd6, 0xc7, 0xd2, 0x52, 0xdf, 0x87, 0x62, 0x26, 0x14, 0x53, 0x5a, 0x82, + 0x41, 0x8e, 0x7b, 0x58, 0xcc, 0xf3, 0xa9, 0x62, 0xb6, 0x43, 0x2b, 0x03, 0x51, 0x51, 0x8d, 0x43, + 0x98, 0xfa, 0x15, 0xc1, 0x10, 0x4b, 0x9c, 0x3b, 0x75, 0x97, 0xd9, 0xb7, 0xac, 0xa0, 0xce, 0xc2, + 0xf8, 0x12, 0xe9, 0x0a, 0x8c, 0xf1, 0xa6, 0xcf, 0x02, 0xd7, 0xb3, 0x99, 0x69, 0xd5, 0x6a, 0x5e, + 0xd3, 0x95, 0xb1, 0x86, 0x2a, 0xc5, 0x1f, 0xbe, 0x9e, 0x9b, 0x40, 0xb9, 0x2d, 0xd5, 0x6a, 0x4b, + 0xb6, 0x1d, 0x30, 0xce, 0xab, 0x61, 0xe0, 0xb8, 0x75, 0x63, 0xf4, 0x10, 0xb5, 0x24, 0x41, 0xed, + 0x89, 0xf6, 0x27, 0xea, 0x3f, 0x07, 0xe3, 0x1b, 0x4e, 0x23, 0x64, 0x81, 0xb9, 0xbe, 0x6b, 0xb6, + 0xdc, 0xa2, 0x8a, 0x0e, 0x1a, 0xa3, 0xd2, 0x54, 0xc1, 0x32, 0x5c, 0xb3, 0xd5, 0x3f, 0x09, 0x4c, + 0x65, 0xb3, 0x7e, 0x12, 0x97, 0xad, 0xc1, 0x78, 0xc0, 0xb6, 0x9b, 0x4e, 0xc0, 0x6c, 0xd3, 0xf3, + 0x99, 0x6b, 0xfa, 0x5e, 0x10, 0xf2, 0x42, 0xae, 0x9c, 0x9b, 0x19, 0x36, 0xc6, 0x62, 0xd3, 0x0d, + 0x9f, 0xb9, 0x6b, 0x91, 0x81, 0xde, 0x86, 0xc9, 0x50, 0xf0, 0x31, 0x53, 0xa5, 0xe3, 0x85, 0x81, + 0x72, 0xae, 0x5b, 0xed, 0x26, 0x24, 0xba, 0x9a, 0xa8, 0x20, 0x57, 0x3f, 0x24, 0x30, 0x21, 0xd3, + 0x8e, 0x6e, 0xd7, 0x60, 0x11, 0x8f, 0x5e, 0x74, 0x94, 0x7d, 0x8b, 0xfd, 0xa7, 0xb8, 0x45, 0xf5, + 0x1d, 0x28, 0xa4, 0x19, 0xb4, 0xbe, 0xec, 0x40, 0xec, 0xa0, 0x18, 0xa7, 0x52, 0x62, 0x3c, 0x82, + 0x42, 0x25, 0x22, 0x42, 0xfd, 0x86, 0x80, 0x9a, 0x3c, 0x98, 0x57, 0x76, 0xe5, 0x82, 0x05, 0x8f, + 0x5f, 0x8e, 0x57, 0x01, 0x5a, 0x2d, 0x50, 0xd4, 0x22, 0xbf, 0x70, 0x41, 0x43, 0x7c, 0xd4, 0x2f, + 0x35, 0xd9, 0xbb, 0xb1, 0x5f, 0x6a, 0x6b, 0x56, 0x9d, 0x21, 0x0b, 0xe3, 0x08, 0x52, 0xdd, 0x23, + 0x30, 0x7d, 0x2c, 0x71, 0x2c, 0xce, 0xeb, 0xf0, 0x7f, 0x99, 0x6a, 0xd4, 0xf7, 0x72, 0x3d, 0x56, + 0x27, 0x86, 0xd0, 0xe5, 0x0c, 0xb6, 0xcf, 0x75, 0x65, 0x2b, 0x43, 0xb7, 0xd1, 0xfd, 0x3b, 0xfe, + 0x72, 0x0e, 0xd5, 0x85, 0x94, 0xff, 0xe5, 0x0f, 0xbe, 0xbd, 0xfc, 0xb9, 0xd3, 0x96, 0xbf, 0x53, + 0xe3, 0x18, 0xe8, 0xd0, 0x38, 0xfe, 0x20, 0x30, 0x92, 0xc8, 0x9c, 0xbe, 0x0b, 0x4a, 0x80, 0xb7, + 0x65, 0x9e, 0x2a, 0xf5, 0x42, 0x0c, 0xaf, 0x9e, 0xa8, 0x04, 0xd3, 0x30, 0x2c, 0x81, 0xed, 0xef, + 0xc7, 0x53, 0x72, 0x13, 0x7b, 0xcf, 0x22, 0xe4, 0x85, 0x0b, 0x0f, 0xad, 0x90, 0xc9, 0xee, 0x71, + 0x76, 0x41, 0x49, 0x3f, 0x99, 0x5e, 0x10, 0x56, 0x23, 0x17, 0x03, 0xfc, 0x78, 0xc9, 0xd5, 0x2f, + 0x09, 0x3c, 0xd3, 0xe1, 0xb2, 0x51, 0x95, 0x97, 0x92, 0xaa, 0x2c, 0xa7, 0x8e, 0x4e, 0x60, 0x9f, + 0x98, 0x32, 0xff, 0x8a, 0x9b, 0x5b, 0x95, 0x35, 0x36, 0xfe, 0x53, 0xa2, 0xfc, 0x9c, 0x00, 0xb4, + 0x92, 0x3e, 0xbe, 0x93, 0xa7, 0x44, 0xd3, 0x9f, 0x21, 0x9a, 0x65, 0xc8, 0x73, 0xd6, 0xd8, 0x30, + 0xb1, 0x1b, 0xcb, 0x44, 0xca, 0xd9, 0xfd, 0xa6, 0x15, 0x18, 0x6f, 0x16, 0xf8, 0xe1, 0x8e, 0x7a, + 0x9f, 0x60, 0xbb, 0x6f, 0xbb, 0x13, 0xd4, 0xce, 0x62, 0x52, 0x3b, 0xc5, 0xb4, 0x76, 0x92, 0x87, + 0x3f, 0x76, 0xd9, 0x2c, 0xec, 0xe5, 0xe1, 0x7f, 0x82, 0x22, 0xfd, 0x98, 0xc0, 0x19, 0x39, 0x3a, + 0xd2, 0xe9, 0x14, 0x93, 0xf4, 0x7c, 0xaa, 0x3c, 0x7b, 0xbc, 0x93, 0x8c, 0xa5, 0x6a, 0x1f, 0xfd, + 0xf8, 0xdb, 0xa7, 0xfd, 0x33, 0xf4, 0x82, 0xbe, 0x2a, 0xbc, 0xd7, 0xa2, 0x89, 0xb7, 0xe6, 0x35, + 0xf4, 0xec, 0x71, 0x99, 0xde, 0x27, 0x30, 0xdc, 0x36, 0x80, 0xd2, 0xd9, 0xec, 0x38, 0x59, 0x33, + 0xac, 0xf2, 0x42, 0x4f, 0xbe, 0x48, 0xed, 0x15, 0x41, 0xed, 0x25, 0xaa, 0x75, 0xa3, 0x56, 0x93, + 0x70, 0x94, 0x22, 0x7d, 0x40, 0xe0, 0x6c, 0xfb, 0x58, 0x48, 0x3b, 0xc4, 0xcd, 0x1c, 0x59, 0x95, + 0x17, 0x7b, 0x73, 0x46, 0x96, 0x97, 0x05, 0xcb, 0x37, 0xe8, 0x62, 0x37, 0x96, 0xf1, 0x4c, 0x86, + 0x07, 0xe8, 0x77, 0x0f, 0xbf, 0x82, 0x7b, 0xf4, 0x3b, 0x02, 0x23, 0x89, 0x59, 0x8f, 0x76, 0xa0, + 0x91, 0x3d, 0xc8, 0x2a, 0x73, 0x3d, 0x7a, 0x23, 0xeb, 0x55, 0xc1, 0xfa, 0x2a, 0x7d, 0xb3, 0x1b, + 0x6b, 0x0b, 0x0f, 0x30, 0xe5, 0xd0, 0xc6, 0xf5, 0xbb, 0xa9, 0x4e, 0x75, 0x8f, 0x7e, 0x4b, 0x20, + 0x7f, 0xe4, 0x75, 0xa7, 0x33, 0x1d, 0xc8, 0xa4, 0xc6, 0x3a, 0xe5, 0xf9, 0x1e, 0x3c, 0x91, 0xf2, + 0x2d, 0x41, 0xf9, 0x2d, 0xba, 0xda, 0x95, 0x72, 0xb4, 0xc0, 0xe6, 0x70, 0xb4, 0xca, 0x99, 0xd4, + 0x7f, 0x26, 0xf0, 0x74, 0xf6, 0x68, 0x43, 0x2f, 0x76, 0xe5, 0x96, 0x9e, 0xe0, 0x94, 0x97, 0x4f, + 0x06, 0xc2, 0xdc, 0xde, 0x16, 0xb9, 0xdd, 0xa0, 0xd7, 0x4f, 0x92, 0x1b, 0x8f, 0xda, 0x6f, 0xfc, + 0x36, 0x67, 0x26, 0xf7, 0x3d, 0x81, 0xd1, 0xe4, 0xdb, 0x48, 0x3b, 0x28, 0xa5, 0xc3, 0xc0, 0xa4, + 0x68, 0xbd, 0xba, 0x63, 0x2a, 0xd7, 0x45, 0x2a, 0xcb, 0xf4, 0x4a, 0xb7, 0x54, 0x5a, 0x7c, 0x31, + 0x9d, 0xcc, 0x14, 0xf6, 0x08, 0xe4, 0x8f, 0x74, 0xe7, 0x4e, 0xd2, 0x4a, 0x3f, 0xaa, 0x9d, 0xa4, + 0x95, 0xd1, 0xea, 0xd5, 0x15, 0xc1, 0xb9, 0x42, 0x2f, 0x75, 0xe5, 0xdc, 0x7a, 0x76, 0x32, 0xe9, + 0x56, 0x66, 0x1f, 0xee, 0x97, 0xc8, 0xa3, 0xfd, 0x12, 0xf9, 0x75, 0xbf, 0x44, 0x3e, 0x39, 0x28, + 0xf5, 0x3d, 0x3a, 0x28, 0xf5, 0xfd, 0x74, 0x50, 0xea, 0x7b, 0x6f, 0xf4, 0x83, 0xd6, 0x31, 0xe1, + 0xae, 0xcf, 0xf8, 0xfa, 0x19, 0xf1, 0xdf, 0x85, 0x8b, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x6b, + 0x7f, 0xcd, 0xb8, 0x56, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -860,6 +1110,11 @@ type QueryClient interface { Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) // CurrentWindow returns the current derived window boundaries at the current chain height. CurrentWindow(ctx context.Context, in *QueryCurrentWindowRequest, opts ...grpc.CallOption) (*QueryCurrentWindowResponse, error) + // WindowSnapshot returns the persisted window snapshot for the given window_id. + WindowSnapshot(ctx context.Context, in *QueryWindowSnapshotRequest, opts ...grpc.CallOption) (*QueryWindowSnapshotResponse, error) + // AssignedTargets returns the prober -> targets assignment for a given supernode_account. + // If filter_by_window_id is false, it returns the assignments for the current window. + AssignedTargets(ctx context.Context, in *QueryAssignedTargetsRequest, opts ...grpc.CallOption) (*QueryAssignedTargetsResponse, error) AuditReport(ctx context.Context, in *QueryAuditReportRequest, opts ...grpc.CallOption) (*QueryAuditReportResponse, error) AuditReportsByReporter(ctx context.Context, in *QueryAuditReportsByReporterRequest, opts ...grpc.CallOption) (*QueryAuditReportsByReporterResponse, error) // SupernodeReports returns all reports that include observations about the given supernode_account. @@ -894,6 +1149,24 @@ func (c *queryClient) CurrentWindow(ctx context.Context, in *QueryCurrentWindowR return out, nil } +func (c *queryClient) WindowSnapshot(ctx context.Context, in *QueryWindowSnapshotRequest, opts ...grpc.CallOption) (*QueryWindowSnapshotResponse, error) { + out := new(QueryWindowSnapshotResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/WindowSnapshot", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AssignedTargets(ctx context.Context, in *QueryAssignedTargetsRequest, opts ...grpc.CallOption) (*QueryAssignedTargetsResponse, error) { + out := new(QueryAssignedTargetsResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/AssignedTargets", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) AuditReport(ctx context.Context, in *QueryAuditReportRequest, opts ...grpc.CallOption) (*QueryAuditReportResponse, error) { out := new(QueryAuditReportResponse) err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/AuditReport", in, out, opts...) @@ -936,6 +1209,11 @@ type QueryServer interface { Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) // CurrentWindow returns the current derived window boundaries at the current chain height. CurrentWindow(context.Context, *QueryCurrentWindowRequest) (*QueryCurrentWindowResponse, error) + // WindowSnapshot returns the persisted window snapshot for the given window_id. + WindowSnapshot(context.Context, *QueryWindowSnapshotRequest) (*QueryWindowSnapshotResponse, error) + // AssignedTargets returns the prober -> targets assignment for a given supernode_account. + // If filter_by_window_id is false, it returns the assignments for the current window. + AssignedTargets(context.Context, *QueryAssignedTargetsRequest) (*QueryAssignedTargetsResponse, error) AuditReport(context.Context, *QueryAuditReportRequest) (*QueryAuditReportResponse, error) AuditReportsByReporter(context.Context, *QueryAuditReportsByReporterRequest) (*QueryAuditReportsByReporterResponse, error) // SupernodeReports returns all reports that include observations about the given supernode_account. @@ -954,6 +1232,12 @@ func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsReq func (*UnimplementedQueryServer) CurrentWindow(ctx context.Context, req *QueryCurrentWindowRequest) (*QueryCurrentWindowResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CurrentWindow not implemented") } +func (*UnimplementedQueryServer) WindowSnapshot(ctx context.Context, req *QueryWindowSnapshotRequest) (*QueryWindowSnapshotResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WindowSnapshot not implemented") +} +func (*UnimplementedQueryServer) AssignedTargets(ctx context.Context, req *QueryAssignedTargetsRequest) (*QueryAssignedTargetsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AssignedTargets not implemented") +} func (*UnimplementedQueryServer) AuditReport(ctx context.Context, req *QueryAuditReportRequest) (*QueryAuditReportResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AuditReport not implemented") } @@ -1007,6 +1291,42 @@ func _Query_CurrentWindow_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Query_WindowSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryWindowSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).WindowSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/WindowSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).WindowSnapshot(ctx, req.(*QueryWindowSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AssignedTargets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAssignedTargetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AssignedTargets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/AssignedTargets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AssignedTargets(ctx, req.(*QueryAssignedTargetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_AuditReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAuditReportRequest) if err := dec(in); err != nil { @@ -1092,6 +1412,14 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "CurrentWindow", Handler: _Query_CurrentWindow_Handler, }, + { + MethodName: "WindowSnapshot", + Handler: _Query_WindowSnapshot_Handler, + }, + { + MethodName: "AssignedTargets", + Handler: _Query_AssignedTargets_Handler, + }, { MethodName: "AuditReport", Handler: _Query_AuditReport_Handler, @@ -1230,7 +1558,7 @@ func (m *QueryCurrentWindowResponse) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } -func (m *QueryAuditReportRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryWindowSnapshotRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1240,23 +1568,16 @@ func (m *QueryAuditReportRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAuditReportRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryWindowSnapshotRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryWindowSnapshotRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.SupernodeAccount) > 0 { - i -= len(m.SupernodeAccount) - copy(dAtA[i:], m.SupernodeAccount) - i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) - i-- - dAtA[i] = 0x12 - } if m.WindowId != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) i-- @@ -1265,7 +1586,7 @@ func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryAuditReportResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryWindowSnapshotResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1275,18 +1596,18 @@ func (m *QueryAuditReportResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAuditReportResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryWindowSnapshotResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryWindowSnapshotResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Report.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Snapshot.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1298,7 +1619,7 @@ func (m *QueryAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *QueryAuditReportsByReporterRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAssignedTargetsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1308,27 +1629,30 @@ func (m *QueryAuditReportsByReporterRequest) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryAuditReportsByReporterRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAssignedTargetsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAssignedTargetsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if m.FilterByWindowId { + i-- + if m.FilterByWindowId { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x18 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x10 } if len(m.SupernodeAccount) > 0 { i -= len(m.SupernodeAccount) @@ -1340,7 +1664,7 @@ func (m *QueryAuditReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } -func (m *QueryAuditReportsByReporterResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAssignedTargetsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1350,30 +1674,200 @@ func (m *QueryAuditReportsByReporterResponse) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryAuditReportsByReporterResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAssignedTargetsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportsByReporterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAssignedTargetsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if len(m.TargetSupernodeAccounts) > 0 { + for iNdEx := len(m.TargetSupernodeAccounts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TargetSupernodeAccounts[iNdEx]) + copy(dAtA[i:], m.TargetSupernodeAccounts[iNdEx]) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TargetSupernodeAccounts[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if len(m.RequiredOpenPorts) > 0 { + dAtA4 := make([]byte, len(m.RequiredOpenPorts)*10) + var j3 int + for _, num := range m.RequiredOpenPorts { + for num >= 1<<7 { + dAtA4[j3] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j3++ } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + dAtA4[j3] = uint8(num) + j3++ } + i -= j3 + copy(dAtA[i:], dAtA4[:j3]) + i = encodeVarintQuery(dAtA, i, uint64(j3)) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a } - if len(m.Reports) > 0 { - for iNdEx := len(m.Reports) - 1; iNdEx >= 0; iNdEx-- { + if m.WindowStartHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowStartHeight)) + i-- + dAtA[i] = 0x10 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditReportRequest) 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 *QueryAuditReportRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0x12 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditReportResponse) 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 *QueryAuditReportResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Report.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 *QueryAuditReportsByReporterRequest) 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 *QueryAuditReportsByReporterRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditReportsByReporterResponse) 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 *QueryAuditReportsByReporterResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportsByReporterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Reports) > 0 { + for iNdEx := len(m.Reports) - 1; iNdEx >= 0; iNdEx-- { { size, err := m.Reports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -1409,6 +1903,16 @@ func (m *QuerySupernodeReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, e _ = i var l int _ = l + if m.FilterByWindowId { + i-- + if m.FilterByWindowId { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } if m.Pagination != nil { { size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) @@ -1457,20 +1961,20 @@ func (m *SupernodeReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if len(m.PortStates) > 0 { - dAtA7 := make([]byte, len(m.PortStates)*10) - var j6 int + dAtA10 := make([]byte, len(m.PortStates)*10) + var j9 int for _, num := range m.PortStates { for num >= 1<<7 { - dAtA7[j6] = uint8(uint64(num)&0x7f | 0x80) + dAtA10[j9] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j6++ + j9++ } - dAtA7[j6] = uint8(num) - j6++ + dAtA10[j9] = uint8(num) + j9++ } - i -= j6 - copy(dAtA[i:], dAtA7[:j6]) - i = encodeVarintQuery(dAtA, i, uint64(j6)) + i -= j9 + copy(dAtA[i:], dAtA10[:j9]) + i = encodeVarintQuery(dAtA, i, uint64(j9)) i-- dAtA[i] = 0x22 } @@ -1563,6 +2067,16 @@ func (m *QuerySelfReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.FilterByWindowId { + i-- + if m.FilterByWindowId { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } if m.Pagination != nil { { size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) @@ -1740,6 +2254,76 @@ func (m *QueryCurrentWindowResponse) Size() (n int) { return n } +func (m *QueryWindowSnapshotRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + return n +} + +func (m *QueryWindowSnapshotResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Snapshot.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAssignedTargetsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SupernodeAccount) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + if m.FilterByWindowId { + n += 2 + } + return n +} + +func (m *QueryAssignedTargetsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + if m.WindowStartHeight != 0 { + n += 1 + sovQuery(uint64(m.WindowStartHeight)) + } + if len(m.RequiredOpenPorts) > 0 { + l = 0 + for _, e := range m.RequiredOpenPorts { + l += sovQuery(uint64(e)) + } + n += 1 + sovQuery(uint64(l)) + l + } + if len(m.TargetSupernodeAccounts) > 0 { + for _, s := range m.TargetSupernodeAccounts { + l = len(s) + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + func (m *QueryAuditReportRequest) Size() (n int) { if m == nil { return 0 @@ -1820,6 +2404,9 @@ func (m *QuerySupernodeReportsRequest) Size() (n int) { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) } + if m.FilterByWindowId { + n += 2 + } return n } @@ -1885,6 +2472,9 @@ func (m *QuerySelfReportsRequest) Size() (n int) { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) } + if m.FilterByWindowId { + n += 2 + } return n } @@ -1917,20 +2507,310 @@ func (m *QuerySelfReportsResponse) Size() (n int) { n += 1 + l + sovQuery(uint64(l)) } } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) 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: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: 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 *QueryParamsResponse) 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: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryCurrentWindowRequest) 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: QueryCurrentWindowRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCurrentWindowRequest: 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 *QueryCurrentWindowResponse) 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: QueryCurrentWindowResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCurrentWindowResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowStartHeight", wireType) + } + m.WindowStartHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowStartHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowEndHeight", wireType) + } + m.WindowEndHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowEndHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 + } + } -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryWindowSnapshotRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1953,12 +2833,31 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryWindowSnapshotRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryWindowSnapshotRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1980,7 +2879,7 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryWindowSnapshotResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2003,15 +2902,15 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryWindowSnapshotResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryWindowSnapshotResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Snapshot", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2038,7 +2937,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Snapshot.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2063,7 +2962,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryCurrentWindowRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAssignedTargetsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2086,12 +2985,83 @@ func (m *QueryCurrentWindowRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryCurrentWindowRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAssignedTargetsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCurrentWindowRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAssignedTargetsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", 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.SupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + } + m.WindowId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WindowId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FilterByWindowId", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FilterByWindowId = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2113,7 +3083,7 @@ func (m *QueryCurrentWindowRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAssignedTargetsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2136,10 +3106,10 @@ func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryCurrentWindowResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAssignedTargetsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCurrentWindowResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAssignedTargetsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2181,10 +3151,86 @@ func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { } } case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowEndHeight", wireType) + if wireType == 0 { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequiredOpenPorts = append(m.RequiredOpenPorts, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.RequiredOpenPorts) == 0 { + m.RequiredOpenPorts = make([]uint32, 0, elementCount) + } + for iNdEx < postIndex { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequiredOpenPorts = append(m.RequiredOpenPorts, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field RequiredOpenPorts", wireType) } - m.WindowEndHeight = 0 + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetSupernodeAccounts", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -2194,11 +3240,24 @@ func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowEndHeight |= int64(b&0x7F) << shift + 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.TargetSupernodeAccounts = append(m.TargetSupernodeAccounts, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2758,6 +3817,26 @@ func (m *QuerySupernodeReportsRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FilterByWindowId", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FilterByWindowId = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -3204,6 +4283,26 @@ func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FilterByWindowId", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FilterByWindowId = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/x/audit/v1/types/query.pb.gw.go b/x/audit/v1/types/query.pb.gw.go index b474deb..5e66967 100644 --- a/x/audit/v1/types/query.pb.gw.go +++ b/x/audit/v1/types/query.pb.gw.go @@ -69,6 +69,132 @@ func local_request_Query_CurrentWindow_0(ctx context.Context, marshaler runtime. } +func request_Query_WindowSnapshot_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryWindowSnapshotRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["window_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "window_id") + } + + protoReq.WindowId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "window_id", err) + } + + msg, err := client.WindowSnapshot(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_WindowSnapshot_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryWindowSnapshotRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["window_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "window_id") + } + + protoReq.WindowId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "window_id", err) + } + + msg, err := server.WindowSnapshot(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_AssignedTargets_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_AssignedTargets_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAssignedTargetsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["supernode_account"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") + } + + protoReq.SupernodeAccount, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AssignedTargets_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AssignedTargets(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AssignedTargets_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAssignedTargetsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["supernode_account"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "supernode_account") + } + + protoReq.SupernodeAccount, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AssignedTargets_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AssignedTargets(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAuditReportRequest var metadata runtime.ServerMetadata @@ -413,6 +539,52 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_WindowSnapshot_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_WindowSnapshot_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_WindowSnapshot_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AssignedTargets_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_AssignedTargets_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_AssignedTargets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_AuditReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -586,6 +758,46 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_WindowSnapshot_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_WindowSnapshot_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_WindowSnapshot_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AssignedTargets_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_AssignedTargets_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_AssignedTargets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_AuditReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -674,6 +886,10 @@ var ( pattern_Query_CurrentWindow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "current_window"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_WindowSnapshot_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "window_snapshot", "window_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AssignedTargets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "assigned_targets", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AuditReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_report", "window_id", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_AuditReportsByReporter_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_reports_by_reporter", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) @@ -688,6 +904,10 @@ var ( forward_Query_CurrentWindow_0 = runtime.ForwardResponseMessage + forward_Query_WindowSnapshot_0 = runtime.ForwardResponseMessage + + forward_Query_AssignedTargets_0 = runtime.ForwardResponseMessage + forward_Query_AuditReport_0 = runtime.ForwardResponseMessage forward_Query_AuditReportsByReporter_0 = runtime.ForwardResponseMessage diff --git a/x/supernode/v1/keeper/abci.go b/x/supernode/v1/keeper/abci.go index 68870a2..a4c61c0 100644 --- a/x/supernode/v1/keeper/abci.go +++ b/x/supernode/v1/keeper/abci.go @@ -2,8 +2,6 @@ package keeper import ( "context" - - sdk "github.com/cosmos/cosmos-sdk/types" ) // BeginBlocker contains logic that runs at the beginning of each block. @@ -16,7 +14,7 @@ func (k Keeper) BeginBlocker(ctx context.Context) error { // It delegates to HandleMetricsStaleness, which may transition ACTIVE // supernodes into POSTPONED when they fail to report metrics on time. func (k Keeper) EndBlocker(ctx context.Context) error { - sdkCtx := sdk.UnwrapSDKContext(ctx) - return k.HandleMetricsStaleness(sdkCtx) + // sdkCtx := sdk.UnwrapSDKContext(ctx) + // return k.HandleMetricsStaleness(sdkCtx) + return nil } - diff --git a/x/supernode/v1/keeper/supernode.go b/x/supernode/v1/keeper/supernode.go index ae922a5..48d3f4b 100644 --- a/x/supernode/v1/keeper/supernode.go +++ b/x/supernode/v1/keeper/supernode.go @@ -305,6 +305,33 @@ func (k Keeper) SetSuperNodeStopped(ctx sdk.Context, valAddr sdk.ValAddress, rea return nil } +// SetSuperNodePostponed sets a validator's SuperNode status to postponed and emits an event. +// If reason is non-empty, it is included as an event attribute. +func (k Keeper) SetSuperNodePostponed(ctx sdk.Context, valAddr sdk.ValAddress, reason string) error { + supernode, found := k.QuerySuperNode(ctx, valAddr) + if !found { + return errorsmod.Wrapf(sdkerrors.ErrNotFound, "no supernode found for validator") + } + return markPostponed(ctx, k, &supernode, reason) +} + +// RecoverSuperNodeFromPostponed transitions a validator out of POSTPONED back into ACTIVE +// and emits a recovery event. +func (k Keeper) RecoverSuperNodeFromPostponed(ctx sdk.Context, valAddr sdk.ValAddress) error { + supernode, found := k.QuerySuperNode(ctx, valAddr) + if !found { + return errorsmod.Wrapf(sdkerrors.ErrNotFound, "no supernode found for validator") + } + if len(supernode.States) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "supernode is in an invalid state") + } + last := supernode.States[len(supernode.States)-1] + if last.State != types.SuperNodeStatePostponed { + return nil + } + return recoverFromPostponed(ctx, k, &supernode, types.SuperNodeStateActive) +} + func (k Keeper) IsSuperNodeActive(ctx sdk.Context, valAddr sdk.ValAddress) bool { valOperAddr := valAddr diff --git a/x/supernode/v1/mocks/expected_keepers_mock.go b/x/supernode/v1/mocks/expected_keepers_mock.go index fd11889..77255b8 100644 --- a/x/supernode/v1/mocks/expected_keepers_mock.go +++ b/x/supernode/v1/mocks/expected_keepers_mock.go @@ -321,6 +321,34 @@ func (mr *MockSupernodeKeeperMockRecorder) SetSuperNodeActive(ctx, valAddr, reas return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetSuperNodeActive", reflect.TypeOf((*MockSupernodeKeeper)(nil).SetSuperNodeActive), ctx, valAddr, reason) } +// SetSuperNodePostponed mocks base method. +func (m *MockSupernodeKeeper) SetSuperNodePostponed(ctx types0.Context, valAddr types0.ValAddress, reason string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetSuperNodePostponed", ctx, valAddr, reason) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetSuperNodePostponed indicates an expected call of SetSuperNodePostponed. +func (mr *MockSupernodeKeeperMockRecorder) SetSuperNodePostponed(ctx, valAddr, reason any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetSuperNodePostponed", reflect.TypeOf((*MockSupernodeKeeper)(nil).SetSuperNodePostponed), ctx, valAddr, reason) +} + +// RecoverSuperNodeFromPostponed mocks base method. +func (m *MockSupernodeKeeper) RecoverSuperNodeFromPostponed(ctx types0.Context, valAddr types0.ValAddress) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RecoverSuperNodeFromPostponed", ctx, valAddr) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecoverSuperNodeFromPostponed indicates an expected call of RecoverSuperNodeFromPostponed. +func (mr *MockSupernodeKeeperMockRecorder) RecoverSuperNodeFromPostponed(ctx, valAddr any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecoverSuperNodeFromPostponed", reflect.TypeOf((*MockSupernodeKeeper)(nil).RecoverSuperNodeFromPostponed), ctx, valAddr) +} + // SetSuperNodeStopped mocks base method. func (m *MockSupernodeKeeper) SetSuperNodeStopped(ctx types0.Context, valAddr types0.ValAddress, reason string) error { m.ctrl.T.Helper() diff --git a/x/supernode/v1/types/expected_keepers.go b/x/supernode/v1/types/expected_keepers.go index 4db826c..4c49f54 100644 --- a/x/supernode/v1/types/expected_keepers.go +++ b/x/supernode/v1/types/expected_keepers.go @@ -18,19 +18,21 @@ import ( // SupernodeKeeper defines the expected interface for the Supernode module. // For Generating mocks only not used in depinject - type SupernodeKeeper interface { - SetSuperNode(ctx sdk.Context, supernode SuperNode) error - SetParams(ctx sdk.Context, params Params) error - CheckValidatorSupernodeEligibility(ctx sdk.Context, validator stakingtypes.ValidatorI, valAddr string, supernodeAccount string) error - SetSuperNodeStopped(ctx sdk.Context, valAddr sdk.ValAddress, reason string) error - SetSuperNodeActive(ctx sdk.Context, valAddr sdk.ValAddress, reason string) error - SetMetricsState(ctx sdk.Context, state SupernodeMetricsState) error - GetMetricsState(ctx sdk.Context, valAddr sdk.ValAddress) (SupernodeMetricsState, bool) - Logger() log.Logger - GetAuthority() string - GetStakingKeeper() StakingKeeper - GetParams(ctx sdk.Context) (params Params) - GetAllSuperNodes(ctx sdk.Context, stateFilters ...SuperNodeState) ([]SuperNode, error) +type SupernodeKeeper interface { + SetSuperNode(ctx sdk.Context, supernode SuperNode) error + SetParams(ctx sdk.Context, params Params) error + CheckValidatorSupernodeEligibility(ctx sdk.Context, validator stakingtypes.ValidatorI, valAddr string, supernodeAccount string) error + SetSuperNodeStopped(ctx sdk.Context, valAddr sdk.ValAddress, reason string) error + SetSuperNodeActive(ctx sdk.Context, valAddr sdk.ValAddress, reason string) error + SetSuperNodePostponed(ctx sdk.Context, valAddr sdk.ValAddress, reason string) error + RecoverSuperNodeFromPostponed(ctx sdk.Context, valAddr sdk.ValAddress) error + SetMetricsState(ctx sdk.Context, state SupernodeMetricsState) error + GetMetricsState(ctx sdk.Context, valAddr sdk.ValAddress) (SupernodeMetricsState, bool) + Logger() log.Logger + GetAuthority() string + GetStakingKeeper() StakingKeeper + GetParams(ctx sdk.Context) (params Params) + GetAllSuperNodes(ctx sdk.Context, stateFilters ...SuperNodeState) ([]SuperNode, error) GetSuperNodeByAccount(ctx sdk.Context, supernodeAccount string) (SuperNode, bool, error) GetBlockHashForHeight(ctx sdk.Context, height int64) ([]byte, error) RankSuperNodesByDistance(blockHash []byte, supernodes []SuperNode, topN int) []SuperNode From fc77bab1a98f485979064c106e908cbc9da6e061 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Mon, 2 Feb 2026 17:08:11 +0500 Subject: [PATCH 06/18] audit: port evidence + staleness --- proto/lumera/audit/v1/evidence.proto | 39 + proto/lumera/audit/v1/evidence_metadata.proto | 29 + proto/lumera/audit/v1/genesis.proto | 7 + proto/lumera/audit/v1/query.proto | 44 + proto/lumera/audit/v1/tx.proto | 21 + x/audit/v1/keeper/abci.go | 6 + x/audit/v1/keeper/evidence.go | 114 + x/audit/v1/keeper/evidence_state.go | 80 + x/audit/v1/keeper/evidence_test.go | 50 + x/audit/v1/keeper/fixture_test.go | 68 + x/audit/v1/keeper/genesis.go | 70 + x/audit/v1/keeper/genesis_test.go | 56 + x/audit/v1/keeper/msg_submit_evidence.go | 17 + x/audit/v1/keeper/msg_update_params_test.go | 66 + x/audit/v1/keeper/query_evidence.go | 110 + x/audit/v1/keeper/query_params_test.go | 21 + .../v1/keeper/supernode_metrics_staleness.go | 84 + .../supernode_metrics_staleness_test.go | 51 + x/audit/v1/module/autocli.go | 24 + x/audit/v1/module/depinject.go | 5 +- x/audit/v1/module/genesis.go | 8 +- x/audit/v1/module/module.go | 8 +- x/audit/v1/module/simulation.go | 40 +- x/audit/v1/simulation/submit_evidence.go | 55 + x/audit/v1/types/codec.go | 1 + x/audit/v1/types/errors.go | 6 + x/audit/v1/types/evidence.pb.go | 628 ++++++ x/audit/v1/types/evidence_metadata.pb.go | 640 ++++++ x/audit/v1/types/expected_keepers.go | 21 + x/audit/v1/types/genesis.go | 3 +- x/audit/v1/types/genesis.pb.go | 120 +- x/audit/v1/types/keys.go | 59 + x/audit/v1/types/query.pb.go | 1912 ++++++++++++++--- x/audit/v1/types/query.pb.gw.go | 339 +++ x/audit/v1/types/tx.pb.go | 630 +++++- x/supernode/v1/keeper/abci.go | 3 +- 36 files changed, 5120 insertions(+), 315 deletions(-) create mode 100644 proto/lumera/audit/v1/evidence.proto create mode 100644 proto/lumera/audit/v1/evidence_metadata.proto create mode 100644 x/audit/v1/keeper/evidence.go create mode 100644 x/audit/v1/keeper/evidence_state.go create mode 100644 x/audit/v1/keeper/evidence_test.go create mode 100644 x/audit/v1/keeper/fixture_test.go create mode 100644 x/audit/v1/keeper/genesis.go create mode 100644 x/audit/v1/keeper/genesis_test.go create mode 100644 x/audit/v1/keeper/msg_submit_evidence.go create mode 100644 x/audit/v1/keeper/msg_update_params_test.go create mode 100644 x/audit/v1/keeper/query_evidence.go create mode 100644 x/audit/v1/keeper/query_params_test.go create mode 100644 x/audit/v1/keeper/supernode_metrics_staleness.go create mode 100644 x/audit/v1/keeper/supernode_metrics_staleness_test.go create mode 100644 x/audit/v1/simulation/submit_evidence.go create mode 100644 x/audit/v1/types/evidence.pb.go create mode 100644 x/audit/v1/types/evidence_metadata.pb.go create mode 100644 x/audit/v1/types/expected_keepers.go diff --git a/proto/lumera/audit/v1/evidence.proto b/proto/lumera/audit/v1/evidence.proto new file mode 100644 index 0000000..a0eeaef --- /dev/null +++ b/proto/lumera/audit/v1/evidence.proto @@ -0,0 +1,39 @@ +syntax = "proto3"; + +package lumera.audit.v1; + +import "cosmos_proto/cosmos.proto"; + +option go_package = "x/audit/v1/types"; + +enum EvidenceType { + EVIDENCE_TYPE_UNSPECIFIED = 0; + EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION = 1; + EVIDENCE_TYPE_ACTION_EXPIRED = 2; +} + +// Evidence is a stable outer record that stores evidence about an audited subject. +// Type-specific fields are encoded into the `metadata` bytes field. +message Evidence { + // evidence_id is a chain-assigned unique identifier. + uint64 evidence_id = 1; + + // subject_address is the audited subject (e.g. supernode-related actor). + string subject_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // reporter_address is the submitter of the evidence. + string reporter_address = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // action_id optionally links this evidence to a specific action. + string action_id = 4; + + // evidence_type is a stable discriminator used to interpret metadata. + EvidenceType evidence_type = 5; + + // metadata is protobuf-binary bytes of a type-specific Evidence metadata message. + bytes metadata = 6; + + // reported_height is the block height when the evidence was submitted. + uint64 reported_height = 7; +} + diff --git a/proto/lumera/audit/v1/evidence_metadata.proto b/proto/lumera/audit/v1/evidence_metadata.proto new file mode 100644 index 0000000..7fafc87 --- /dev/null +++ b/proto/lumera/audit/v1/evidence_metadata.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +package lumera.audit.v1; + +import "cosmos_proto/cosmos.proto"; + +option go_package = "x/audit/v1/types"; + +// ExpirationEvidenceMetadata is metadata for evidence about an action expiring. +message ExpirationEvidenceMetadata { + // expiration_height is the height at which the action expired (if known). + uint64 expiration_height = 1; + + // reason is optional human-readable context. + string reason = 2; +} + +// FinalizationEvidenceMetadata is metadata for evidence about finalization behavior. +message FinalizationEvidenceMetadata { + // attempted_finalizer_address is the address that attempted finalization. + string attempted_finalizer_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // expected_finalizer_address is optional (if there is a known expected finalizer). + string expected_finalizer_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // reason is optional human-readable context. + string reason = 3; +} + diff --git a/proto/lumera/audit/v1/genesis.proto b/proto/lumera/audit/v1/genesis.proto index fe8818b..5cec28b 100644 --- a/proto/lumera/audit/v1/genesis.proto +++ b/proto/lumera/audit/v1/genesis.proto @@ -7,6 +7,7 @@ import "amino/amino.proto"; import "gogoproto/gogo.proto"; import "lumera/audit/v1/params.proto"; +import "lumera/audit/v1/evidence.proto"; // GenesisState defines the audit module's genesis state. message GenesisState { @@ -14,4 +15,10 @@ message GenesisState { (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; + + // evidence defines the initial evidence records (optional). + repeated Evidence evidence = 2 [(gogoproto.nullable) = false]; + + // next_evidence_id is the next id to use for chain-assigned ids. + uint64 next_evidence_id = 3; } diff --git a/proto/lumera/audit/v1/query.proto b/proto/lumera/audit/v1/query.proto index 534f93c..e32d539 100644 --- a/proto/lumera/audit/v1/query.proto +++ b/proto/lumera/audit/v1/query.proto @@ -11,6 +11,7 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "lumera/audit/v1/params.proto"; import "lumera/audit/v1/audit.proto"; +import "lumera/audit/v1/evidence.proto"; // Query defines the gRPC querier service. service Query { @@ -19,6 +20,21 @@ service Query { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/params"; } + // EvidenceById queries a single evidence record by id. + rpc EvidenceById(QueryEvidenceByIdRequest) returns (QueryEvidenceByIdResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/evidence/{evidence_id}"; + } + + // EvidenceBySubject queries evidence records by subject address. + rpc EvidenceBySubject(QueryEvidenceBySubjectRequest) returns (QueryEvidenceBySubjectResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/evidence/by_subject/{subject_address}"; + } + + // EvidenceByAction queries evidence records by action id. + rpc EvidenceByAction(QueryEvidenceByActionRequest) returns (QueryEvidenceByActionResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/evidence/by_action/{action_id}"; + } + // CurrentWindow returns the current derived window boundaries at the current chain height. rpc CurrentWindow(QueryCurrentWindowRequest) returns (QueryCurrentWindowResponse) { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/current_window"; @@ -60,6 +76,34 @@ message QueryParamsResponse { Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } +message QueryEvidenceByIdRequest { + uint64 evidence_id = 1; +} + +message QueryEvidenceByIdResponse { + Evidence evidence = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +message QueryEvidenceBySubjectRequest { + string subject_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryEvidenceBySubjectResponse { + repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryEvidenceByActionRequest { + string action_id = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryEvidenceByActionResponse { + repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + message QueryCurrentWindowRequest {} message QueryCurrentWindowResponse { diff --git a/proto/lumera/audit/v1/tx.proto b/proto/lumera/audit/v1/tx.proto index 5191827..0e7ba15 100644 --- a/proto/lumera/audit/v1/tx.proto +++ b/proto/lumera/audit/v1/tx.proto @@ -10,6 +10,7 @@ import "cosmos_proto/cosmos.proto"; import "lumera/audit/v1/audit.proto"; import "lumera/audit/v1/params.proto"; +import "lumera/audit/v1/evidence.proto"; // Msg defines the Msg service. service Msg { @@ -20,6 +21,9 @@ service Msg { rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); rpc SubmitAuditReport(MsgSubmitAuditReport) returns (MsgSubmitAuditReportResponse); + + // SubmitEvidence defines the SubmitEvidence RPC. + rpc SubmitEvidence(MsgSubmitEvidence) returns (MsgSubmitEvidenceResponse); } message MsgUpdateParams { @@ -43,3 +47,20 @@ message MsgSubmitAuditReport { } message MsgSubmitAuditReportResponse {} + +message MsgSubmitEvidence { + option (cosmos.msg.v1.signer) = "creator"; + + string creator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string subject_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + EvidenceType evidence_type = 3; + string action_id = 4; + + // metadata is JSON for the type-specific Evidence metadata message. + // The chain stores protobuf-binary bytes derived from this JSON. + string metadata = 5; +} + +message MsgSubmitEvidenceResponse { + uint64 evidence_id = 1; +} diff --git a/x/audit/v1/keeper/abci.go b/x/audit/v1/keeper/abci.go index 8d901f1..9565b81 100644 --- a/x/audit/v1/keeper/abci.go +++ b/x/audit/v1/keeper/abci.go @@ -27,6 +27,12 @@ func (k Keeper) BeginBlocker(ctx context.Context) error { func (k Keeper) EndBlocker(ctx context.Context) error { sdkCtx := sdk.UnwrapSDKContext(ctx) + + // Enforce supernode metrics staleness each block at end-block. + if err := k.HandleSupernodeMetricsStaleness(sdkCtx); err != nil { + return err + } + params := k.GetParams(ctx).WithDefaults() ws, err := k.getCurrentWindowState(sdkCtx, params) diff --git a/x/audit/v1/keeper/evidence.go b/x/audit/v1/keeper/evidence.go new file mode 100644 index 0000000..eea6947 --- /dev/null +++ b/x/audit/v1/keeper/evidence.go @@ -0,0 +1,114 @@ +package keeper + +import ( + "context" + "fmt" + "strings" + + errorsmod "cosmossdk.io/errors" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" + gogoproto "github.com/cosmos/gogoproto/proto" + "github.com/cosmos/gogoproto/jsonpb" +) + +func (k Keeper) CreateEvidence( + ctx context.Context, + reporterAddress string, + subjectAddress string, + actionID string, + evidenceType types.EvidenceType, + metadataJSON string, +) (uint64, error) { + if _, err := k.addressCodec.StringToBytes(reporterAddress); err != nil { + return 0, errorsmod.Wrap(types.ErrInvalidReporter, err.Error()) + } + if _, err := k.addressCodec.StringToBytes(subjectAddress); err != nil { + return 0, errorsmod.Wrap(types.ErrInvalidSubject, err.Error()) + } + + if evidenceType == types.EvidenceType_EVIDENCE_TYPE_UNSPECIFIED { + return 0, types.ErrInvalidEvidenceType + } + + metadataJSON = strings.TrimSpace(metadataJSON) + if metadataJSON == "" { + return 0, types.ErrInvalidMetadata + } + + if actionID == "" { + // For the initial supported evidence types (action expiration/finalization), action id is required. + switch evidenceType { + case types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, types.EvidenceType_EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION: + return 0, types.ErrInvalidActionID + } + } + + metadataBytes, err := marshalEvidenceMetadataJSON(evidenceType, metadataJSON, k.addressCodec) + if err != nil { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, err.Error()) + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + reportedHeight := uint64(sdkCtx.BlockHeight()) + + evidenceID := k.GetNextEvidenceID(sdkCtx) + k.SetNextEvidenceID(sdkCtx, evidenceID+1) + + ev := types.Evidence{ + EvidenceId: evidenceID, + SubjectAddress: subjectAddress, + ReporterAddress: reporterAddress, + ActionId: actionID, + EvidenceType: evidenceType, + Metadata: metadataBytes, + ReportedHeight: reportedHeight, + } + + if err := k.SetEvidence(sdkCtx, ev); err != nil { + return 0, err + } + k.SetEvidenceBySubjectIndex(sdkCtx, subjectAddress, evidenceID) + if actionID != "" { + k.SetEvidenceByActionIndex(sdkCtx, actionID, evidenceID) + } + + return evidenceID, nil +} + +func marshalEvidenceMetadataJSON(evidenceType types.EvidenceType, metadataJSON string, addressCodec interface { + StringToBytes(text string) ([]byte, error) +}) ([]byte, error) { + u := &jsonpb.Unmarshaler{} + + switch evidenceType { + case types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED: + var m types.ExpirationEvidenceMetadata + if err := u.Unmarshal(strings.NewReader(metadataJSON), &m); err != nil { + return nil, fmt.Errorf("unmarshal ExpirationEvidenceMetadata: %w", err) + } + return gogoproto.Marshal(&m) + + case types.EvidenceType_EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION: + var m types.FinalizationEvidenceMetadata + if err := u.Unmarshal(strings.NewReader(metadataJSON), &m); err != nil { + return nil, fmt.Errorf("unmarshal FinalizationEvidenceMetadata: %w", err) + } + if strings.TrimSpace(m.AttemptedFinalizerAddress) == "" { + return nil, fmt.Errorf("attempted_finalizer_address is required") + } + if _, err := addressCodec.StringToBytes(m.AttemptedFinalizerAddress); err != nil { + return nil, fmt.Errorf("attempted_finalizer_address is invalid: %w", err) + } + if strings.TrimSpace(m.ExpectedFinalizerAddress) != "" { + if _, err := addressCodec.StringToBytes(m.ExpectedFinalizerAddress); err != nil { + return nil, fmt.Errorf("expected_finalizer_address is invalid: %w", err) + } + } + return gogoproto.Marshal(&m) + + default: + return nil, fmt.Errorf("unsupported evidence_type: %s", evidenceType.String()) + } +} + diff --git a/x/audit/v1/keeper/evidence_state.go b/x/audit/v1/keeper/evidence_state.go new file mode 100644 index 0000000..60396ce --- /dev/null +++ b/x/audit/v1/keeper/evidence_state.go @@ -0,0 +1,80 @@ +package keeper + +import ( + "encoding/binary" + "sort" + + "cosmossdk.io/store/prefix" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (k Keeper) GetNextEvidenceID(ctx sdk.Context) uint64 { + store := k.kvStore(ctx) + bz := store.Get(types.NextEvidenceIDKey()) + if bz == nil || len(bz) != 8 { + return 1 + } + return binary.BigEndian.Uint64(bz) +} + +func (k Keeper) SetNextEvidenceID(ctx sdk.Context, nextID uint64) { + store := k.kvStore(ctx) + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, nextID) + store.Set(types.NextEvidenceIDKey(), bz) +} + +func (k Keeper) GetEvidence(ctx sdk.Context, evidenceID uint64) (types.Evidence, bool) { + store := k.kvStore(ctx) + bz := store.Get(types.EvidenceKey(evidenceID)) + if bz == nil { + return types.Evidence{}, false + } + var ev types.Evidence + k.cdc.MustUnmarshal(bz, &ev) + return ev, true +} + +func (k Keeper) SetEvidence(ctx sdk.Context, ev types.Evidence) error { + store := k.kvStore(ctx) + bz, err := k.cdc.Marshal(&ev) + if err != nil { + return err + } + store.Set(types.EvidenceKey(ev.EvidenceId), bz) + return nil +} + +func (k Keeper) SetEvidenceBySubjectIndex(ctx sdk.Context, subjectAddress string, evidenceID uint64) { + store := k.kvStore(ctx) + store.Set(types.EvidenceBySubjectIndexKey(subjectAddress, evidenceID), []byte{1}) +} + +func (k Keeper) SetEvidenceByActionIndex(ctx sdk.Context, actionID string, evidenceID uint64) { + store := k.kvStore(ctx) + store.Set(types.EvidenceByActionIndexKey(actionID, evidenceID), []byte{1}) +} + +func (k Keeper) GetAllEvidence(ctx sdk.Context) ([]types.Evidence, error) { + storeAdapter := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := prefix.NewStore(storeAdapter, types.EvidenceRecordPrefix()) + + iter := store.Iterator(nil, nil) + defer iter.Close() + + evidence := make([]types.Evidence, 0) + for ; iter.Valid(); iter.Next() { + var ev types.Evidence + k.cdc.MustUnmarshal(iter.Value(), &ev) + evidence = append(evidence, ev) + } + + sort.Slice(evidence, func(i, j int) bool { + return evidence[i].EvidenceId < evidence[j].EvidenceId + }) + + return evidence, nil +} + diff --git a/x/audit/v1/keeper/evidence_test.go b/x/audit/v1/keeper/evidence_test.go new file mode 100644 index 0000000..2d0f9a4 --- /dev/null +++ b/x/audit/v1/keeper/evidence_test.go @@ -0,0 +1,50 @@ +package keeper_test + +import ( + "testing" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/stretchr/testify/require" +) + +func TestSubmitEvidenceAndQueries(t *testing.T) { + f := initFixture(t) + + ms := keeper.NewMsgServerImpl(f.keeper) + qs := keeper.NewQueryServerImpl(f.keeper) + + reporter, err := f.addressCodec.BytesToString([]byte("reporter_address_20b")) + require.NoError(t, err) + subject, err := f.addressCodec.BytesToString([]byte("subject_address_20bb")) + require.NoError(t, err) + + resp, err := ms.SubmitEvidence(f.ctx, &types.MsgSubmitEvidence{ + Creator: reporter, + SubjectAddress: subject, + EvidenceType: types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, + ActionId: "action-123", + Metadata: `{"expiration_height":123,"reason":"unit test"}`, + }) + require.NoError(t, err) + require.Equal(t, uint64(1), resp.EvidenceId) + + gotByID, err := qs.EvidenceById(f.ctx, &types.QueryEvidenceByIdRequest{EvidenceId: resp.EvidenceId}) + require.NoError(t, err) + require.Equal(t, resp.EvidenceId, gotByID.Evidence.EvidenceId) + require.Equal(t, subject, gotByID.Evidence.SubjectAddress) + require.Equal(t, reporter, gotByID.Evidence.ReporterAddress) + require.Equal(t, "action-123", gotByID.Evidence.ActionId) + require.Equal(t, types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, gotByID.Evidence.EvidenceType) + require.NotEmpty(t, gotByID.Evidence.Metadata) + + gotBySubject, err := qs.EvidenceBySubject(f.ctx, &types.QueryEvidenceBySubjectRequest{SubjectAddress: subject}) + require.NoError(t, err) + require.Len(t, gotBySubject.Evidence, 1) + require.Equal(t, resp.EvidenceId, gotBySubject.Evidence[0].EvidenceId) + + gotByAction, err := qs.EvidenceByAction(f.ctx, &types.QueryEvidenceByActionRequest{ActionId: "action-123"}) + require.NoError(t, err) + require.Len(t, gotByAction.Evidence, 1) + require.Equal(t, resp.EvidenceId, gotByAction.Evidence[0].EvidenceId) +} diff --git a/x/audit/v1/keeper/fixture_test.go b/x/audit/v1/keeper/fixture_test.go new file mode 100644 index 0000000..e911a76 --- /dev/null +++ b/x/audit/v1/keeper/fixture_test.go @@ -0,0 +1,68 @@ +package keeper_test + +import ( + "testing" + + "cosmossdk.io/core/address" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "go.uber.org/mock/gomock" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + auditmodule "github.com/LumeraProtocol/lumera/x/audit/v1/module" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + supernodemocks "github.com/LumeraProtocol/lumera/x/supernode/v1/mocks" +) + +type fixture struct { + ctx sdk.Context + keeper keeper.Keeper + addressCodec address.Codec + + supernodeKeeper *supernodemocks.MockSupernodeKeeper +} + +func initFixture(t *testing.T) *fixture { + t.Helper() + + ctrl := gomock.NewController(t) + t.Cleanup(ctrl.Finish) + + encCfg := moduletestutil.MakeTestEncodingConfig(auditmodule.AppModuleBasic{}) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + + storeService := runtime.NewKVStoreService(storeKey) + ctx := testutil.DefaultContextWithDB(t, storeKey, storetypes.NewTransientStoreKey("transient_test")).Ctx + + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + + snKeeper := supernodemocks.NewMockSupernodeKeeper(ctrl) + + k := keeper.NewKeeper( + encCfg.Codec, + addressCodec, + storeService, + log.NewNopLogger(), + authority, + snKeeper, + ) + + if err := k.SetParams(ctx, types.DefaultParams()); err != nil { + t.Fatalf("failed to set params: %v", err) + } + + return &fixture{ + ctx: ctx, + keeper: k, + addressCodec: addressCodec, + supernodeKeeper: snKeeper, + } +} diff --git a/x/audit/v1/keeper/genesis.go b/x/audit/v1/keeper/genesis.go new file mode 100644 index 0000000..70eeee7 --- /dev/null +++ b/x/audit/v1/keeper/genesis.go @@ -0,0 +1,70 @@ +package keeper + +import ( + "context" + "errors" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func (k Keeper) InitGenesis(ctx context.Context, genState types.GenesisState) error { + if err := k.SetParams(ctx, genState.Params); err != nil { + return err + } + + sdkCtx, ok := ctx.(sdk.Context) + if !ok { + sdkCtx = sdk.UnwrapSDKContext(ctx) + } + + var nextEvidenceID uint64 + if genState.NextEvidenceId != 0 { + nextEvidenceID = genState.NextEvidenceId + } + + for _, ev := range genState.Evidence { + if err := k.SetEvidence(sdkCtx, ev); err != nil { + return err + } + k.SetEvidenceBySubjectIndex(sdkCtx, ev.SubjectAddress, ev.EvidenceId) + if ev.ActionId != "" { + k.SetEvidenceByActionIndex(sdkCtx, ev.ActionId, ev.EvidenceId) + } + if ev.EvidenceId >= nextEvidenceID { + nextEvidenceID = ev.EvidenceId + 1 + } + } + + if nextEvidenceID == 0 { + nextEvidenceID = 1 + } + k.SetNextEvidenceID(sdkCtx, nextEvidenceID) + + return nil +} + +// ExportGenesis returns the module's exported genesis. +func (k Keeper) ExportGenesis(ctx context.Context) (*types.GenesisState, error) { + genesis := types.DefaultGenesis() + genesis.Params = k.GetParams(ctx) + + sdkCtx, ok := ctx.(sdk.Context) + if !ok { + sdkCtx = sdk.UnwrapSDKContext(ctx) + } + + evidence, err := k.GetAllEvidence(sdkCtx) + if err != nil { + return nil, err + } + genesis.Evidence = evidence + genesis.NextEvidenceId = k.GetNextEvidenceID(sdkCtx) + + if genesis.NextEvidenceId == 0 { + return nil, errors.New("invalid next evidence id") + } + + return genesis, nil +} diff --git a/x/audit/v1/keeper/genesis_test.go b/x/audit/v1/keeper/genesis_test.go new file mode 100644 index 0000000..73b4a33 --- /dev/null +++ b/x/audit/v1/keeper/genesis_test.go @@ -0,0 +1,56 @@ +package keeper_test + +import ( + "testing" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/stretchr/testify/require" +) + +func TestGenesisParamsRoundTrip(t *testing.T) { + f := initFixture(t) + + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + } + + err := f.keeper.InitGenesis(f.ctx, genesisState) + require.NoError(t, err) + + got, err := f.keeper.ExportGenesis(f.ctx) + require.NoError(t, err) + require.NotNil(t, got) + + require.EqualExportedValues(t, genesisState.Params, got.Params) + require.Equal(t, uint64(1), got.NextEvidenceId) + require.Empty(t, got.Evidence) +} + +func TestGenesisEvidenceRoundTripSetsNextID(t *testing.T) { + f := initFixture(t) + + ev := types.Evidence{ + EvidenceId: 7, + SubjectAddress: "lumera1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg7l7x8", + ReporterAddress: "lumera1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg7l7x8", + ActionId: "action-1", + EvidenceType: types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, + Metadata: []byte{1, 2, 3}, + ReportedHeight: 10, + } + + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + Evidence: []types.Evidence{ev}, + } + + err := f.keeper.InitGenesis(f.ctx, genesisState) + require.NoError(t, err) + + got, err := f.keeper.ExportGenesis(f.ctx) + require.NoError(t, err) + + require.Len(t, got.Evidence, 1) + require.Equal(t, ev.EvidenceId, got.Evidence[0].EvidenceId) + require.Equal(t, uint64(8), got.NextEvidenceId) +} diff --git a/x/audit/v1/keeper/msg_submit_evidence.go b/x/audit/v1/keeper/msg_submit_evidence.go new file mode 100644 index 0000000..ed9ca51 --- /dev/null +++ b/x/audit/v1/keeper/msg_submit_evidence.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "context" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (k msgServer) SubmitEvidence(ctx context.Context, msg *types.MsgSubmitEvidence) (*types.MsgSubmitEvidenceResponse, error) { + evidenceID, err := k.Keeper.CreateEvidence(ctx, msg.Creator, msg.SubjectAddress, msg.ActionId, msg.EvidenceType, msg.Metadata) + if err != nil { + return nil, err + } + + return &types.MsgSubmitEvidenceResponse{EvidenceId: evidenceID}, nil +} + diff --git a/x/audit/v1/keeper/msg_update_params_test.go b/x/audit/v1/keeper/msg_update_params_test.go new file mode 100644 index 0000000..c84fc2c --- /dev/null +++ b/x/audit/v1/keeper/msg_update_params_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + "testing" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/stretchr/testify/require" +) + +func TestMsgUpdateParams(t *testing.T) { + f := initFixture(t) + ms := keeper.NewMsgServerImpl(f.keeper) + + params := types.DefaultParams() + require.NoError(t, f.keeper.SetParams(f.ctx, params)) + + authorityStr, err := f.addressCodec.BytesToString(f.keeper.GetAuthority()) + require.NoError(t, err) + + testCases := []struct { + name string + input *types.MsgUpdateParams + expErr bool + expErrMsg string + }{ + { + name: "invalid authority", + input: &types.MsgUpdateParams{ + Authority: "invalid", + Params: params, + }, + expErr: true, + expErrMsg: "invalid authority", + }, + { + name: "defaults ok", + input: &types.MsgUpdateParams{ + Authority: authorityStr, + Params: types.Params{}, + }, + expErr: false, + }, + { + name: "all good", + input: &types.MsgUpdateParams{ + Authority: authorityStr, + Params: params, + }, + expErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, err := ms.UpdateParams(f.ctx, tc.input) + + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expErrMsg) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/audit/v1/keeper/query_evidence.go b/x/audit/v1/keeper/query_evidence.go new file mode 100644 index 0000000..2f66872 --- /dev/null +++ b/x/audit/v1/keeper/query_evidence.go @@ -0,0 +1,110 @@ +package keeper + +import ( + "context" + "encoding/binary" + + "cosmossdk.io/store/prefix" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (q queryServer) EvidenceById(ctx context.Context, req *types.QueryEvidenceByIdRequest) (*types.QueryEvidenceByIdResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + ev, found := q.k.GetEvidence(sdkCtx, req.EvidenceId) + if !found { + return nil, status.Error(codes.NotFound, "evidence not found") + } + + return &types.QueryEvidenceByIdResponse{Evidence: ev}, nil +} + +func (q queryServer) EvidenceBySubject(ctx context.Context, req *types.QueryEvidenceBySubjectRequest) (*types.QueryEvidenceBySubjectResponse, error) { + if req == nil || req.SubjectAddress == "" { + return nil, status.Error(codes.InvalidArgument, "subject_address is required") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + if _, err := q.k.addressCodec.StringToBytes(req.SubjectAddress); err != nil { + return nil, status.Error(codes.InvalidArgument, "invalid subject_address") + } + + storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) + store := prefix.NewStore(storeAdapter, types.EvidenceBySubjectIndexPrefix(req.SubjectAddress)) + + var evidence []types.Evidence + + pagination := req.Pagination + if pagination == nil { + pagination = &query.PageRequest{Limit: 100} + } + + pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { + if len(key) != 8 { + return status.Error(codes.Internal, "invalid evidence index key") + } + evidenceID := binary.BigEndian.Uint64(key) + ev, found := q.k.GetEvidence(sdkCtx, evidenceID) + if !found { + return nil + } + evidence = append(evidence, ev) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryEvidenceBySubjectResponse{ + Evidence: evidence, + Pagination: pageRes, + }, nil +} + +func (q queryServer) EvidenceByAction(ctx context.Context, req *types.QueryEvidenceByActionRequest) (*types.QueryEvidenceByActionResponse, error) { + if req == nil || req.ActionId == "" { + return nil, status.Error(codes.InvalidArgument, "action_id is required") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + + storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) + store := prefix.NewStore(storeAdapter, types.EvidenceByActionIndexPrefix(req.ActionId)) + + var evidence []types.Evidence + + pagination := req.Pagination + if pagination == nil { + pagination = &query.PageRequest{Limit: 100} + } + + pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { + if len(key) != 8 { + return status.Error(codes.Internal, "invalid evidence index key") + } + evidenceID := binary.BigEndian.Uint64(key) + ev, found := q.k.GetEvidence(sdkCtx, evidenceID) + if !found { + return nil + } + evidence = append(evidence, ev) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryEvidenceByActionResponse{ + Evidence: evidence, + Pagination: pageRes, + }, nil +} + diff --git a/x/audit/v1/keeper/query_params_test.go b/x/audit/v1/keeper/query_params_test.go new file mode 100644 index 0000000..7511ab3 --- /dev/null +++ b/x/audit/v1/keeper/query_params_test.go @@ -0,0 +1,21 @@ +package keeper_test + +import ( + "testing" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/stretchr/testify/require" +) + +func TestParamsQuery(t *testing.T) { + f := initFixture(t) + + qs := keeper.NewQueryServerImpl(f.keeper) + params := types.DefaultParams() + require.NoError(t, f.keeper.SetParams(f.ctx, params)) + + response, err := qs.Params(f.ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params.WithDefaults()}, response) +} diff --git a/x/audit/v1/keeper/supernode_metrics_staleness.go b/x/audit/v1/keeper/supernode_metrics_staleness.go new file mode 100644 index 0000000..e595c8c --- /dev/null +++ b/x/audit/v1/keeper/supernode_metrics_staleness.go @@ -0,0 +1,84 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" +) + +// HandleSupernodeMetricsStaleness applies supernode metrics staleness rules at end-block: +// - compute an "overdue" threshold from MetricsUpdateIntervalBlocks + MetricsGracePeriodBlocks +// - only consider supernodes whose latest state is ACTIVE +// - if no metrics have ever been reported and the chain height passes the threshold, +// mark the supernode as POSTPONED with reason "no metrics reported" +// - if the last metrics height is older than the threshold, mark POSTPONED with +// reason "metrics overdue" +func (k Keeper) HandleSupernodeMetricsStaleness(ctx sdk.Context) error { + params := k.supernodeKeeper.GetParams(ctx) + overdueThreshold := int64(params.MetricsUpdateIntervalBlocks + params.MetricsGracePeriodBlocks) + + supernodes, err := k.supernodeKeeper.GetAllSuperNodes(ctx) + if err != nil { + return err + } + + for i := range supernodes { + sn := supernodes[i] + if len(sn.States) == 0 { + continue + } + lastState := sn.States[len(sn.States)-1].State + // Only perform staleness checks for ACTIVE supernodes. + if lastState != sntypes.SuperNodeStateActive { + continue + } + + valAddr, err := sdk.ValAddressFromBech32(sn.ValidatorAddress) + if err != nil { + continue + } + + lastHeight := int64(0) + if state, ok := k.supernodeKeeper.GetMetricsState(ctx, valAddr); ok { + lastHeight = state.Height + } + + // If no metrics have ever been reported, use the supernode's registration + // height as the baseline for staleness, so newly-registered supernodes + // are given a full update interval + grace period from registration. + if lastHeight == 0 { + var registrationHeight int64 + for _, st := range sn.States { + if st != nil { + registrationHeight = st.Height + break + } + } + if registrationHeight == 0 { + continue + } + if ctx.BlockHeight()-registrationHeight > overdueThreshold { + if err := k.supernodeKeeper.SetSuperNodePostponed(ctx, valAddr, "no metrics reported"); err != nil { + k.Logger().Error( + "failed to mark supernode postponed for missing metrics", + "validator", sn.ValidatorAddress, + "err", err, + ) + } + } + continue + } + + if ctx.BlockHeight()-lastHeight > overdueThreshold { + if err := k.supernodeKeeper.SetSuperNodePostponed(ctx, valAddr, "metrics overdue"); err != nil { + k.Logger().Error( + "failed to mark supernode postponed for overdue metrics", + "validator", sn.ValidatorAddress, + "err", err, + ) + } + } + } + + return nil +} diff --git a/x/audit/v1/keeper/supernode_metrics_staleness_test.go b/x/audit/v1/keeper/supernode_metrics_staleness_test.go new file mode 100644 index 0000000..05bb521 --- /dev/null +++ b/x/audit/v1/keeper/supernode_metrics_staleness_test.go @@ -0,0 +1,51 @@ +package keeper_test + +import ( + "testing" + + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func TestHandleSupernodeMetricsStaleness_NoMetrics_Postpones(t *testing.T) { + f := initFixture(t) + + // Advance chain height far enough to trigger staleness. + f.ctx = f.ctx.WithBlockHeight(100) + + valAddr := sdk.ValAddress([]byte("validator_address_20")) + valAddrStr := valAddr.String() + + f.supernodeKeeper.EXPECT(). + GetParams(gomock.Any()). + Return(sntypes.Params{ + MetricsUpdateIntervalBlocks: 2, + MetricsGracePeriodBlocks: 3, + }) + + f.supernodeKeeper.EXPECT(). + GetAllSuperNodes(gomock.Any()). + Return([]sntypes.SuperNode{ + { + ValidatorAddress: valAddrStr, + States: []*sntypes.SuperNodeStateRecord{ + {State: sntypes.SuperNodeStateActive, Height: 90}, + }, + }, + }, nil) + + f.supernodeKeeper.EXPECT(). + GetMetricsState(gomock.Any(), gomock.Any()). + Return(sntypes.SupernodeMetricsState{}, false) + + f.supernodeKeeper.EXPECT(). + SetSuperNodePostponed(gomock.Any(), gomock.Any(), "no metrics reported"). + DoAndReturn(func(_ sdk.Context, got sdk.ValAddress, _ string) error { + require.Equal(t, valAddr, got) + return nil + }) + + require.NoError(t, f.keeper.HandleSupernodeMetricsStaleness(f.ctx)) +} diff --git a/x/audit/v1/module/autocli.go b/x/audit/v1/module/autocli.go index 76940bb..94c1258 100644 --- a/x/audit/v1/module/autocli.go +++ b/x/audit/v1/module/autocli.go @@ -16,6 +16,24 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { Use: "params", Short: "Shows the parameters of the module", }, + { + RpcMethod: "EvidenceById", + Use: "evidence [evidence-id]", + Short: "Query evidence by id", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "evidence_id"}}, + }, + { + RpcMethod: "EvidenceBySubject", + Use: "evidence-by-subject [subject-address]", + Short: "List evidence records by subject address", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "subject_address"}}, + }, + { + RpcMethod: "EvidenceByAction", + Use: "evidence-by-action [action-id]", + Short: "List evidence records by action id", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "action_id"}}, + }, { RpcMethod: "CurrentWindow", Use: "current-window", @@ -64,6 +82,12 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { Short: "Submit an audit report (peer observations encoded in JSON via flags)", PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "window_id"}, {ProtoField: "self_report"}}, }, + { + RpcMethod: "SubmitEvidence", + Use: "submit-evidence [subject-address] [evidence-type] [action-id] [metadata-json]", + Short: "Submit evidence about a subject (metadata is JSON)", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "subject_address"}, {ProtoField: "evidence_type"}, {ProtoField: "action_id"}, {ProtoField: "metadata"}}, + }, // this line is used by ignite scaffolding # autocli/tx }, }, diff --git a/x/audit/v1/module/depinject.go b/x/audit/v1/module/depinject.go index 353d84b..7464222 100644 --- a/x/audit/v1/module/depinject.go +++ b/x/audit/v1/module/depinject.go @@ -12,6 +12,7 @@ import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) @@ -36,6 +37,8 @@ type ModuleInputs struct { Logger log.Logger SupernodeKeeper sntypes.SupernodeKeeper + AuthKeeper audittypes.AuthKeeper + BankKeeper audittypes.BankKeeper } type ModuleOutputs struct { @@ -60,7 +63,7 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { in.SupernodeKeeper, ) - m := NewAppModule(in.Cdc, k) + m := NewAppModule(in.Cdc, k, in.AuthKeeper, in.BankKeeper) return ModuleOutputs{AuditKeeper: k, Module: m} } diff --git a/x/audit/v1/module/genesis.go b/x/audit/v1/module/genesis.go index 8deefe0..3e1a6a1 100644 --- a/x/audit/v1/module/genesis.go +++ b/x/audit/v1/module/genesis.go @@ -14,13 +14,15 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) panic(fmt.Sprintf("failed to validate genesis state: %s", err)) } - if err := k.SetParams(ctx, genState.Params); err != nil { + if err := k.InitGenesis(ctx, genState); err != nil { panic(err) } } func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - genesis := types.DefaultGenesis() - genesis.Params = k.GetParams(ctx) + genesis, err := k.ExportGenesis(ctx) + if err != nil { + panic(err) + } return genesis } diff --git a/x/audit/v1/module/module.go b/x/audit/v1/module/module.go index fb4667c..7be050f 100644 --- a/x/audit/v1/module/module.go +++ b/x/audit/v1/module/module.go @@ -68,13 +68,17 @@ func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *r type AppModule struct { AppModuleBasic - keeper keeper.Keeper + keeper keeper.Keeper + authKeeper types.AuthKeeper + bankKeeper types.BankKeeper } -func NewAppModule(cdc codec.Codec, keeper keeper.Keeper) AppModule { +func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, authKeeper types.AuthKeeper, bankKeeper types.BankKeeper) AppModule { return AppModule{ AppModuleBasic: NewAppModuleBasic(cdc), keeper: keeper, + authKeeper: authKeeper, + bankKeeper: bankKeeper, } } diff --git a/x/audit/v1/module/simulation.go b/x/audit/v1/module/simulation.go index 1696bbb..ff8ef74 100644 --- a/x/audit/v1/module/simulation.go +++ b/x/audit/v1/module/simulation.go @@ -1,6 +1,11 @@ package audit import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/x/simulation" + + auditsimulation "github.com/LumeraProtocol/lumera/x/audit/v1/simulation" "github.com/LumeraProtocol/lumera/x/audit/v1/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -8,16 +13,37 @@ import ( // GenerateGenesisState creates a default GenState of the module. func (AppModule) GenerateGenesisState(simState *module.SimulationState) { - genState := types.GenesisState{ - Params: types.DefaultParams(), - } - simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&genState) + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(types.DefaultGenesis()) } // RegisterStoreDecoder registers a decoder. func (AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} -// WeightedOperations returns empty operations. -func (AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { - return nil +// WeightedOperations returns the simulation operations for the module. +func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { + operations := make([]simtypes.WeightedOperation, 0) + + const ( + opWeightMsgSubmitEvidence = "op_weight_msg_submit_evidence" + defaultWeightMsgSubmitEvidence int = 100 + ) + + var weightMsgSubmitEvidence int + simState.AppParams.GetOrGenerate(opWeightMsgSubmitEvidence, &weightMsgSubmitEvidence, nil, + func(_ *rand.Rand) { + weightMsgSubmitEvidence = defaultWeightMsgSubmitEvidence + }, + ) + + operations = append(operations, simulation.NewWeightedOperation( + weightMsgSubmitEvidence, + auditsimulation.SimulateMsgSubmitEvidence(am.authKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + return operations +} + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{} } diff --git a/x/audit/v1/simulation/submit_evidence.go b/x/audit/v1/simulation/submit_evidence.go new file mode 100644 index 0000000..6ac2310 --- /dev/null +++ b/x/audit/v1/simulation/submit_evidence.go @@ -0,0 +1,55 @@ +package simulation + +import ( + "encoding/json" + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func SimulateMsgSubmitEvidence( + ak types.AuthKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + simAccount, _ := simtypes.RandomAcc(r, accs) + subjectAccount, _ := simtypes.RandomAcc(r, accs) + + metadataBz, _ := json.Marshal(types.ExpirationEvidenceMetadata{ + ExpirationHeight: uint64(ctx.BlockHeight()), + Reason: "simulation", + }) + + msg := &types.MsgSubmitEvidence{ + Creator: simAccount.Address.String(), + SubjectAddress: subjectAccount.Address.String(), + EvidenceType: types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, + ActionId: "sim-action-id", + Metadata: string(metadataBz), + } + + return simulation.GenAndDeliverTxWithRandFees(simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: (*codec.ProtoCodec)(nil), + Msg: msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + }) + } +} diff --git a/x/audit/v1/types/codec.go b/x/audit/v1/types/codec.go index 6138ffc..f7e975e 100644 --- a/x/audit/v1/types/codec.go +++ b/x/audit/v1/types/codec.go @@ -10,6 +10,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgUpdateParams{}, &MsgSubmitAuditReport{}, + &MsgSubmitEvidence{}, ) msgservice.RegisterMsgServiceDesc(registry, &Msg_serviceDesc) diff --git a/x/audit/v1/types/errors.go b/x/audit/v1/types/errors.go index 3d9e1de..2fffe8f 100644 --- a/x/audit/v1/types/errors.go +++ b/x/audit/v1/types/errors.go @@ -14,4 +14,10 @@ var ( ErrReporterNotFound = errorsmod.Register(ModuleName, 7, "reporter supernode not found") ErrInvalidReporterState = errorsmod.Register(ModuleName, 8, "invalid reporter state") ErrInvalidWindowSnapshot = errorsmod.Register(ModuleName, 9, "invalid window snapshot") + + ErrInvalidEvidenceType = errorsmod.Register(ModuleName, 1101, "invalid evidence type") + ErrInvalidMetadata = errorsmod.Register(ModuleName, 1102, "invalid evidence metadata") + ErrInvalidSubject = errorsmod.Register(ModuleName, 1103, "invalid subject address") + ErrInvalidReporter = errorsmod.Register(ModuleName, 1104, "invalid reporter address") + ErrInvalidActionID = errorsmod.Register(ModuleName, 1105, "invalid action id") ) diff --git a/x/audit/v1/types/evidence.pb.go b/x/audit/v1/types/evidence.pb.go new file mode 100644 index 0000000..9e718f4 --- /dev/null +++ b/x/audit/v1/types/evidence.pb.go @@ -0,0 +1,628 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/v1/evidence.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type EvidenceType int32 + +const ( + EvidenceType_EVIDENCE_TYPE_UNSPECIFIED EvidenceType = 0 + EvidenceType_EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION EvidenceType = 1 + EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED EvidenceType = 2 +) + +var EvidenceType_name = map[int32]string{ + 0: "EVIDENCE_TYPE_UNSPECIFIED", + 1: "EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION", + 2: "EVIDENCE_TYPE_ACTION_EXPIRED", +} + +var EvidenceType_value = map[string]int32{ + "EVIDENCE_TYPE_UNSPECIFIED": 0, + "EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION": 1, + "EVIDENCE_TYPE_ACTION_EXPIRED": 2, +} + +func (x EvidenceType) String() string { + return proto.EnumName(EvidenceType_name, int32(x)) +} + +func (EvidenceType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_449f638e48abdbaa, []int{0} +} + +// Evidence is a stable outer record that stores evidence about an audited subject. +// Type-specific fields are encoded into the `metadata` bytes field. +type Evidence struct { + // evidence_id is a chain-assigned unique identifier. + EvidenceId uint64 `protobuf:"varint,1,opt,name=evidence_id,json=evidenceId,proto3" json:"evidence_id,omitempty"` + // subject_address is the audited subject (e.g. supernode-related actor). + SubjectAddress string `protobuf:"bytes,2,opt,name=subject_address,json=subjectAddress,proto3" json:"subject_address,omitempty"` + // reporter_address is the submitter of the evidence. + ReporterAddress string `protobuf:"bytes,3,opt,name=reporter_address,json=reporterAddress,proto3" json:"reporter_address,omitempty"` + // action_id optionally links this evidence to a specific action. + ActionId string `protobuf:"bytes,4,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"` + // evidence_type is a stable discriminator used to interpret metadata. + EvidenceType EvidenceType `protobuf:"varint,5,opt,name=evidence_type,json=evidenceType,proto3,enum=lumera.audit.v1.EvidenceType" json:"evidence_type,omitempty"` + // metadata is protobuf-binary bytes of a type-specific Evidence metadata message. + Metadata []byte `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + // reported_height is the block height when the evidence was submitted. + ReportedHeight uint64 `protobuf:"varint,7,opt,name=reported_height,json=reportedHeight,proto3" json:"reported_height,omitempty"` +} + +func (m *Evidence) Reset() { *m = Evidence{} } +func (m *Evidence) String() string { return proto.CompactTextString(m) } +func (*Evidence) ProtoMessage() {} +func (*Evidence) Descriptor() ([]byte, []int) { + return fileDescriptor_449f638e48abdbaa, []int{0} +} +func (m *Evidence) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Evidence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Evidence.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 *Evidence) XXX_Merge(src proto.Message) { + xxx_messageInfo_Evidence.Merge(m, src) +} +func (m *Evidence) XXX_Size() int { + return m.Size() +} +func (m *Evidence) XXX_DiscardUnknown() { + xxx_messageInfo_Evidence.DiscardUnknown(m) +} + +var xxx_messageInfo_Evidence proto.InternalMessageInfo + +func (m *Evidence) GetEvidenceId() uint64 { + if m != nil { + return m.EvidenceId + } + return 0 +} + +func (m *Evidence) GetSubjectAddress() string { + if m != nil { + return m.SubjectAddress + } + return "" +} + +func (m *Evidence) GetReporterAddress() string { + if m != nil { + return m.ReporterAddress + } + return "" +} + +func (m *Evidence) GetActionId() string { + if m != nil { + return m.ActionId + } + return "" +} + +func (m *Evidence) GetEvidenceType() EvidenceType { + if m != nil { + return m.EvidenceType + } + return EvidenceType_EVIDENCE_TYPE_UNSPECIFIED +} + +func (m *Evidence) GetMetadata() []byte { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Evidence) GetReportedHeight() uint64 { + if m != nil { + return m.ReportedHeight + } + return 0 +} + +func init() { + proto.RegisterEnum("lumera.audit.v1.EvidenceType", EvidenceType_name, EvidenceType_value) + proto.RegisterType((*Evidence)(nil), "lumera.audit.v1.Evidence") +} + +func init() { proto.RegisterFile("lumera/audit/v1/evidence.proto", fileDescriptor_449f638e48abdbaa) } + +var fileDescriptor_449f638e48abdbaa = []byte{ + // 399 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xcf, 0xae, 0xd2, 0x40, + 0x14, 0xc6, 0x3b, 0x78, 0xbd, 0xc2, 0x88, 0xd0, 0x4c, 0x5c, 0x14, 0x94, 0xda, 0xb8, 0xa1, 0xc1, + 0xd8, 0x06, 0x7d, 0x82, 0x52, 0x06, 0x9d, 0xc4, 0x14, 0x52, 0xf0, 0x1f, 0x9b, 0x49, 0xe9, 0x4c, + 0xa0, 0x46, 0x68, 0xd3, 0x0e, 0x44, 0x12, 0x1f, 0xc2, 0x87, 0xf1, 0x21, 0x5c, 0x12, 0x57, 0xba, + 0x33, 0xf0, 0x22, 0xa6, 0xff, 0x10, 0x8d, 0xc9, 0x5d, 0x9e, 0xdf, 0x37, 0xdf, 0x37, 0xe7, 0x9c, + 0x1c, 0xa8, 0x7e, 0xdc, 0xae, 0x79, 0xec, 0x99, 0xde, 0x96, 0x05, 0xc2, 0xdc, 0xf5, 0x4d, 0xbe, + 0x0b, 0x18, 0xdf, 0xf8, 0xdc, 0x88, 0xe2, 0x50, 0x84, 0xa8, 0x99, 0xeb, 0x46, 0xa6, 0x1b, 0xbb, + 0x7e, 0xbb, 0xe5, 0x87, 0xc9, 0x3a, 0x4c, 0x68, 0x26, 0x9b, 0x79, 0x91, 0xbf, 0x7d, 0xfc, 0xb3, + 0x02, 0xab, 0xb8, 0xb0, 0xa3, 0x47, 0xf0, 0x6e, 0x19, 0x45, 0x03, 0xa6, 0x00, 0x0d, 0xe8, 0x57, + 0x2e, 0x2c, 0x11, 0x61, 0xc8, 0x82, 0xcd, 0x64, 0xbb, 0xf8, 0xc0, 0x7d, 0x41, 0x3d, 0xc6, 0x62, + 0x9e, 0x24, 0x4a, 0x45, 0x03, 0x7a, 0x6d, 0xa0, 0x7c, 0xff, 0xfa, 0xf4, 0x7e, 0x11, 0x6c, 0xe5, + 0xca, 0x54, 0xc4, 0xc1, 0x66, 0xe9, 0x36, 0x0a, 0x43, 0x41, 0x91, 0x0d, 0xe5, 0x98, 0x47, 0x61, + 0x2c, 0x78, 0x7c, 0xce, 0xb8, 0x75, 0x43, 0x46, 0xb3, 0x74, 0x94, 0x21, 0x0f, 0x60, 0xcd, 0xf3, + 0x45, 0x10, 0x6e, 0xd2, 0x36, 0xaf, 0x52, 0xb7, 0x5b, 0xcd, 0x01, 0x61, 0x68, 0x00, 0xef, 0x9d, + 0xa7, 0x10, 0xfb, 0x88, 0x2b, 0xb7, 0x35, 0xa0, 0x37, 0x9e, 0x75, 0x8c, 0x7f, 0xd6, 0x62, 0x94, + 0x73, 0xcf, 0xf6, 0x11, 0x77, 0xeb, 0xfc, 0xa2, 0x42, 0x6d, 0x58, 0x5d, 0x73, 0xe1, 0x31, 0x4f, + 0x78, 0xca, 0xb5, 0x06, 0xf4, 0xba, 0x7b, 0xae, 0x51, 0x17, 0x96, 0xfd, 0x30, 0xba, 0xe2, 0xc1, + 0x72, 0x25, 0x94, 0x3b, 0xd9, 0xa6, 0x1a, 0x25, 0x7e, 0x99, 0xd1, 0xde, 0x67, 0x58, 0xbf, 0xfc, + 0x02, 0x75, 0x60, 0x0b, 0xbf, 0x21, 0x43, 0xec, 0xd8, 0x98, 0xce, 0xde, 0x4f, 0x30, 0x7d, 0xed, + 0x4c, 0x27, 0xd8, 0x26, 0x23, 0x82, 0x87, 0xb2, 0x84, 0x9e, 0xc0, 0xee, 0xdf, 0xb2, 0x65, 0xcf, + 0xc8, 0xd8, 0xa1, 0x6f, 0xdd, 0xb1, 0xf3, 0x82, 0x8e, 0x88, 0x63, 0xbd, 0x22, 0x73, 0x2b, 0x45, + 0x32, 0x40, 0x1a, 0x7c, 0xf8, 0xdf, 0xc7, 0xf8, 0xdd, 0x84, 0xb8, 0x78, 0x28, 0x57, 0x06, 0xbd, + 0x6f, 0x47, 0x15, 0x1c, 0x8e, 0x2a, 0xf8, 0x75, 0x54, 0xc1, 0x97, 0x93, 0x2a, 0x1d, 0x4e, 0xaa, + 0xf4, 0xe3, 0xa4, 0x4a, 0x73, 0xf9, 0xd3, 0x9f, 0xd3, 0x49, 0x17, 0x94, 0x2c, 0xae, 0xb3, 0x63, + 0x78, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x70, 0x39, 0x05, 0x5a, 0x02, 0x00, 0x00, +} + +func (m *Evidence) 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 *Evidence) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ReportedHeight != 0 { + i = encodeVarintEvidence(dAtA, i, uint64(m.ReportedHeight)) + i-- + dAtA[i] = 0x38 + } + if len(m.Metadata) > 0 { + i -= len(m.Metadata) + copy(dAtA[i:], m.Metadata) + i = encodeVarintEvidence(dAtA, i, uint64(len(m.Metadata))) + i-- + dAtA[i] = 0x32 + } + if m.EvidenceType != 0 { + i = encodeVarintEvidence(dAtA, i, uint64(m.EvidenceType)) + i-- + dAtA[i] = 0x28 + } + if len(m.ActionId) > 0 { + i -= len(m.ActionId) + copy(dAtA[i:], m.ActionId) + i = encodeVarintEvidence(dAtA, i, uint64(len(m.ActionId))) + i-- + dAtA[i] = 0x22 + } + if len(m.ReporterAddress) > 0 { + i -= len(m.ReporterAddress) + copy(dAtA[i:], m.ReporterAddress) + i = encodeVarintEvidence(dAtA, i, uint64(len(m.ReporterAddress))) + i-- + dAtA[i] = 0x1a + } + if len(m.SubjectAddress) > 0 { + i -= len(m.SubjectAddress) + copy(dAtA[i:], m.SubjectAddress) + i = encodeVarintEvidence(dAtA, i, uint64(len(m.SubjectAddress))) + i-- + dAtA[i] = 0x12 + } + if m.EvidenceId != 0 { + i = encodeVarintEvidence(dAtA, i, uint64(m.EvidenceId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintEvidence(dAtA []byte, offset int, v uint64) int { + offset -= sovEvidence(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Evidence) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EvidenceId != 0 { + n += 1 + sovEvidence(uint64(m.EvidenceId)) + } + l = len(m.SubjectAddress) + if l > 0 { + n += 1 + l + sovEvidence(uint64(l)) + } + l = len(m.ReporterAddress) + if l > 0 { + n += 1 + l + sovEvidence(uint64(l)) + } + l = len(m.ActionId) + if l > 0 { + n += 1 + l + sovEvidence(uint64(l)) + } + if m.EvidenceType != 0 { + n += 1 + sovEvidence(uint64(m.EvidenceType)) + } + l = len(m.Metadata) + if l > 0 { + n += 1 + l + sovEvidence(uint64(l)) + } + if m.ReportedHeight != 0 { + n += 1 + sovEvidence(uint64(m.ReportedHeight)) + } + return n +} + +func sovEvidence(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozEvidence(x uint64) (n int) { + return sovEvidence(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Evidence) 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 ErrIntOverflowEvidence + } + 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: Evidence: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Evidence: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EvidenceId", wireType) + } + m.EvidenceId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidence + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EvidenceId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubjectAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidence + } + 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 ErrInvalidLengthEvidence + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidence + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubjectAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReporterAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidence + } + 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 ErrInvalidLengthEvidence + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidence + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ReporterAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidence + } + 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 ErrInvalidLengthEvidence + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidence + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ActionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EvidenceType", wireType) + } + m.EvidenceType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidence + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EvidenceType |= EvidenceType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidence + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthEvidence + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthEvidence + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metadata = append(m.Metadata[:0], dAtA[iNdEx:postIndex]...) + if m.Metadata == nil { + m.Metadata = []byte{} + } + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReportedHeight", wireType) + } + m.ReportedHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidence + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ReportedHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipEvidence(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvidence + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipEvidence(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvidence + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvidence + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvidence + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthEvidence + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupEvidence + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthEvidence + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthEvidence = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowEvidence = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupEvidence = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/audit/v1/types/evidence_metadata.pb.go b/x/audit/v1/types/evidence_metadata.pb.go new file mode 100644 index 0000000..c6096b0 --- /dev/null +++ b/x/audit/v1/types/evidence_metadata.pb.go @@ -0,0 +1,640 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/v1/evidence_metadata.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// ExpirationEvidenceMetadata is metadata for evidence about an action expiring. +type ExpirationEvidenceMetadata struct { + // expiration_height is the height at which the action expired (if known). + ExpirationHeight uint64 `protobuf:"varint,1,opt,name=expiration_height,json=expirationHeight,proto3" json:"expiration_height,omitempty"` + // reason is optional human-readable context. + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` +} + +func (m *ExpirationEvidenceMetadata) Reset() { *m = ExpirationEvidenceMetadata{} } +func (m *ExpirationEvidenceMetadata) String() string { return proto.CompactTextString(m) } +func (*ExpirationEvidenceMetadata) ProtoMessage() {} +func (*ExpirationEvidenceMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_09b57e4c2349ab91, []int{0} +} +func (m *ExpirationEvidenceMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExpirationEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ExpirationEvidenceMetadata.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 *ExpirationEvidenceMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExpirationEvidenceMetadata.Merge(m, src) +} +func (m *ExpirationEvidenceMetadata) XXX_Size() int { + return m.Size() +} +func (m *ExpirationEvidenceMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_ExpirationEvidenceMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_ExpirationEvidenceMetadata proto.InternalMessageInfo + +func (m *ExpirationEvidenceMetadata) GetExpirationHeight() uint64 { + if m != nil { + return m.ExpirationHeight + } + return 0 +} + +func (m *ExpirationEvidenceMetadata) GetReason() string { + if m != nil { + return m.Reason + } + return "" +} + +// FinalizationEvidenceMetadata is metadata for evidence about finalization behavior. +type FinalizationEvidenceMetadata struct { + // attempted_finalizer_address is the address that attempted finalization. + AttemptedFinalizerAddress string `protobuf:"bytes,1,opt,name=attempted_finalizer_address,json=attemptedFinalizerAddress,proto3" json:"attempted_finalizer_address,omitempty"` + // expected_finalizer_address is optional (if there is a known expected finalizer). + ExpectedFinalizerAddress string `protobuf:"bytes,2,opt,name=expected_finalizer_address,json=expectedFinalizerAddress,proto3" json:"expected_finalizer_address,omitempty"` + // reason is optional human-readable context. + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` +} + +func (m *FinalizationEvidenceMetadata) Reset() { *m = FinalizationEvidenceMetadata{} } +func (m *FinalizationEvidenceMetadata) String() string { return proto.CompactTextString(m) } +func (*FinalizationEvidenceMetadata) ProtoMessage() {} +func (*FinalizationEvidenceMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_09b57e4c2349ab91, []int{1} +} +func (m *FinalizationEvidenceMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FinalizationEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_FinalizationEvidenceMetadata.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 *FinalizationEvidenceMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_FinalizationEvidenceMetadata.Merge(m, src) +} +func (m *FinalizationEvidenceMetadata) XXX_Size() int { + return m.Size() +} +func (m *FinalizationEvidenceMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_FinalizationEvidenceMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_FinalizationEvidenceMetadata proto.InternalMessageInfo + +func (m *FinalizationEvidenceMetadata) GetAttemptedFinalizerAddress() string { + if m != nil { + return m.AttemptedFinalizerAddress + } + return "" +} + +func (m *FinalizationEvidenceMetadata) GetExpectedFinalizerAddress() string { + if m != nil { + return m.ExpectedFinalizerAddress + } + return "" +} + +func (m *FinalizationEvidenceMetadata) GetReason() string { + if m != nil { + return m.Reason + } + return "" +} + +func init() { + proto.RegisterType((*ExpirationEvidenceMetadata)(nil), "lumera.audit.v1.ExpirationEvidenceMetadata") + proto.RegisterType((*FinalizationEvidenceMetadata)(nil), "lumera.audit.v1.FinalizationEvidenceMetadata") +} + +func init() { + proto.RegisterFile("lumera/audit/v1/evidence_metadata.proto", fileDescriptor_09b57e4c2349ab91) +} + +var fileDescriptor_09b57e4c2349ab91 = []byte{ + // 295 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x29, 0xcd, 0x4d, + 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0x2f, 0x33, 0xd4, 0x4f, 0x2d, 0xcb, 0x4c, + 0x49, 0xcd, 0x4b, 0x4e, 0x8d, 0xcf, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, + 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x28, 0xd4, 0x03, 0x2b, 0xd4, 0x2b, 0x33, 0x94, 0x92, 0x4c, + 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0x8e, 0x07, 0x4b, 0xeb, 0x43, 0x38, 0x10, 0xb5, 0x4a, 0x89, 0x5c, + 0x52, 0xae, 0x15, 0x05, 0x99, 0x45, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xae, 0x50, 0x03, 0x7d, 0xa1, + 0xe6, 0x09, 0x69, 0x73, 0x09, 0xa6, 0xc2, 0x65, 0xe3, 0x33, 0x52, 0x33, 0xd3, 0x33, 0x4a, 0x24, + 0x18, 0x15, 0x18, 0x35, 0x58, 0x82, 0x04, 0x10, 0x12, 0x1e, 0x60, 0x71, 0x21, 0x31, 0x2e, 0xb6, + 0xa2, 0xd4, 0xc4, 0xe2, 0xfc, 0x3c, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x28, 0x4f, 0xe9, + 0x05, 0x23, 0x97, 0x8c, 0x5b, 0x66, 0x5e, 0x62, 0x4e, 0x66, 0x15, 0x76, 0x5b, 0x22, 0xb8, 0xa4, + 0x13, 0x4b, 0x4a, 0x52, 0x73, 0x0b, 0x4a, 0x52, 0x53, 0xe2, 0xd3, 0x20, 0x2a, 0x53, 0x8b, 0xe2, + 0x13, 0x53, 0x52, 0x8a, 0x52, 0x8b, 0x8b, 0xc1, 0xf6, 0x71, 0x3a, 0x49, 0x5c, 0xda, 0xa2, 0x2b, + 0x02, 0x75, 0xba, 0x23, 0x44, 0x26, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x48, 0x12, 0xae, 0xd9, + 0x0d, 0xa6, 0x17, 0xaa, 0x40, 0x28, 0x8c, 0x4b, 0x2a, 0xb5, 0xa2, 0x20, 0x35, 0x19, 0xbb, 0xc1, + 0x4c, 0x04, 0x0c, 0x96, 0x80, 0xe9, 0xc5, 0x30, 0x17, 0xe1, 0x55, 0x66, 0x64, 0xaf, 0x3a, 0x69, + 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, + 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x40, 0x05, 0x22, 0xde, 0x4a, + 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x11, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x0c, + 0xfa, 0x2c, 0xf1, 0xd7, 0x01, 0x00, 0x00, +} + +func (m *ExpirationEvidenceMetadata) 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 *ExpirationEvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExpirationEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Reason) > 0 { + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x12 + } + if m.ExpirationHeight != 0 { + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(m.ExpirationHeight)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *FinalizationEvidenceMetadata) 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 *FinalizationEvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FinalizationEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Reason) > 0 { + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + } + if len(m.ExpectedFinalizerAddress) > 0 { + i -= len(m.ExpectedFinalizerAddress) + copy(dAtA[i:], m.ExpectedFinalizerAddress) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ExpectedFinalizerAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.AttemptedFinalizerAddress) > 0 { + i -= len(m.AttemptedFinalizerAddress) + copy(dAtA[i:], m.AttemptedFinalizerAddress) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.AttemptedFinalizerAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintEvidenceMetadata(dAtA []byte, offset int, v uint64) int { + offset -= sovEvidenceMetadata(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ExpirationEvidenceMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ExpirationHeight != 0 { + n += 1 + sovEvidenceMetadata(uint64(m.ExpirationHeight)) + } + l = len(m.Reason) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + return n +} + +func (m *FinalizationEvidenceMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AttemptedFinalizerAddress) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.ExpectedFinalizerAddress) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.Reason) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + return n +} + +func sovEvidenceMetadata(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozEvidenceMetadata(x uint64) (n int) { + return sovEvidenceMetadata(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ExpirationEvidenceMetadata) 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 ErrIntOverflowEvidenceMetadata + } + 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: ExpirationEvidenceMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExpirationEvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpirationHeight", wireType) + } + m.ExpirationHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpirationHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvidenceMetadata(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FinalizationEvidenceMetadata) 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 ErrIntOverflowEvidenceMetadata + } + 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: FinalizationEvidenceMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FinalizationEvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AttemptedFinalizerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AttemptedFinalizerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpectedFinalizerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExpectedFinalizerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvidenceMetadata(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipEvidenceMetadata(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthEvidenceMetadata + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupEvidenceMetadata + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthEvidenceMetadata + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthEvidenceMetadata = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowEvidenceMetadata = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupEvidenceMetadata = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/audit/v1/types/expected_keepers.go b/x/audit/v1/types/expected_keepers.go new file mode 100644 index 0000000..defd4a7 --- /dev/null +++ b/x/audit/v1/types/expected_keepers.go @@ -0,0 +1,21 @@ +package types + +import ( + "context" + + "cosmossdk.io/core/address" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// AuthKeeper defines the expected interface for the Auth module (simulation only). +type AuthKeeper interface { + AddressCodec() address.Codec + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI + SetAccount(context.Context, sdk.AccountI) +} + +// BankKeeper defines the expected interface for the Bank module (simulation only). +type BankKeeper interface { + SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins + GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin +} diff --git a/x/audit/v1/types/genesis.go b/x/audit/v1/types/genesis.go index cfb540d..1bbbd29 100644 --- a/x/audit/v1/types/genesis.go +++ b/x/audit/v1/types/genesis.go @@ -6,7 +6,8 @@ const ( func DefaultGenesis() *GenesisState { return &GenesisState{ - Params: DefaultParams(), + Params: DefaultParams(), + NextEvidenceId: 1, } } diff --git a/x/audit/v1/types/genesis.pb.go b/x/audit/v1/types/genesis.pb.go index fc928dd..63b3d0e 100644 --- a/x/audit/v1/types/genesis.pb.go +++ b/x/audit/v1/types/genesis.pb.go @@ -27,6 +27,10 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the audit module's genesis state. type GenesisState struct { Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + // evidence defines the initial evidence records (optional). + Evidence []Evidence `protobuf:"bytes,2,rep,name=evidence,proto3" json:"evidence"` + // next_evidence_id is the next id to use for chain-assigned ids. + NextEvidenceId uint64 `protobuf:"varint,3,opt,name=next_evidence_id,json=nextEvidenceId,proto3" json:"next_evidence_id,omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -69,6 +73,20 @@ func (m *GenesisState) GetParams() Params { return Params{} } +func (m *GenesisState) GetEvidence() []Evidence { + if m != nil { + return m.Evidence + } + return nil +} + +func (m *GenesisState) GetNextEvidenceId() uint64 { + if m != nil { + return m.NextEvidenceId + } + return 0 +} + func init() { proto.RegisterType((*GenesisState)(nil), "lumera.audit.v1.GenesisState") } @@ -76,19 +94,24 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/genesis.proto", fileDescriptor_a433cb4f206fdbad) } var fileDescriptor_a433cb4f206fdbad = []byte{ - // 190 bytes of a gzipped FileDescriptorProto + // 259 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcd, 0x29, 0xcd, 0x4d, 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0x2f, 0x33, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x48, 0xeb, 0x81, 0xa5, 0xf5, 0xca, 0x0c, 0xa5, 0x04, 0x13, 0x73, 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x44, 0x8d, 0x94, 0x48, 0x7a, 0x7e, 0x7a, 0x3e, 0x98, 0xa9, 0x0f, 0x62, 0x41, 0x45, 0x65, 0xd0, 0x0d, 0x2e, 0x48, - 0x2c, 0x4a, 0xcc, 0x85, 0x9a, 0xab, 0xe4, 0xc5, 0xc5, 0xe3, 0x0e, 0xb1, 0x28, 0xb8, 0x24, 0xb1, - 0x24, 0x55, 0xc8, 0x8a, 0x8b, 0x0d, 0x22, 0x2f, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xae, - 0x87, 0x66, 0xb1, 0x5e, 0x00, 0x58, 0xda, 0x89, 0xf3, 0xc4, 0x3d, 0x79, 0x86, 0x15, 0xcf, 0x37, - 0x68, 0x31, 0x06, 0x41, 0x75, 0x38, 0x69, 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, - 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, - 0x43, 0x94, 0x40, 0x05, 0xc2, 0xfa, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0xf5, 0xc6, - 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xca, 0xc9, 0xb9, 0xdd, 0xf7, 0x00, 0x00, 0x00, + 0x2c, 0x4a, 0xcc, 0x85, 0x9a, 0x2b, 0x25, 0x87, 0x2e, 0x9b, 0x5a, 0x96, 0x99, 0x92, 0x9a, 0x97, + 0x9c, 0x0a, 0x91, 0x57, 0xda, 0xc8, 0xc8, 0xc5, 0xe3, 0x0e, 0x71, 0x49, 0x70, 0x49, 0x62, 0x49, + 0xaa, 0x90, 0x15, 0x17, 0x1b, 0xc4, 0x00, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x71, 0x3d, + 0x34, 0x97, 0xe9, 0x05, 0x80, 0xa5, 0x9d, 0x38, 0x4f, 0xdc, 0x93, 0x67, 0x58, 0xf1, 0x7c, 0x83, + 0x16, 0x63, 0x10, 0x54, 0x87, 0x90, 0x35, 0x17, 0x07, 0xcc, 0x78, 0x09, 0x26, 0x05, 0x66, 0x0d, + 0x6e, 0x23, 0x49, 0x0c, 0xdd, 0xae, 0x50, 0x05, 0x4e, 0x2c, 0x20, 0xfd, 0x41, 0x70, 0x0d, 0x42, + 0x1a, 0x5c, 0x02, 0x79, 0xa9, 0x15, 0x25, 0xf1, 0x30, 0x81, 0xf8, 0xcc, 0x14, 0x09, 0x66, 0x05, + 0x46, 0x0d, 0x96, 0x20, 0x3e, 0x90, 0x38, 0x4c, 0x9f, 0x67, 0x8a, 0x93, 0xd6, 0x89, 0x47, 0x72, + 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, + 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x09, 0x54, 0x20, 0x3c, 0x5a, 0x52, 0x59, 0x90, 0x5a, + 0x9c, 0xc4, 0x06, 0xf6, 0xa6, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x48, 0x1f, 0xa4, 0xca, 0x7f, + 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -111,6 +134,25 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.NextEvidenceId != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.NextEvidenceId)) + i-- + dAtA[i] = 0x18 + } + if len(m.Evidence) > 0 { + for iNdEx := len(m.Evidence) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Evidence[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } { size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -143,6 +185,15 @@ func (m *GenesisState) Size() (n int) { _ = l l = m.Params.Size() n += 1 + l + sovGenesis(uint64(l)) + if len(m.Evidence) > 0 { + for _, e := range m.Evidence { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.NextEvidenceId != 0 { + n += 1 + sovGenesis(uint64(m.NextEvidenceId)) + } return n } @@ -214,6 +265,59 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Evidence", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Evidence = append(m.Evidence, Evidence{}) + if err := m.Evidence[len(m.Evidence)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NextEvidenceId", wireType) + } + m.NextEvidenceId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NextEvidenceId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go index 7b6a97b..9cb5a6b 100644 --- a/x/audit/v1/types/keys.go +++ b/x/audit/v1/types/keys.go @@ -58,6 +58,16 @@ var ( // selfReportIndexPrefix indexes all submitted reports (for listing self reports across reporters/windows). // Format: "ss/" + reporter_supernode_account + "/" + u64be(window_id) selfReportIndexPrefix = []byte("ss/") + + // Evidence: + // - NextEvidenceIDKey: "ev/next_id" -> 8 bytes u64be(next_evidence_id) + // - EvidenceKey: "ev/r/" + u64be(evidence_id) -> Evidence bytes + // - EvidenceBySubjectIndexKey: "ev/s/" + subject_address + "/" + u64be(evidence_id) -> empty + // - EvidenceByActionIndexKey: "ev/a/" + action_id + 0x00 + u64be(evidence_id) -> empty + nextEvidenceIDKey = []byte("ev/next_id") + evidenceRecordPrefix = []byte("ev/r/") + evidenceBySubjectPrefix = []byte("ev/s/") + evidenceByActionIDPrefix = []byte("ev/a/") ) // WindowSnapshotKey returns the store key for the WindowSnapshot identified by windowID. @@ -159,3 +169,52 @@ func SelfReportIndexPrefix(reporterSupernodeAccount string) []byte { key = append(key, '/') // separator return key } + +func NextEvidenceIDKey() []byte { + return nextEvidenceIDKey +} + +func EvidenceKey(evidenceID uint64) []byte { + key := make([]byte, 0, len(evidenceRecordPrefix)+8) // "ev/r/" + u64be(evidence_id) + key = append(key, evidenceRecordPrefix...) + key = binary.BigEndian.AppendUint64(key, evidenceID) + return key +} + +func EvidenceRecordPrefix() []byte { + return evidenceRecordPrefix +} + +func EvidenceBySubjectIndexKey(subjectAddress string, evidenceID uint64) []byte { + key := make([]byte, 0, len(evidenceBySubjectPrefix)+len(subjectAddress)+1+8) // "ev/s/" + subject + "/" + u64be(evidence_id) + key = append(key, evidenceBySubjectPrefix...) + key = append(key, subjectAddress...) + key = append(key, '/') + key = binary.BigEndian.AppendUint64(key, evidenceID) + return key +} + +func EvidenceBySubjectIndexPrefix(subjectAddress string) []byte { + key := make([]byte, 0, len(evidenceBySubjectPrefix)+len(subjectAddress)+1) // "ev/s/" + subject + "/" + key = append(key, evidenceBySubjectPrefix...) + key = append(key, subjectAddress...) + key = append(key, '/') + return key +} + +func EvidenceByActionIndexKey(actionID string, evidenceID uint64) []byte { + key := make([]byte, 0, len(evidenceByActionIDPrefix)+len(actionID)+1+8) // "ev/a/" + action + 0x00 + u64be(evidence_id) + key = append(key, evidenceByActionIDPrefix...) + key = append(key, actionID...) + key = append(key, 0) // delimiter (allows action_id to contain '/') + key = binary.BigEndian.AppendUint64(key, evidenceID) + return key +} + +func EvidenceByActionIndexPrefix(actionID string) []byte { + key := make([]byte, 0, len(evidenceByActionIDPrefix)+len(actionID)+1) // "ev/a/" + action + 0x00 + key = append(key, evidenceByActionIDPrefix...) + key = append(key, actionID...) + key = append(key, 0) // delimiter + return key +} diff --git a/x/audit/v1/types/query.pb.go b/x/audit/v1/types/query.pb.go index aa91a29..c72980d 100644 --- a/x/audit/v1/types/query.pb.go +++ b/x/audit/v1/types/query.pb.go @@ -112,6 +112,302 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } +type QueryEvidenceByIdRequest struct { + EvidenceId uint64 `protobuf:"varint,1,opt,name=evidence_id,json=evidenceId,proto3" json:"evidence_id,omitempty"` +} + +func (m *QueryEvidenceByIdRequest) Reset() { *m = QueryEvidenceByIdRequest{} } +func (m *QueryEvidenceByIdRequest) String() string { return proto.CompactTextString(m) } +func (*QueryEvidenceByIdRequest) ProtoMessage() {} +func (*QueryEvidenceByIdRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{2} +} +func (m *QueryEvidenceByIdRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEvidenceByIdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEvidenceByIdRequest.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 *QueryEvidenceByIdRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEvidenceByIdRequest.Merge(m, src) +} +func (m *QueryEvidenceByIdRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryEvidenceByIdRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEvidenceByIdRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEvidenceByIdRequest proto.InternalMessageInfo + +func (m *QueryEvidenceByIdRequest) GetEvidenceId() uint64 { + if m != nil { + return m.EvidenceId + } + return 0 +} + +type QueryEvidenceByIdResponse struct { + Evidence Evidence `protobuf:"bytes,1,opt,name=evidence,proto3" json:"evidence"` +} + +func (m *QueryEvidenceByIdResponse) Reset() { *m = QueryEvidenceByIdResponse{} } +func (m *QueryEvidenceByIdResponse) String() string { return proto.CompactTextString(m) } +func (*QueryEvidenceByIdResponse) ProtoMessage() {} +func (*QueryEvidenceByIdResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{3} +} +func (m *QueryEvidenceByIdResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEvidenceByIdResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEvidenceByIdResponse.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 *QueryEvidenceByIdResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEvidenceByIdResponse.Merge(m, src) +} +func (m *QueryEvidenceByIdResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryEvidenceByIdResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEvidenceByIdResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEvidenceByIdResponse proto.InternalMessageInfo + +func (m *QueryEvidenceByIdResponse) GetEvidence() Evidence { + if m != nil { + return m.Evidence + } + return Evidence{} +} + +type QueryEvidenceBySubjectRequest struct { + SubjectAddress string `protobuf:"bytes,1,opt,name=subject_address,json=subjectAddress,proto3" json:"subject_address,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryEvidenceBySubjectRequest) Reset() { *m = QueryEvidenceBySubjectRequest{} } +func (m *QueryEvidenceBySubjectRequest) String() string { return proto.CompactTextString(m) } +func (*QueryEvidenceBySubjectRequest) ProtoMessage() {} +func (*QueryEvidenceBySubjectRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{4} +} +func (m *QueryEvidenceBySubjectRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEvidenceBySubjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEvidenceBySubjectRequest.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 *QueryEvidenceBySubjectRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEvidenceBySubjectRequest.Merge(m, src) +} +func (m *QueryEvidenceBySubjectRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryEvidenceBySubjectRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEvidenceBySubjectRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEvidenceBySubjectRequest proto.InternalMessageInfo + +func (m *QueryEvidenceBySubjectRequest) GetSubjectAddress() string { + if m != nil { + return m.SubjectAddress + } + return "" +} + +func (m *QueryEvidenceBySubjectRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryEvidenceBySubjectResponse struct { + Evidence []Evidence `protobuf:"bytes,1,rep,name=evidence,proto3" json:"evidence"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryEvidenceBySubjectResponse) Reset() { *m = QueryEvidenceBySubjectResponse{} } +func (m *QueryEvidenceBySubjectResponse) String() string { return proto.CompactTextString(m) } +func (*QueryEvidenceBySubjectResponse) ProtoMessage() {} +func (*QueryEvidenceBySubjectResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{5} +} +func (m *QueryEvidenceBySubjectResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEvidenceBySubjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEvidenceBySubjectResponse.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 *QueryEvidenceBySubjectResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEvidenceBySubjectResponse.Merge(m, src) +} +func (m *QueryEvidenceBySubjectResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryEvidenceBySubjectResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEvidenceBySubjectResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEvidenceBySubjectResponse proto.InternalMessageInfo + +func (m *QueryEvidenceBySubjectResponse) GetEvidence() []Evidence { + if m != nil { + return m.Evidence + } + return nil +} + +func (m *QueryEvidenceBySubjectResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryEvidenceByActionRequest struct { + ActionId string `protobuf:"bytes,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryEvidenceByActionRequest) Reset() { *m = QueryEvidenceByActionRequest{} } +func (m *QueryEvidenceByActionRequest) String() string { return proto.CompactTextString(m) } +func (*QueryEvidenceByActionRequest) ProtoMessage() {} +func (*QueryEvidenceByActionRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{6} +} +func (m *QueryEvidenceByActionRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEvidenceByActionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEvidenceByActionRequest.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 *QueryEvidenceByActionRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEvidenceByActionRequest.Merge(m, src) +} +func (m *QueryEvidenceByActionRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryEvidenceByActionRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEvidenceByActionRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEvidenceByActionRequest proto.InternalMessageInfo + +func (m *QueryEvidenceByActionRequest) GetActionId() string { + if m != nil { + return m.ActionId + } + return "" +} + +func (m *QueryEvidenceByActionRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryEvidenceByActionResponse struct { + Evidence []Evidence `protobuf:"bytes,1,rep,name=evidence,proto3" json:"evidence"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryEvidenceByActionResponse) Reset() { *m = QueryEvidenceByActionResponse{} } +func (m *QueryEvidenceByActionResponse) String() string { return proto.CompactTextString(m) } +func (*QueryEvidenceByActionResponse) ProtoMessage() {} +func (*QueryEvidenceByActionResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{7} +} +func (m *QueryEvidenceByActionResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEvidenceByActionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEvidenceByActionResponse.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 *QueryEvidenceByActionResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEvidenceByActionResponse.Merge(m, src) +} +func (m *QueryEvidenceByActionResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryEvidenceByActionResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEvidenceByActionResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEvidenceByActionResponse proto.InternalMessageInfo + +func (m *QueryEvidenceByActionResponse) GetEvidence() []Evidence { + if m != nil { + return m.Evidence + } + return nil +} + +func (m *QueryEvidenceByActionResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + type QueryCurrentWindowRequest struct { } @@ -119,7 +415,7 @@ func (m *QueryCurrentWindowRequest) Reset() { *m = QueryCurrentWindowReq func (m *QueryCurrentWindowRequest) String() string { return proto.CompactTextString(m) } func (*QueryCurrentWindowRequest) ProtoMessage() {} func (*QueryCurrentWindowRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{2} + return fileDescriptor_e98945621bbc9485, []int{8} } func (m *QueryCurrentWindowRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -158,7 +454,7 @@ func (m *QueryCurrentWindowResponse) Reset() { *m = QueryCurrentWindowRe func (m *QueryCurrentWindowResponse) String() string { return proto.CompactTextString(m) } func (*QueryCurrentWindowResponse) ProtoMessage() {} func (*QueryCurrentWindowResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{3} + return fileDescriptor_e98945621bbc9485, []int{9} } func (m *QueryCurrentWindowResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -216,7 +512,7 @@ func (m *QueryWindowSnapshotRequest) Reset() { *m = QueryWindowSnapshotR func (m *QueryWindowSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*QueryWindowSnapshotRequest) ProtoMessage() {} func (*QueryWindowSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{4} + return fileDescriptor_e98945621bbc9485, []int{10} } func (m *QueryWindowSnapshotRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -260,7 +556,7 @@ func (m *QueryWindowSnapshotResponse) Reset() { *m = QueryWindowSnapshot func (m *QueryWindowSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*QueryWindowSnapshotResponse) ProtoMessage() {} func (*QueryWindowSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{5} + return fileDescriptor_e98945621bbc9485, []int{11} } func (m *QueryWindowSnapshotResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -306,7 +602,7 @@ func (m *QueryAssignedTargetsRequest) Reset() { *m = QueryAssignedTarget func (m *QueryAssignedTargetsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAssignedTargetsRequest) ProtoMessage() {} func (*QueryAssignedTargetsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{6} + return fileDescriptor_e98945621bbc9485, []int{12} } func (m *QueryAssignedTargetsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -367,7 +663,7 @@ func (m *QueryAssignedTargetsResponse) Reset() { *m = QueryAssignedTarge func (m *QueryAssignedTargetsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAssignedTargetsResponse) ProtoMessage() {} func (*QueryAssignedTargetsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{7} + return fileDescriptor_e98945621bbc9485, []int{13} } func (m *QueryAssignedTargetsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -433,7 +729,7 @@ func (m *QueryAuditReportRequest) Reset() { *m = QueryAuditReportRequest func (m *QueryAuditReportRequest) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportRequest) ProtoMessage() {} func (*QueryAuditReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{8} + return fileDescriptor_e98945621bbc9485, []int{14} } func (m *QueryAuditReportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -484,7 +780,7 @@ func (m *QueryAuditReportResponse) Reset() { *m = QueryAuditReportRespon func (m *QueryAuditReportResponse) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportResponse) ProtoMessage() {} func (*QueryAuditReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{9} + return fileDescriptor_e98945621bbc9485, []int{15} } func (m *QueryAuditReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -529,7 +825,7 @@ func (m *QueryAuditReportsByReporterRequest) Reset() { *m = QueryAuditRe func (m *QueryAuditReportsByReporterRequest) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportsByReporterRequest) ProtoMessage() {} func (*QueryAuditReportsByReporterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{10} + return fileDescriptor_e98945621bbc9485, []int{16} } func (m *QueryAuditReportsByReporterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -581,7 +877,7 @@ func (m *QueryAuditReportsByReporterResponse) Reset() { *m = QueryAuditR func (m *QueryAuditReportsByReporterResponse) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportsByReporterResponse) ProtoMessage() {} func (*QueryAuditReportsByReporterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{11} + return fileDescriptor_e98945621bbc9485, []int{17} } func (m *QueryAuditReportsByReporterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -635,7 +931,7 @@ func (m *QuerySupernodeReportsRequest) Reset() { *m = QuerySupernodeRepo func (m *QuerySupernodeReportsRequest) String() string { return proto.CompactTextString(m) } func (*QuerySupernodeReportsRequest) ProtoMessage() {} func (*QuerySupernodeReportsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{12} + return fileDescriptor_e98945621bbc9485, []int{18} } func (m *QuerySupernodeReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -703,7 +999,7 @@ func (m *SupernodeReport) Reset() { *m = SupernodeReport{} } func (m *SupernodeReport) String() string { return proto.CompactTextString(m) } func (*SupernodeReport) ProtoMessage() {} func (*SupernodeReport) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{13} + return fileDescriptor_e98945621bbc9485, []int{19} } func (m *SupernodeReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -769,7 +1065,7 @@ func (m *QuerySupernodeReportsResponse) Reset() { *m = QuerySupernodeRep func (m *QuerySupernodeReportsResponse) String() string { return proto.CompactTextString(m) } func (*QuerySupernodeReportsResponse) ProtoMessage() {} func (*QuerySupernodeReportsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{14} + return fileDescriptor_e98945621bbc9485, []int{20} } func (m *QuerySupernodeReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -823,7 +1119,7 @@ func (m *QuerySelfReportsRequest) Reset() { *m = QuerySelfReportsRequest func (m *QuerySelfReportsRequest) String() string { return proto.CompactTextString(m) } func (*QuerySelfReportsRequest) ProtoMessage() {} func (*QuerySelfReportsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{15} + return fileDescriptor_e98945621bbc9485, []int{21} } func (m *QuerySelfReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -890,7 +1186,7 @@ func (m *SelfReport) Reset() { *m = SelfReport{} } func (m *SelfReport) String() string { return proto.CompactTextString(m) } func (*SelfReport) ProtoMessage() {} func (*SelfReport) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{16} + return fileDescriptor_e98945621bbc9485, []int{22} } func (m *SelfReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -949,7 +1245,7 @@ func (m *QuerySelfReportsResponse) Reset() { *m = QuerySelfReportsRespon func (m *QuerySelfReportsResponse) String() string { return proto.CompactTextString(m) } func (*QuerySelfReportsResponse) ProtoMessage() {} func (*QuerySelfReportsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{17} + return fileDescriptor_e98945621bbc9485, []int{23} } func (m *QuerySelfReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -995,6 +1291,12 @@ func (m *QuerySelfReportsResponse) GetPagination() *query.PageResponse { func init() { proto.RegisterType((*QueryParamsRequest)(nil), "lumera.audit.v1.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "lumera.audit.v1.QueryParamsResponse") + proto.RegisterType((*QueryEvidenceByIdRequest)(nil), "lumera.audit.v1.QueryEvidenceByIdRequest") + proto.RegisterType((*QueryEvidenceByIdResponse)(nil), "lumera.audit.v1.QueryEvidenceByIdResponse") + proto.RegisterType((*QueryEvidenceBySubjectRequest)(nil), "lumera.audit.v1.QueryEvidenceBySubjectRequest") + proto.RegisterType((*QueryEvidenceBySubjectResponse)(nil), "lumera.audit.v1.QueryEvidenceBySubjectResponse") + proto.RegisterType((*QueryEvidenceByActionRequest)(nil), "lumera.audit.v1.QueryEvidenceByActionRequest") + proto.RegisterType((*QueryEvidenceByActionResponse)(nil), "lumera.audit.v1.QueryEvidenceByActionResponse") proto.RegisterType((*QueryCurrentWindowRequest)(nil), "lumera.audit.v1.QueryCurrentWindowRequest") proto.RegisterType((*QueryCurrentWindowResponse)(nil), "lumera.audit.v1.QueryCurrentWindowResponse") proto.RegisterType((*QueryWindowSnapshotRequest)(nil), "lumera.audit.v1.QueryWindowSnapshotRequest") @@ -1016,82 +1318,98 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/query.proto", fileDescriptor_e98945621bbc9485) } var fileDescriptor_e98945621bbc9485 = []byte{ - // 1191 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xc1, 0x6f, 0xdc, 0xc4, - 0x17, 0xce, 0x64, 0xf3, 0xeb, 0x2f, 0x79, 0x4b, 0x9a, 0x64, 0x52, 0x91, 0x8d, 0x37, 0x6c, 0x57, - 0x0e, 0x2a, 0x21, 0x10, 0x9b, 0xa4, 0x08, 0x09, 0x02, 0x52, 0xb3, 0xa5, 0x4d, 0x2a, 0xa5, 0x34, - 0xf5, 0x16, 0x2a, 0xb8, 0x18, 0x67, 0x3d, 0xd9, 0x58, 0xda, 0xd8, 0x8e, 0xc7, 0x9b, 0x12, 0x55, - 0x95, 0x10, 0xfc, 0x03, 0x48, 0x08, 0x71, 0xed, 0x11, 0xa1, 0x1c, 0x2a, 0x81, 0x10, 0x07, 0x0e, - 0x1c, 0x7b, 0xac, 0xe0, 0x82, 0x38, 0x20, 0x94, 0x20, 0x71, 0xe0, 0x8a, 0xc4, 0x85, 0x03, 0xf2, - 0xcc, 0x73, 0x36, 0x6b, 0x7b, 0xb3, 0x9b, 0xa8, 0xe5, 0xc2, 0x25, 0x9a, 0x9d, 0xf7, 0xbe, 0x79, - 0xdf, 0x7b, 0xf3, 0xf9, 0xcd, 0x53, 0xa0, 0xd8, 0x68, 0x6e, 0xb1, 0xc0, 0xd2, 0xad, 0xa6, 0xed, - 0x84, 0xfa, 0xce, 0xbc, 0xbe, 0xdd, 0x64, 0xc1, 0xae, 0xe6, 0x07, 0x5e, 0xe8, 0xd1, 0x11, 0x69, - 0xd4, 0x84, 0x51, 0xdb, 0x99, 0x57, 0xc6, 0xac, 0x2d, 0xc7, 0xf5, 0x74, 0xf1, 0x57, 0xfa, 0x28, - 0xe7, 0xea, 0x5e, 0xdd, 0x13, 0x4b, 0x3d, 0x5a, 0xe1, 0xee, 0x54, 0xdd, 0xf3, 0xea, 0x0d, 0xa6, - 0x5b, 0xbe, 0xa3, 0x5b, 0xae, 0xeb, 0x85, 0x56, 0xe8, 0x78, 0x2e, 0x47, 0xeb, 0x64, 0xcd, 0xe3, - 0x5b, 0x1e, 0x37, 0x25, 0x4c, 0xfe, 0x40, 0xd3, 0xac, 0xfc, 0xa5, 0xaf, 0x5b, 0x9c, 0x49, 0x2e, - 0xfa, 0xce, 0xfc, 0x3a, 0x0b, 0xad, 0x79, 0xdd, 0xb7, 0xea, 0x8e, 0x2b, 0xce, 0x89, 0x83, 0x24, - 0xb9, 0xfb, 0x56, 0x60, 0x6d, 0xc5, 0x27, 0xa5, 0x32, 0x93, 0x59, 0x08, 0xa3, 0x7a, 0x0e, 0xe8, - 0xcd, 0xe8, 0xf0, 0x35, 0x81, 0x30, 0xd8, 0x76, 0x93, 0xf1, 0x50, 0xbd, 0x09, 0xe3, 0x6d, 0xbb, - 0xdc, 0xf7, 0x5c, 0xce, 0xe8, 0x6b, 0x70, 0x46, 0x9e, 0x5c, 0x20, 0x65, 0x32, 0x93, 0x5f, 0x98, - 0xd0, 0x12, 0x75, 0xd1, 0x24, 0xa0, 0x32, 0xf4, 0xf0, 0x97, 0xf3, 0x7d, 0x5f, 0xfc, 0xfe, 0x60, - 0x96, 0x18, 0x88, 0x50, 0x8b, 0x30, 0x29, 0x8e, 0xbc, 0xdc, 0x0c, 0x02, 0xe6, 0x86, 0xb7, 0x1d, - 0xd7, 0xf6, 0xee, 0xc4, 0xf1, 0x3e, 0x23, 0xa0, 0x64, 0x59, 0x31, 0x6e, 0x11, 0x86, 0xee, 0x88, - 0x1d, 0xd3, 0xb1, 0x45, 0xe8, 0x01, 0x63, 0x50, 0x6e, 0x5c, 0xb3, 0xa9, 0x06, 0xe3, 0x68, 0xe4, - 0xa1, 0x15, 0x84, 0xe6, 0x26, 0x73, 0xea, 0x9b, 0x61, 0xa1, 0xbf, 0x4c, 0x66, 0x72, 0xc6, 0x98, - 0x34, 0x55, 0x23, 0xcb, 0x8a, 0x30, 0xd0, 0x59, 0xc0, 0x4d, 0x93, 0xb9, 0x76, 0xec, 0x9d, 0x13, - 0xde, 0x23, 0xd2, 0x70, 0xc5, 0xb5, 0xa5, 0xaf, 0xfa, 0x2a, 0xd2, 0x92, 0x7c, 0xaa, 0xae, 0xe5, - 0xf3, 0x4d, 0x2f, 0x44, 0xd6, 0xc7, 0xd2, 0x52, 0xdf, 0x87, 0x62, 0x26, 0x14, 0x53, 0x5a, 0x82, - 0x41, 0x8e, 0x7b, 0x58, 0xcc, 0xf3, 0xa9, 0x62, 0xb6, 0x43, 0x2b, 0x03, 0x51, 0x51, 0x8d, 0x43, - 0x98, 0xfa, 0x15, 0xc1, 0x10, 0x4b, 0x9c, 0x3b, 0x75, 0x97, 0xd9, 0xb7, 0xac, 0xa0, 0xce, 0xc2, - 0xf8, 0x12, 0xe9, 0x0a, 0x8c, 0xf1, 0xa6, 0xcf, 0x02, 0xd7, 0xb3, 0x99, 0x69, 0xd5, 0x6a, 0x5e, - 0xd3, 0x95, 0xb1, 0x86, 0x2a, 0xc5, 0x1f, 0xbe, 0x9e, 0x9b, 0x40, 0xb9, 0x2d, 0xd5, 0x6a, 0x4b, - 0xb6, 0x1d, 0x30, 0xce, 0xab, 0x61, 0xe0, 0xb8, 0x75, 0x63, 0xf4, 0x10, 0xb5, 0x24, 0x41, 0xed, - 0x89, 0xf6, 0x27, 0xea, 0x3f, 0x07, 0xe3, 0x1b, 0x4e, 0x23, 0x64, 0x81, 0xb9, 0xbe, 0x6b, 0xb6, - 0xdc, 0xa2, 0x8a, 0x0e, 0x1a, 0xa3, 0xd2, 0x54, 0xc1, 0x32, 0x5c, 0xb3, 0xd5, 0x3f, 0x09, 0x4c, - 0x65, 0xb3, 0x7e, 0x12, 0x97, 0xad, 0xc1, 0x78, 0xc0, 0xb6, 0x9b, 0x4e, 0xc0, 0x6c, 0xd3, 0xf3, - 0x99, 0x6b, 0xfa, 0x5e, 0x10, 0xf2, 0x42, 0xae, 0x9c, 0x9b, 0x19, 0x36, 0xc6, 0x62, 0xd3, 0x0d, - 0x9f, 0xb9, 0x6b, 0x91, 0x81, 0xde, 0x86, 0xc9, 0x50, 0xf0, 0x31, 0x53, 0xa5, 0xe3, 0x85, 0x81, - 0x72, 0xae, 0x5b, 0xed, 0x26, 0x24, 0xba, 0x9a, 0xa8, 0x20, 0x57, 0x3f, 0x24, 0x30, 0x21, 0xd3, - 0x8e, 0x6e, 0xd7, 0x60, 0x11, 0x8f, 0x5e, 0x74, 0x94, 0x7d, 0x8b, 0xfd, 0xa7, 0xb8, 0x45, 0xf5, - 0x1d, 0x28, 0xa4, 0x19, 0xb4, 0xbe, 0xec, 0x40, 0xec, 0xa0, 0x18, 0xa7, 0x52, 0x62, 0x3c, 0x82, - 0x42, 0x25, 0x22, 0x42, 0xfd, 0x86, 0x80, 0x9a, 0x3c, 0x98, 0x57, 0x76, 0xe5, 0x82, 0x05, 0x8f, - 0x5f, 0x8e, 0x57, 0x01, 0x5a, 0x2d, 0x50, 0xd4, 0x22, 0xbf, 0x70, 0x41, 0x43, 0x7c, 0xd4, 0x2f, - 0x35, 0xd9, 0xbb, 0xb1, 0x5f, 0x6a, 0x6b, 0x56, 0x9d, 0x21, 0x0b, 0xe3, 0x08, 0x52, 0xdd, 0x23, - 0x30, 0x7d, 0x2c, 0x71, 0x2c, 0xce, 0xeb, 0xf0, 0x7f, 0x99, 0x6a, 0xd4, 0xf7, 0x72, 0x3d, 0x56, - 0x27, 0x86, 0xd0, 0xe5, 0x0c, 0xb6, 0xcf, 0x75, 0x65, 0x2b, 0x43, 0xb7, 0xd1, 0xfd, 0x3b, 0xfe, - 0x72, 0x0e, 0xd5, 0x85, 0x94, 0xff, 0xe5, 0x0f, 0xbe, 0xbd, 0xfc, 0xb9, 0xd3, 0x96, 0xbf, 0x53, - 0xe3, 0x18, 0xe8, 0xd0, 0x38, 0xfe, 0x20, 0x30, 0x92, 0xc8, 0x9c, 0xbe, 0x0b, 0x4a, 0x80, 0xb7, - 0x65, 0x9e, 0x2a, 0xf5, 0x42, 0x0c, 0xaf, 0x9e, 0xa8, 0x04, 0xd3, 0x30, 0x2c, 0x81, 0xed, 0xef, - 0xc7, 0x53, 0x72, 0x13, 0x7b, 0xcf, 0x22, 0xe4, 0x85, 0x0b, 0x0f, 0xad, 0x90, 0xc9, 0xee, 0x71, - 0x76, 0x41, 0x49, 0x3f, 0x99, 0x5e, 0x10, 0x56, 0x23, 0x17, 0x03, 0xfc, 0x78, 0xc9, 0xd5, 0x2f, - 0x09, 0x3c, 0xd3, 0xe1, 0xb2, 0x51, 0x95, 0x97, 0x92, 0xaa, 0x2c, 0xa7, 0x8e, 0x4e, 0x60, 0x9f, - 0x98, 0x32, 0xff, 0x8a, 0x9b, 0x5b, 0x95, 0x35, 0x36, 0xfe, 0x53, 0xa2, 0xfc, 0x9c, 0x00, 0xb4, - 0x92, 0x3e, 0xbe, 0x93, 0xa7, 0x44, 0xd3, 0x9f, 0x21, 0x9a, 0x65, 0xc8, 0x73, 0xd6, 0xd8, 0x30, - 0xb1, 0x1b, 0xcb, 0x44, 0xca, 0xd9, 0xfd, 0xa6, 0x15, 0x18, 0x6f, 0x16, 0xf8, 0xe1, 0x8e, 0x7a, - 0x9f, 0x60, 0xbb, 0x6f, 0xbb, 0x13, 0xd4, 0xce, 0x62, 0x52, 0x3b, 0xc5, 0xb4, 0x76, 0x92, 0x87, - 0x3f, 0x76, 0xd9, 0x2c, 0xec, 0xe5, 0xe1, 0x7f, 0x82, 0x22, 0xfd, 0x98, 0xc0, 0x19, 0x39, 0x3a, - 0xd2, 0xe9, 0x14, 0x93, 0xf4, 0x7c, 0xaa, 0x3c, 0x7b, 0xbc, 0x93, 0x8c, 0xa5, 0x6a, 0x1f, 0xfd, - 0xf8, 0xdb, 0xa7, 0xfd, 0x33, 0xf4, 0x82, 0xbe, 0x2a, 0xbc, 0xd7, 0xa2, 0x89, 0xb7, 0xe6, 0x35, - 0xf4, 0xec, 0x71, 0x99, 0xde, 0x27, 0x30, 0xdc, 0x36, 0x80, 0xd2, 0xd9, 0xec, 0x38, 0x59, 0x33, - 0xac, 0xf2, 0x42, 0x4f, 0xbe, 0x48, 0xed, 0x15, 0x41, 0xed, 0x25, 0xaa, 0x75, 0xa3, 0x56, 0x93, - 0x70, 0x94, 0x22, 0x7d, 0x40, 0xe0, 0x6c, 0xfb, 0x58, 0x48, 0x3b, 0xc4, 0xcd, 0x1c, 0x59, 0x95, - 0x17, 0x7b, 0x73, 0x46, 0x96, 0x97, 0x05, 0xcb, 0x37, 0xe8, 0x62, 0x37, 0x96, 0xf1, 0x4c, 0x86, - 0x07, 0xe8, 0x77, 0x0f, 0xbf, 0x82, 0x7b, 0xf4, 0x3b, 0x02, 0x23, 0x89, 0x59, 0x8f, 0x76, 0xa0, - 0x91, 0x3d, 0xc8, 0x2a, 0x73, 0x3d, 0x7a, 0x23, 0xeb, 0x55, 0xc1, 0xfa, 0x2a, 0x7d, 0xb3, 0x1b, - 0x6b, 0x0b, 0x0f, 0x30, 0xe5, 0xd0, 0xc6, 0xf5, 0xbb, 0xa9, 0x4e, 0x75, 0x8f, 0x7e, 0x4b, 0x20, - 0x7f, 0xe4, 0x75, 0xa7, 0x33, 0x1d, 0xc8, 0xa4, 0xc6, 0x3a, 0xe5, 0xf9, 0x1e, 0x3c, 0x91, 0xf2, - 0x2d, 0x41, 0xf9, 0x2d, 0xba, 0xda, 0x95, 0x72, 0xb4, 0xc0, 0xe6, 0x70, 0xb4, 0xca, 0x99, 0xd4, - 0x7f, 0x26, 0xf0, 0x74, 0xf6, 0x68, 0x43, 0x2f, 0x76, 0xe5, 0x96, 0x9e, 0xe0, 0x94, 0x97, 0x4f, - 0x06, 0xc2, 0xdc, 0xde, 0x16, 0xb9, 0xdd, 0xa0, 0xd7, 0x4f, 0x92, 0x1b, 0x8f, 0xda, 0x6f, 0xfc, - 0x36, 0x67, 0x26, 0xf7, 0x3d, 0x81, 0xd1, 0xe4, 0xdb, 0x48, 0x3b, 0x28, 0xa5, 0xc3, 0xc0, 0xa4, - 0x68, 0xbd, 0xba, 0x63, 0x2a, 0xd7, 0x45, 0x2a, 0xcb, 0xf4, 0x4a, 0xb7, 0x54, 0x5a, 0x7c, 0x31, - 0x9d, 0xcc, 0x14, 0xf6, 0x08, 0xe4, 0x8f, 0x74, 0xe7, 0x4e, 0xd2, 0x4a, 0x3f, 0xaa, 0x9d, 0xa4, - 0x95, 0xd1, 0xea, 0xd5, 0x15, 0xc1, 0xb9, 0x42, 0x2f, 0x75, 0xe5, 0xdc, 0x7a, 0x76, 0x32, 0xe9, - 0x56, 0x66, 0x1f, 0xee, 0x97, 0xc8, 0xa3, 0xfd, 0x12, 0xf9, 0x75, 0xbf, 0x44, 0x3e, 0x39, 0x28, - 0xf5, 0x3d, 0x3a, 0x28, 0xf5, 0xfd, 0x74, 0x50, 0xea, 0x7b, 0x6f, 0xf4, 0x83, 0xd6, 0x31, 0xe1, - 0xae, 0xcf, 0xf8, 0xfa, 0x19, 0xf1, 0xdf, 0x85, 0x8b, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x6b, - 0x7f, 0xcd, 0xb8, 0x56, 0x11, 0x00, 0x00, + // 1447 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xdf, 0x6b, 0x1c, 0xd5, + 0x17, 0xcf, 0xcd, 0xe6, 0xdb, 0x6f, 0x72, 0xd2, 0x36, 0xc9, 0x4d, 0x31, 0x9b, 0xd9, 0xba, 0x0d, + 0x53, 0xa9, 0x69, 0x34, 0x33, 0xa6, 0x95, 0xa2, 0x46, 0x4b, 0xb3, 0xb5, 0x3f, 0x02, 0xad, 0x4d, + 0x77, 0xab, 0x45, 0x41, 0xc6, 0xc9, 0xce, 0xed, 0x76, 0x24, 0x99, 0xd9, 0xce, 0x9d, 0x4d, 0x5d, + 0x42, 0x40, 0xec, 0x3f, 0x20, 0x88, 0xf8, 0xda, 0x97, 0x8a, 0x48, 0x1f, 0x0a, 0x16, 0x51, 0xf0, + 0x41, 0xf0, 0xa5, 0x8f, 0xa5, 0x82, 0x88, 0x0f, 0x22, 0xad, 0xe0, 0x83, 0xaf, 0x82, 0x2f, 0x3e, + 0xc8, 0xdc, 0x7b, 0x66, 0x77, 0xe7, 0x57, 0x76, 0x13, 0x52, 0x11, 0x7c, 0x09, 0xb3, 0xe7, 0xc7, + 0x3d, 0x9f, 0xf3, 0xe3, 0x9e, 0x7b, 0x4e, 0xa0, 0xb0, 0xd2, 0x58, 0x65, 0x9e, 0xa9, 0x9b, 0x0d, + 0xcb, 0xf6, 0xf5, 0xb5, 0x39, 0xfd, 0x5a, 0x83, 0x79, 0x4d, 0xad, 0xee, 0xb9, 0xbe, 0x4b, 0x47, + 0x24, 0x53, 0x13, 0x4c, 0x6d, 0x6d, 0x4e, 0x19, 0x33, 0x57, 0x6d, 0xc7, 0xd5, 0xc5, 0x5f, 0x29, + 0xa3, 0xec, 0xab, 0xb9, 0x35, 0x57, 0x7c, 0xea, 0xc1, 0x17, 0x52, 0xf7, 0xd7, 0x5c, 0xb7, 0xb6, + 0xc2, 0x74, 0xb3, 0x6e, 0xeb, 0xa6, 0xe3, 0xb8, 0xbe, 0xe9, 0xdb, 0xae, 0xc3, 0x91, 0x3b, 0x59, + 0x75, 0xf9, 0xaa, 0xcb, 0x0d, 0xa9, 0x26, 0x7f, 0x20, 0x6b, 0x46, 0xfe, 0xd2, 0x97, 0x4d, 0xce, + 0x24, 0x16, 0x7d, 0x6d, 0x6e, 0x99, 0xf9, 0xe6, 0x9c, 0x5e, 0x37, 0x6b, 0xb6, 0x23, 0xce, 0x09, + 0x8d, 0xc4, 0xb1, 0xd7, 0x4d, 0xcf, 0x5c, 0x0d, 0x4f, 0x4a, 0x78, 0x26, 0xbd, 0x90, 0xcc, 0x62, + 0x9c, 0xc9, 0xd6, 0x6c, 0x8b, 0x39, 0x55, 0x26, 0xf9, 0xea, 0x3e, 0xa0, 0x17, 0x03, 0xe3, 0x4b, + 0xe2, 0xc4, 0x32, 0xbb, 0xd6, 0x60, 0xdc, 0x57, 0x2f, 0xc2, 0x78, 0x84, 0xca, 0xeb, 0xae, 0xc3, + 0x19, 0x7d, 0x09, 0x76, 0x49, 0xcb, 0x79, 0x32, 0x45, 0xa6, 0x87, 0x8f, 0x4c, 0x68, 0xb1, 0xb8, + 0x69, 0x52, 0xa1, 0x34, 0x74, 0xef, 0xe7, 0x03, 0x7d, 0x9f, 0xfd, 0x76, 0x67, 0x86, 0x94, 0x51, + 0x43, 0x9d, 0x87, 0xbc, 0x38, 0xf2, 0x14, 0xda, 0x2f, 0x35, 0x17, 0x2d, 0x34, 0x47, 0x0f, 0xc0, + 0x70, 0x08, 0xcb, 0xb0, 0x2d, 0x71, 0xf8, 0x40, 0x19, 0x42, 0xd2, 0xa2, 0xa5, 0xbe, 0x0d, 0x93, + 0x29, 0xca, 0x88, 0xea, 0x04, 0x0c, 0x86, 0xa2, 0x88, 0x6b, 0x32, 0x81, 0xab, 0xa5, 0xd8, 0x81, + 0xac, 0xa5, 0xa5, 0x7e, 0x4e, 0xe0, 0xc9, 0xd8, 0xf9, 0x95, 0xc6, 0xf2, 0xbb, 0xac, 0xea, 0x87, + 0x08, 0x17, 0x60, 0x84, 0x4b, 0x8a, 0x61, 0x5a, 0x96, 0xc7, 0xb8, 0x0c, 0xc1, 0x50, 0x29, 0xff, + 0xe0, 0xee, 0xec, 0x3e, 0x4c, 0xec, 0x82, 0xe4, 0x54, 0x7c, 0xcf, 0x76, 0x6a, 0xe5, 0xbd, 0xa8, + 0x80, 0x54, 0x7a, 0x1a, 0xa0, 0x9d, 0xd8, 0x7c, 0xbf, 0x00, 0x7a, 0x48, 0x43, 0xd5, 0xa0, 0x0a, + 0x34, 0x59, 0x91, 0x58, 0x05, 0xda, 0x92, 0x59, 0x63, 0x68, 0xbe, 0xdc, 0xa1, 0xa9, 0x7e, 0x4a, + 0xa0, 0x98, 0x05, 0x16, 0x23, 0x32, 0x1f, 0x89, 0x48, 0x6e, 0xf3, 0x88, 0x0c, 0x04, 0x11, 0x69, + 0x07, 0x83, 0x9e, 0x49, 0xc1, 0xf9, 0x74, 0x57, 0x9c, 0xd2, 0x72, 0x04, 0xe8, 0x0d, 0x02, 0xfb, + 0x63, 0x40, 0x17, 0xaa, 0x01, 0x27, 0x0c, 0x6a, 0x01, 0x86, 0x4c, 0x41, 0x08, 0x93, 0x3e, 0x54, + 0x1e, 0x94, 0x84, 0x45, 0x6b, 0xc7, 0xc2, 0x75, 0x2b, 0x99, 0xdb, 0x10, 0xc5, 0xbf, 0x2a, 0x5a, + 0x05, 0x2c, 0xf1, 0x93, 0x0d, 0xcf, 0x63, 0x8e, 0x7f, 0xd9, 0x76, 0x2c, 0xf7, 0x7a, 0x78, 0x1f, + 0x3f, 0x26, 0xa0, 0xa4, 0x71, 0xd1, 0x83, 0x02, 0x0c, 0x5d, 0x17, 0x94, 0xf6, 0xed, 0x19, 0x94, + 0x84, 0x45, 0x8b, 0x6a, 0x30, 0x8e, 0x4c, 0xee, 0x9b, 0x9e, 0x6f, 0x5c, 0x65, 0x76, 0xed, 0xaa, + 0x2f, 0xa0, 0xe6, 0xca, 0x63, 0x92, 0x55, 0x09, 0x38, 0x67, 0x05, 0x83, 0xce, 0x00, 0x12, 0x0d, + 0xe6, 0x58, 0xa1, 0x74, 0x4e, 0x48, 0x8f, 0x48, 0xc6, 0x29, 0xc7, 0x92, 0xb2, 0xea, 0x8b, 0x08, + 0x4b, 0xe2, 0xa9, 0x38, 0x66, 0x9d, 0x5f, 0x75, 0xfd, 0x8e, 0xfc, 0x66, 0xc2, 0x52, 0xdf, 0x81, + 0x42, 0xaa, 0x2a, 0xba, 0xb4, 0x00, 0x83, 0x1c, 0x69, 0x78, 0xa9, 0x0f, 0x24, 0x92, 0x12, 0x55, + 0x0d, 0x53, 0x13, 0xaa, 0xa9, 0x5f, 0x10, 0x34, 0xb1, 0xc0, 0xb9, 0x5d, 0x73, 0x98, 0x75, 0xc9, + 0xf4, 0x6a, 0xcc, 0x0f, 0x9b, 0x1c, 0x3d, 0x0b, 0x63, 0xbc, 0x51, 0x67, 0x9e, 0xe3, 0x5a, 0xcc, + 0x30, 0xab, 0x55, 0xb7, 0xe1, 0xf8, 0x78, 0xab, 0x0b, 0x0f, 0xee, 0xce, 0x4e, 0x84, 0xb7, 0xba, + 0x5a, 0x8d, 0x5e, 0xec, 0xd1, 0x96, 0xd6, 0x82, 0x54, 0x8a, 0x3a, 0xda, 0x1f, 0x8b, 0xff, 0x2c, + 0x8c, 0x5f, 0xb1, 0x57, 0x7c, 0xe6, 0x19, 0xcb, 0x4d, 0xa3, 0x2d, 0x16, 0x44, 0x74, 0xb0, 0x3c, + 0x2a, 0x59, 0x25, 0x0c, 0xc3, 0xa2, 0xa5, 0xfe, 0x11, 0xde, 0x9a, 0x04, 0xea, 0xc7, 0x91, 0x6c, + 0x0d, 0xc6, 0x3d, 0x76, 0xad, 0x61, 0x7b, 0xcc, 0x32, 0xdc, 0x3a, 0x73, 0x8c, 0xba, 0xeb, 0xf9, + 0x3c, 0x9f, 0x9b, 0xca, 0x4d, 0xef, 0x29, 0x8f, 0x85, 0xac, 0x0b, 0x75, 0xe6, 0x2c, 0x05, 0x0c, + 0x7a, 0x19, 0x26, 0x7d, 0x81, 0xc7, 0x48, 0x84, 0x8e, 0xe7, 0x07, 0xa6, 0x72, 0xdd, 0x62, 0x37, + 0x21, 0xb5, 0x2b, 0xb1, 0x08, 0x72, 0xf5, 0x7d, 0x02, 0x13, 0xd2, 0xed, 0x20, 0xbb, 0x65, 0x16, + 0xe0, 0xe8, 0xa5, 0x8e, 0xd2, 0xb3, 0xd8, 0xbf, 0x8d, 0x2c, 0xaa, 0x6f, 0xe0, 0x0b, 0x15, 0x41, + 0xd0, 0x7e, 0xf9, 0x3c, 0x41, 0xc1, 0x62, 0xdc, 0x9f, 0x28, 0xc6, 0x0e, 0x2d, 0xac, 0x44, 0xd4, + 0x50, 0xbf, 0x24, 0xa0, 0xc6, 0x0f, 0xe6, 0xa5, 0xa6, 0xfc, 0x60, 0xde, 0xce, 0x97, 0xe3, 0x4e, + 0xb5, 0xce, 0xdb, 0x04, 0x0e, 0x6e, 0x0a, 0x1c, 0x83, 0xf3, 0x32, 0xfc, 0x5f, 0xba, 0xca, 0xb1, + 0x7f, 0xf6, 0x12, 0x9d, 0x50, 0x65, 0xe7, 0x3a, 0xe8, 0x5f, 0xe1, 0xcd, 0x69, 0x55, 0x17, 0x42, + 0xfe, 0x87, 0x2f, 0x7c, 0x34, 0xfc, 0xb9, 0xed, 0x86, 0x3f, 0xab, 0x71, 0x0c, 0x64, 0x34, 0x8e, + 0xdf, 0x09, 0x8c, 0xc4, 0x3c, 0xa7, 0x6f, 0x82, 0xe2, 0x61, 0xb6, 0x8c, 0x6d, 0xb9, 0x9e, 0x0f, + 0xd5, 0x2b, 0x5b, 0x0a, 0xc1, 0x41, 0xd8, 0x23, 0x15, 0xa3, 0xef, 0xc7, 0x6e, 0x49, 0xc4, 0xde, + 0x33, 0x0f, 0xc3, 0x42, 0x84, 0xfb, 0xa6, 0xcf, 0x64, 0xf7, 0xd8, 0x7b, 0x44, 0x49, 0x8e, 0x94, + 0xae, 0xe7, 0x57, 0x02, 0x91, 0x32, 0xd4, 0xc3, 0x4f, 0xde, 0x1e, 0xd9, 0x92, 0xc9, 0x6e, 0x8d, + 0x85, 0xb1, 0xaa, 0x9c, 0x4a, 0x1c, 0x1d, 0xd3, 0x7d, 0x6c, 0x95, 0xf9, 0x67, 0xd8, 0xdc, 0x2a, + 0x6c, 0xe5, 0xca, 0x7f, 0xaa, 0x28, 0x3f, 0x21, 0x00, 0x6d, 0xa7, 0x37, 0xef, 0xe4, 0x89, 0xa2, + 0xe9, 0x4f, 0x29, 0x9a, 0x33, 0x30, 0xcc, 0xd9, 0xca, 0x15, 0x03, 0xbb, 0xb1, 0x74, 0x64, 0x2a, + 0xbd, 0xdf, 0xb4, 0x0d, 0x63, 0x66, 0x81, 0xb7, 0x28, 0xea, 0x4d, 0x82, 0xed, 0x3e, 0x92, 0x93, + 0xd6, 0x48, 0x18, 0xab, 0x9d, 0x42, 0xb2, 0x76, 0xe2, 0x87, 0xef, 0x78, 0xd9, 0x1c, 0xf9, 0x61, + 0x04, 0xfe, 0x27, 0x20, 0xd2, 0x1b, 0x04, 0x76, 0xc9, 0xd5, 0x8a, 0x1e, 0x4c, 0x20, 0x49, 0xee, + 0x6f, 0xca, 0x53, 0x9b, 0x0b, 0x49, 0x5b, 0xaa, 0xf6, 0xc1, 0xf7, 0xbf, 0x7e, 0xd4, 0x3f, 0x4d, + 0x0f, 0xe9, 0xe7, 0x84, 0xf4, 0x52, 0xb0, 0x11, 0x56, 0xdd, 0x15, 0x3d, 0x7d, 0xdd, 0xa4, 0xb7, + 0x08, 0xec, 0xee, 0xdc, 0xc0, 0xe8, 0xe1, 0x74, 0x33, 0x29, 0x2b, 0x9e, 0x32, 0xd3, 0x8b, 0x28, + 0xe2, 0x3a, 0x2e, 0x70, 0xbd, 0x40, 0x8f, 0x75, 0xc3, 0x15, 0x4e, 0xe1, 0xfa, 0x7a, 0xc7, 0xfa, + 0xb8, 0x41, 0xbf, 0x23, 0x30, 0x96, 0x58, 0x8e, 0xa8, 0xd6, 0x0d, 0x41, 0x74, 0xe5, 0x53, 0xf4, + 0x9e, 0xe5, 0x11, 0xf6, 0x79, 0x01, 0xfb, 0x0c, 0x3d, 0xd5, 0x33, 0xec, 0xe5, 0xa6, 0x81, 0x4b, + 0xa2, 0xbe, 0x1e, 0x5b, 0x2f, 0x37, 0xe8, 0xd7, 0x04, 0x46, 0xe3, 0x3b, 0x0b, 0x9d, 0xed, 0x06, + 0x2a, 0xb2, 0x61, 0x29, 0x5a, 0xaf, 0xe2, 0xe8, 0xc2, 0x69, 0xe1, 0xc2, 0x09, 0x7a, 0x7c, 0x2b, + 0x2e, 0xc8, 0x95, 0x4d, 0x5f, 0x6f, 0xed, 0x72, 0x1b, 0xf4, 0x26, 0x81, 0x3d, 0x91, 0x55, 0x85, + 0x66, 0xe4, 0x3f, 0x6d, 0xdb, 0x51, 0x9e, 0xe9, 0x49, 0x16, 0x21, 0x1f, 0x13, 0x90, 0x9f, 0xa3, + 0x5a, 0x37, 0xc8, 0x55, 0xa9, 0x8e, 0x4d, 0x8b, 0xde, 0x21, 0xb0, 0x37, 0xba, 0x40, 0xd0, 0x0c, + 0xbb, 0xa9, 0xcb, 0x8d, 0xf2, 0x6c, 0x6f, 0xc2, 0x88, 0xf2, 0xa4, 0x40, 0xf9, 0x0a, 0x9d, 0xef, + 0x86, 0x32, 0x9c, 0xde, 0xf1, 0x00, 0x7d, 0xbd, 0xd5, 0x2f, 0x37, 0xe8, 0x37, 0x04, 0x46, 0x62, + 0x5b, 0x01, 0xcd, 0x80, 0x91, 0xbe, 0xf2, 0x28, 0xb3, 0x3d, 0x4a, 0x23, 0xea, 0x73, 0x02, 0xf5, + 0x69, 0xfa, 0x6a, 0x37, 0xd4, 0x26, 0x1e, 0x60, 0xc8, 0xf1, 0x9e, 0x07, 0xe5, 0x1c, 0x7b, 0xd3, + 0x36, 0xe8, 0x57, 0x04, 0x86, 0x3b, 0xe6, 0x40, 0x3a, 0x9d, 0x01, 0x26, 0xb1, 0x00, 0x28, 0x87, + 0x7b, 0x90, 0x44, 0xc8, 0x97, 0x04, 0xe4, 0xd7, 0xe8, 0xb9, 0xae, 0x90, 0x83, 0x0f, 0x7c, 0x46, + 0x3a, 0xa3, 0x9c, 0x0a, 0xfd, 0x27, 0x02, 0x4f, 0xa4, 0x0f, 0xc1, 0xf4, 0x68, 0x57, 0x6c, 0xc9, + 0x59, 0x5f, 0x79, 0x7e, 0x6b, 0x4a, 0xe8, 0xdb, 0xeb, 0xc2, 0xb7, 0x0b, 0xf4, 0xfc, 0x56, 0x7c, + 0xe3, 0xc1, 0x43, 0x1d, 0x4e, 0x71, 0xa9, 0xce, 0x7d, 0x4b, 0x60, 0x34, 0x3e, 0x45, 0x65, 0x35, + 0x9a, 0x8c, 0xd1, 0x3a, 0xab, 0xd1, 0x64, 0x0d, 0x67, 0xbd, 0xf7, 0xca, 0x36, 0x5e, 0x74, 0x27, + 0xd5, 0x85, 0xdb, 0x04, 0x86, 0x3b, 0xde, 0xf1, 0xac, 0xd2, 0x4a, 0x8e, 0x5f, 0x59, 0xa5, 0x95, + 0x32, 0x14, 0xa8, 0x67, 0x05, 0xe6, 0x12, 0x3d, 0xd1, 0x15, 0x73, 0x7b, 0x40, 0x49, 0x85, 0x5b, + 0x9a, 0xb9, 0xf7, 0xb0, 0x48, 0xee, 0x3f, 0x2c, 0x92, 0x5f, 0x1e, 0x16, 0xc9, 0x87, 0x8f, 0x8a, + 0x7d, 0xf7, 0x1f, 0x15, 0xfb, 0x7e, 0x7c, 0x54, 0xec, 0x7b, 0x6b, 0xf4, 0xbd, 0xf6, 0x31, 0x7e, + 0xb3, 0xce, 0xf8, 0xf2, 0x2e, 0xf1, 0x7f, 0xda, 0xa3, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x66, + 0x2c, 0x00, 0x3a, 0xc0, 0x16, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1108,6 +1426,12 @@ const _ = grpc.SupportPackageIsVersion4 type QueryClient interface { // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // EvidenceById queries a single evidence record by id. + EvidenceById(ctx context.Context, in *QueryEvidenceByIdRequest, opts ...grpc.CallOption) (*QueryEvidenceByIdResponse, error) + // EvidenceBySubject queries evidence records by subject address. + EvidenceBySubject(ctx context.Context, in *QueryEvidenceBySubjectRequest, opts ...grpc.CallOption) (*QueryEvidenceBySubjectResponse, error) + // EvidenceByAction queries evidence records by action id. + EvidenceByAction(ctx context.Context, in *QueryEvidenceByActionRequest, opts ...grpc.CallOption) (*QueryEvidenceByActionResponse, error) // CurrentWindow returns the current derived window boundaries at the current chain height. CurrentWindow(ctx context.Context, in *QueryCurrentWindowRequest, opts ...grpc.CallOption) (*QueryCurrentWindowResponse, error) // WindowSnapshot returns the persisted window snapshot for the given window_id. @@ -1140,6 +1464,33 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } +func (c *queryClient) EvidenceById(ctx context.Context, in *QueryEvidenceByIdRequest, opts ...grpc.CallOption) (*QueryEvidenceByIdResponse, error) { + out := new(QueryEvidenceByIdResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/EvidenceById", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) EvidenceBySubject(ctx context.Context, in *QueryEvidenceBySubjectRequest, opts ...grpc.CallOption) (*QueryEvidenceBySubjectResponse, error) { + out := new(QueryEvidenceBySubjectResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/EvidenceBySubject", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) EvidenceByAction(ctx context.Context, in *QueryEvidenceByActionRequest, opts ...grpc.CallOption) (*QueryEvidenceByActionResponse, error) { + out := new(QueryEvidenceByActionResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/EvidenceByAction", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) CurrentWindow(ctx context.Context, in *QueryCurrentWindowRequest, opts ...grpc.CallOption) (*QueryCurrentWindowResponse, error) { out := new(QueryCurrentWindowResponse) err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/CurrentWindow", in, out, opts...) @@ -1207,6 +1558,12 @@ func (c *queryClient) SelfReports(ctx context.Context, in *QuerySelfReportsReque type QueryServer interface { // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // EvidenceById queries a single evidence record by id. + EvidenceById(context.Context, *QueryEvidenceByIdRequest) (*QueryEvidenceByIdResponse, error) + // EvidenceBySubject queries evidence records by subject address. + EvidenceBySubject(context.Context, *QueryEvidenceBySubjectRequest) (*QueryEvidenceBySubjectResponse, error) + // EvidenceByAction queries evidence records by action id. + EvidenceByAction(context.Context, *QueryEvidenceByActionRequest) (*QueryEvidenceByActionResponse, error) // CurrentWindow returns the current derived window boundaries at the current chain height. CurrentWindow(context.Context, *QueryCurrentWindowRequest) (*QueryCurrentWindowResponse, error) // WindowSnapshot returns the persisted window snapshot for the given window_id. @@ -1229,6 +1586,15 @@ type UnimplementedQueryServer struct { func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } +func (*UnimplementedQueryServer) EvidenceById(ctx context.Context, req *QueryEvidenceByIdRequest) (*QueryEvidenceByIdResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EvidenceById not implemented") +} +func (*UnimplementedQueryServer) EvidenceBySubject(ctx context.Context, req *QueryEvidenceBySubjectRequest) (*QueryEvidenceBySubjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EvidenceBySubject not implemented") +} +func (*UnimplementedQueryServer) EvidenceByAction(ctx context.Context, req *QueryEvidenceByActionRequest) (*QueryEvidenceByActionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EvidenceByAction not implemented") +} func (*UnimplementedQueryServer) CurrentWindow(ctx context.Context, req *QueryCurrentWindowRequest) (*QueryCurrentWindowResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CurrentWindow not implemented") } @@ -1273,71 +1639,125 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf return interceptor(ctx, in, info, handler) } -func _Query_CurrentWindow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryCurrentWindowRequest) +func _Query_EvidenceById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEvidenceByIdRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).CurrentWindow(ctx, in) + return srv.(QueryServer).EvidenceById(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/CurrentWindow", + FullMethod: "/lumera.audit.v1.Query/EvidenceById", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CurrentWindow(ctx, req.(*QueryCurrentWindowRequest)) + return srv.(QueryServer).EvidenceById(ctx, req.(*QueryEvidenceByIdRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_WindowSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryWindowSnapshotRequest) +func _Query_EvidenceBySubject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEvidenceBySubjectRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).WindowSnapshot(ctx, in) + return srv.(QueryServer).EvidenceBySubject(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/WindowSnapshot", + FullMethod: "/lumera.audit.v1.Query/EvidenceBySubject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).WindowSnapshot(ctx, req.(*QueryWindowSnapshotRequest)) + return srv.(QueryServer).EvidenceBySubject(ctx, req.(*QueryEvidenceBySubjectRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_AssignedTargets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAssignedTargetsRequest) +func _Query_EvidenceByAction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEvidenceByActionRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).AssignedTargets(ctx, in) + return srv.(QueryServer).EvidenceByAction(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/AssignedTargets", + FullMethod: "/lumera.audit.v1.Query/EvidenceByAction", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AssignedTargets(ctx, req.(*QueryAssignedTargetsRequest)) + return srv.(QueryServer).EvidenceByAction(ctx, req.(*QueryEvidenceByActionRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_AuditReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAuditReportRequest) +func _Query_CurrentWindow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCurrentWindowRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).AuditReport(ctx, in) + return srv.(QueryServer).CurrentWindow(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/AuditReport", + FullMethod: "/lumera.audit.v1.Query/CurrentWindow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CurrentWindow(ctx, req.(*QueryCurrentWindowRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_WindowSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryWindowSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).WindowSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/WindowSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).WindowSnapshot(ctx, req.(*QueryWindowSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AssignedTargets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAssignedTargetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AssignedTargets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/AssignedTargets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AssignedTargets(ctx, req.(*QueryAssignedTargetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AuditReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAuditReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AuditReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/AuditReport", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).AuditReport(ctx, req.(*QueryAuditReportRequest)) @@ -1408,6 +1828,18 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "Params", Handler: _Query_Params_Handler, }, + { + MethodName: "EvidenceById", + Handler: _Query_EvidenceById_Handler, + }, + { + MethodName: "EvidenceBySubject", + Handler: _Query_EvidenceBySubject_Handler, + }, + { + MethodName: "EvidenceByAction", + Handler: _Query_EvidenceByAction_Handler, + }, { MethodName: "CurrentWindow", Handler: _Query_CurrentWindow_Handler, @@ -1497,7 +1929,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryCurrentWindowRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryEvidenceByIdRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1507,20 +1939,25 @@ func (m *QueryCurrentWindowRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryCurrentWindowRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEvidenceByIdRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryCurrentWindowRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEvidenceByIdRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if m.EvidenceId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EvidenceId)) + i-- + dAtA[i] = 0x8 + } return len(dAtA) - i, nil } -func (m *QueryCurrentWindowResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryEvidenceByIdResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1530,35 +1967,30 @@ func (m *QueryCurrentWindowResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryCurrentWindowResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEvidenceByIdResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryCurrentWindowResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEvidenceByIdResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.WindowEndHeight != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowEndHeight)) - i-- - dAtA[i] = 0x18 - } - if m.WindowStartHeight != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowStartHeight)) - i-- - dAtA[i] = 0x10 - } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) - i-- - dAtA[i] = 0x8 + { + size, err := m.Evidence.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 *QueryWindowSnapshotRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryEvidenceBySubjectRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1568,25 +2000,39 @@ func (m *QueryWindowSnapshotRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryWindowSnapshotRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEvidenceBySubjectRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryWindowSnapshotRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEvidenceBySubjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x8 + dAtA[i] = 0x12 + } + if len(m.SubjectAddress) > 0 { + i -= len(m.SubjectAddress) + copy(dAtA[i:], m.SubjectAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SubjectAddress))) + i-- + dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryWindowSnapshotResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryEvidenceBySubjectResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1596,30 +2042,46 @@ func (m *QueryWindowSnapshotResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryWindowSnapshotResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEvidenceBySubjectResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryWindowSnapshotResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEvidenceBySubjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Snapshot.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Evidence) > 0 { + for iNdEx := len(m.Evidence) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Evidence[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryAssignedTargetsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryEvidenceByActionRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1629,42 +2091,39 @@ func (m *QueryAssignedTargetsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAssignedTargetsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEvidenceByActionRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAssignedTargetsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEvidenceByActionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.FilterByWindowId { - i-- - if m.FilterByWindowId { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x18 - } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) - i-- - dAtA[i] = 0x10 + dAtA[i] = 0x12 } - if len(m.SupernodeAccount) > 0 { - i -= len(m.SupernodeAccount) - copy(dAtA[i:], m.SupernodeAccount) - i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + if len(m.ActionId) > 0 { + i -= len(m.ActionId) + copy(dAtA[i:], m.ActionId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ActionId))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAssignedTargetsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryEvidenceByActionResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1674,57 +2133,46 @@ func (m *QueryAssignedTargetsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAssignedTargetsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEvidenceByActionResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAssignedTargetsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEvidenceByActionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.TargetSupernodeAccounts) > 0 { - for iNdEx := len(m.TargetSupernodeAccounts) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.TargetSupernodeAccounts[iNdEx]) - copy(dAtA[i:], m.TargetSupernodeAccounts[iNdEx]) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TargetSupernodeAccounts[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.RequiredOpenPorts) > 0 { - dAtA4 := make([]byte, len(m.RequiredOpenPorts)*10) - var j3 int - for _, num := range m.RequiredOpenPorts { - for num >= 1<<7 { - dAtA4[j3] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j3++ + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - dAtA4[j3] = uint8(num) - j3++ + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } - i -= j3 - copy(dAtA[i:], dAtA4[:j3]) - i = encodeVarintQuery(dAtA, i, uint64(j3)) - i-- - dAtA[i] = 0x1a - } - if m.WindowStartHeight != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowStartHeight)) i-- - dAtA[i] = 0x10 + dAtA[i] = 0x12 } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) - i-- - dAtA[i] = 0x8 + if len(m.Evidence) > 0 { + for iNdEx := len(m.Evidence) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Evidence[iNdEx].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 *QueryAuditReportRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryCurrentWindowRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1734,32 +2182,20 @@ func (m *QueryAuditReportRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAuditReportRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryCurrentWindowRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryCurrentWindowRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.SupernodeAccount) > 0 { - i -= len(m.SupernodeAccount) - copy(dAtA[i:], m.SupernodeAccount) - i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) - i-- - dAtA[i] = 0x12 - } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) - i-- - dAtA[i] = 0x8 - } return len(dAtA) - i, nil } -func (m *QueryAuditReportResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryCurrentWindowResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1769,30 +2205,269 @@ func (m *QueryAuditReportResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAuditReportResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryCurrentWindowResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryCurrentWindowResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Report.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if m.WindowEndHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowEndHeight)) + i-- + dAtA[i] = 0x18 } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryAuditReportsByReporterRequest) Marshal() (dAtA []byte, err error) { + if m.WindowStartHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowStartHeight)) + i-- + dAtA[i] = 0x10 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryWindowSnapshotRequest) 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 *QueryWindowSnapshotRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryWindowSnapshotRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryWindowSnapshotResponse) 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 *QueryWindowSnapshotResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryWindowSnapshotResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Snapshot.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 *QueryAssignedTargetsRequest) 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 *QueryAssignedTargetsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAssignedTargetsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.FilterByWindowId { + i-- + if m.FilterByWindowId { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x10 + } + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAssignedTargetsResponse) 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 *QueryAssignedTargetsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAssignedTargetsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TargetSupernodeAccounts) > 0 { + for iNdEx := len(m.TargetSupernodeAccounts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TargetSupernodeAccounts[iNdEx]) + copy(dAtA[i:], m.TargetSupernodeAccounts[iNdEx]) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TargetSupernodeAccounts[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if len(m.RequiredOpenPorts) > 0 { + dAtA9 := make([]byte, len(m.RequiredOpenPorts)*10) + var j8 int + for _, num := range m.RequiredOpenPorts { + for num >= 1<<7 { + dAtA9[j8] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j8++ + } + dAtA9[j8] = uint8(num) + j8++ + } + i -= j8 + copy(dAtA[i:], dAtA9[:j8]) + i = encodeVarintQuery(dAtA, i, uint64(j8)) + i-- + dAtA[i] = 0x1a + } + if m.WindowStartHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowStartHeight)) + i-- + dAtA[i] = 0x10 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditReportRequest) 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 *QueryAuditReportRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SupernodeAccount) > 0 { + i -= len(m.SupernodeAccount) + copy(dAtA[i:], m.SupernodeAccount) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SupernodeAccount))) + i-- + dAtA[i] = 0x12 + } + if m.WindowId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryAuditReportResponse) 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 *QueryAuditReportResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Report.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 *QueryAuditReportsByReporterRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1961,20 +2636,20 @@ func (m *SupernodeReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if len(m.PortStates) > 0 { - dAtA10 := make([]byte, len(m.PortStates)*10) - var j9 int + dAtA15 := make([]byte, len(m.PortStates)*10) + var j14 int for _, num := range m.PortStates { for num >= 1<<7 { - dAtA10[j9] = uint8(uint64(num)&0x7f | 0x80) + dAtA15[j14] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j9++ + j14++ } - dAtA10[j9] = uint8(num) - j9++ + dAtA15[j14] = uint8(num) + j14++ } - i -= j9 - copy(dAtA[i:], dAtA10[:j9]) - i = encodeVarintQuery(dAtA, i, uint64(j9)) + i -= j14 + copy(dAtA[i:], dAtA15[:j14]) + i = encodeVarintQuery(dAtA, i, uint64(j14)) i-- dAtA[i] = 0x22 } @@ -2227,42 +2902,137 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryCurrentWindowRequest) Size() (n int) { +func (m *QueryEvidenceByIdRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l + if m.EvidenceId != 0 { + n += 1 + sovQuery(uint64(m.EvidenceId)) + } return n } -func (m *QueryCurrentWindowResponse) Size() (n int) { +func (m *QueryEvidenceByIdResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) - } - if m.WindowStartHeight != 0 { - n += 1 + sovQuery(uint64(m.WindowStartHeight)) - } - if m.WindowEndHeight != 0 { - n += 1 + sovQuery(uint64(m.WindowEndHeight)) - } + l = m.Evidence.Size() + n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryWindowSnapshotRequest) Size() (n int) { +func (m *QueryEvidenceBySubjectRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) - } + l = len(m.SubjectAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryEvidenceBySubjectResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Evidence) > 0 { + for _, e := range m.Evidence { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryEvidenceByActionRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ActionId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryEvidenceByActionResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Evidence) > 0 { + for _, e := range m.Evidence { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryCurrentWindowRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryCurrentWindowResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } + if m.WindowStartHeight != 0 { + n += 1 + sovQuery(uint64(m.WindowStartHeight)) + } + if m.WindowEndHeight != 0 { + n += 1 + sovQuery(uint64(m.WindowEndHeight)) + } + return n +} + +func (m *QueryWindowSnapshotRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.WindowId != 0 { + n += 1 + sovQuery(uint64(m.WindowId)) + } return n } @@ -2653,6 +3423,634 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryEvidenceByIdRequest) 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: QueryEvidenceByIdRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEvidenceByIdRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EvidenceId", wireType) + } + m.EvidenceId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EvidenceId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *QueryEvidenceByIdResponse) 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: QueryEvidenceByIdResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEvidenceByIdResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Evidence", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Evidence.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryEvidenceBySubjectRequest) 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: QueryEvidenceBySubjectRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEvidenceBySubjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubjectAddress", 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.SubjectAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryEvidenceBySubjectResponse) 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: QueryEvidenceBySubjectResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEvidenceBySubjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Evidence", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Evidence = append(m.Evidence, Evidence{}) + if err := m.Evidence[len(m.Evidence)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryEvidenceByActionRequest) 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: QueryEvidenceByActionRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEvidenceByActionRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionId", 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.ActionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryEvidenceByActionResponse) 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: QueryEvidenceByActionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEvidenceByActionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Evidence", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Evidence = append(m.Evidence, Evidence{}) + if err := m.Evidence[len(m.Evidence)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryCurrentWindowRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/audit/v1/types/query.pb.gw.go b/x/audit/v1/types/query.pb.gw.go index 5e66967..ad0f5fe 100644 --- a/x/audit/v1/types/query.pb.gw.go +++ b/x/audit/v1/types/query.pb.gw.go @@ -51,6 +51,204 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } +func request_Query_EvidenceById_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEvidenceByIdRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["evidence_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "evidence_id") + } + + protoReq.EvidenceId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "evidence_id", err) + } + + msg, err := client.EvidenceById(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EvidenceById_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEvidenceByIdRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["evidence_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "evidence_id") + } + + protoReq.EvidenceId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "evidence_id", err) + } + + msg, err := server.EvidenceById(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_EvidenceBySubject_0 = &utilities.DoubleArray{Encoding: map[string]int{"subject_address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_EvidenceBySubject_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEvidenceBySubjectRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["subject_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "subject_address") + } + + protoReq.SubjectAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "subject_address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EvidenceBySubject_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EvidenceBySubject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EvidenceBySubject_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEvidenceBySubjectRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["subject_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "subject_address") + } + + protoReq.SubjectAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "subject_address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EvidenceBySubject_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EvidenceBySubject(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_EvidenceByAction_0 = &utilities.DoubleArray{Encoding: map[string]int{"action_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_EvidenceByAction_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEvidenceByActionRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["action_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "action_id") + } + + protoReq.ActionId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "action_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EvidenceByAction_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EvidenceByAction(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EvidenceByAction_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEvidenceByActionRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["action_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "action_id") + } + + protoReq.ActionId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "action_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EvidenceByAction_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EvidenceByAction(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_CurrentWindow_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryCurrentWindowRequest var metadata runtime.ServerMetadata @@ -516,6 +714,75 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_EvidenceById_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_EvidenceById_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_EvidenceById_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EvidenceBySubject_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_EvidenceBySubject_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_EvidenceBySubject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EvidenceByAction_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_EvidenceByAction_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_EvidenceByAction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_CurrentWindow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -738,6 +1005,66 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_EvidenceById_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_EvidenceById_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_EvidenceById_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EvidenceBySubject_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_EvidenceBySubject_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_EvidenceBySubject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EvidenceByAction_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_EvidenceByAction_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_EvidenceByAction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_CurrentWindow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -884,6 +1211,12 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EvidenceById_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "evidence", "evidence_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EvidenceBySubject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "evidence", "by_subject", "subject_address"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EvidenceByAction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "evidence", "by_action", "action_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_CurrentWindow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "current_window"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_WindowSnapshot_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "window_snapshot", "window_id"}, "", runtime.AssumeColonVerbOpt(false))) @@ -902,6 +1235,12 @@ var ( var ( forward_Query_Params_0 = runtime.ForwardResponseMessage + forward_Query_EvidenceById_0 = runtime.ForwardResponseMessage + + forward_Query_EvidenceBySubject_0 = runtime.ForwardResponseMessage + + forward_Query_EvidenceByAction_0 = runtime.ForwardResponseMessage + forward_Query_CurrentWindow_0 = runtime.ForwardResponseMessage forward_Query_WindowSnapshot_0 = runtime.ForwardResponseMessage diff --git a/x/audit/v1/types/tx.pb.go b/x/audit/v1/types/tx.pb.go index 13bc77d..ae2ee61 100644 --- a/x/audit/v1/types/tx.pb.go +++ b/x/audit/v1/types/tx.pb.go @@ -223,50 +223,184 @@ func (m *MsgSubmitAuditReportResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSubmitAuditReportResponse proto.InternalMessageInfo +type MsgSubmitEvidence struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + SubjectAddress string `protobuf:"bytes,2,opt,name=subject_address,json=subjectAddress,proto3" json:"subject_address,omitempty"` + EvidenceType EvidenceType `protobuf:"varint,3,opt,name=evidence_type,json=evidenceType,proto3,enum=lumera.audit.v1.EvidenceType" json:"evidence_type,omitempty"` + ActionId string `protobuf:"bytes,4,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"` + // metadata is JSON for the type-specific Evidence metadata message. + // The chain stores protobuf-binary bytes derived from this JSON. + Metadata string `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (m *MsgSubmitEvidence) Reset() { *m = MsgSubmitEvidence{} } +func (m *MsgSubmitEvidence) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitEvidence) ProtoMessage() {} +func (*MsgSubmitEvidence) Descriptor() ([]byte, []int) { + return fileDescriptor_4b5ba410ad359f63, []int{4} +} +func (m *MsgSubmitEvidence) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSubmitEvidence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSubmitEvidence.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 *MsgSubmitEvidence) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitEvidence.Merge(m, src) +} +func (m *MsgSubmitEvidence) XXX_Size() int { + return m.Size() +} +func (m *MsgSubmitEvidence) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitEvidence.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSubmitEvidence proto.InternalMessageInfo + +func (m *MsgSubmitEvidence) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgSubmitEvidence) GetSubjectAddress() string { + if m != nil { + return m.SubjectAddress + } + return "" +} + +func (m *MsgSubmitEvidence) GetEvidenceType() EvidenceType { + if m != nil { + return m.EvidenceType + } + return EvidenceType_EVIDENCE_TYPE_UNSPECIFIED +} + +func (m *MsgSubmitEvidence) GetActionId() string { + if m != nil { + return m.ActionId + } + return "" +} + +func (m *MsgSubmitEvidence) GetMetadata() string { + if m != nil { + return m.Metadata + } + return "" +} + +type MsgSubmitEvidenceResponse struct { + EvidenceId uint64 `protobuf:"varint,1,opt,name=evidence_id,json=evidenceId,proto3" json:"evidence_id,omitempty"` +} + +func (m *MsgSubmitEvidenceResponse) Reset() { *m = MsgSubmitEvidenceResponse{} } +func (m *MsgSubmitEvidenceResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitEvidenceResponse) ProtoMessage() {} +func (*MsgSubmitEvidenceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4b5ba410ad359f63, []int{5} +} +func (m *MsgSubmitEvidenceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSubmitEvidenceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSubmitEvidenceResponse.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 *MsgSubmitEvidenceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitEvidenceResponse.Merge(m, src) +} +func (m *MsgSubmitEvidenceResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSubmitEvidenceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitEvidenceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSubmitEvidenceResponse proto.InternalMessageInfo + +func (m *MsgSubmitEvidenceResponse) GetEvidenceId() uint64 { + if m != nil { + return m.EvidenceId + } + return 0 +} + func init() { proto.RegisterType((*MsgUpdateParams)(nil), "lumera.audit.v1.MsgUpdateParams") proto.RegisterType((*MsgUpdateParamsResponse)(nil), "lumera.audit.v1.MsgUpdateParamsResponse") proto.RegisterType((*MsgSubmitAuditReport)(nil), "lumera.audit.v1.MsgSubmitAuditReport") proto.RegisterType((*MsgSubmitAuditReportResponse)(nil), "lumera.audit.v1.MsgSubmitAuditReportResponse") + proto.RegisterType((*MsgSubmitEvidence)(nil), "lumera.audit.v1.MsgSubmitEvidence") + proto.RegisterType((*MsgSubmitEvidenceResponse)(nil), "lumera.audit.v1.MsgSubmitEvidenceResponse") } func init() { proto.RegisterFile("lumera/audit/v1/tx.proto", fileDescriptor_4b5ba410ad359f63) } var fileDescriptor_4b5ba410ad359f63 = []byte{ - // 524 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x31, 0x6f, 0xda, 0x40, - 0x14, 0xc6, 0x09, 0x8d, 0xca, 0x51, 0x29, 0x60, 0xa1, 0xe2, 0x98, 0xc8, 0xa5, 0x48, 0x91, 0x10, - 0x12, 0xb6, 0x42, 0xab, 0x0e, 0x6c, 0xb0, 0xb4, 0x1d, 0x50, 0x23, 0xa3, 0x2e, 0x59, 0x2c, 0x63, - 0x5f, 0x5c, 0x4b, 0xd8, 0x67, 0xdd, 0x3b, 0x93, 0x64, 0xab, 0x3a, 0x76, 0xea, 0xcf, 0xe8, 0x88, - 0xaa, 0x6c, 0xfd, 0x03, 0x19, 0xa3, 0x74, 0xe9, 0x54, 0x55, 0x30, 0xf0, 0x37, 0x2a, 0xdf, 0x99, - 0x50, 0x6c, 0xa4, 0x76, 0x41, 0xc7, 0xfb, 0xde, 0xf7, 0xbe, 0xef, 0x7d, 0x77, 0x46, 0xca, 0x34, - 0x0e, 0x30, 0xb5, 0x0d, 0x3b, 0x76, 0x7d, 0x66, 0xcc, 0x4e, 0x0d, 0x76, 0xa5, 0x47, 0x94, 0x30, - 0x22, 0x1f, 0x0a, 0x44, 0xe7, 0x88, 0x3e, 0x3b, 0x55, 0xab, 0x76, 0xe0, 0x87, 0xc4, 0xe0, 0xbf, - 0xa2, 0x47, 0xad, 0x79, 0xc4, 0x23, 0xfc, 0x68, 0x24, 0xa7, 0xb4, 0x5a, 0x77, 0x08, 0x04, 0x04, - 0x8c, 0x00, 0xbc, 0x64, 0x62, 0x00, 0x5e, 0x0a, 0x1c, 0x09, 0xc0, 0x12, 0x0c, 0xf1, 0x27, 0x85, - 0x1a, 0x59, 0x1f, 0x42, 0x56, 0x80, 0xc7, 0x59, 0x30, 0xb2, 0xa9, 0x1d, 0xa4, 0xd4, 0xd6, 0x77, - 0x09, 0x1d, 0x8e, 0xc0, 0x7b, 0x1f, 0xb9, 0x36, 0xc3, 0x67, 0x1c, 0x91, 0x5f, 0xa1, 0x92, 0x1d, - 0xb3, 0x0f, 0x84, 0xfa, 0xec, 0x5a, 0x91, 0x9a, 0x52, 0xbb, 0x34, 0x54, 0xee, 0x6f, 0xba, 0xb5, - 0x54, 0x73, 0xe0, 0xba, 0x14, 0x03, 0x8c, 0x19, 0xf5, 0x43, 0xcf, 0xdc, 0xb4, 0xca, 0x7d, 0x74, - 0x20, 0x66, 0x2b, 0x7b, 0x4d, 0xa9, 0x5d, 0xee, 0xd5, 0xf5, 0x4c, 0x0a, 0xba, 0x10, 0x18, 0x96, - 0x6e, 0x7f, 0x3d, 0x2b, 0x7c, 0x5d, 0xcd, 0x3b, 0x92, 0x99, 0x32, 0xfa, 0x2f, 0x3f, 0xad, 0xe6, - 0x9d, 0xcd, 0xac, 0xcf, 0xab, 0x79, 0xe7, 0x79, 0x6a, 0xfc, 0x6a, 0x63, 0x3d, 0xe3, 0xb4, 0x75, - 0x84, 0xea, 0x99, 0x92, 0x89, 0x21, 0x22, 0x21, 0xe0, 0xd6, 0xb7, 0x3d, 0x54, 0x1b, 0x81, 0x37, - 0x8e, 0x27, 0x81, 0xcf, 0x06, 0xc9, 0x00, 0x13, 0x47, 0x84, 0x32, 0xf9, 0x0d, 0xaa, 0x42, 0x1c, - 0x61, 0x1a, 0x12, 0x17, 0x5b, 0xb6, 0xe3, 0x90, 0x38, 0x64, 0xe9, 0x96, 0x8d, 0xfb, 0x9b, 0x6e, - 0x7d, 0xbd, 0xa5, 0xe3, 0x6c, 0x2f, 0x5a, 0x79, 0x60, 0x0d, 0x04, 0x49, 0x6e, 0xa0, 0xd2, 0xa5, - 0x1f, 0xba, 0xe4, 0xd2, 0xf2, 0x5d, 0xbe, 0x72, 0xd1, 0x7c, 0x2c, 0x0a, 0x6f, 0x5d, 0xf9, 0x35, - 0x2a, 0x03, 0x9e, 0x5e, 0x58, 0x94, 0xab, 0x2a, 0xfb, 0x3c, 0x91, 0x66, 0x2e, 0x11, 0xee, 0x6c, - 0x8c, 0xa7, 0x17, 0xc2, 0xdd, 0xb0, 0x98, 0x44, 0x63, 0x22, 0x78, 0xa8, 0xc8, 0x26, 0xaa, 0x46, - 0x18, 0x53, 0x8b, 0x4c, 0x00, 0xd3, 0x99, 0xcd, 0x7c, 0x12, 0x82, 0x52, 0x6c, 0xee, 0xb7, 0xcb, - 0xbd, 0x93, 0xdd, 0xe3, 0xce, 0x30, 0xa6, 0xef, 0x36, 0xdd, 0x66, 0x25, 0xda, 0x2e, 0x40, 0xff, - 0x69, 0x92, 0x76, 0x3e, 0x86, 0x96, 0x86, 0x8e, 0x77, 0x65, 0xb6, 0x0e, 0xb5, 0xf7, 0x43, 0x42, - 0xfb, 0x23, 0xf0, 0xe4, 0x73, 0xf4, 0x64, 0xeb, 0xc5, 0xe4, 0xf7, 0xca, 0x5c, 0x8b, 0xda, 0xfe, - 0x57, 0xc7, 0x5a, 0x43, 0xf6, 0x51, 0x35, 0x7f, 0x69, 0x27, 0xbb, 0xe8, 0xb9, 0x36, 0xb5, 0xfb, - 0x5f, 0x6d, 0x6b, 0x29, 0xf5, 0xd1, 0xc7, 0xe4, 0x0d, 0x0e, 0x3b, 0xb7, 0x0b, 0x4d, 0xba, 0x5b, - 0x68, 0xd2, 0xef, 0x85, 0x26, 0x7d, 0x59, 0x6a, 0x85, 0xbb, 0xa5, 0x56, 0xf8, 0xb9, 0xd4, 0x0a, - 0xe7, 0x95, 0xbf, 0xde, 0x1e, 0xbb, 0x8e, 0x30, 0x4c, 0x0e, 0xf8, 0x67, 0xf3, 0xe2, 0x4f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xe5, 0x27, 0xd3, 0xc2, 0xfb, 0x03, 0x00, 0x00, + // 679 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x31, 0x4f, 0xdb, 0x40, + 0x14, 0x8e, 0x43, 0xa0, 0xe4, 0x42, 0x81, 0x9c, 0x50, 0x63, 0x0c, 0x35, 0x69, 0x24, 0xa4, 0x28, + 0x12, 0x89, 0x48, 0xab, 0x0e, 0x51, 0x97, 0x44, 0xaa, 0x5a, 0x06, 0x54, 0x64, 0xda, 0x85, 0xc5, + 0xbd, 0xf8, 0x0e, 0xd7, 0x15, 0xf6, 0x59, 0x77, 0xe7, 0x00, 0x5b, 0xd5, 0xb1, 0x53, 0x97, 0xfe, + 0x87, 0x8e, 0xa8, 0xa2, 0x53, 0xff, 0x00, 0x23, 0x62, 0xea, 0x54, 0x55, 0x30, 0xf0, 0x37, 0x2a, + 0xfb, 0x6c, 0x07, 0x6c, 0xda, 0x74, 0xb1, 0x7c, 0xef, 0xfb, 0xde, 0x7b, 0xdf, 0xfb, 0xfc, 0x7c, + 0x40, 0x3d, 0x08, 0x5c, 0xc2, 0x50, 0x07, 0x05, 0xd8, 0x11, 0x9d, 0xd1, 0x66, 0x47, 0x1c, 0xb5, + 0x7d, 0x46, 0x05, 0x85, 0x0b, 0x12, 0x69, 0x47, 0x48, 0x7b, 0xb4, 0xa9, 0x55, 0x91, 0xeb, 0x78, + 0xb4, 0x13, 0x3d, 0x25, 0x47, 0x5b, 0xb2, 0xa9, 0x4d, 0xa3, 0xd7, 0x4e, 0xf8, 0x16, 0x47, 0x6b, + 0x16, 0xe5, 0x2e, 0xe5, 0x1d, 0x97, 0xdb, 0x61, 0x45, 0x97, 0xdb, 0x31, 0xb0, 0x2c, 0x01, 0x53, + 0x66, 0xc8, 0x43, 0x0c, 0xad, 0x64, 0x75, 0xc8, 0xb6, 0x12, 0x5c, 0xcd, 0x82, 0x3e, 0x62, 0xc8, + 0x4d, 0x52, 0xf5, 0x2c, 0x4a, 0x46, 0x0e, 0x26, 0x9e, 0x45, 0x24, 0xde, 0xf8, 0xa1, 0x80, 0x85, + 0x6d, 0x6e, 0xbf, 0xf1, 0x31, 0x12, 0x64, 0x27, 0xca, 0x84, 0x4f, 0x41, 0x19, 0x05, 0xe2, 0x1d, + 0x65, 0x8e, 0x38, 0x56, 0x95, 0xba, 0xd2, 0x2c, 0x0f, 0xd4, 0x8b, 0xd3, 0x8d, 0xa5, 0x58, 0x53, + 0x1f, 0x63, 0x46, 0x38, 0xdf, 0x15, 0xcc, 0xf1, 0x6c, 0x63, 0x4c, 0x85, 0x3d, 0x30, 0x23, 0x7b, + 0xab, 0xc5, 0xba, 0xd2, 0xac, 0x74, 0x6b, 0xed, 0x8c, 0x4b, 0x6d, 0xd9, 0x60, 0x50, 0x3e, 0xfb, + 0xb5, 0x56, 0xf8, 0x7a, 0x7d, 0xd2, 0x52, 0x8c, 0x38, 0xa3, 0xf7, 0xe4, 0xe3, 0xf5, 0x49, 0x6b, + 0x5c, 0xeb, 0xd3, 0xf5, 0x49, 0xeb, 0x51, 0x2c, 0xfd, 0x68, 0x2c, 0x3e, 0xa3, 0xb4, 0xb1, 0x0c, + 0x6a, 0x99, 0x90, 0x41, 0xb8, 0x4f, 0x3d, 0x4e, 0x1a, 0xdf, 0x8a, 0x60, 0x69, 0x9b, 0xdb, 0xbb, + 0xc1, 0xd0, 0x75, 0x44, 0x3f, 0x2c, 0x60, 0x10, 0x9f, 0x32, 0x01, 0x5f, 0x82, 0x2a, 0x0f, 0x7c, + 0xc2, 0x3c, 0x8a, 0x89, 0x89, 0x2c, 0x8b, 0x06, 0x9e, 0x88, 0xa7, 0x5c, 0xb9, 0x38, 0xdd, 0xa8, + 0x25, 0x53, 0x5a, 0xd6, 0xed, 0x41, 0x17, 0xd3, 0xac, 0xbe, 0x4c, 0x82, 0x2b, 0xa0, 0x7c, 0xe8, + 0x78, 0x98, 0x1e, 0x9a, 0x0e, 0x8e, 0x46, 0x2e, 0x19, 0xb3, 0x32, 0xb0, 0x85, 0xe1, 0x0b, 0x50, + 0xe1, 0xe4, 0x60, 0xdf, 0x64, 0x51, 0x57, 0x75, 0x2a, 0x72, 0xa4, 0x9e, 0x73, 0x24, 0x52, 0xb6, + 0x4b, 0x0e, 0xf6, 0xa5, 0xba, 0x41, 0x29, 0xb4, 0xc6, 0x00, 0x3c, 0x8d, 0x40, 0x03, 0x54, 0x7d, + 0x42, 0x98, 0x49, 0x87, 0x9c, 0xb0, 0x11, 0x12, 0x0e, 0xf5, 0xb8, 0x5a, 0xaa, 0x4f, 0x35, 0x2b, + 0xdd, 0xf5, 0xbb, 0xcb, 0xed, 0x10, 0xc2, 0x5e, 0x8d, 0xd9, 0xc6, 0xa2, 0x7f, 0x3b, 0xc0, 0x7b, + 0x0f, 0x42, 0xb7, 0xf3, 0x36, 0x34, 0x74, 0xb0, 0x7a, 0x97, 0x67, 0xa9, 0xa9, 0x5f, 0x8a, 0xa0, + 0x9a, 0x12, 0x9e, 0xc7, 0x9b, 0x04, 0xbb, 0xe0, 0x9e, 0xc5, 0x08, 0x12, 0x94, 0x4d, 0xdc, 0x96, + 0x84, 0x08, 0xfb, 0x60, 0x81, 0x07, 0xc3, 0xf7, 0xc4, 0x12, 0x26, 0x92, 0x8c, 0xc8, 0xc1, 0x7f, + 0xe5, 0xce, 0xc7, 0x09, 0x71, 0x14, 0x0e, 0xc0, 0xfd, 0x64, 0x99, 0x4d, 0x71, 0xec, 0x93, 0xc8, + 0xe3, 0xf9, 0xee, 0xc3, 0x9c, 0x29, 0x89, 0xd0, 0xd7, 0xc7, 0x3e, 0x31, 0xe6, 0xc8, 0x8d, 0x53, + 0xf8, 0x09, 0x91, 0x15, 0x7a, 0x12, 0x7e, 0xc2, 0x52, 0x28, 0xc0, 0x98, 0x95, 0x81, 0x2d, 0x0c, + 0x35, 0x30, 0xeb, 0x12, 0x81, 0x30, 0x12, 0x48, 0x9d, 0x96, 0x58, 0x72, 0xee, 0xcd, 0x85, 0x0e, + 0x26, 0xd3, 0x34, 0x9e, 0x81, 0xe5, 0x9c, 0x2d, 0x89, 0x69, 0x70, 0x0d, 0x54, 0x52, 0x9d, 0x0e, + 0x8e, 0x2c, 0x2a, 0x19, 0x20, 0x09, 0x6d, 0xe1, 0xee, 0xf7, 0x22, 0x98, 0xda, 0xe6, 0x36, 0xdc, + 0x03, 0x73, 0xb7, 0xfe, 0xc3, 0xfc, 0xb6, 0x64, 0x96, 0x5d, 0x6b, 0x4e, 0x62, 0xa4, 0x22, 0x1c, + 0x50, 0xcd, 0xff, 0x0a, 0xeb, 0x77, 0xa5, 0xe7, 0x68, 0xda, 0xc6, 0x7f, 0xd1, 0xd2, 0x56, 0x6f, + 0xc1, 0x7c, 0x66, 0x41, 0x1a, 0x7f, 0x2f, 0x90, 0x70, 0xb4, 0xd6, 0x64, 0x4e, 0xd2, 0x41, 0x9b, + 0xfe, 0x10, 0xde, 0x1d, 0x83, 0xd6, 0xd9, 0xa5, 0xae, 0x9c, 0x5f, 0xea, 0xca, 0xef, 0x4b, 0x5d, + 0xf9, 0x7c, 0xa5, 0x17, 0xce, 0xaf, 0xf4, 0xc2, 0xcf, 0x2b, 0xbd, 0xb0, 0xb7, 0x78, 0xe3, 0xce, + 0x08, 0x57, 0x83, 0x0f, 0x67, 0xa2, 0xeb, 0xee, 0xf1, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3d, + 0xc0, 0x74, 0xac, 0xd3, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -285,6 +419,8 @@ type MsgClient interface { // parameters. The authority defaults to the x/gov module account. UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) SubmitAuditReport(ctx context.Context, in *MsgSubmitAuditReport, opts ...grpc.CallOption) (*MsgSubmitAuditReportResponse, error) + // SubmitEvidence defines the SubmitEvidence RPC. + SubmitEvidence(ctx context.Context, in *MsgSubmitEvidence, opts ...grpc.CallOption) (*MsgSubmitEvidenceResponse, error) } type msgClient struct { @@ -313,12 +449,23 @@ func (c *msgClient) SubmitAuditReport(ctx context.Context, in *MsgSubmitAuditRep return out, nil } +func (c *msgClient) SubmitEvidence(ctx context.Context, in *MsgSubmitEvidence, opts ...grpc.CallOption) (*MsgSubmitEvidenceResponse, error) { + out := new(MsgSubmitEvidenceResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Msg/SubmitEvidence", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // UpdateParams defines a (governance) operation for updating the module // parameters. The authority defaults to the x/gov module account. UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) SubmitAuditReport(context.Context, *MsgSubmitAuditReport) (*MsgSubmitAuditReportResponse, error) + // SubmitEvidence defines the SubmitEvidence RPC. + SubmitEvidence(context.Context, *MsgSubmitEvidence) (*MsgSubmitEvidenceResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -331,6 +478,9 @@ func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateP func (*UnimplementedMsgServer) SubmitAuditReport(ctx context.Context, req *MsgSubmitAuditReport) (*MsgSubmitAuditReportResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitAuditReport not implemented") } +func (*UnimplementedMsgServer) SubmitEvidence(ctx context.Context, req *MsgSubmitEvidence) (*MsgSubmitEvidenceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SubmitEvidence not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -372,6 +522,24 @@ func _Msg_SubmitAuditReport_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Msg_SubmitEvidence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSubmitEvidence) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SubmitEvidence(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Msg/SubmitEvidence", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SubmitEvidence(ctx, req.(*MsgSubmitEvidence)) + } + return interceptor(ctx, in, info, handler) +} + var Msg_serviceDesc = _Msg_serviceDesc var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "lumera.audit.v1.Msg", @@ -385,6 +553,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "SubmitAuditReport", Handler: _Msg_SubmitAuditReport_Handler, }, + { + MethodName: "SubmitEvidence", + Handler: _Msg_SubmitEvidence_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "lumera/audit/v1/tx.proto", @@ -535,6 +707,90 @@ func (m *MsgSubmitAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } +func (m *MsgSubmitEvidence) 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 *MsgSubmitEvidence) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSubmitEvidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Metadata) > 0 { + i -= len(m.Metadata) + copy(dAtA[i:], m.Metadata) + i = encodeVarintTx(dAtA, i, uint64(len(m.Metadata))) + i-- + dAtA[i] = 0x2a + } + if len(m.ActionId) > 0 { + i -= len(m.ActionId) + copy(dAtA[i:], m.ActionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ActionId))) + i-- + dAtA[i] = 0x22 + } + if m.EvidenceType != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.EvidenceType)) + i-- + dAtA[i] = 0x18 + } + if len(m.SubjectAddress) > 0 { + i -= len(m.SubjectAddress) + copy(dAtA[i:], m.SubjectAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.SubjectAddress))) + i-- + dAtA[i] = 0x12 + } + 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 *MsgSubmitEvidenceResponse) 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 *MsgSubmitEvidenceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSubmitEvidenceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EvidenceId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.EvidenceId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -603,6 +859,46 @@ func (m *MsgSubmitAuditReportResponse) Size() (n int) { return n } +func (m *MsgSubmitEvidence) 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)) + } + l = len(m.SubjectAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.EvidenceType != 0 { + n += 1 + sovTx(uint64(m.EvidenceType)) + } + l = len(m.ActionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Metadata) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgSubmitEvidenceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EvidenceId != 0 { + n += 1 + sovTx(uint64(m.EvidenceId)) + } + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -992,6 +1288,272 @@ func (m *MsgSubmitAuditReportResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgSubmitEvidence) 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: MsgSubmitEvidence: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSubmitEvidence: 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 != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubjectAddress", 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.SubjectAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EvidenceType", wireType) + } + m.EvidenceType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EvidenceType |= EvidenceType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionId", 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.ActionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", 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.Metadata = 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 *MsgSubmitEvidenceResponse) 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: MsgSubmitEvidenceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSubmitEvidenceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EvidenceId", wireType) + } + m.EvidenceId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EvidenceId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/supernode/v1/keeper/abci.go b/x/supernode/v1/keeper/abci.go index a4c61c0..5cb2e9c 100644 --- a/x/supernode/v1/keeper/abci.go +++ b/x/supernode/v1/keeper/abci.go @@ -14,7 +14,6 @@ func (k Keeper) BeginBlocker(ctx context.Context) error { // It delegates to HandleMetricsStaleness, which may transition ACTIVE // supernodes into POSTPONED when they fail to report metrics on time. func (k Keeper) EndBlocker(ctx context.Context) error { - // sdkCtx := sdk.UnwrapSDKContext(ctx) - // return k.HandleMetricsStaleness(sdkCtx) + // Metrics staleness enforcement is handled by the audit module. return nil } From e6c1b4c52a7b0d5af51bfc340590c0b218068461 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Mon, 2 Feb 2026 17:33:50 +0500 Subject: [PATCH 07/18] x/audit: fix query pagination and evidence IDs --- x/audit/v1/keeper/enforcement.go | 2 +- x/audit/v1/keeper/evidence_state.go | 34 +++++++++++++++++++++--- x/audit/v1/keeper/msg_submit_evidence.go | 6 ++++- x/audit/v1/keeper/query_self_reports.go | 26 +++++++++++------- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/x/audit/v1/keeper/enforcement.go b/x/audit/v1/keeper/enforcement.go index 640d943..35e63da 100644 --- a/x/audit/v1/keeper/enforcement.go +++ b/x/audit/v1/keeper/enforcement.go @@ -121,7 +121,7 @@ func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount strin return false, err } - // Need one compliant peer report: >=2 peers and all required ports unanimously OPEN. + // Need at least one compliant peer report that shows all required ports OPEN. requiredPortsLen := len(params.RequiredOpenPorts) if requiredPortsLen == 0 { return true, nil diff --git a/x/audit/v1/keeper/evidence_state.go b/x/audit/v1/keeper/evidence_state.go index 60396ce..ea0a5a9 100644 --- a/x/audit/v1/keeper/evidence_state.go +++ b/x/audit/v1/keeper/evidence_state.go @@ -13,10 +13,39 @@ import ( func (k Keeper) GetNextEvidenceID(ctx sdk.Context) uint64 { store := k.kvStore(ctx) bz := store.Get(types.NextEvidenceIDKey()) - if bz == nil || len(bz) != 8 { + if bz == nil { return 1 } - return binary.BigEndian.Uint64(bz) + if len(bz) != 8 { + // Avoid evidence ID reuse if the stored counter is malformed by deriving the next ID from state. + return k.deriveNextEvidenceID(ctx) + } + id := binary.BigEndian.Uint64(bz) + if id == 0 { + // Evidence IDs start at 1; treat 0 as invalid/corrupt and derive a safe next ID. + return k.deriveNextEvidenceID(ctx) + } + return id +} + +func (k Keeper) deriveNextEvidenceID(ctx sdk.Context) uint64 { + store := prefix.NewStore(k.kvStore(ctx), types.EvidenceRecordPrefix()) + + iter := store.Iterator(nil, nil) + defer iter.Close() + + var maxID uint64 + for ; iter.Valid(); iter.Next() { + key := iter.Key() + if len(key) != 8 { + continue + } + id := binary.BigEndian.Uint64(key) + if id > maxID { + maxID = id + } + } + return maxID + 1 } func (k Keeper) SetNextEvidenceID(ctx sdk.Context, nextID uint64) { @@ -77,4 +106,3 @@ func (k Keeper) GetAllEvidence(ctx sdk.Context) ([]types.Evidence, error) { return evidence, nil } - diff --git a/x/audit/v1/keeper/msg_submit_evidence.go b/x/audit/v1/keeper/msg_submit_evidence.go index ed9ca51..f591540 100644 --- a/x/audit/v1/keeper/msg_submit_evidence.go +++ b/x/audit/v1/keeper/msg_submit_evidence.go @@ -3,10 +3,15 @@ package keeper import ( "context" + errorsmod "cosmossdk.io/errors" "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) func (k msgServer) SubmitEvidence(ctx context.Context, msg *types.MsgSubmitEvidence) (*types.MsgSubmitEvidenceResponse, error) { + if msg == nil { + return nil, errorsmod.Wrap(types.ErrInvalidSigner, "empty request") + } + evidenceID, err := k.Keeper.CreateEvidence(ctx, msg.Creator, msg.SubjectAddress, msg.ActionId, msg.EvidenceType, msg.Metadata) if err != nil { return nil, err @@ -14,4 +19,3 @@ func (k msgServer) SubmitEvidence(ctx context.Context, msg *types.MsgSubmitEvide return &types.MsgSubmitEvidenceResponse{EvidenceId: evidenceID}, nil } - diff --git a/x/audit/v1/keeper/query_self_reports.go b/x/audit/v1/keeper/query_self_reports.go index 3e29f74..45671f8 100644 --- a/x/audit/v1/keeper/query_self_reports.go +++ b/x/audit/v1/keeper/query_self_reports.go @@ -23,7 +23,15 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport sdkCtx := sdk.UnwrapSDKContext(ctx) storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) - store := prefix.NewStore(storeAdapter, types.SelfReportIndexPrefix(req.SupernodeAccount)) + + useWindowFilter := req.FilterByWindowId || req.WindowId != 0 + + var store prefix.Store + if useWindowFilter { + store = prefix.NewStore(storeAdapter, types.SelfReportIndexKey(req.SupernodeAccount, req.WindowId)) + } else { + store = prefix.NewStore(storeAdapter, types.SelfReportIndexPrefix(req.SupernodeAccount)) + } var reports []types.SelfReport @@ -32,15 +40,15 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport pagination = &query.PageRequest{Limit: 100} } - useWindowFilter := req.FilterByWindowId || req.WindowId != 0 - pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { - if len(key) != 8 { - return status.Error(codes.Internal, "invalid self report index key") - } - windowID := binary.BigEndian.Uint64(key) - if useWindowFilter && windowID != req.WindowId { - return nil + var windowID uint64 + if useWindowFilter { + windowID = req.WindowId + } else { + if len(key) != 8 { + return status.Error(codes.Internal, "invalid self report index key") + } + windowID = binary.BigEndian.Uint64(key) } r, found := q.k.GetReport(sdkCtx, windowID, req.SupernodeAccount) From 4f16e2e68f3d2d751c1fa9ca7fafe73add4c8aa6 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Mon, 2 Feb 2026 17:42:41 +0500 Subject: [PATCH 08/18] x/audit: avoid evidence ID reuse --- x/audit/v1/keeper/evidence_state.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x/audit/v1/keeper/evidence_state.go b/x/audit/v1/keeper/evidence_state.go index ea0a5a9..3c3b8f5 100644 --- a/x/audit/v1/keeper/evidence_state.go +++ b/x/audit/v1/keeper/evidence_state.go @@ -14,7 +14,8 @@ func (k Keeper) GetNextEvidenceID(ctx sdk.Context) uint64 { store := k.kvStore(ctx) bz := store.Get(types.NextEvidenceIDKey()) if bz == nil { - return 1 + // Avoid evidence ID reuse if the stored counter is missing by deriving the next ID from state. + return k.deriveNextEvidenceID(ctx) } if len(bz) != 8 { // Avoid evidence ID reuse if the stored counter is malformed by deriving the next ID from state. From 06e3e53457881a51d9d00b42840d6d38c8422d19 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 4 Feb 2026 15:39:17 +0500 Subject: [PATCH 09/18] x/audit: signature and finalization enforcement --- proto/lumera/audit/v1/evidence.proto | 10 +- proto/lumera/audit/v1/evidence_metadata.proto | 5 +- proto/lumera/audit/v1/params.proto | 11 +- testutil/keeper/action.go | 47 +++++- x/action/v1/keeper/action.go | 41 ++++-- x/action/v1/keeper/action_cascade.go | 9 +- x/action/v1/keeper/action_test.go | 78 ++++++++-- x/action/v1/keeper/audit_evidence.go | 136 ++++++++++++++++++ x/action/v1/keeper/keeper.go | 7 + x/action/v1/keeper/keeper_test.go | 6 +- .../v1/keeper/msg_server_finalize_test.go | 51 ++++++- x/action/v1/keeper/msg_server_test.go | 10 +- x/action/v1/module/depinject.go | 10 +- x/action/v1/types/events.go | 13 +- x/action/v1/types/expected_keepers.go | 12 ++ x/audit/v1/POSTPONEMENT_RULES.md | 4 +- x/audit/v1/README.md | 4 +- x/audit/v1/keeper/enforcement.go | 19 ++- x/audit/v1/keeper/enforcement_test.go | 126 ++++++++++++++++ x/audit/v1/keeper/evidence.go | 19 ++- x/audit/v1/types/evidence.pb.go | 75 +++++----- x/audit/v1/types/evidence_metadata.pb.go | 52 +++---- x/audit/v1/types/params.go | 75 ++++++---- x/audit/v1/types/params.pb.go | 107 ++++++++++---- 24 files changed, 736 insertions(+), 191 deletions(-) create mode 100644 x/action/v1/keeper/audit_evidence.go create mode 100644 x/audit/v1/keeper/enforcement_test.go diff --git a/proto/lumera/audit/v1/evidence.proto b/proto/lumera/audit/v1/evidence.proto index a0eeaef..18b0204 100644 --- a/proto/lumera/audit/v1/evidence.proto +++ b/proto/lumera/audit/v1/evidence.proto @@ -8,8 +8,13 @@ option go_package = "x/audit/v1/types"; enum EvidenceType { EVIDENCE_TYPE_UNSPECIFIED = 0; - EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION = 1; - EVIDENCE_TYPE_ACTION_EXPIRED = 2; + // action finalization rejected due to an invalid signature / signature-derived data. + EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE = 1; + + // action finalization rejected because the attempted finalizer is not in the top-10 supernodes. + EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 = 2; + + EVIDENCE_TYPE_ACTION_EXPIRED = 3; } // Evidence is a stable outer record that stores evidence about an audited subject. @@ -36,4 +41,3 @@ message Evidence { // reported_height is the block height when the evidence was submitted. uint64 reported_height = 7; } - diff --git a/proto/lumera/audit/v1/evidence_metadata.proto b/proto/lumera/audit/v1/evidence_metadata.proto index 7fafc87..c4a4e19 100644 --- a/proto/lumera/audit/v1/evidence_metadata.proto +++ b/proto/lumera/audit/v1/evidence_metadata.proto @@ -20,10 +20,9 @@ message FinalizationEvidenceMetadata { // attempted_finalizer_address is the address that attempted finalization. string attempted_finalizer_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // expected_finalizer_address is optional (if there is a known expected finalizer). - string expected_finalizer_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // expected_finalizer_addresses is optional (if there is a known set of expected finalizers). + repeated string expected_finalizer_addresses = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // reason is optional human-readable context. string reason = 3; } - diff --git a/proto/lumera/audit/v1/params.proto b/proto/lumera/audit/v1/params.proto index 3475a34..c62a1b2 100644 --- a/proto/lumera/audit/v1/params.proto +++ b/proto/lumera/audit/v1/params.proto @@ -25,11 +25,18 @@ message Params { uint32 min_mem_free_percent = 8; uint32 min_disk_free_percent = 9; - // Number of consecutive windows a required port must be unanimously reported CLOSED - // by peers (with at least 2 peer reports per window) before postponing the supernode. + // Number of consecutive windows a required port must be reported CLOSED by peers + // at or above peer_port_postpone_threshold_percent before postponing the supernode. uint32 consecutive_windows_to_postpone = 10; // How many completed windows to keep in state for window-scoped data like WindowSnapshot, // AuditReport, and related indices. Pruning runs at window end. uint64 keep_last_window_entries = 11; + + // Minimum percent (1-100) of peer reports that must report a required port as CLOSED + // for the port to be treated as CLOSED for postponement purposes. + // + // 100 means unanimous. + // Example: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%). + uint32 peer_port_postpone_threshold_percent = 12; } diff --git a/testutil/keeper/action.go b/testutil/keeper/action.go index cea4d81..1dcd207 100644 --- a/testutil/keeper/action.go +++ b/testutil/keeper/action.go @@ -32,6 +32,7 @@ import ( "github.com/LumeraProtocol/lumera/x/action/v1/keeper" actionmodulev1 "github.com/LumeraProtocol/lumera/x/action/v1/module" actiontypes "github.com/LumeraProtocol/lumera/x/action/v1/types" + audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" supernodemocks "github.com/LumeraProtocol/lumera/x/supernode/v1/mocks" sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) @@ -45,7 +46,7 @@ const ( type ActionBankKeeper struct { mock.Mock // sentCoins tracks the coins sent from accounts - sentCoins map[string]sdk.Coins + sentCoins map[string]sdk.Coins // moduleBalances tracks the balances of modules moduleBalances map[string]sdk.Coins } @@ -138,6 +139,46 @@ func (m *MockStakingKeeper) Validator(ctx context.Context, addr sdk.ValAddress) return args.Get(0).(stakingtypes.ValidatorI), args.Error(1) } +type MockAuditKeeper struct { + nextEvidenceID uint64 + CreateCalls []MockAuditKeeperCreateEvidenceCall +} + +type MockAuditKeeperCreateEvidenceCall struct { + ReporterAddress string + SubjectAddress string + ActionID string + EvidenceType audittypes.EvidenceType + MetadataJSON string +} + +func NewMockAuditKeeper() *MockAuditKeeper { + return &MockAuditKeeper{nextEvidenceID: 1} +} + +func (m *MockAuditKeeper) CreateEvidence( + ctx context.Context, + reporterAddress string, + subjectAddress string, + actionID string, + evidenceType audittypes.EvidenceType, + metadataJSON string, +) (uint64, error) { + if m.nextEvidenceID == 0 { + m.nextEvidenceID = 1 + } + id := m.nextEvidenceID + m.nextEvidenceID++ + m.CreateCalls = append(m.CreateCalls, MockAuditKeeperCreateEvidenceCall{ + ReporterAddress: reporterAddress, + SubjectAddress: subjectAddress, + ActionID: actionID, + EvidenceType: evidenceType, + MetadataJSON: metadataJSON, + }) + return id, nil +} + type AccountPair struct { Address sdk.AccAddress PubKey cryptotypes.PubKey @@ -171,6 +212,7 @@ func ActionKeeperWithAddress(t testing.TB, ctrl *gomock.Controller, accounts []A supernodeQueryServer := supernodemocks.NewMockQueryServer(ctrl) distributionKeeper := new(MockDistributionKeeper) + auditKeeper := NewMockAuditKeeper() // Set up the context ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) @@ -201,6 +243,7 @@ func ActionKeeperWithAddress(t testing.TB, ctrl *gomock.Controller, accounts []A func() sntypes.QueryServer { return supernodeQueryServer }, + auditKeeper, func() *ibckeeper.Keeper { return ibckeeper.NewKeeper(encCfg.Codec, storeService, newMockIbcParams(), mockUpgradeKeeper, authority.String()) }, @@ -242,4 +285,4 @@ func newMockIbcParams() *mockIbcParams { } func (mockIbcParams) GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet) { -} \ No newline at end of file +} diff --git a/x/action/v1/keeper/action.go b/x/action/v1/keeper/action.go index 88c1058..c5f615f 100644 --- a/x/action/v1/keeper/action.go +++ b/x/action/v1/keeper/action.go @@ -29,7 +29,7 @@ const ( ActionBySuperNodePrefix = "Action/supernode/" ) -// RegisterAction creates and configures a new action with default parameters +// RegisterAction creates and configures a new action with default parameters // This is the recommended method for creating new actions func (k *Keeper) RegisterAction(ctx sdk.Context, action *actiontypes.Action) (string, error) { // Validate that the action is for a new registration @@ -181,9 +181,18 @@ func (k *Keeper) FinalizeAction(ctx sdk.Context, actionID string, superNodeAccou // Verify reporting superNode - // it must be in the top-10 supernodes for the (existing) action's block height // and not already in the (existing) action's SuperNodes list - if err := k.validateSupernode(ctx, existingAction, superNodeAccount); err != nil { + eligible, rejectReason, expectedFinalizerAddresses, err := k.checkFinalizerEligibility(ctx, existingAction, superNodeAccount) + if err != nil { return err } + if !eligible { + // Only Cascade finalization is in scope for evidence-based rejections at the moment. + if existingAction.ActionType == actiontypes.ActionTypeCascade { + k.RecordFinalizationNotInTop10(ctx, existingAction, superNodeAccount, expectedFinalizerAddresses, rejectReason) + return nil + } + return errors.Wrap(actiontypes.ErrUnauthorizedSN, rejectReason) + } // Get the appropriate handler for this action type handler, err := k.actionRegistry.GetHandler(existingAction.ActionType) @@ -518,16 +527,17 @@ func (k *Keeper) IterateActionsByState(ctx sdk.Context, state actiontypes.Action return nil } -// validateSupernode checks if a supernode is authorized to finalize an action -// This method validates that the supernode: -// 1. Is not already in the action's SuperNodes list -// 2. Is in the top-10 supernodes for the action's block height -func (k *Keeper) validateSupernode(ctx sdk.Context, action *actiontypes.Action, superNodeAccount string) error { - +// checkFinalizerEligibility checks whether a supernode is authorized to finalize an action. +// +// It returns: +// - (true, "", expectedFinalizers, nil) when eligible +// - (false, reason, expectedFinalizers, nil) when rejected (non-fatal) +// - (false, "", nil, err) for hard failures (e.g. duplicates) +func (k *Keeper) checkFinalizerEligibility(ctx sdk.Context, action *actiontypes.Action, superNodeAccount string) (bool, string, []string, error) { // If SuperNode already in the list, return an error if len(action.SuperNodes) > 0 { if slices.Contains(action.SuperNodes, superNodeAccount) { - return errors.Wrapf( + return false, "", nil, errors.Wrapf( actiontypes.ErrUnauthorizedSN, "supernode %s is already in the SuperNodes list for action %s", superNodeAccount, @@ -544,9 +554,11 @@ func (k *Keeper) validateSupernode(ctx sdk.Context, action *actiontypes.Action, } topSuperNodesResp, err := k.supernodeQueryServer.GetTopSuperNodesForBlock(ctx, topSuperNodesReq) if err != nil { - return errors.Wrapf(sdkerrors.ErrInvalidRequest, "failed to query top supernodes: %s", err) + return false, "", nil, errors.Wrapf(sdkerrors.ErrInvalidRequest, "failed to query top supernodes: %s", err) } + expectedFinalizerAddresses := make([]string, 0, len(topSuperNodesResp.Supernodes)) + // Check if superNode is in the top-10 ACTIVE list isInTop10 := false @@ -556,6 +568,8 @@ func (k *Keeper) validateSupernode(ctx sdk.Context, action *actiontypes.Action, "top_supernodes_count", len(topSuperNodesResp.Supernodes)) for _, sn := range topSuperNodesResp.Supernodes { + expectedFinalizerAddresses = append(expectedFinalizerAddresses, sn.SupernodeAccount) + k.Logger().Debug("Comparing supernodes", "validator_address", sn.ValidatorAddress, "current_supernode", superNodeAccount) @@ -567,15 +581,14 @@ func (k *Keeper) validateSupernode(ctx sdk.Context, action *actiontypes.Action, } if !isInTop10 { - return errors.Wrapf( - actiontypes.ErrUnauthorizedSN, + return false, fmt.Sprintf( "supernode %s is not in the top-10 ACTIVE supernodes for block height %d", superNodeAccount, action.BlockHeight, - ) + ), expectedFinalizerAddresses, nil } - return nil + return true, "", expectedFinalizerAddresses, nil } // DistributeFees splits fees among SuperNodes and optionally a foundation address diff --git a/x/action/v1/keeper/action_cascade.go b/x/action/v1/keeper/action_cascade.go index 1e7ae5c..88776ce 100644 --- a/x/action/v1/keeper/action_cascade.go +++ b/x/action/v1/keeper/action_cascade.go @@ -177,8 +177,13 @@ func (h CascadeActionHandler) FinalizeAction(ctx sdk.Context, action *actiontype // 1. Verify RqIdsIds if err := VerifyKademliaIDs(newCascadeMeta.RqIdsIds, existingCascadeMeta.Signatures, existingCascadeMeta.RqIdsIc, existingCascadeMeta.RqIdsMax); err != nil { - return actiontypes.ActionStateUnspecified, - errors.Wrap(actiontypes.ErrInvalidMetadata, fmt.Sprintf("failed to verify rq_ids_ids: %v", err)) + h.keeper.RecordFinalizationSignatureFailure( + ctx, + action, + superNodeAccount, + fmt.Sprintf("cascade finalization rejected: rq_ids_ids verification failed: %v", err), + ) + return actiontypes.ActionStateUnspecified, nil } // Cascade actions are finalized with a single supernode diff --git a/x/action/v1/keeper/action_test.go b/x/action/v1/keeper/action_test.go index 0dab4cc..2af3267 100644 --- a/x/action/v1/keeper/action_test.go +++ b/x/action/v1/keeper/action_test.go @@ -1,9 +1,12 @@ package keeper_test import ( + "encoding/json" "fmt" "github.com/LumeraProtocol/lumera/x/action/v1/common" + actionkeeper "github.com/LumeraProtocol/lumera/x/action/v1/keeper" + audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" sdk "github.com/cosmos/cosmos-sdk/types" gogoproto "github.com/cosmos/gogoproto/proto" "github.com/stretchr/testify/assert" @@ -182,13 +185,29 @@ func (suite *KeeperTestSuite) TestIterateActions() { } func (suite *KeeperTestSuite) TestFinalizeAction() { + invalidCascadeIDs := func() []byte { + badIDs := make([]string, 0, 50) + for i := suite.ic; i < suite.ic+50; i++ { + id, err := actionkeeper.CreateKademliaID("wrong_signature", i) + suite.Require().NoError(err) + badIDs = append(badIDs, id) + } + meta := &actiontypes.CascadeMetadata{RqIdsIds: badIDs} + bz, err := suite.keeper.GetCodec().Marshal(meta) + suite.Require().NoError(err) + return bz + } + testCases := []struct { name string creator string action *actiontypes.Action finalizeMetadata []byte superNode string - state actiontypes.ActionState + expectedState actiontypes.ActionState + expectedSNCount int + expectEvidence bool + evidenceType audittypes.EvidenceType expErr error setupFunc func() }{ @@ -198,7 +217,9 @@ func (suite *KeeperTestSuite) TestFinalizeAction() { superNode: suite.supernodes[0].SupernodeAccount, action: suite.prepareCascadeActionForRegistration(suite.creatorAddress.String(), MetadataFieldToMissNone), finalizeMetadata: suite.generateCascadeFinalizationMetadata(MetadataFieldToMissNone), - state: actiontypes.ActionStateDone, + expectedState: actiontypes.ActionStateDone, + expectedSNCount: 1, + expectEvidence: false, expErr: nil, }, { @@ -207,16 +228,34 @@ func (suite *KeeperTestSuite) TestFinalizeAction() { superNode: suite.supernodes[0].SupernodeAccount, action: suite.prepareSenseActionForRegistration(suite.creatorAddress.String(), MetadataFieldToMissNone), finalizeMetadata: suite.generateSenseFinalizationMetadata(suite.signatureSense, MetadataFieldToMissNone), - state: actiontypes.ActionStateDone, + expectedState: actiontypes.ActionStateDone, + expectedSNCount: 1, + expectEvidence: false, + expErr: nil, + }, + { + name: "Finalizing Cascade Action - Invalid IDs (evidence, no error)", + creator: suite.creatorAddress.String(), + superNode: suite.supernodes[0].SupernodeAccount, + action: suite.prepareCascadeActionForRegistration(suite.creatorAddress.String(), MetadataFieldToMissNone), + finalizeMetadata: invalidCascadeIDs(), + expectedState: actiontypes.ActionStatePending, + expectedSNCount: 0, + expectEvidence: true, + evidenceType: audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, expErr: nil, }, { - name: "Finalizing Cascade Action - Wrong SN", + name: "Finalizing Cascade Action - SN not in top (evidence, no error)", creator: suite.creatorAddress.String(), superNode: suite.badSupernode.SupernodeAccount, action: suite.prepareCascadeActionForRegistration(suite.creatorAddress.String(), MetadataFieldToMissNone), finalizeMetadata: suite.generateCascadeFinalizationMetadata(MetadataFieldToMissNone), - expErr: actiontypes.ErrUnauthorizedSN, + expectedState: actiontypes.ActionStatePending, + expectedSNCount: 0, + expectEvidence: true, + evidenceType: audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10, + expErr: nil, }, { name: "Finalizing Sense Action - Wrong SN", @@ -224,6 +263,9 @@ func (suite *KeeperTestSuite) TestFinalizeAction() { superNode: suite.badSupernode.SupernodeAccount, action: suite.prepareSenseActionForRegistration(suite.creatorAddress.String(), MetadataFieldToMissNone), finalizeMetadata: suite.generateSenseFinalizationMetadata(suite.signatureSense, MetadataFieldToMissNone), + expectedState: actiontypes.ActionStatePending, + expectedSNCount: 0, + expectEvidence: false, expErr: actiontypes.ErrUnauthorizedSN, }, } @@ -239,6 +281,8 @@ func (suite *KeeperTestSuite) TestFinalizeAction() { _, err := suite.keeper.RegisterAction(suite.ctx, tc.action) suite.NoError(err) + startEvidenceCalls := len(suite.mockAuditKeeper.CreateCalls) + // Finalize the action err = suite.keeper.FinalizeAction(suite.ctx, tc.action.ActionID, tc.superNode, tc.finalizeMetadata) if tc.expErr != nil { @@ -249,17 +293,33 @@ func (suite *KeeperTestSuite) TestFinalizeAction() { // Verify the action was finalized updated, found := suite.keeper.GetActionByID(suite.ctx, tc.action.ActionID) suite.True(found) - suite.Equal(tc.state, updated.State) - suite.Equal(1, len(updated.SuperNodes)) - suite.Equal(tc.superNode, updated.SuperNodes[0]) + suite.Equal(tc.expectedState, updated.State) + suite.Equal(tc.expectedSNCount, len(updated.SuperNodes)) + if tc.expectedSNCount > 0 { + suite.Equal(tc.superNode, updated.SuperNodes[0]) + } - if updated.ActionType == actiontypes.ActionTypeCascade { + if updated.ActionType == actiontypes.ActionTypeCascade && updated.State == actiontypes.ActionStateDone { cascadeMetadata := actiontypes.CascadeMetadata{} err = gogoproto.Unmarshal(updated.Metadata, &cascadeMetadata) suite.Equal(err, nil) assert.NotZero(suite.T(), len(cascadeMetadata.RqIdsIds)) } + + if tc.expectEvidence { + suite.Greater(len(suite.mockAuditKeeper.CreateCalls), startEvidenceCalls) + call := suite.mockAuditKeeper.CreateCalls[len(suite.mockAuditKeeper.CreateCalls)-1] + suite.Equal(tc.evidenceType, call.EvidenceType) + + if tc.evidenceType == audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 { + var meta audittypes.FinalizationEvidenceMetadata + suite.Require().NoError(json.Unmarshal([]byte(call.MetadataJSON), &meta)) + suite.NotEmpty(meta.ExpectedFinalizerAddresses) + } + } else { + suite.Equal(startEvidenceCalls, len(suite.mockAuditKeeper.CreateCalls)) + } } }) } diff --git a/x/action/v1/keeper/audit_evidence.go b/x/action/v1/keeper/audit_evidence.go new file mode 100644 index 0000000..dd49d6c --- /dev/null +++ b/x/action/v1/keeper/audit_evidence.go @@ -0,0 +1,136 @@ +package keeper + +import ( + "encoding/json" + "fmt" + + actiontypes "github.com/LumeraProtocol/lumera/x/action/v1/types" + audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (k *Keeper) recordFinalizationEvidence( + ctx sdk.Context, + actionID string, + subjectAddress string, + attemptedFinalizerAddress string, + expectedFinalizerAddresses []string, + reason string, + evidenceType audittypes.EvidenceType, +) (uint64, error) { + if k.auditKeeper == nil { + return 0, fmt.Errorf("audit keeper is not configured") + } + if actionID == "" { + return 0, fmt.Errorf("actionID is required") + } + + reporterAddress, err := k.addressCodec.BytesToString(actiontypes.ModuleAccountAddress) + if err != nil { + return 0, fmt.Errorf("module reporter address: %w", err) + } + + metaJSON, err := json.Marshal(audittypes.FinalizationEvidenceMetadata{ + AttemptedFinalizerAddress: attemptedFinalizerAddress, + ExpectedFinalizerAddresses: expectedFinalizerAddresses, + Reason: reason, + }) + if err != nil { + return 0, fmt.Errorf("marshal evidence metadata: %w", err) + } + + return k.auditKeeper.CreateEvidence( + ctx, + reporterAddress, + subjectAddress, + actionID, + evidenceType, + string(metaJSON), + ) +} + +func (k *Keeper) recordFinalizationRejection( + ctx sdk.Context, + action *actiontypes.Action, + attemptedFinalizerAddress string, + reason string, + expectedFinalizerAddresses []string, + evidenceType audittypes.EvidenceType, +) uint64 { + if action == nil { + return 0 + } + + // Use the attempted finalizer as the default audited subject. + subjectAddress := attemptedFinalizerAddress + + var evidenceID uint64 + if id, err := k.recordFinalizationEvidence( + ctx, + action.ActionID, + subjectAddress, + attemptedFinalizerAddress, + expectedFinalizerAddresses, + reason, + evidenceType, + ); err != nil { + k.Logger().Error( + "failed to record finalization evidence", + "action_id", action.ActionID, + "finalizer", attemptedFinalizerAddress, + "err", err, + ) + } else { + evidenceID = id + } + + attrs := []sdk.Attribute{ + sdk.NewAttribute(actiontypes.AttributeKeyActionID, action.ActionID), + sdk.NewAttribute(actiontypes.AttributeKeyCreator, action.Creator), + sdk.NewAttribute(actiontypes.AttributeKeyFinalizer, attemptedFinalizerAddress), + sdk.NewAttribute(actiontypes.AttributeKeyActionType, action.ActionType.String()), + sdk.NewAttribute(actiontypes.AttributeKeyError, reason), + } + if evidenceID != 0 { + attrs = append(attrs, sdk.NewAttribute(actiontypes.AttributeKeyEvidenceID, fmt.Sprintf("%d", evidenceID))) + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent(actiontypes.EventTypeActionFinalizationRejected, attrs...), + ) + + return evidenceID +} + +func (k *Keeper) RecordFinalizationSignatureFailure( + ctx sdk.Context, + action *actiontypes.Action, + attemptedFinalizerAddress string, + reason string, +) uint64 { + return k.recordFinalizationRejection( + ctx, + action, + attemptedFinalizerAddress, + reason, + nil, + audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, + ) +} + +func (k *Keeper) RecordFinalizationNotInTop10( + ctx sdk.Context, + action *actiontypes.Action, + attemptedFinalizerAddress string, + expectedFinalizerAddresses []string, + reason string, +) uint64 { + return k.recordFinalizationRejection( + ctx, + action, + attemptedFinalizerAddress, + reason, + expectedFinalizerAddresses, + audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10, + ) +} diff --git a/x/action/v1/keeper/keeper.go b/x/action/v1/keeper/keeper.go index af71732..9806f73 100644 --- a/x/action/v1/keeper/keeper.go +++ b/x/action/v1/keeper/keeper.go @@ -34,6 +34,7 @@ type ( distributionKeeper actiontypes.DistributionKeeper supernodeKeeper actiontypes.SupernodeKeeper supernodeQueryServer actiontypes.SupernodeQueryServer + auditKeeper actiontypes.AuditKeeper ibcKeeperFn func() *ibckeeper.Keeper // Action handling @@ -54,6 +55,7 @@ func NewKeeper( distributionKeeper actiontypes.DistributionKeeper, supernodeKeeper sntypes.SupernodeKeeper, supernodeQueryServer func() sntypes.QueryServer, + auditKeeper actiontypes.AuditKeeper, ibcKeeperFn func() *ibckeeper.Keeper, ) Keeper { if _, err := addressCodec.BytesToString(authority); err != nil { @@ -81,6 +83,7 @@ func NewKeeper( distributionKeeper: distributionKeeper, supernodeKeeper: supernodeKeeper, supernodeQueryServer: snQueryServer, + auditKeeper: auditKeeper, ibcKeeperFn: ibcKeeperFn, Port: collections.NewItem(sb, actiontypes.PortKey, "port", collections.StringValue), @@ -134,6 +137,10 @@ func (k *Keeper) GetAuthKeeper() actiontypes.AuthKeeper { return k.authKeeper } +func (k *Keeper) GetAuditKeeper() actiontypes.AuditKeeper { + return k.auditKeeper +} + // GetActionRegistry returns the action registry func (k *Keeper) GetActionRegistry() *ActionRegistry { return k.actionRegistry diff --git a/x/action/v1/keeper/keeper_test.go b/x/action/v1/keeper/keeper_test.go index 266d7e4..d29f7ab 100644 --- a/x/action/v1/keeper/keeper_test.go +++ b/x/action/v1/keeper/keeper_test.go @@ -8,8 +8,8 @@ import ( "github.com/LumeraProtocol/lumera/testutil/cryptotestutils" - "go.uber.org/mock/gomock" "github.com/stretchr/testify/suite" + "go.uber.org/mock/gomock" sdk "github.com/cosmos/cosmos-sdk/types" @@ -30,6 +30,7 @@ type KeeperTestSuite struct { keeper actionkeeper.Keeper mockKeeper *supernodemocks.MockSupernodeKeeper mockQueryServer *supernodemocks.MockQueryServer + mockAuditKeeper *keepertest.MockAuditKeeper } // KeeperTestSuite is a test suite to test keeper functions @@ -110,6 +111,9 @@ func (suite *KeeperTestSuite) SetupTest() { suite.mockQueryServer, ok = suite.keeper.GetSupernodeQueryServer().(*supernodemocks.MockQueryServer) suite.Require().True(ok, "Failed to get MockQueryServer from Keeper") + suite.mockAuditKeeper, ok = suite.keeper.GetAuditKeeper().(*keepertest.MockAuditKeeper) + suite.Require().True(ok, "Failed to get MockAuditKeeper from Keeper") + // Set context with block height for consistent testing suite.ctx = suite.ctx.WithBlockHeight(1) } diff --git a/x/action/v1/keeper/msg_server_finalize_test.go b/x/action/v1/keeper/msg_server_finalize_test.go index e48ed35..1e324b0 100644 --- a/x/action/v1/keeper/msg_server_finalize_test.go +++ b/x/action/v1/keeper/msg_server_finalize_test.go @@ -58,7 +58,8 @@ func (suite *MsgServerTestSuite) TestMsgFinalizeActionSense() { } func (suite *MsgServerTestSuite) TestMsgFinalizeActionCascadeErrors() { - suite.setupExpectationsGetAllTopSNs(1) + // Only 2 of the below cases reach keeper.FinalizeAction (and thus query top supernodes). + suite.setupExpectationsGetAllTopSNs(2) actionID := suite.registerCascadeAction() testCases := []struct { @@ -69,6 +70,7 @@ func (suite *MsgServerTestSuite) TestMsgFinalizeActionCascadeErrors() { badMetadata string badIDsOti bool badIDs bool + expectErr bool errorContains string }{ { @@ -79,17 +81,30 @@ func (suite *MsgServerTestSuite) TestMsgFinalizeActionCascadeErrors() { badMetadata: "", badIDsOti: false, badIDs: false, + expectErr: true, errorContains: "not found", }, { - name: "Wrong supernode", + name: "Wrong supernode (rejected, evidence, no error)", actionId: actionID, actionType: "CASCADE", superNode: suite.badSupernode.SupernodeAccount, badMetadata: "", badIDsOti: false, badIDs: false, - errorContains: "unauthorized supernode", + expectErr: false, + errorContains: "", + }, + { + name: "Invalid rq_ids_ids values (rejected, evidence, no error)", + actionId: actionID, + actionType: "CASCADE", + superNode: suite.supernodes[0].SupernodeAccount, + badMetadata: "", + badIDsOti: true, + badIDs: false, + expectErr: false, + errorContains: "", }, { name: "Invalid metadata JSON", @@ -99,6 +114,7 @@ func (suite *MsgServerTestSuite) TestMsgFinalizeActionCascadeErrors() { badMetadata: "{invalid_json", badIDsOti: false, badIDs: false, + expectErr: true, errorContains: "invalid metadata", }, { @@ -109,6 +125,7 @@ func (suite *MsgServerTestSuite) TestMsgFinalizeActionCascadeErrors() { badMetadata: "", badIDsOti: false, badIDs: true, + expectErr: true, errorContains: "invalid metadata", }, { @@ -119,16 +136,38 @@ func (suite *MsgServerTestSuite) TestMsgFinalizeActionCascadeErrors() { badMetadata: "", badIDsOti: false, badIDs: false, + expectErr: true, errorContains: "invalid metadata", }, } for _, tc := range testCases { - suite.Run(tc.name, func() { + suite.Run(tc.name, func() { + suite.ctx = suite.ctx.WithEventManager(sdk.NewEventManager()) msg := suite.makeFinalizeCascadeActionMessage(tc.actionId, tc.actionType, tc.superNode, tc.badMetadata, tc.badIDsOti, tc.badIDs) _, err := suite.msgServer.FinalizeAction(suite.ctx, &msg) - suite.Error(err) - suite.Contains(err.Error(), tc.errorContains) + + if tc.expectErr { + suite.Error(err) + suite.Contains(err.Error(), tc.errorContains) + return + } + + suite.NoError(err) + + action, found := suite.keeper.GetActionByID(suite.ctx, tc.actionId) + suite.True(found) + suite.Equal(actiontypes.ActionStatePending, action.State) + + events := suite.ctx.EventManager().Events() + foundRejected := false + for _, event := range events { + if event.Type == types.EventTypeActionFinalizationRejected { + foundRejected = true + break + } + } + suite.True(foundRejected, "action_finalization_rejected event not found") }) } } diff --git a/x/action/v1/keeper/msg_server_test.go b/x/action/v1/keeper/msg_server_test.go index 90153d9..6d387c6 100644 --- a/x/action/v1/keeper/msg_server_test.go +++ b/x/action/v1/keeper/msg_server_test.go @@ -382,11 +382,15 @@ func (suite *MsgServerTestSuite) finalizeSenseAction(actionID string, superNode suite.Equal(actionFinal.State, actionState) } -func (suite *MsgServerTestSuite) makeFinalizeCascadeActionMessage(actionID string, actionType string, superNode string, badMetadata string, _ bool, rqIdsBad bool) types.MsgFinalizeAction { +func (suite *MsgServerTestSuite) makeFinalizeCascadeActionMessage(actionID string, actionType string, superNode string, badMetadata string, rqIdsWrong bool, rqIdsMissing bool) types.MsgFinalizeAction { var validIDs []string - if !rqIdsBad { + if !rqIdsMissing { for i := suite.ic; i < suite.ic+50; i++ { // 50 is default value for MaxDdAndFingerprints - id, err := keeper.CreateKademliaID(suite.signatureCascade, i) + signature := suite.signatureCascade + if rqIdsWrong { + signature = "wrong_signature" + } + id, err := keeper.CreateKademliaID(signature, i) suite.Require().NoError(err) validIDs = append(validIDs, id) } diff --git a/x/action/v1/module/depinject.go b/x/action/v1/module/depinject.go index 5edf4ab..adb3b6a 100644 --- a/x/action/v1/module/depinject.go +++ b/x/action/v1/module/depinject.go @@ -7,15 +7,15 @@ import ( "cosmossdk.io/depinject" "cosmossdk.io/depinject/appconfig" "cosmossdk.io/log" + snkeeper "github.com/LumeraProtocol/lumera/x/supernode/v1/keeper" "github.com/cosmos/cosmos-sdk/codec" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - snkeeper "github.com/LumeraProtocol/lumera/x/supernode/v1/keeper" ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" - sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" "github.com/LumeraProtocol/lumera/x/action/v1/keeper" "github.com/LumeraProtocol/lumera/x/action/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) var _ depinject.OnePerModuleType = AppModule{} @@ -48,7 +48,8 @@ type ModuleInputs struct { StakingKeeper types.StakingKeeper DistributionKeeper types.DistributionKeeper SupernodeKeeper sntypes.SupernodeKeeper - IBCKeeperFn func() *ibckeeper.Keeper `optional:"true"` + AuditKeeper types.AuditKeeper + IBCKeeperFn func() *ibckeeper.Keeper `optional:"true"` } type ModuleOutputs struct { @@ -76,9 +77,10 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { in.StakingKeeper, in.DistributionKeeper, in.SupernodeKeeper, - func () sntypes.QueryServer { + func() sntypes.QueryServer { return snkeeper.NewQueryServerImpl(in.SupernodeKeeper) }, + in.AuditKeeper, in.IBCKeeperFn, ) diff --git a/x/action/v1/types/events.go b/x/action/v1/types/events.go index 9d0a323..92a72ba 100644 --- a/x/action/v1/types/events.go +++ b/x/action/v1/types/events.go @@ -2,18 +2,21 @@ package types const ( // Event Types - EventTypeActionRegistered = "action_registered" - EventTypeActionFinalized = "action_finalized" - EventTypeActionApproved = "action_approved" - EventTypeActionFailed = "action_failed" - EventTypeActionExpired = "action_expired" + EventTypeActionRegistered = "action_registered" + EventTypeActionFinalized = "action_finalized" + EventTypeActionFinalizationRejected = "action_finalization_rejected" + EventTypeActionApproved = "action_approved" + EventTypeActionFailed = "action_failed" + EventTypeActionExpired = "action_expired" // Common Attributes AttributeKeyActionID = "action_id" AttributeKeyCreator = "creator" + AttributeKeyFinalizer = "finalizer" AttributeKeySuperNodes = "supernodes" AttributeKeyActionType = "action_type" AttributeKeyResults = "results" AttributeKeyFee = "fee" AttributeKeyError = "error" + AttributeKeyEvidenceID = "evidence_id" ) diff --git a/x/action/v1/types/expected_keepers.go b/x/action/v1/types/expected_keepers.go index 4df50e0..794ac70 100644 --- a/x/action/v1/types/expected_keepers.go +++ b/x/action/v1/types/expected_keepers.go @@ -6,6 +6,7 @@ import ( "context" "cosmossdk.io/core/address" + audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -55,6 +56,17 @@ type DistributionKeeper interface { FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) error } +type AuditKeeper interface { + CreateEvidence( + ctx context.Context, + reporterAddress string, + subjectAddress string, + actionID string, + evidenceType audittypes.EvidenceType, + metadataJSON string, + ) (uint64, error) +} + // ParamSubspace defines the expected Subspace interface for parameters. type ParamSubspace interface { Get(context.Context, []byte, interface{}) diff --git a/x/audit/v1/POSTPONEMENT_RULES.md b/x/audit/v1/POSTPONEMENT_RULES.md index 26e2287..fa833d7 100644 --- a/x/audit/v1/POSTPONEMENT_RULES.md +++ b/x/audit/v1/POSTPONEMENT_RULES.md @@ -44,11 +44,11 @@ The following self-report fields are currently ignored by postponement logic: ### 3) Peer ports (peer observations) -For any required port index `i`, a target is postponed if peers unanimously report that port as `CLOSED` for `consecutive_windows_to_postpone` consecutive windows. +For any required port index `i`, a target is postponed if peers report that port as `CLOSED` at or above `peer_port_postpone_threshold_percent` for `consecutive_windows_to_postpone` consecutive windows. A window counts toward the consecutive requirement only if: - there is at least **1** peer reporter about the target in that window, and -- **all** peer reporters about the target in that window report `PORT_STATE_CLOSED` for port index `i`. +- the share of peer reporters about the target in that window that report `PORT_STATE_CLOSED` for port index `i` meets or exceeds `peer_port_postpone_threshold_percent`. ## Recovery rule (POSTPONED → ACTIVE) diff --git a/x/audit/v1/README.md b/x/audit/v1/README.md index 53495b6..42fabcf 100644 --- a/x/audit/v1/README.md +++ b/x/audit/v1/README.md @@ -55,6 +55,7 @@ Key fields: - `min_mem_free_percent` - `min_disk_free_percent` - `consecutive_windows_to_postpone` +- `peer_port_postpone_threshold_percent` - `keep_last_window_entries` ### 2. Window State and Window IDs @@ -111,7 +112,7 @@ At `window_end_height`, the module evaluates the completed window and may transi - `ACTIVE` → `POSTPONED` for: - missing reports for `consecutive_windows_to_postpone` consecutive windows - host requirement failures (self report) - - peer port unanimity on `CLOSED` for `consecutive_windows_to_postpone` consecutive windows + - peer port threshold on `CLOSED` (at or above `peer_port_postpone_threshold_percent`) for `consecutive_windows_to_postpone` consecutive windows - `POSTPONED` → `ACTIVE` if, in a single window, there is: - one compliant self report, and - at least one peer report about the supernode where all required ports are `OPEN` @@ -211,6 +212,7 @@ Default values (as implemented in `x/audit/v1/types/params.go`): - `min_mem_free_percent`: `0` (disabled) - `min_disk_free_percent`: `0` (disabled) - `consecutive_windows_to_postpone`: `1` +- `peer_port_postpone_threshold_percent`: `100` - `keep_last_window_entries`: `200` ## Client diff --git a/x/audit/v1/keeper/enforcement.go b/x/audit/v1/keeper/enforcement.go index 35e63da..a6b3744 100644 --- a/x/audit/v1/keeper/enforcement.go +++ b/x/audit/v1/keeper/enforcement.go @@ -97,7 +97,7 @@ func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount stri streak := uint32(0) for offset := uint32(0); offset < consecutive; offset++ { w := windowID - uint64(offset) - closed, err := k.peersUnanimousPortState(ctx, supernodeAccount, w, portIndex, types.PortState_PORT_STATE_CLOSED) + closed, err := k.peersPortStateMeetsThreshold(ctx, supernodeAccount, w, portIndex, types.PortState_PORT_STATE_CLOSED, params.PeerPortPostponeThresholdPercent) if err != nil { return false, "", err } @@ -240,7 +240,7 @@ func compliesMinFree(usagePercent float64, minFreePercent uint32) bool { return free >= float64(minFreePercent) } -func (k Keeper) peersUnanimousPortState(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState) (bool, error) { +func (k Keeper) peersPortStateMeetsThreshold(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState, thresholdPercent uint32) (bool, error) { peers, err := k.peerReportersForTargetWindow(ctx, target, windowID) if err != nil { return false, err @@ -248,13 +248,15 @@ func (k Keeper) peersUnanimousPortState(ctx sdk.Context, target string, windowID if len(peers) == 0 { return false, nil } - return k.peersUnanimousPortStateWithPeers(ctx, target, windowID, portIndex, desired, peers) + return k.peersPortStateMeetsThresholdWithPeers(ctx, target, windowID, portIndex, desired, thresholdPercent, peers) } -func (k Keeper) peersUnanimousPortStateWithPeers(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState, peers []string) (bool, error) { +func (k Keeper) peersPortStateMeetsThresholdWithPeers(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState, thresholdPercent uint32, peers []string) (bool, error) { if len(peers) == 0 { return false, nil } + + matches := uint64(0) for _, reporter := range peers { r, found := k.GetReport(ctx, windowID, reporter) if !found { @@ -274,11 +276,14 @@ func (k Keeper) peersUnanimousPortStateWithPeers(ctx sdk.Context, target string, if portIndex < 0 || portIndex >= len(obs.PortStates) { return false, nil } - if obs.PortStates[portIndex] != desired { - return false, nil + if obs.PortStates[portIndex] == desired { + matches++ } } - return true, nil + + // Require a minimum share of matching peer observations. + total := uint64(len(peers)) + return matches*100 >= uint64(thresholdPercent)*total, nil } func (k Keeper) peerReportersForTargetWindow(ctx sdk.Context, target string, windowID uint64) ([]string, error) { diff --git a/x/audit/v1/keeper/enforcement_test.go b/x/audit/v1/keeper/enforcement_test.go new file mode 100644 index 0000000..c241180 --- /dev/null +++ b/x/audit/v1/keeper/enforcement_test.go @@ -0,0 +1,126 @@ +package keeper_test + +import ( + "testing" + + "github.com/LumeraProtocol/lumera/testutil/cryptotestutils" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "go.uber.org/mock/gomock" +) + +func TestPeerPortPostponementThresholdPercent(t *testing.T) { + makeReports := func(t *testing.T, f *fixture, windowID uint64, target sntypes.SuperNode, peers []sntypes.SuperNode, portStateForPeer []types.PortState) { + t.Helper() + + // Target must submit a report to avoid missing-report postponement. + err := f.keeper.SetReport(f.ctx, types.AuditReport{ + SupernodeAccount: target.SupernodeAccount, + WindowId: windowID, + ReportHeight: f.ctx.BlockHeight(), + SelfReport: types.AuditSelfReport{}, + }) + if err != nil { + t.Fatalf("failed to set target report: %v", err) + } + + for i, peer := range peers { + err := f.keeper.SetReport(f.ctx, types.AuditReport{ + SupernodeAccount: peer.SupernodeAccount, + WindowId: windowID, + ReportHeight: f.ctx.BlockHeight(), + SelfReport: types.AuditSelfReport{}, + PeerObservations: []*types.AuditPeerObservation{ + { + TargetSupernodeAccount: target.SupernodeAccount, + PortStates: []types.PortState{portStateForPeer[i]}, + }, + }, + }) + if err != nil { + t.Fatalf("failed to set peer report: %v", err) + } + f.keeper.SetSupernodeReportIndex(f.ctx, target.SupernodeAccount, windowID, peer.SupernodeAccount) + } + } + + windowID := uint64(0) + + _, targetAcc, targetVal := cryptotestutils.SupernodeAddresses() + target := sntypes.SuperNode{ + SupernodeAccount: targetAcc.String(), + ValidatorAddress: sdk.ValAddress(targetVal).String(), + } + + _, peer1Acc, _ := cryptotestutils.SupernodeAddresses() + _, peer2Acc, _ := cryptotestutils.SupernodeAddresses() + _, peer3Acc, _ := cryptotestutils.SupernodeAddresses() + + peers := []sntypes.SuperNode{ + {SupernodeAccount: peer1Acc.String()}, + {SupernodeAccount: peer2Acc.String()}, + {SupernodeAccount: peer3Acc.String()}, + } + + peerStates := []types.PortState{ + types.PortState_PORT_STATE_CLOSED, + types.PortState_PORT_STATE_CLOSED, + types.PortState_PORT_STATE_OPEN, + } + + t.Run("threshold_100_requires_unanimous", func(t *testing.T) { + f := initFixture(t) + + params := types.DefaultParams() + params.RequiredOpenPorts = []uint32{4444} + params.ConsecutiveWindowsToPostpone = 1 + params.PeerPortPostponeThresholdPercent = 100 + + makeReports(t, f, windowID, target, peers, peerStates) + + f.supernodeKeeper.EXPECT(). + GetAllSuperNodes(gomock.AssignableToTypeOf(f.ctx), sntypes.SuperNodeStateActive). + Return([]sntypes.SuperNode{target}, nil). + Times(1) + f.supernodeKeeper.EXPECT(). + GetAllSuperNodes(gomock.AssignableToTypeOf(f.ctx), sntypes.SuperNodeStatePostponed). + Return([]sntypes.SuperNode{}, nil). + Times(1) + f.supernodeKeeper.EXPECT(). + SetSuperNodePostponed(gomock.AssignableToTypeOf(f.ctx), sdk.ValAddress(targetVal), gomock.Any()). + Times(0) + + if err := f.keeper.EnforceWindowEnd(f.ctx, windowID, params); err != nil { + t.Fatalf("unexpected error: %v", err) + } + }) + + t.Run("threshold_66_allows_two_of_three", func(t *testing.T) { + f := initFixture(t) + + params := types.DefaultParams() + params.RequiredOpenPorts = []uint32{4444} + params.ConsecutiveWindowsToPostpone = 1 + params.PeerPortPostponeThresholdPercent = 66 + + makeReports(t, f, windowID, target, peers, peerStates) + + f.supernodeKeeper.EXPECT(). + GetAllSuperNodes(gomock.AssignableToTypeOf(f.ctx), sntypes.SuperNodeStateActive). + Return([]sntypes.SuperNode{target}, nil). + Times(1) + f.supernodeKeeper.EXPECT(). + GetAllSuperNodes(gomock.AssignableToTypeOf(f.ctx), sntypes.SuperNodeStatePostponed). + Return([]sntypes.SuperNode{}, nil). + Times(1) + f.supernodeKeeper.EXPECT(). + SetSuperNodePostponed(gomock.AssignableToTypeOf(f.ctx), sdk.ValAddress(targetVal), "audit_peer_ports"). + Return(nil). + Times(1) + + if err := f.keeper.EnforceWindowEnd(f.ctx, windowID, params); err != nil { + t.Fatalf("unexpected error: %v", err) + } + }) +} diff --git a/x/audit/v1/keeper/evidence.go b/x/audit/v1/keeper/evidence.go index eea6947..1fa14e6 100644 --- a/x/audit/v1/keeper/evidence.go +++ b/x/audit/v1/keeper/evidence.go @@ -8,8 +8,8 @@ import ( errorsmod "cosmossdk.io/errors" "github.com/LumeraProtocol/lumera/x/audit/v1/types" sdk "github.com/cosmos/cosmos-sdk/types" - gogoproto "github.com/cosmos/gogoproto/proto" "github.com/cosmos/gogoproto/jsonpb" + gogoproto "github.com/cosmos/gogoproto/proto" ) func (k Keeper) CreateEvidence( @@ -39,7 +39,9 @@ func (k Keeper) CreateEvidence( if actionID == "" { // For the initial supported evidence types (action expiration/finalization), action id is required. switch evidenceType { - case types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, types.EvidenceType_EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION: + case types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, + types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, + types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: return 0, types.ErrInvalidActionID } } @@ -89,7 +91,8 @@ func marshalEvidenceMetadataJSON(evidenceType types.EvidenceType, metadataJSON s } return gogoproto.Marshal(&m) - case types.EvidenceType_EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION: + case types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, + types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: var m types.FinalizationEvidenceMetadata if err := u.Unmarshal(strings.NewReader(metadataJSON), &m); err != nil { return nil, fmt.Errorf("unmarshal FinalizationEvidenceMetadata: %w", err) @@ -100,9 +103,12 @@ func marshalEvidenceMetadataJSON(evidenceType types.EvidenceType, metadataJSON s if _, err := addressCodec.StringToBytes(m.AttemptedFinalizerAddress); err != nil { return nil, fmt.Errorf("attempted_finalizer_address is invalid: %w", err) } - if strings.TrimSpace(m.ExpectedFinalizerAddress) != "" { - if _, err := addressCodec.StringToBytes(m.ExpectedFinalizerAddress); err != nil { - return nil, fmt.Errorf("expected_finalizer_address is invalid: %w", err) + for i, addr := range m.ExpectedFinalizerAddresses { + if strings.TrimSpace(addr) == "" { + return nil, fmt.Errorf("expected_finalizer_addresses[%d] is empty", i) + } + if _, err := addressCodec.StringToBytes(addr); err != nil { + return nil, fmt.Errorf("expected_finalizer_addresses[%d] is invalid: %w", i, err) } } return gogoproto.Marshal(&m) @@ -111,4 +117,3 @@ func marshalEvidenceMetadataJSON(evidenceType types.EvidenceType, metadataJSON s return nil, fmt.Errorf("unsupported evidence_type: %s", evidenceType.String()) } } - diff --git a/x/audit/v1/types/evidence.pb.go b/x/audit/v1/types/evidence.pb.go index 9e718f4..893b39d 100644 --- a/x/audit/v1/types/evidence.pb.go +++ b/x/audit/v1/types/evidence.pb.go @@ -26,21 +26,26 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type EvidenceType int32 const ( - EvidenceType_EVIDENCE_TYPE_UNSPECIFIED EvidenceType = 0 - EvidenceType_EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION EvidenceType = 1 - EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED EvidenceType = 2 + EvidenceType_EVIDENCE_TYPE_UNSPECIFIED EvidenceType = 0 + // action finalization rejected due to an invalid signature / signature-derived data. + EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE EvidenceType = 1 + // action finalization rejected because the attempted finalizer is not in the top-10 supernodes. + EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 EvidenceType = 2 + EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED EvidenceType = 3 ) var EvidenceType_name = map[int32]string{ 0: "EVIDENCE_TYPE_UNSPECIFIED", - 1: "EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION", - 2: "EVIDENCE_TYPE_ACTION_EXPIRED", + 1: "EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE", + 2: "EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10", + 3: "EVIDENCE_TYPE_ACTION_EXPIRED", } var EvidenceType_value = map[string]int32{ - "EVIDENCE_TYPE_UNSPECIFIED": 0, - "EVIDENCE_TYPE_ACTION_WRONG_FINALIZATION": 1, - "EVIDENCE_TYPE_ACTION_EXPIRED": 2, + "EVIDENCE_TYPE_UNSPECIFIED": 0, + "EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE": 1, + "EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10": 2, + "EVIDENCE_TYPE_ACTION_EXPIRED": 3, } func (x EvidenceType) String() string { @@ -160,32 +165,34 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/evidence.proto", fileDescriptor_449f638e48abdbaa) } var fileDescriptor_449f638e48abdbaa = []byte{ - // 399 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xcf, 0xae, 0xd2, 0x40, - 0x14, 0xc6, 0x3b, 0x78, 0xbd, 0xc2, 0x88, 0xd0, 0x4c, 0x5c, 0x14, 0x94, 0xda, 0xb8, 0xa1, 0xc1, - 0xd8, 0x06, 0x7d, 0x82, 0x52, 0x06, 0x9d, 0xc4, 0x14, 0x52, 0xf0, 0x1f, 0x9b, 0x49, 0xe9, 0x4c, - 0xa0, 0x46, 0x68, 0xd3, 0x0e, 0x44, 0x12, 0x1f, 0xc2, 0x87, 0xf1, 0x21, 0x5c, 0x12, 0x57, 0xba, - 0x33, 0xf0, 0x22, 0xa6, 0xff, 0x10, 0x8d, 0xc9, 0x5d, 0x9e, 0xdf, 0x37, 0xdf, 0x37, 0xe7, 0x9c, - 0x1c, 0xa8, 0x7e, 0xdc, 0xae, 0x79, 0xec, 0x99, 0xde, 0x96, 0x05, 0xc2, 0xdc, 0xf5, 0x4d, 0xbe, - 0x0b, 0x18, 0xdf, 0xf8, 0xdc, 0x88, 0xe2, 0x50, 0x84, 0xa8, 0x99, 0xeb, 0x46, 0xa6, 0x1b, 0xbb, - 0x7e, 0xbb, 0xe5, 0x87, 0xc9, 0x3a, 0x4c, 0x68, 0x26, 0x9b, 0x79, 0x91, 0xbf, 0x7d, 0xfc, 0xb3, - 0x02, 0xab, 0xb8, 0xb0, 0xa3, 0x47, 0xf0, 0x6e, 0x19, 0x45, 0x03, 0xa6, 0x00, 0x0d, 0xe8, 0x57, - 0x2e, 0x2c, 0x11, 0x61, 0xc8, 0x82, 0xcd, 0x64, 0xbb, 0xf8, 0xc0, 0x7d, 0x41, 0x3d, 0xc6, 0x62, - 0x9e, 0x24, 0x4a, 0x45, 0x03, 0x7a, 0x6d, 0xa0, 0x7c, 0xff, 0xfa, 0xf4, 0x7e, 0x11, 0x6c, 0xe5, - 0xca, 0x54, 0xc4, 0xc1, 0x66, 0xe9, 0x36, 0x0a, 0x43, 0x41, 0x91, 0x0d, 0xe5, 0x98, 0x47, 0x61, - 0x2c, 0x78, 0x7c, 0xce, 0xb8, 0x75, 0x43, 0x46, 0xb3, 0x74, 0x94, 0x21, 0x0f, 0x60, 0xcd, 0xf3, - 0x45, 0x10, 0x6e, 0xd2, 0x36, 0xaf, 0x52, 0xb7, 0x5b, 0xcd, 0x01, 0x61, 0x68, 0x00, 0xef, 0x9d, - 0xa7, 0x10, 0xfb, 0x88, 0x2b, 0xb7, 0x35, 0xa0, 0x37, 0x9e, 0x75, 0x8c, 0x7f, 0xd6, 0x62, 0x94, - 0x73, 0xcf, 0xf6, 0x11, 0x77, 0xeb, 0xfc, 0xa2, 0x42, 0x6d, 0x58, 0x5d, 0x73, 0xe1, 0x31, 0x4f, - 0x78, 0xca, 0xb5, 0x06, 0xf4, 0xba, 0x7b, 0xae, 0x51, 0x17, 0x96, 0xfd, 0x30, 0xba, 0xe2, 0xc1, - 0x72, 0x25, 0x94, 0x3b, 0xd9, 0xa6, 0x1a, 0x25, 0x7e, 0x99, 0xd1, 0xde, 0x67, 0x58, 0xbf, 0xfc, - 0x02, 0x75, 0x60, 0x0b, 0xbf, 0x21, 0x43, 0xec, 0xd8, 0x98, 0xce, 0xde, 0x4f, 0x30, 0x7d, 0xed, - 0x4c, 0x27, 0xd8, 0x26, 0x23, 0x82, 0x87, 0xb2, 0x84, 0x9e, 0xc0, 0xee, 0xdf, 0xb2, 0x65, 0xcf, - 0xc8, 0xd8, 0xa1, 0x6f, 0xdd, 0xb1, 0xf3, 0x82, 0x8e, 0x88, 0x63, 0xbd, 0x22, 0x73, 0x2b, 0x45, - 0x32, 0x40, 0x1a, 0x7c, 0xf8, 0xdf, 0xc7, 0xf8, 0xdd, 0x84, 0xb8, 0x78, 0x28, 0x57, 0x06, 0xbd, - 0x6f, 0x47, 0x15, 0x1c, 0x8e, 0x2a, 0xf8, 0x75, 0x54, 0xc1, 0x97, 0x93, 0x2a, 0x1d, 0x4e, 0xaa, - 0xf4, 0xe3, 0xa4, 0x4a, 0x73, 0xf9, 0xd3, 0x9f, 0xd3, 0x49, 0x17, 0x94, 0x2c, 0xae, 0xb3, 0x63, - 0x78, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x70, 0x39, 0x05, 0x5a, 0x02, 0x00, 0x00, + // 427 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcd, 0x6e, 0xd3, 0x40, + 0x18, 0xf4, 0xa6, 0xa5, 0xa4, 0x4b, 0x48, 0xac, 0x15, 0x07, 0xb7, 0x50, 0x63, 0x71, 0xc1, 0xaa, + 0x84, 0x4d, 0xc8, 0x81, 0xb3, 0xe3, 0x6c, 0x60, 0xa5, 0xca, 0xb1, 0x36, 0x0e, 0x82, 0x5e, 0x56, + 0xae, 0x77, 0xd5, 0x1a, 0x91, 0xd8, 0xb2, 0x37, 0x11, 0x7d, 0x0b, 0x1e, 0x86, 0x2b, 0x77, 0x8e, + 0x11, 0x27, 0xb8, 0xa1, 0xe4, 0x45, 0x50, 0xfc, 0x13, 0x02, 0xaa, 0x94, 0xe3, 0xcc, 0xec, 0xcc, + 0x7e, 0xdf, 0xe8, 0x83, 0xfa, 0xa7, 0xf9, 0x54, 0x64, 0xa1, 0x1d, 0xce, 0x79, 0x2c, 0xed, 0x45, + 0xd7, 0x16, 0x8b, 0x98, 0x8b, 0x59, 0x24, 0xac, 0x34, 0x4b, 0x64, 0x82, 0x3a, 0xa5, 0x6e, 0x15, + 0xba, 0xb5, 0xe8, 0x9e, 0x9e, 0x44, 0x49, 0x3e, 0x4d, 0x72, 0x56, 0xc8, 0x76, 0x09, 0xca, 0xb7, + 0xcf, 0x7e, 0x35, 0x60, 0x13, 0x57, 0x76, 0xf4, 0x14, 0x3e, 0xa8, 0xa3, 0x58, 0xcc, 0x35, 0x60, + 0x00, 0xf3, 0x90, 0xc2, 0x9a, 0x22, 0x1c, 0x39, 0xb0, 0x93, 0xcf, 0xaf, 0x3e, 0x8a, 0x48, 0xb2, + 0x90, 0xf3, 0x4c, 0xe4, 0xb9, 0xd6, 0x30, 0x80, 0x79, 0xdc, 0xd7, 0x7e, 0x7c, 0x7d, 0xf1, 0xa8, + 0x0a, 0x76, 0x4a, 0x65, 0x2c, 0xb3, 0x78, 0x76, 0x4d, 0xdb, 0x95, 0xa1, 0x62, 0x91, 0x0b, 0xd5, + 0x4c, 0xa4, 0x49, 0x26, 0x45, 0xb6, 0xcd, 0x38, 0xd8, 0x93, 0xd1, 0xa9, 0x1d, 0x75, 0xc8, 0x63, + 0x78, 0x1c, 0x46, 0x32, 0x4e, 0x66, 0x9b, 0x31, 0x0f, 0x37, 0x6e, 0xda, 0x2c, 0x09, 0xc2, 0x51, + 0x1f, 0x3e, 0xdc, 0x6e, 0x21, 0x6f, 0x53, 0xa1, 0xdd, 0x33, 0x80, 0xd9, 0x7e, 0x75, 0x66, 0xfd, + 0x57, 0x8b, 0x55, 0xef, 0x1d, 0xdc, 0xa6, 0x82, 0xb6, 0xc4, 0x0e, 0x42, 0xa7, 0xb0, 0x39, 0x15, + 0x32, 0xe4, 0xa1, 0x0c, 0xb5, 0x23, 0x03, 0x98, 0x2d, 0xba, 0xc5, 0xe8, 0x39, 0xac, 0xe7, 0xe1, + 0xec, 0x46, 0xc4, 0xd7, 0x37, 0x52, 0xbb, 0x5f, 0x34, 0xd5, 0xae, 0xe9, 0xb7, 0x05, 0x7b, 0xfe, + 0x0d, 0xc0, 0xd6, 0xee, 0x1f, 0xe8, 0x0c, 0x9e, 0xe0, 0x77, 0x64, 0x80, 0x3d, 0x17, 0xb3, 0xe0, + 0x83, 0x8f, 0xd9, 0xc4, 0x1b, 0xfb, 0xd8, 0x25, 0x43, 0x82, 0x07, 0xaa, 0x82, 0x5e, 0xc3, 0xde, + 0xbf, 0xb2, 0xe3, 0x06, 0x64, 0xe4, 0xb1, 0x21, 0xf1, 0x9c, 0x0b, 0x72, 0xe9, 0x14, 0x60, 0x4c, + 0xde, 0x78, 0x4e, 0x30, 0xa1, 0x98, 0x0d, 0x1d, 0x72, 0x31, 0xa1, 0x58, 0x05, 0xa8, 0x07, 0xed, + 0xfd, 0x46, 0x6f, 0x14, 0x30, 0xe2, 0xb1, 0x60, 0xe4, 0xb3, 0xee, 0x4b, 0xb5, 0x81, 0x0c, 0xf8, + 0xe4, 0x4e, 0x13, 0x7e, 0xef, 0x13, 0x8a, 0x07, 0xea, 0x41, 0xff, 0xfc, 0xfb, 0x4a, 0x07, 0xcb, + 0x95, 0x0e, 0x7e, 0xaf, 0x74, 0xf0, 0x65, 0xad, 0x2b, 0xcb, 0xb5, 0xae, 0xfc, 0x5c, 0xeb, 0xca, + 0xa5, 0xfa, 0xf9, 0xef, 0xf1, 0x6d, 0x2a, 0xce, 0xaf, 0x8e, 0x8a, 0x73, 0xea, 0xfd, 0x09, 0x00, + 0x00, 0xff, 0xff, 0x44, 0x16, 0x0f, 0xea, 0x9c, 0x02, 0x00, 0x00, } func (m *Evidence) Marshal() (dAtA []byte, err error) { diff --git a/x/audit/v1/types/evidence_metadata.pb.go b/x/audit/v1/types/evidence_metadata.pb.go index c6096b0..76b449f 100644 --- a/x/audit/v1/types/evidence_metadata.pb.go +++ b/x/audit/v1/types/evidence_metadata.pb.go @@ -82,8 +82,8 @@ func (m *ExpirationEvidenceMetadata) GetReason() string { type FinalizationEvidenceMetadata struct { // attempted_finalizer_address is the address that attempted finalization. AttemptedFinalizerAddress string `protobuf:"bytes,1,opt,name=attempted_finalizer_address,json=attemptedFinalizerAddress,proto3" json:"attempted_finalizer_address,omitempty"` - // expected_finalizer_address is optional (if there is a known expected finalizer). - ExpectedFinalizerAddress string `protobuf:"bytes,2,opt,name=expected_finalizer_address,json=expectedFinalizerAddress,proto3" json:"expected_finalizer_address,omitempty"` + // expected_finalizer_addresses is optional (if there is a known set of expected finalizers). + ExpectedFinalizerAddresses []string `protobuf:"bytes,2,rep,name=expected_finalizer_addresses,json=expectedFinalizerAddresses,proto3" json:"expected_finalizer_addresses,omitempty"` // reason is optional human-readable context. Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` } @@ -128,11 +128,11 @@ func (m *FinalizationEvidenceMetadata) GetAttemptedFinalizerAddress() string { return "" } -func (m *FinalizationEvidenceMetadata) GetExpectedFinalizerAddress() string { +func (m *FinalizationEvidenceMetadata) GetExpectedFinalizerAddresses() []string { if m != nil { - return m.ExpectedFinalizerAddress + return m.ExpectedFinalizerAddresses } - return "" + return nil } func (m *FinalizationEvidenceMetadata) GetReason() string { @@ -152,7 +152,7 @@ func init() { } var fileDescriptor_09b57e4c2349ab91 = []byte{ - // 295 bytes of a gzipped FileDescriptorProto + // 302 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x29, 0xcd, 0x4d, 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0x2f, 0x33, 0xd4, 0x4f, 0x2d, 0xcb, 0x4c, 0x49, 0xcd, 0x4b, 0x4e, 0x8d, 0xcf, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, @@ -162,16 +162,16 @@ var fileDescriptor_09b57e4c2349ab91 = []byte{ 0xe6, 0x09, 0x69, 0x73, 0x09, 0xa6, 0xc2, 0x65, 0xe3, 0x33, 0x52, 0x33, 0xd3, 0x33, 0x4a, 0x24, 0x18, 0x15, 0x18, 0x35, 0x58, 0x82, 0x04, 0x10, 0x12, 0x1e, 0x60, 0x71, 0x21, 0x31, 0x2e, 0xb6, 0xa2, 0xd4, 0xc4, 0xe2, 0xfc, 0x3c, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x28, 0x4f, 0xe9, - 0x05, 0x23, 0x97, 0x8c, 0x5b, 0x66, 0x5e, 0x62, 0x4e, 0x66, 0x15, 0x76, 0x5b, 0x22, 0xb8, 0xa4, + 0x0d, 0x23, 0x97, 0x8c, 0x5b, 0x66, 0x5e, 0x62, 0x4e, 0x66, 0x15, 0x76, 0x5b, 0x22, 0xb8, 0xa4, 0x13, 0x4b, 0x4a, 0x52, 0x73, 0x0b, 0x4a, 0x52, 0x53, 0xe2, 0xd3, 0x20, 0x2a, 0x53, 0x8b, 0xe2, 0x13, 0x53, 0x52, 0x8a, 0x52, 0x8b, 0x8b, 0xc1, 0xf6, 0x71, 0x3a, 0x49, 0x5c, 0xda, 0xa2, 0x2b, 0x02, 0x75, 0xba, 0x23, 0x44, 0x26, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x48, 0x12, 0xae, 0xd9, - 0x0d, 0xa6, 0x17, 0xaa, 0x40, 0x28, 0x8c, 0x4b, 0x2a, 0xb5, 0xa2, 0x20, 0x35, 0x19, 0xbb, 0xc1, - 0x4c, 0x04, 0x0c, 0x96, 0x80, 0xe9, 0xc5, 0x30, 0x17, 0xe1, 0x55, 0x66, 0x64, 0xaf, 0x3a, 0x69, - 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, - 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x40, 0x05, 0x22, 0xde, 0x4a, - 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x11, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x0c, - 0xfa, 0x2c, 0xf1, 0xd7, 0x01, 0x00, 0x00, + 0x0d, 0xa6, 0x17, 0xaa, 0x40, 0x28, 0x8a, 0x4b, 0x26, 0xb5, 0xa2, 0x20, 0x35, 0x19, 0xab, 0xc1, + 0xa9, 0xc5, 0x12, 0x4c, 0x0a, 0xcc, 0x78, 0x8d, 0x96, 0x82, 0xe9, 0x46, 0x37, 0x39, 0xb5, 0x18, + 0xc9, 0xbb, 0xcc, 0xc8, 0xde, 0x75, 0xd2, 0x3a, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, + 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, + 0x86, 0x28, 0x81, 0x0a, 0x44, 0xdc, 0x95, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x23, 0xc1, + 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xcd, 0xaa, 0x5c, 0xe4, 0xdb, 0x01, 0x00, 0x00, } func (m *ExpirationEvidenceMetadata) Marshal() (dAtA []byte, err error) { @@ -236,12 +236,14 @@ func (m *FinalizationEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, e i-- dAtA[i] = 0x1a } - if len(m.ExpectedFinalizerAddress) > 0 { - i -= len(m.ExpectedFinalizerAddress) - copy(dAtA[i:], m.ExpectedFinalizerAddress) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ExpectedFinalizerAddress))) - i-- - dAtA[i] = 0x12 + if len(m.ExpectedFinalizerAddresses) > 0 { + for iNdEx := len(m.ExpectedFinalizerAddresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ExpectedFinalizerAddresses[iNdEx]) + copy(dAtA[i:], m.ExpectedFinalizerAddresses[iNdEx]) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ExpectedFinalizerAddresses[iNdEx]))) + i-- + dAtA[i] = 0x12 + } } if len(m.AttemptedFinalizerAddress) > 0 { i -= len(m.AttemptedFinalizerAddress) @@ -290,9 +292,11 @@ func (m *FinalizationEvidenceMetadata) Size() (n int) { if l > 0 { n += 1 + l + sovEvidenceMetadata(uint64(l)) } - l = len(m.ExpectedFinalizerAddress) - if l > 0 { - n += 1 + l + sovEvidenceMetadata(uint64(l)) + if len(m.ExpectedFinalizerAddresses) > 0 { + for _, s := range m.ExpectedFinalizerAddresses { + l = len(s) + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } } l = len(m.Reason) if l > 0 { @@ -471,7 +475,7 @@ func (m *FinalizationEvidenceMetadata) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpectedFinalizerAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ExpectedFinalizerAddresses", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -499,7 +503,7 @@ func (m *FinalizationEvidenceMetadata) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ExpectedFinalizerAddress = string(dAtA[iNdEx:postIndex]) + m.ExpectedFinalizerAddresses = append(m.ExpectedFinalizerAddresses, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 3: if wireType != 2 { diff --git a/x/audit/v1/types/params.go b/x/audit/v1/types/params.go index 2ab9eec..a703f84 100644 --- a/x/audit/v1/types/params.go +++ b/x/audit/v1/types/params.go @@ -10,29 +10,31 @@ import ( var _ paramtypes.ParamSet = (*Params)(nil) var ( - KeyReportingWindowBlocks = []byte("ReportingWindowBlocks") - KeyPeerQuorumReports = []byte("PeerQuorumReports") - KeyMinProbeTargetsPerWindow = []byte("MinProbeTargetsPerWindow") - KeyMaxProbeTargetsPerWindow = []byte("MaxProbeTargetsPerWindow") - KeyRequiredOpenPorts = []byte("RequiredOpenPorts") - KeyMinCpuFreePercent = []byte("MinCpuFreePercent") - KeyMinMemFreePercent = []byte("MinMemFreePercent") - KeyMinDiskFreePercent = []byte("MinDiskFreePercent") - KeyConsecutiveWindowsToPostpone = []byte("ConsecutiveWindowsToPostpone") - KeyKeepLastWindowEntries = []byte("KeepLastWindowEntries") + KeyReportingWindowBlocks = []byte("ReportingWindowBlocks") + KeyPeerQuorumReports = []byte("PeerQuorumReports") + KeyMinProbeTargetsPerWindow = []byte("MinProbeTargetsPerWindow") + KeyMaxProbeTargetsPerWindow = []byte("MaxProbeTargetsPerWindow") + KeyRequiredOpenPorts = []byte("RequiredOpenPorts") + KeyMinCpuFreePercent = []byte("MinCpuFreePercent") + KeyMinMemFreePercent = []byte("MinMemFreePercent") + KeyMinDiskFreePercent = []byte("MinDiskFreePercent") + KeyConsecutiveWindowsToPostpone = []byte("ConsecutiveWindowsToPostpone") + KeyKeepLastWindowEntries = []byte("KeepLastWindowEntries") + KeyPeerPortPostponeThresholdPercent = []byte("PeerPortPostponeThresholdPercent") ) var ( - DefaultReportingWindowBlocks = uint64(400) - DefaultPeerQuorumReports = uint32(3) - DefaultMinProbeTargetsPerWindow = uint32(3) - DefaultMaxProbeTargetsPerWindow = uint32(5) - DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} - DefaultMinCpuFreePercent = uint32(0) - DefaultMinMemFreePercent = uint32(0) - DefaultMinDiskFreePercent = uint32(0) - DefaultConsecutiveWindowsToPostpone = uint32(1) - DefaultKeepLastWindowEntries = uint64(200) + DefaultReportingWindowBlocks = uint64(400) + DefaultPeerQuorumReports = uint32(3) + DefaultMinProbeTargetsPerWindow = uint32(3) + DefaultMaxProbeTargetsPerWindow = uint32(5) + DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} + DefaultMinCpuFreePercent = uint32(0) + DefaultMinMemFreePercent = uint32(0) + DefaultMinDiskFreePercent = uint32(0) + DefaultConsecutiveWindowsToPostpone = uint32(1) + DefaultKeepLastWindowEntries = uint64(200) + DefaultPeerPortPostponeThresholdPercent = uint32(100) ) // Params notes @@ -42,7 +44,8 @@ var ( // - min/max_probe_targets_per_window: clamps k_window to a safe range. // - required_open_ports: ports every report must cover. // - min_*_free_percent: minimum required free capacity from self report (0 disables). -// - consecutive_windows_to_postpone: consecutive windows of unanimous peer port CLOSED needed to postpone. +// - consecutive_windows_to_postpone: consecutive windows of peer port CLOSED meeting threshold needed to postpone. +// - peer_port_postpone_threshold_percent: percent of peers that must report CLOSED for port-based postponement (100 = unanimous). // - keep_last_window_entries: how many windows of window-scoped state to keep (pruning at window end). func ParamKeyTable() paramtypes.KeyTable { @@ -60,18 +63,20 @@ func NewParams( minDiskFreePercent uint32, consecutiveWindowsToPostpone uint32, keepLastWindowEntries uint64, + peerPortPostponeThresholdPercent uint32, ) Params { return Params{ - ReportingWindowBlocks: reportingWindowBlocks, - PeerQuorumReports: peerQuorumReports, - MinProbeTargetsPerWindow: minProbeTargetsPerWindow, - MaxProbeTargetsPerWindow: maxProbeTargetsPerWindow, - RequiredOpenPorts: requiredOpenPorts, - MinCpuFreePercent: minCpuFreePercent, - MinMemFreePercent: minMemFreePercent, - MinDiskFreePercent: minDiskFreePercent, - ConsecutiveWindowsToPostpone: consecutiveWindowsToPostpone, - KeepLastWindowEntries: keepLastWindowEntries, + ReportingWindowBlocks: reportingWindowBlocks, + PeerQuorumReports: peerQuorumReports, + MinProbeTargetsPerWindow: minProbeTargetsPerWindow, + MaxProbeTargetsPerWindow: maxProbeTargetsPerWindow, + RequiredOpenPorts: requiredOpenPorts, + MinCpuFreePercent: minCpuFreePercent, + MinMemFreePercent: minMemFreePercent, + MinDiskFreePercent: minDiskFreePercent, + ConsecutiveWindowsToPostpone: consecutiveWindowsToPostpone, + KeepLastWindowEntries: keepLastWindowEntries, + PeerPortPostponeThresholdPercent: peerPortPostponeThresholdPercent, } } @@ -87,6 +92,7 @@ func DefaultParams() Params { DefaultMinDiskFreePercent, DefaultConsecutiveWindowsToPostpone, DefaultKeepLastWindowEntries, + DefaultPeerPortPostponeThresholdPercent, ) } @@ -112,6 +118,9 @@ func (p Params) WithDefaults() Params { if p.KeepLastWindowEntries == 0 { p.KeepLastWindowEntries = DefaultKeepLastWindowEntries } + if p.PeerPortPostponeThresholdPercent == 0 { + p.PeerPortPostponeThresholdPercent = DefaultPeerPortPostponeThresholdPercent + } return p } @@ -127,6 +136,7 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyMinDiskFreePercent, &p.MinDiskFreePercent, validateUint32), paramtypes.NewParamSetPair(KeyConsecutiveWindowsToPostpone, &p.ConsecutiveWindowsToPostpone, validateUint32), paramtypes.NewParamSetPair(KeyKeepLastWindowEntries, &p.KeepLastWindowEntries, validateUint64), + paramtypes.NewParamSetPair(KeyPeerPortPostponeThresholdPercent, &p.PeerPortPostponeThresholdPercent, validateUint32), } } @@ -160,6 +170,9 @@ func (p Params) Validate() error { if p.KeepLastWindowEntries == 0 { return fmt.Errorf("keep_last_window_entries must be > 0") } + if p.PeerPortPostponeThresholdPercent == 0 || p.PeerPortPostponeThresholdPercent > 100 { + return fmt.Errorf("peer_port_postpone_threshold_percent must be within 1..100") + } ports := append([]uint32(nil), p.RequiredOpenPorts...) sort.Slice(ports, func(i, j int) bool { return ports[i] < ports[j] }) diff --git a/x/audit/v1/types/params.pb.go b/x/audit/v1/types/params.pb.go index 06ddcbb..0a4c312 100644 --- a/x/audit/v1/types/params.pb.go +++ b/x/audit/v1/types/params.pb.go @@ -37,12 +37,18 @@ type Params struct { MinCpuFreePercent uint32 `protobuf:"varint,7,opt,name=min_cpu_free_percent,json=minCpuFreePercent,proto3" json:"min_cpu_free_percent,omitempty"` MinMemFreePercent uint32 `protobuf:"varint,8,opt,name=min_mem_free_percent,json=minMemFreePercent,proto3" json:"min_mem_free_percent,omitempty"` MinDiskFreePercent uint32 `protobuf:"varint,9,opt,name=min_disk_free_percent,json=minDiskFreePercent,proto3" json:"min_disk_free_percent,omitempty"` - // Number of consecutive windows a required port must be unanimously reported CLOSED - // by peers (with at least 2 peer reports per window) before postponing the supernode. + // Number of consecutive windows a required port must be reported CLOSED by peers + // at or above peer_port_postpone_threshold_percent before postponing the supernode. ConsecutiveWindowsToPostpone uint32 `protobuf:"varint,10,opt,name=consecutive_windows_to_postpone,json=consecutiveWindowsToPostpone,proto3" json:"consecutive_windows_to_postpone,omitempty"` // How many completed windows to keep in state for window-scoped data like WindowSnapshot, // AuditReport, and related indices. Pruning runs at window end. KeepLastWindowEntries uint64 `protobuf:"varint,11,opt,name=keep_last_window_entries,json=keepLastWindowEntries,proto3" json:"keep_last_window_entries,omitempty"` + // Minimum percent (1-100) of peer reports that must report a required port as CLOSED + // for the port to be treated as CLOSED for postponement purposes. + // + // 100 means unanimous. + // Example: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%). + PeerPortPostponeThresholdPercent uint32 `protobuf:"varint,12,opt,name=peer_port_postpone_threshold_percent,json=peerPortPostponeThresholdPercent,proto3" json:"peer_port_postpone_threshold_percent,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -148,6 +154,13 @@ func (m *Params) GetKeepLastWindowEntries() uint64 { return 0 } +func (m *Params) GetPeerPortPostponeThresholdPercent() uint32 { + if m != nil { + return m.PeerPortPostponeThresholdPercent + } + return 0 +} + func init() { proto.RegisterType((*Params)(nil), "lumera.audit.v1.Params") } @@ -155,35 +168,37 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/params.proto", fileDescriptor_3788ca0fc7eb9d86) } var fileDescriptor_3788ca0fc7eb9d86 = []byte{ - // 440 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0x8a, 0x13, 0x31, - 0x18, 0xc7, 0x3b, 0x6c, 0xad, 0x1a, 0x11, 0xdd, 0xd9, 0x5d, 0x1c, 0x96, 0x32, 0x5b, 0x3c, 0x2d, - 0x1e, 0x66, 0x28, 0x82, 0x82, 0x07, 0x0f, 0xab, 0xeb, 0x49, 0x71, 0x2c, 0x0b, 0x82, 0x97, 0x90, - 0x4e, 0x3f, 0x4b, 0x68, 0x93, 0x2f, 0xfb, 0x25, 0xd3, 0xad, 0x6f, 0xe1, 0x23, 0xf8, 0x1e, 0xbe, - 0x80, 0xc7, 0x3d, 0x7a, 0x94, 0xf6, 0xe2, 0x63, 0x48, 0x92, 0xe9, 0xda, 0x82, 0x5e, 0x86, 0x30, - 0xbf, 0xff, 0x6f, 0xbe, 0x7f, 0x26, 0x61, 0xfd, 0x79, 0xa3, 0x80, 0x44, 0x29, 0x9a, 0x89, 0x74, - 0xe5, 0x62, 0x58, 0x1a, 0x41, 0x42, 0xd9, 0xc2, 0x10, 0x3a, 0x4c, 0x1f, 0x44, 0x5a, 0x04, 0x5a, - 0x2c, 0x86, 0xc7, 0xfb, 0x42, 0x49, 0x8d, 0x65, 0x78, 0xc6, 0xcc, 0xf1, 0xe1, 0x14, 0xa7, 0x18, - 0x96, 0xa5, 0x5f, 0xc5, 0xb7, 0x8f, 0xbf, 0x77, 0x59, 0xaf, 0x0a, 0x9f, 0x4a, 0x9f, 0xb1, 0x47, - 0x04, 0x06, 0xc9, 0x49, 0x3d, 0xe5, 0x57, 0x52, 0x4f, 0xf0, 0x8a, 0x8f, 0xe7, 0x58, 0xcf, 0x6c, - 0x96, 0x0c, 0x92, 0xd3, 0xee, 0xe8, 0xe8, 0x06, 0x7f, 0x0c, 0xf4, 0x2c, 0xc0, 0xb4, 0x60, 0x07, - 0x06, 0x80, 0xf8, 0x65, 0x83, 0xd4, 0x28, 0x1e, 0x43, 0x36, 0xdb, 0x1b, 0x24, 0xa7, 0xf7, 0x47, - 0xfb, 0x1e, 0x7d, 0x08, 0x64, 0x14, 0x41, 0xfa, 0x92, 0xf5, 0x95, 0xd4, 0xdc, 0x10, 0x8e, 0x81, - 0x3b, 0x41, 0x53, 0x70, 0x96, 0x1b, 0xa0, 0x76, 0x66, 0xd6, 0x0d, 0x62, 0xa6, 0xa4, 0xae, 0x7c, - 0xe4, 0x22, 0x26, 0x2a, 0xa0, 0x38, 0x35, 0xf8, 0x62, 0xf9, 0x7f, 0xff, 0x56, 0xeb, 0x8b, 0xe5, - 0xbf, 0xfd, 0x82, 0x1d, 0x10, 0x5c, 0x36, 0x92, 0x60, 0xc2, 0xd1, 0x80, 0xe6, 0xb1, 0x6f, 0x6f, - 0xb0, 0xe7, 0xfb, 0x6e, 0xd0, 0x7b, 0x03, 0xba, 0x0a, 0x7d, 0x4b, 0x76, 0xe8, 0xfb, 0xd6, 0xa6, - 0xe1, 0x9f, 0x09, 0xc0, 0x8f, 0xaa, 0x41, 0xbb, 0xec, 0x76, 0xdc, 0xa0, 0x92, 0xfa, 0x95, 0x69, - 0xde, 0x10, 0x40, 0x15, 0xc1, 0x46, 0x50, 0xa0, 0x76, 0x85, 0x3b, 0x37, 0xc2, 0x3b, 0x50, 0xdb, - 0xc2, 0x90, 0x1d, 0x79, 0x61, 0x22, 0xed, 0x6c, 0xd7, 0xb8, 0x1b, 0x8c, 0x54, 0x49, 0xfd, 0x5a, - 0xda, 0xd9, 0xb6, 0x72, 0xce, 0x4e, 0x6a, 0xd4, 0x16, 0xea, 0xc6, 0xc9, 0x05, 0xb4, 0x5b, 0xb7, - 0xdc, 0x21, 0x37, 0x68, 0x9d, 0x41, 0x0d, 0x19, 0x0b, 0x72, 0x7f, 0x2b, 0x16, 0x7f, 0x80, 0xbd, - 0xc0, 0xaa, 0xcd, 0xa4, 0xcf, 0x59, 0x36, 0x03, 0x30, 0x7c, 0x2e, 0xac, 0xdb, 0x9c, 0x39, 0x68, - 0x47, 0x12, 0x6c, 0x76, 0x2f, 0x1e, 0xba, 0xe7, 0x6f, 0x85, 0x75, 0x51, 0x3e, 0x8f, 0xf0, 0x45, - 0xf7, 0xf7, 0xb7, 0x93, 0xe4, 0xec, 0xc9, 0x8f, 0x55, 0x9e, 0x5c, 0xaf, 0xf2, 0xe4, 0xd7, 0x2a, - 0x4f, 0xbe, 0xae, 0xf3, 0xce, 0xf5, 0x3a, 0xef, 0xfc, 0x5c, 0xe7, 0x9d, 0x4f, 0x0f, 0x97, 0x7f, - 0xaf, 0xaa, 0xfb, 0x62, 0xc0, 0x8e, 0x7b, 0xe1, 0xc2, 0x3d, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, - 0xc3, 0x4a, 0x6d, 0xab, 0xca, 0x02, 0x00, 0x00, + // 475 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xc7, 0x63, 0x35, 0x0d, 0xb0, 0x80, 0xa0, 0x6e, 0x2b, 0xac, 0x2a, 0x72, 0x23, 0xc4, 0xa1, + 0xe2, 0x60, 0x2b, 0x42, 0x02, 0x89, 0x03, 0x87, 0x42, 0x39, 0xf1, 0x61, 0xa2, 0x48, 0x48, 0x5c, + 0x56, 0x1b, 0x7b, 0x48, 0x57, 0xc9, 0x7e, 0x74, 0x76, 0x9d, 0x86, 0x67, 0xe0, 0xc2, 0x23, 0xf0, + 0x38, 0x1c, 0x7b, 0xe4, 0x88, 0x92, 0x0b, 0x8f, 0x81, 0x76, 0xd7, 0x0e, 0xa9, 0x04, 0x97, 0x68, + 0x95, 0xdf, 0xff, 0xe7, 0x99, 0xd9, 0x59, 0xd2, 0x9f, 0xd7, 0x02, 0x90, 0xe5, 0xac, 0xae, 0xb8, + 0xcd, 0x17, 0xc3, 0x5c, 0x33, 0x64, 0xc2, 0x64, 0x1a, 0x95, 0x55, 0xf1, 0xbd, 0x40, 0x33, 0x4f, + 0xb3, 0xc5, 0xf0, 0x68, 0x8f, 0x09, 0x2e, 0x55, 0xee, 0x7f, 0x43, 0xe6, 0xe8, 0x60, 0xaa, 0xa6, + 0xca, 0x1f, 0x73, 0x77, 0x0a, 0xff, 0x3e, 0xfc, 0xba, 0x4b, 0x7a, 0x85, 0xff, 0x54, 0xfc, 0x94, + 0x3c, 0x40, 0xd0, 0x0a, 0x2d, 0x97, 0x53, 0x7a, 0xc9, 0x65, 0xa5, 0x2e, 0xe9, 0x64, 0xae, 0xca, + 0x99, 0x49, 0xa2, 0x41, 0x74, 0xd2, 0x1d, 0x1d, 0x6e, 0xf0, 0x47, 0x4f, 0x4f, 0x3d, 0x8c, 0x33, + 0xb2, 0xaf, 0x01, 0x90, 0x5e, 0xd4, 0x0a, 0x6b, 0x41, 0x43, 0xc8, 0x24, 0x3b, 0x83, 0xe8, 0xe4, + 0xee, 0x68, 0xcf, 0xa1, 0x0f, 0x9e, 0x8c, 0x02, 0x88, 0x5f, 0x90, 0xbe, 0xe0, 0x92, 0x6a, 0x54, + 0x13, 0xa0, 0x96, 0xe1, 0x14, 0xac, 0xa1, 0x1a, 0xb0, 0xa9, 0x99, 0x74, 0xbd, 0x98, 0x08, 0x2e, + 0x0b, 0x17, 0x19, 0x87, 0x44, 0x01, 0x18, 0xaa, 0x7a, 0x9f, 0x2d, 0xff, 0xef, 0xef, 0x36, 0x3e, + 0x5b, 0xfe, 0xdb, 0xcf, 0xc8, 0x3e, 0xc2, 0x45, 0xcd, 0x11, 0x2a, 0xaa, 0x34, 0x48, 0x1a, 0xfa, + 0xed, 0x0d, 0x76, 0x5c, 0xbf, 0x2d, 0x7a, 0xaf, 0x41, 0x16, 0xbe, 0xdf, 0x9c, 0x1c, 0xb8, 0x7e, + 0x4b, 0x5d, 0xd3, 0xcf, 0x08, 0xe0, 0x4a, 0x95, 0x20, 0x6d, 0x72, 0x23, 0x0c, 0x28, 0xb8, 0x7c, + 0xa9, 0xeb, 0xd7, 0x08, 0x50, 0x04, 0xd0, 0x0a, 0x02, 0xc4, 0x75, 0xe1, 0xe6, 0x46, 0x78, 0x0b, + 0x62, 0x5b, 0x18, 0x92, 0x43, 0x27, 0x54, 0xdc, 0xcc, 0xae, 0x1b, 0xb7, 0xbc, 0x11, 0x0b, 0x2e, + 0x5f, 0x71, 0x33, 0xdb, 0x56, 0xce, 0xc8, 0x71, 0xa9, 0xa4, 0x81, 0xb2, 0xb6, 0x7c, 0x01, 0xcd, + 0xe8, 0x86, 0x5a, 0x45, 0xb5, 0x32, 0x56, 0x2b, 0x09, 0x09, 0xf1, 0x72, 0x7f, 0x2b, 0x16, 0x2e, + 0xc0, 0x8c, 0x55, 0xd1, 0x64, 0xe2, 0x67, 0x24, 0x99, 0x01, 0x68, 0x3a, 0x67, 0xc6, 0xb6, 0x3b, + 0x07, 0x69, 0x91, 0x83, 0x49, 0x6e, 0x87, 0xa5, 0x3b, 0xfe, 0x86, 0x19, 0x1b, 0xe4, 0xb3, 0x00, + 0xe3, 0x77, 0xe4, 0x91, 0x5f, 0xba, 0xbb, 0xbb, 0x4d, 0x49, 0x6a, 0xcf, 0x11, 0xcc, 0xb9, 0x9a, + 0x57, 0x9b, 0x09, 0xee, 0xf8, 0x26, 0x06, 0x2e, 0xeb, 0x6e, 0xb3, 0x2d, 0x3c, 0x6e, 0x83, 0xcd, + 0x3c, 0xcf, 0xbb, 0xbf, 0xbf, 0x1f, 0x47, 0xa7, 0x8f, 0x7f, 0xac, 0xd2, 0xe8, 0x6a, 0x95, 0x46, + 0xbf, 0x56, 0x69, 0xf4, 0x6d, 0x9d, 0x76, 0xae, 0xd6, 0x69, 0xe7, 0xe7, 0x3a, 0xed, 0x7c, 0xba, + 0xbf, 0xfc, 0xfb, 0xf4, 0xed, 0x17, 0x0d, 0x66, 0xd2, 0xf3, 0x0f, 0xf8, 0xc9, 0x9f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xe5, 0x8c, 0xda, 0xf3, 0x1a, 0x03, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -240,6 +255,9 @@ func (this *Params) Equal(that interface{}) bool { if this.KeepLastWindowEntries != that1.KeepLastWindowEntries { return false } + if this.PeerPortPostponeThresholdPercent != that1.PeerPortPostponeThresholdPercent { + return false + } return true } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -262,6 +280,11 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.PeerPortPostponeThresholdPercent != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.PeerPortPostponeThresholdPercent)) + i-- + dAtA[i] = 0x60 + } if m.KeepLastWindowEntries != 0 { i = encodeVarintParams(dAtA, i, uint64(m.KeepLastWindowEntries)) i-- @@ -379,6 +402,9 @@ func (m *Params) Size() (n int) { if m.KeepLastWindowEntries != 0 { n += 1 + sovParams(uint64(m.KeepLastWindowEntries)) } + if m.PeerPortPostponeThresholdPercent != 0 { + n += 1 + sovParams(uint64(m.PeerPortPostponeThresholdPercent)) + } return n } @@ -664,6 +690,25 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerPortPostponeThresholdPercent", wireType) + } + m.PeerPortPostponeThresholdPercent = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PeerPortPostponeThresholdPercent |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) From 84e65190e0c8630fb730980e5dda0eb4fcbcb617 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 4 Feb 2026 18:40:20 +0500 Subject: [PATCH 10/18] x/audit: lean metada --- proto/lumera/audit/v1/evidence_metadata.proto | 30 +- x/action/v1/keeper/action.go | 14 +- x/action/v1/keeper/action_test.go | 9 +- x/action/v1/keeper/audit_evidence.go | 109 ++++- x/audit/v1/keeper/evidence.go | 50 +- x/audit/v1/keeper/evidence_test.go | 34 +- x/audit/v1/keeper/msg_submit_evidence.go | 7 + x/audit/v1/simulation/submit_evidence.go | 36 +- x/audit/v1/types/evidence_metadata.pb.go | 432 ++++++++++-------- 9 files changed, 435 insertions(+), 286 deletions(-) diff --git a/proto/lumera/audit/v1/evidence_metadata.proto b/proto/lumera/audit/v1/evidence_metadata.proto index c4a4e19..29a5d4d 100644 --- a/proto/lumera/audit/v1/evidence_metadata.proto +++ b/proto/lumera/audit/v1/evidence_metadata.proto @@ -6,23 +6,21 @@ import "cosmos_proto/cosmos.proto"; option go_package = "x/audit/v1/types"; -// ExpirationEvidenceMetadata is metadata for evidence about an action expiring. -message ExpirationEvidenceMetadata { - // expiration_height is the height at which the action expired (if known). - uint64 expiration_height = 1; - - // reason is optional human-readable context. - string reason = 2; +// ActionExpiredEvidenceMetadata is metadata for evidence about an action expiring. +message ActionExpiredEvidenceMetadata { + // top_10_validator_addresses is the expected validator set for the action's block height. + repeated string top_10_validator_addresses = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } -// FinalizationEvidenceMetadata is metadata for evidence about finalization behavior. -message FinalizationEvidenceMetadata { - // attempted_finalizer_address is the address that attempted finalization. - string attempted_finalizer_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // expected_finalizer_addresses is optional (if there is a known set of expected finalizers). - repeated string expected_finalizer_addresses = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +// ActionFinalizationSignatureFailureEvidenceMetadata is metadata for evidence about an action finalization +// rejected due to invalid signature / signature-derived data. +message ActionFinalizationSignatureFailureEvidenceMetadata { + repeated string top_10_validator_addresses = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} - // reason is optional human-readable context. - string reason = 3; +// ActionFinalizationNotInTop10EvidenceMetadata is metadata for evidence about an action finalization +// rejected because the attempted finalizer is not in the top-10 supernodes. +message ActionFinalizationNotInTop10EvidenceMetadata { + // top_10_validator_addresses is the expected validator set for the action's block height. + repeated string top_10_validator_addresses = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } diff --git a/x/action/v1/keeper/action.go b/x/action/v1/keeper/action.go index c5f615f..7d4efde 100644 --- a/x/action/v1/keeper/action.go +++ b/x/action/v1/keeper/action.go @@ -194,6 +194,9 @@ func (k *Keeper) FinalizeAction(ctx sdk.Context, actionID string, superNodeAccou return errors.Wrap(actiontypes.ErrUnauthorizedSN, rejectReason) } + // Make the top-10 validator addresses available for downstream handler logic (e.g. signature failure evidence metadata). + ctx = ctx.WithValue(ctxKeyTop10ValidatorAddresses{}, expectedFinalizerAddresses) + // Get the appropriate handler for this action type handler, err := k.actionRegistry.GetHandler(existingAction.ActionType) if err != nil { @@ -557,7 +560,7 @@ func (k *Keeper) checkFinalizerEligibility(ctx sdk.Context, action *actiontypes. return false, "", nil, errors.Wrapf(sdkerrors.ErrInvalidRequest, "failed to query top supernodes: %s", err) } - expectedFinalizerAddresses := make([]string, 0, len(topSuperNodesResp.Supernodes)) + top10ValidatorAddresses := make([]string, 0, len(topSuperNodesResp.Supernodes)) // Check if superNode is in the top-10 ACTIVE list isInTop10 := false @@ -568,7 +571,7 @@ func (k *Keeper) checkFinalizerEligibility(ctx sdk.Context, action *actiontypes. "top_supernodes_count", len(topSuperNodesResp.Supernodes)) for _, sn := range topSuperNodesResp.Supernodes { - expectedFinalizerAddresses = append(expectedFinalizerAddresses, sn.SupernodeAccount) + top10ValidatorAddresses = append(top10ValidatorAddresses, sn.ValidatorAddress) k.Logger().Debug("Comparing supernodes", "validator_address", sn.ValidatorAddress, @@ -576,7 +579,6 @@ func (k *Keeper) checkFinalizerEligibility(ctx sdk.Context, action *actiontypes. if sn.SupernodeAccount == superNodeAccount { isInTop10 = true - break } } @@ -585,10 +587,10 @@ func (k *Keeper) checkFinalizerEligibility(ctx sdk.Context, action *actiontypes. "supernode %s is not in the top-10 ACTIVE supernodes for block height %d", superNodeAccount, action.BlockHeight, - ), expectedFinalizerAddresses, nil + ), top10ValidatorAddresses, nil } - return true, "", expectedFinalizerAddresses, nil + return true, "", top10ValidatorAddresses, nil } // DistributeFees splits fees among SuperNodes and optionally a foundation address @@ -788,6 +790,8 @@ func (k *Keeper) processExpiredActionsInState(ctx sdk.Context, state actiontypes return false // Continue iteration } + k.RecordActionExpired(ctx, action) + // Increment counter *expiredCount++ diff --git a/x/action/v1/keeper/action_test.go b/x/action/v1/keeper/action_test.go index 2af3267..fafc36b 100644 --- a/x/action/v1/keeper/action_test.go +++ b/x/action/v1/keeper/action_test.go @@ -312,10 +312,15 @@ func (suite *KeeperTestSuite) TestFinalizeAction() { call := suite.mockAuditKeeper.CreateCalls[len(suite.mockAuditKeeper.CreateCalls)-1] suite.Equal(tc.evidenceType, call.EvidenceType) + if tc.evidenceType == audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE { + var meta audittypes.ActionFinalizationSignatureFailureEvidenceMetadata + suite.Require().NoError(json.Unmarshal([]byte(call.MetadataJSON), &meta)) + suite.NotEmpty(meta.Top_10ValidatorAddresses) + } if tc.evidenceType == audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 { - var meta audittypes.FinalizationEvidenceMetadata + var meta audittypes.ActionFinalizationNotInTop10EvidenceMetadata suite.Require().NoError(json.Unmarshal([]byte(call.MetadataJSON), &meta)) - suite.NotEmpty(meta.ExpectedFinalizerAddresses) + suite.NotEmpty(meta.Top_10ValidatorAddresses) } } else { suite.Equal(startEvidenceCalls, len(suite.mockAuditKeeper.CreateCalls)) diff --git a/x/action/v1/keeper/audit_evidence.go b/x/action/v1/keeper/audit_evidence.go index dd49d6c..e5de488 100644 --- a/x/action/v1/keeper/audit_evidence.go +++ b/x/action/v1/keeper/audit_evidence.go @@ -6,9 +6,24 @@ import ( actiontypes "github.com/LumeraProtocol/lumera/x/action/v1/types" audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" sdk "github.com/cosmos/cosmos-sdk/types" ) +type ctxKeyTop10ValidatorAddresses struct{} + +func top10ValidatorAddressesFromContext(ctx sdk.Context) []string { + v := ctx.Value(ctxKeyTop10ValidatorAddresses{}) + if v == nil { + return nil + } + addrs, ok := v.([]string) + if !ok { + return nil + } + return addrs +} + func (k *Keeper) recordFinalizationEvidence( ctx sdk.Context, actionID string, @@ -30,13 +45,26 @@ func (k *Keeper) recordFinalizationEvidence( return 0, fmt.Errorf("module reporter address: %w", err) } - metaJSON, err := json.Marshal(audittypes.FinalizationEvidenceMetadata{ - AttemptedFinalizerAddress: attemptedFinalizerAddress, - ExpectedFinalizerAddresses: expectedFinalizerAddresses, - Reason: reason, - }) - if err != nil { - return 0, fmt.Errorf("marshal evidence metadata: %w", err) + var metadataJSON string + switch evidenceType { + case audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE: + metaJSON, err := json.Marshal(audittypes.ActionFinalizationSignatureFailureEvidenceMetadata{ + Top_10ValidatorAddresses: expectedFinalizerAddresses, + }) + if err != nil { + return 0, fmt.Errorf("marshal evidence metadata: %w", err) + } + metadataJSON = string(metaJSON) + case audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: + metaJSON, err := json.Marshal(audittypes.ActionFinalizationNotInTop10EvidenceMetadata{ + Top_10ValidatorAddresses: expectedFinalizerAddresses, + }) + if err != nil { + return 0, fmt.Errorf("marshal evidence metadata: %w", err) + } + metadataJSON = string(metaJSON) + default: + return 0, fmt.Errorf("unsupported finalization evidence type: %s", evidenceType.String()) } return k.auditKeeper.CreateEvidence( @@ -45,7 +73,7 @@ func (k *Keeper) recordFinalizationEvidence( subjectAddress, actionID, evidenceType, - string(metaJSON), + metadataJSON, ) } @@ -108,12 +136,13 @@ func (k *Keeper) RecordFinalizationSignatureFailure( attemptedFinalizerAddress string, reason string, ) uint64 { + top10ValidatorAddresses := top10ValidatorAddressesFromContext(ctx) return k.recordFinalizationRejection( ctx, action, attemptedFinalizerAddress, reason, - nil, + top10ValidatorAddresses, audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, ) } @@ -134,3 +163,65 @@ func (k *Keeper) RecordFinalizationNotInTop10( audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10, ) } + +func (k *Keeper) RecordActionExpired(ctx sdk.Context, action *actiontypes.Action) { + if k.auditKeeper == nil || action == nil { + return + } + if action.ActionID == "" { + k.Logger().Error("failed to record action expiration evidence: action_id is required") + return + } + + reporterAddress, err := k.addressCodec.BytesToString(actiontypes.ModuleAccountAddress) + if err != nil { + k.Logger().Error("failed to record action expiration evidence: module reporter address", "err", err) + return + } + + topSuperNodesReq := &sntypes.QueryGetTopSuperNodesForBlockRequest{ + BlockHeight: int32(action.BlockHeight), + Limit: 10, + State: sntypes.SuperNodeStateActive.String(), + } + topSuperNodesResp, err := k.supernodeQueryServer.GetTopSuperNodesForBlock(ctx, topSuperNodesReq) + if err != nil { + k.Logger().Error("failed to record action expiration evidence: query top supernodes", "action_id", action.ActionID, "err", err) + return + } + + top10ValidatorAddresses := make([]string, 0, len(topSuperNodesResp.Supernodes)) + for _, sn := range topSuperNodesResp.Supernodes { + top10ValidatorAddresses = append(top10ValidatorAddresses, sn.ValidatorAddress) + } + + metaJSON, err := json.Marshal(audittypes.ActionExpiredEvidenceMetadata{ + Top_10ValidatorAddresses: top10ValidatorAddresses, + }) + if err != nil { + k.Logger().Error("failed to record action expiration evidence: marshal evidence metadata", "action_id", action.ActionID, "err", err) + return + } + + metadataJSON := string(metaJSON) + for _, sn := range topSuperNodesResp.Supernodes { + if sn.SupernodeAccount == "" { + continue + } + if _, err := k.auditKeeper.CreateEvidence( + ctx, + reporterAddress, + sn.SupernodeAccount, + action.ActionID, + audittypes.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, + metadataJSON, + ); err != nil { + k.Logger().Error( + "failed to record action expiration evidence", + "action_id", action.ActionID, + "subject", sn.SupernodeAccount, + "err", err, + ) + } + } +} diff --git a/x/audit/v1/keeper/evidence.go b/x/audit/v1/keeper/evidence.go index 1fa14e6..9700861 100644 --- a/x/audit/v1/keeper/evidence.go +++ b/x/audit/v1/keeper/evidence.go @@ -8,6 +8,7 @@ import ( errorsmod "cosmossdk.io/errors" "github.com/LumeraProtocol/lumera/x/audit/v1/types" sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/gogoproto/jsonpb" gogoproto "github.com/cosmos/gogoproto/proto" ) @@ -31,6 +32,19 @@ func (k Keeper) CreateEvidence( return 0, types.ErrInvalidEvidenceType } + switch evidenceType { + case types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, + types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, + types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: + expectedReporter, err := k.addressCodec.BytesToString(authtypes.NewModuleAddress("action")) + if err != nil { + return 0, errorsmod.Wrap(types.ErrInvalidReporter, err.Error()) + } + if reporterAddress != expectedReporter { + return 0, errorsmod.Wrap(types.ErrInvalidReporter, "reporter must be the action module account") + } + } + metadataJSON = strings.TrimSpace(metadataJSON) if metadataJSON == "" { return 0, types.ErrInvalidMetadata @@ -46,7 +60,7 @@ func (k Keeper) CreateEvidence( } } - metadataBytes, err := marshalEvidenceMetadataJSON(evidenceType, metadataJSON, k.addressCodec) + metadataBytes, err := marshalEvidenceMetadataJSON(evidenceType, metadataJSON) if err != nil { return 0, errorsmod.Wrap(types.ErrInvalidMetadata, err.Error()) } @@ -78,38 +92,28 @@ func (k Keeper) CreateEvidence( return evidenceID, nil } -func marshalEvidenceMetadataJSON(evidenceType types.EvidenceType, metadataJSON string, addressCodec interface { - StringToBytes(text string) ([]byte, error) -}) ([]byte, error) { +func marshalEvidenceMetadataJSON(evidenceType types.EvidenceType, metadataJSON string) ([]byte, error) { u := &jsonpb.Unmarshaler{} switch evidenceType { case types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED: - var m types.ExpirationEvidenceMetadata + var m types.ActionExpiredEvidenceMetadata if err := u.Unmarshal(strings.NewReader(metadataJSON), &m); err != nil { - return nil, fmt.Errorf("unmarshal ExpirationEvidenceMetadata: %w", err) + return nil, fmt.Errorf("unmarshal ActionExpiredEvidenceMetadata: %w", err) } return gogoproto.Marshal(&m) - case types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, - types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: - var m types.FinalizationEvidenceMetadata + case types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE: + var m types.ActionFinalizationSignatureFailureEvidenceMetadata if err := u.Unmarshal(strings.NewReader(metadataJSON), &m); err != nil { - return nil, fmt.Errorf("unmarshal FinalizationEvidenceMetadata: %w", err) - } - if strings.TrimSpace(m.AttemptedFinalizerAddress) == "" { - return nil, fmt.Errorf("attempted_finalizer_address is required") - } - if _, err := addressCodec.StringToBytes(m.AttemptedFinalizerAddress); err != nil { - return nil, fmt.Errorf("attempted_finalizer_address is invalid: %w", err) + return nil, fmt.Errorf("unmarshal ActionFinalizationSignatureFailureEvidenceMetadata: %w", err) } - for i, addr := range m.ExpectedFinalizerAddresses { - if strings.TrimSpace(addr) == "" { - return nil, fmt.Errorf("expected_finalizer_addresses[%d] is empty", i) - } - if _, err := addressCodec.StringToBytes(addr); err != nil { - return nil, fmt.Errorf("expected_finalizer_addresses[%d] is invalid: %w", i, err) - } + return gogoproto.Marshal(&m) + + case types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: + var m types.ActionFinalizationNotInTop10EvidenceMetadata + if err := u.Unmarshal(strings.NewReader(metadataJSON), &m); err != nil { + return nil, fmt.Errorf("unmarshal ActionFinalizationNotInTop10EvidenceMetadata: %w", err) } return gogoproto.Marshal(&m) diff --git a/x/audit/v1/keeper/evidence_test.go b/x/audit/v1/keeper/evidence_test.go index 2d0f9a4..ba2de23 100644 --- a/x/audit/v1/keeper/evidence_test.go +++ b/x/audit/v1/keeper/evidence_test.go @@ -1,10 +1,13 @@ package keeper_test import ( + "encoding/json" "testing" "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/stretchr/testify/require" ) @@ -14,24 +17,39 @@ func TestSubmitEvidenceAndQueries(t *testing.T) { ms := keeper.NewMsgServerImpl(f.keeper) qs := keeper.NewQueryServerImpl(f.keeper) - reporter, err := f.addressCodec.BytesToString([]byte("reporter_address_20b")) + reporter, err := f.addressCodec.BytesToString(authtypes.NewModuleAddress("action")) require.NoError(t, err) subject, err := f.addressCodec.BytesToString([]byte("subject_address_20bb")) require.NoError(t, err) - resp, err := ms.SubmitEvidence(f.ctx, &types.MsgSubmitEvidence{ + metaBz, err := json.Marshal(types.ActionExpiredEvidenceMetadata{ + Top_10ValidatorAddresses: []string{sdk.ValAddress([]byte("validator_address_20")).String()}, + }) + require.NoError(t, err) + + _, err = ms.SubmitEvidence(f.ctx, &types.MsgSubmitEvidence{ Creator: reporter, SubjectAddress: subject, EvidenceType: types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, ActionId: "action-123", - Metadata: `{"expiration_height":123,"reason":"unit test"}`, + Metadata: string(metaBz), }) + require.Error(t, err) + + respID, err := f.keeper.CreateEvidence( + f.ctx, + reporter, + subject, + "action-123", + types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, + string(metaBz), + ) require.NoError(t, err) - require.Equal(t, uint64(1), resp.EvidenceId) + require.Equal(t, uint64(1), respID) - gotByID, err := qs.EvidenceById(f.ctx, &types.QueryEvidenceByIdRequest{EvidenceId: resp.EvidenceId}) + gotByID, err := qs.EvidenceById(f.ctx, &types.QueryEvidenceByIdRequest{EvidenceId: respID}) require.NoError(t, err) - require.Equal(t, resp.EvidenceId, gotByID.Evidence.EvidenceId) + require.Equal(t, respID, gotByID.Evidence.EvidenceId) require.Equal(t, subject, gotByID.Evidence.SubjectAddress) require.Equal(t, reporter, gotByID.Evidence.ReporterAddress) require.Equal(t, "action-123", gotByID.Evidence.ActionId) @@ -41,10 +59,10 @@ func TestSubmitEvidenceAndQueries(t *testing.T) { gotBySubject, err := qs.EvidenceBySubject(f.ctx, &types.QueryEvidenceBySubjectRequest{SubjectAddress: subject}) require.NoError(t, err) require.Len(t, gotBySubject.Evidence, 1) - require.Equal(t, resp.EvidenceId, gotBySubject.Evidence[0].EvidenceId) + require.Equal(t, respID, gotBySubject.Evidence[0].EvidenceId) gotByAction, err := qs.EvidenceByAction(f.ctx, &types.QueryEvidenceByActionRequest{ActionId: "action-123"}) require.NoError(t, err) require.Len(t, gotByAction.Evidence, 1) - require.Equal(t, resp.EvidenceId, gotByAction.Evidence[0].EvidenceId) + require.Equal(t, respID, gotByAction.Evidence[0].EvidenceId) } diff --git a/x/audit/v1/keeper/msg_submit_evidence.go b/x/audit/v1/keeper/msg_submit_evidence.go index f591540..835acaf 100644 --- a/x/audit/v1/keeper/msg_submit_evidence.go +++ b/x/audit/v1/keeper/msg_submit_evidence.go @@ -12,6 +12,13 @@ func (k msgServer) SubmitEvidence(ctx context.Context, msg *types.MsgSubmitEvide return nil, errorsmod.Wrap(types.ErrInvalidSigner, "empty request") } + switch msg.EvidenceType { + case types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, + types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10, + types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED: + return nil, errorsmod.Wrap(types.ErrInvalidEvidenceType, "evidence type is reserved for the action module") + } + evidenceID, err := k.Keeper.CreateEvidence(ctx, msg.Creator, msg.SubjectAddress, msg.ActionId, msg.EvidenceType, msg.Metadata) if err != nil { return nil, err diff --git a/x/audit/v1/simulation/submit_evidence.go b/x/audit/v1/simulation/submit_evidence.go index 6ac2310..2f75e3d 100644 --- a/x/audit/v1/simulation/submit_evidence.go +++ b/x/audit/v1/simulation/submit_evidence.go @@ -1,15 +1,12 @@ package simulation import ( - "encoding/json" "math/rand" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" "github.com/LumeraProtocol/lumera/x/audit/v1/types" @@ -23,33 +20,10 @@ func SimulateMsgSubmitEvidence( ) simtypes.Operation { return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - simAccount, _ := simtypes.RandomAcc(r, accs) - subjectAccount, _ := simtypes.RandomAcc(r, accs) - - metadataBz, _ := json.Marshal(types.ExpirationEvidenceMetadata{ - ExpirationHeight: uint64(ctx.BlockHeight()), - Reason: "simulation", - }) - - msg := &types.MsgSubmitEvidence{ - Creator: simAccount.Address.String(), - SubjectAddress: subjectAccount.Address.String(), - EvidenceType: types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED, - ActionId: "sim-action-id", - Metadata: string(metadataBz), - } - - return simulation.GenAndDeliverTxWithRandFees(simulation.OperationInput{ - R: r, - App: app, - TxGen: txGen, - Cdc: (*codec.ProtoCodec)(nil), - Msg: msg, - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - }) + return simtypes.NoOpMsg( + types.ModuleName, + sdk.MsgTypeURL(&types.MsgSubmitEvidence{}), + "no public evidence types are available to submit (action evidence types are reserved for the action module)", + ), nil, nil } } diff --git a/x/audit/v1/types/evidence_metadata.pb.go b/x/audit/v1/types/evidence_metadata.pb.go index 76b449f..cbbe6ea 100644 --- a/x/audit/v1/types/evidence_metadata.pb.go +++ b/x/audit/v1/types/evidence_metadata.pb.go @@ -23,26 +23,24 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// ExpirationEvidenceMetadata is metadata for evidence about an action expiring. -type ExpirationEvidenceMetadata struct { - // expiration_height is the height at which the action expired (if known). - ExpirationHeight uint64 `protobuf:"varint,1,opt,name=expiration_height,json=expirationHeight,proto3" json:"expiration_height,omitempty"` - // reason is optional human-readable context. - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` -} - -func (m *ExpirationEvidenceMetadata) Reset() { *m = ExpirationEvidenceMetadata{} } -func (m *ExpirationEvidenceMetadata) String() string { return proto.CompactTextString(m) } -func (*ExpirationEvidenceMetadata) ProtoMessage() {} -func (*ExpirationEvidenceMetadata) Descriptor() ([]byte, []int) { +// ActionExpiredEvidenceMetadata is metadata for evidence about an action expiring. +type ActionExpiredEvidenceMetadata struct { + // top_10_validator_addresses is the expected validator set for the action's block height. + Top_10ValidatorAddresses []string `protobuf:"bytes,1,rep,name=top_10_validator_addresses,json=top10ValidatorAddresses,proto3" json:"top_10_validator_addresses,omitempty"` +} + +func (m *ActionExpiredEvidenceMetadata) Reset() { *m = ActionExpiredEvidenceMetadata{} } +func (m *ActionExpiredEvidenceMetadata) String() string { return proto.CompactTextString(m) } +func (*ActionExpiredEvidenceMetadata) ProtoMessage() {} +func (*ActionExpiredEvidenceMetadata) Descriptor() ([]byte, []int) { return fileDescriptor_09b57e4c2349ab91, []int{0} } -func (m *ExpirationEvidenceMetadata) XXX_Unmarshal(b []byte) error { +func (m *ActionExpiredEvidenceMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *ExpirationEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *ActionExpiredEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_ExpirationEvidenceMetadata.Marshal(b, m, deterministic) + return xxx_messageInfo_ActionExpiredEvidenceMetadata.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -52,54 +50,47 @@ func (m *ExpirationEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } -func (m *ExpirationEvidenceMetadata) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExpirationEvidenceMetadata.Merge(m, src) +func (m *ActionExpiredEvidenceMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_ActionExpiredEvidenceMetadata.Merge(m, src) } -func (m *ExpirationEvidenceMetadata) XXX_Size() int { +func (m *ActionExpiredEvidenceMetadata) XXX_Size() int { return m.Size() } -func (m *ExpirationEvidenceMetadata) XXX_DiscardUnknown() { - xxx_messageInfo_ExpirationEvidenceMetadata.DiscardUnknown(m) +func (m *ActionExpiredEvidenceMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_ActionExpiredEvidenceMetadata.DiscardUnknown(m) } -var xxx_messageInfo_ExpirationEvidenceMetadata proto.InternalMessageInfo +var xxx_messageInfo_ActionExpiredEvidenceMetadata proto.InternalMessageInfo -func (m *ExpirationEvidenceMetadata) GetExpirationHeight() uint64 { +func (m *ActionExpiredEvidenceMetadata) GetTop_10ValidatorAddresses() []string { if m != nil { - return m.ExpirationHeight + return m.Top_10ValidatorAddresses } - return 0 + return nil } -func (m *ExpirationEvidenceMetadata) GetReason() string { - if m != nil { - return m.Reason - } - return "" +// ActionFinalizationSignatureFailureEvidenceMetadata is metadata for evidence about an action finalization +// rejected due to invalid signature / signature-derived data. +type ActionFinalizationSignatureFailureEvidenceMetadata struct { + Top_10ValidatorAddresses []string `protobuf:"bytes,1,rep,name=top_10_validator_addresses,json=top10ValidatorAddresses,proto3" json:"top_10_validator_addresses,omitempty"` } -// FinalizationEvidenceMetadata is metadata for evidence about finalization behavior. -type FinalizationEvidenceMetadata struct { - // attempted_finalizer_address is the address that attempted finalization. - AttemptedFinalizerAddress string `protobuf:"bytes,1,opt,name=attempted_finalizer_address,json=attemptedFinalizerAddress,proto3" json:"attempted_finalizer_address,omitempty"` - // expected_finalizer_addresses is optional (if there is a known set of expected finalizers). - ExpectedFinalizerAddresses []string `protobuf:"bytes,2,rep,name=expected_finalizer_addresses,json=expectedFinalizerAddresses,proto3" json:"expected_finalizer_addresses,omitempty"` - // reason is optional human-readable context. - Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) Reset() { + *m = ActionFinalizationSignatureFailureEvidenceMetadata{} } - -func (m *FinalizationEvidenceMetadata) Reset() { *m = FinalizationEvidenceMetadata{} } -func (m *FinalizationEvidenceMetadata) String() string { return proto.CompactTextString(m) } -func (*FinalizationEvidenceMetadata) ProtoMessage() {} -func (*FinalizationEvidenceMetadata) Descriptor() ([]byte, []int) { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) String() string { + return proto.CompactTextString(m) +} +func (*ActionFinalizationSignatureFailureEvidenceMetadata) ProtoMessage() {} +func (*ActionFinalizationSignatureFailureEvidenceMetadata) Descriptor() ([]byte, []int) { return fileDescriptor_09b57e4c2349ab91, []int{1} } -func (m *FinalizationEvidenceMetadata) XXX_Unmarshal(b []byte) error { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *FinalizationEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_FinalizationEvidenceMetadata.Marshal(b, m, deterministic) + return xxx_messageInfo_ActionFinalizationSignatureFailureEvidenceMetadata.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -109,42 +100,80 @@ func (m *FinalizationEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *FinalizationEvidenceMetadata) XXX_Merge(src proto.Message) { - xxx_messageInfo_FinalizationEvidenceMetadata.Merge(m, src) +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_ActionFinalizationSignatureFailureEvidenceMetadata.Merge(m, src) } -func (m *FinalizationEvidenceMetadata) XXX_Size() int { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) XXX_Size() int { return m.Size() } -func (m *FinalizationEvidenceMetadata) XXX_DiscardUnknown() { - xxx_messageInfo_FinalizationEvidenceMetadata.DiscardUnknown(m) +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_ActionFinalizationSignatureFailureEvidenceMetadata.DiscardUnknown(m) } -var xxx_messageInfo_FinalizationEvidenceMetadata proto.InternalMessageInfo +var xxx_messageInfo_ActionFinalizationSignatureFailureEvidenceMetadata proto.InternalMessageInfo -func (m *FinalizationEvidenceMetadata) GetAttemptedFinalizerAddress() string { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) GetTop_10ValidatorAddresses() []string { if m != nil { - return m.AttemptedFinalizerAddress + return m.Top_10ValidatorAddresses } - return "" + return nil } -func (m *FinalizationEvidenceMetadata) GetExpectedFinalizerAddresses() []string { - if m != nil { - return m.ExpectedFinalizerAddresses +// ActionFinalizationNotInTop10EvidenceMetadata is metadata for evidence about an action finalization +// rejected because the attempted finalizer is not in the top-10 supernodes. +type ActionFinalizationNotInTop10EvidenceMetadata struct { + // top_10_validator_addresses is the expected validator set for the action's block height. + Top_10ValidatorAddresses []string `protobuf:"bytes,1,rep,name=top_10_validator_addresses,json=top10ValidatorAddresses,proto3" json:"top_10_validator_addresses,omitempty"` +} + +func (m *ActionFinalizationNotInTop10EvidenceMetadata) Reset() { + *m = ActionFinalizationNotInTop10EvidenceMetadata{} +} +func (m *ActionFinalizationNotInTop10EvidenceMetadata) String() string { + return proto.CompactTextString(m) +} +func (*ActionFinalizationNotInTop10EvidenceMetadata) ProtoMessage() {} +func (*ActionFinalizationNotInTop10EvidenceMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_09b57e4c2349ab91, []int{2} +} +func (m *ActionFinalizationNotInTop10EvidenceMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ActionFinalizationNotInTop10EvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ActionFinalizationNotInTop10EvidenceMetadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return nil } +func (m *ActionFinalizationNotInTop10EvidenceMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_ActionFinalizationNotInTop10EvidenceMetadata.Merge(m, src) +} +func (m *ActionFinalizationNotInTop10EvidenceMetadata) XXX_Size() int { + return m.Size() +} +func (m *ActionFinalizationNotInTop10EvidenceMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_ActionFinalizationNotInTop10EvidenceMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_ActionFinalizationNotInTop10EvidenceMetadata proto.InternalMessageInfo -func (m *FinalizationEvidenceMetadata) GetReason() string { +func (m *ActionFinalizationNotInTop10EvidenceMetadata) GetTop_10ValidatorAddresses() []string { if m != nil { - return m.Reason + return m.Top_10ValidatorAddresses } - return "" + return nil } func init() { - proto.RegisterType((*ExpirationEvidenceMetadata)(nil), "lumera.audit.v1.ExpirationEvidenceMetadata") - proto.RegisterType((*FinalizationEvidenceMetadata)(nil), "lumera.audit.v1.FinalizationEvidenceMetadata") + proto.RegisterType((*ActionExpiredEvidenceMetadata)(nil), "lumera.audit.v1.ActionExpiredEvidenceMetadata") + proto.RegisterType((*ActionFinalizationSignatureFailureEvidenceMetadata)(nil), "lumera.audit.v1.ActionFinalizationSignatureFailureEvidenceMetadata") + proto.RegisterType((*ActionFinalizationNotInTop10EvidenceMetadata)(nil), "lumera.audit.v1.ActionFinalizationNotInTop10EvidenceMetadata") } func init() { @@ -152,29 +181,28 @@ func init() { } var fileDescriptor_09b57e4c2349ab91 = []byte{ - // 302 bytes of a gzipped FileDescriptorProto + // 278 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x29, 0xcd, 0x4d, 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0x2f, 0x33, 0xd4, 0x4f, 0x2d, 0xcb, 0x4c, 0x49, 0xcd, 0x4b, 0x4e, 0x8d, 0xcf, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x28, 0xd4, 0x03, 0x2b, 0xd4, 0x2b, 0x33, 0x94, 0x92, 0x4c, - 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0x8e, 0x07, 0x4b, 0xeb, 0x43, 0x38, 0x10, 0xb5, 0x4a, 0x89, 0x5c, - 0x52, 0xae, 0x15, 0x05, 0x99, 0x45, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xae, 0x50, 0x03, 0x7d, 0xa1, - 0xe6, 0x09, 0x69, 0x73, 0x09, 0xa6, 0xc2, 0x65, 0xe3, 0x33, 0x52, 0x33, 0xd3, 0x33, 0x4a, 0x24, - 0x18, 0x15, 0x18, 0x35, 0x58, 0x82, 0x04, 0x10, 0x12, 0x1e, 0x60, 0x71, 0x21, 0x31, 0x2e, 0xb6, - 0xa2, 0xd4, 0xc4, 0xe2, 0xfc, 0x3c, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x28, 0x4f, 0xe9, - 0x0d, 0x23, 0x97, 0x8c, 0x5b, 0x66, 0x5e, 0x62, 0x4e, 0x66, 0x15, 0x76, 0x5b, 0x22, 0xb8, 0xa4, - 0x13, 0x4b, 0x4a, 0x52, 0x73, 0x0b, 0x4a, 0x52, 0x53, 0xe2, 0xd3, 0x20, 0x2a, 0x53, 0x8b, 0xe2, - 0x13, 0x53, 0x52, 0x8a, 0x52, 0x8b, 0x8b, 0xc1, 0xf6, 0x71, 0x3a, 0x49, 0x5c, 0xda, 0xa2, 0x2b, - 0x02, 0x75, 0xba, 0x23, 0x44, 0x26, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x48, 0x12, 0xae, 0xd9, - 0x0d, 0xa6, 0x17, 0xaa, 0x40, 0x28, 0x8a, 0x4b, 0x26, 0xb5, 0xa2, 0x20, 0x35, 0x19, 0xab, 0xc1, - 0xa9, 0xc5, 0x12, 0x4c, 0x0a, 0xcc, 0x78, 0x8d, 0x96, 0x82, 0xe9, 0x46, 0x37, 0x39, 0xb5, 0x18, - 0xc9, 0xbb, 0xcc, 0xc8, 0xde, 0x75, 0xd2, 0x3a, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, - 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, - 0x86, 0x28, 0x81, 0x0a, 0x44, 0xdc, 0x95, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x23, 0xc1, - 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xcd, 0xaa, 0x5c, 0xe4, 0xdb, 0x01, 0x00, 0x00, -} - -func (m *ExpirationEvidenceMetadata) Marshal() (dAtA []byte, err error) { + 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0x8e, 0x07, 0x4b, 0xeb, 0x43, 0x38, 0x10, 0xb5, 0x4a, 0xf5, 0x5c, + 0xb2, 0x8e, 0xc9, 0x25, 0x99, 0xf9, 0x79, 0xae, 0x15, 0x05, 0x99, 0x45, 0xa9, 0x29, 0xae, 0x50, + 0x33, 0x7d, 0xa1, 0x46, 0x0a, 0xc5, 0x71, 0x49, 0x95, 0xe4, 0x17, 0xc4, 0x1b, 0x1a, 0xc4, 0x97, + 0x25, 0xe6, 0x64, 0xa6, 0x24, 0x96, 0xe4, 0x17, 0xc5, 0x27, 0xa6, 0xa4, 0x14, 0xa5, 0x16, 0x17, + 0xa7, 0x16, 0x4b, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x3a, 0x29, 0x5e, 0xda, 0xa2, 0x2b, 0x0b, 0x35, + 0x36, 0x0c, 0xa6, 0xca, 0x11, 0xa2, 0x28, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x48, 0xbc, 0x24, + 0xbf, 0xc0, 0xd0, 0x00, 0x5d, 0x32, 0xb5, 0x58, 0x69, 0x0a, 0x23, 0x97, 0x11, 0xc4, 0x05, 0x6e, + 0x99, 0x79, 0x89, 0x39, 0x99, 0x55, 0x89, 0x20, 0x76, 0x70, 0x66, 0x7a, 0x5e, 0x62, 0x49, 0x69, + 0x51, 0xaa, 0x5b, 0x62, 0x66, 0x4e, 0x69, 0x51, 0x2a, 0xdd, 0x9d, 0xd5, 0xc7, 0xc8, 0xa5, 0x83, + 0xe9, 0x2c, 0xbf, 0xfc, 0x12, 0xcf, 0xbc, 0x10, 0x90, 0x16, 0x7a, 0x3b, 0xc8, 0x49, 0xeb, 0xc4, + 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, + 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x04, 0x2a, 0x10, 0x49, 0xa2, 0xa4, 0xb2, + 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0xb7, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x8f, + 0xc7, 0xad, 0x32, 0x02, 0x00, 0x00, +} + +func (m *ActionExpiredEvidenceMetadata) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -184,32 +212,29 @@ func (m *ExpirationEvidenceMetadata) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ExpirationEvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { +func (m *ActionExpiredEvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ExpirationEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ActionExpiredEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Reason) > 0 { - i -= len(m.Reason) - copy(dAtA[i:], m.Reason) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Reason))) - i-- - dAtA[i] = 0x12 - } - if m.ExpirationHeight != 0 { - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(m.ExpirationHeight)) - i-- - dAtA[i] = 0x8 + if len(m.Top_10ValidatorAddresses) > 0 { + for iNdEx := len(m.Top_10ValidatorAddresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Top_10ValidatorAddresses[iNdEx]) + copy(dAtA[i:], m.Top_10ValidatorAddresses[iNdEx]) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Top_10ValidatorAddresses[iNdEx]))) + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } -func (m *FinalizationEvidenceMetadata) Marshal() (dAtA []byte, err error) { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -219,38 +244,56 @@ func (m *FinalizationEvidenceMetadata) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *FinalizationEvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *FinalizationEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Reason) > 0 { - i -= len(m.Reason) - copy(dAtA[i:], m.Reason) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Reason))) - i-- - dAtA[i] = 0x1a - } - if len(m.ExpectedFinalizerAddresses) > 0 { - for iNdEx := len(m.ExpectedFinalizerAddresses) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.ExpectedFinalizerAddresses[iNdEx]) - copy(dAtA[i:], m.ExpectedFinalizerAddresses[iNdEx]) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ExpectedFinalizerAddresses[iNdEx]))) + if len(m.Top_10ValidatorAddresses) > 0 { + for iNdEx := len(m.Top_10ValidatorAddresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Top_10ValidatorAddresses[iNdEx]) + copy(dAtA[i:], m.Top_10ValidatorAddresses[iNdEx]) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Top_10ValidatorAddresses[iNdEx]))) i-- - dAtA[i] = 0x12 + dAtA[i] = 0xa } } - if len(m.AttemptedFinalizerAddress) > 0 { - i -= len(m.AttemptedFinalizerAddress) - copy(dAtA[i:], m.AttemptedFinalizerAddress) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.AttemptedFinalizerAddress))) - i-- - dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ActionFinalizationNotInTop10EvidenceMetadata) 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 *ActionFinalizationNotInTop10EvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ActionFinalizationNotInTop10EvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Top_10ValidatorAddresses) > 0 { + for iNdEx := len(m.Top_10ValidatorAddresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Top_10ValidatorAddresses[iNdEx]) + copy(dAtA[i:], m.Top_10ValidatorAddresses[iNdEx]) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Top_10ValidatorAddresses[iNdEx]))) + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } @@ -266,41 +309,47 @@ func encodeVarintEvidenceMetadata(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *ExpirationEvidenceMetadata) Size() (n int) { +func (m *ActionExpiredEvidenceMetadata) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.ExpirationHeight != 0 { - n += 1 + sovEvidenceMetadata(uint64(m.ExpirationHeight)) - } - l = len(m.Reason) - if l > 0 { - n += 1 + l + sovEvidenceMetadata(uint64(l)) + if len(m.Top_10ValidatorAddresses) > 0 { + for _, s := range m.Top_10ValidatorAddresses { + l = len(s) + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } } return n } -func (m *FinalizationEvidenceMetadata) Size() (n int) { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.AttemptedFinalizerAddress) - if l > 0 { - n += 1 + l + sovEvidenceMetadata(uint64(l)) - } - if len(m.ExpectedFinalizerAddresses) > 0 { - for _, s := range m.ExpectedFinalizerAddresses { + if len(m.Top_10ValidatorAddresses) > 0 { + for _, s := range m.Top_10ValidatorAddresses { l = len(s) n += 1 + l + sovEvidenceMetadata(uint64(l)) } } - l = len(m.Reason) - if l > 0 { - n += 1 + l + sovEvidenceMetadata(uint64(l)) + return n +} + +func (m *ActionFinalizationNotInTop10EvidenceMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Top_10ValidatorAddresses) > 0 { + for _, s := range m.Top_10ValidatorAddresses { + l = len(s) + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } } return n } @@ -311,7 +360,7 @@ func sovEvidenceMetadata(x uint64) (n int) { func sozEvidenceMetadata(x uint64) (n int) { return sovEvidenceMetadata(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *ExpirationEvidenceMetadata) Unmarshal(dAtA []byte) error { +func (m *ActionExpiredEvidenceMetadata) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -334,34 +383,15 @@ func (m *ExpirationEvidenceMetadata) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ExpirationEvidenceMetadata: wiretype end group for non-group") + return fmt.Errorf("proto: ActionExpiredEvidenceMetadata: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ExpirationEvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ActionExpiredEvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpirationHeight", wireType) - } - m.ExpirationHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvidenceMetadata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ExpirationHeight |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Top_10ValidatorAddresses", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -389,7 +419,7 @@ func (m *ExpirationEvidenceMetadata) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Reason = string(dAtA[iNdEx:postIndex]) + m.Top_10ValidatorAddresses = append(m.Top_10ValidatorAddresses, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -412,7 +442,7 @@ func (m *ExpirationEvidenceMetadata) Unmarshal(dAtA []byte) error { } return nil } -func (m *FinalizationEvidenceMetadata) Unmarshal(dAtA []byte) error { +func (m *ActionFinalizationSignatureFailureEvidenceMetadata) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -435,15 +465,15 @@ func (m *FinalizationEvidenceMetadata) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: FinalizationEvidenceMetadata: wiretype end group for non-group") + return fmt.Errorf("proto: ActionFinalizationSignatureFailureEvidenceMetadata: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: FinalizationEvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ActionFinalizationSignatureFailureEvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AttemptedFinalizerAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Top_10ValidatorAddresses", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -471,43 +501,61 @@ func (m *FinalizationEvidenceMetadata) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AttemptedFinalizerAddress = string(dAtA[iNdEx:postIndex]) + m.Top_10ValidatorAddresses = append(m.Top_10ValidatorAddresses, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpectedFinalizerAddresses", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvidenceMetadata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipEvidenceMetadata(dAtA[iNdEx:]) + if err != nil { + return err } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthEvidenceMetadata } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvidenceMetadata + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - if postIndex > l { + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ActionFinalizationNotInTop10EvidenceMetadata) 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 ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.ExpectedFinalizerAddresses = append(m.ExpectedFinalizerAddresses, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: + 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: ActionFinalizationNotInTop10EvidenceMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ActionFinalizationNotInTop10EvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Top_10ValidatorAddresses", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -535,7 +583,7 @@ func (m *FinalizationEvidenceMetadata) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Reason = string(dAtA[iNdEx:postIndex]) + m.Top_10ValidatorAddresses = append(m.Top_10ValidatorAddresses, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex From 15d43f5a0e80567cf9611c4198925ba9d8fa2624 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 4 Feb 2026 20:10:21 +0500 Subject: [PATCH 11/18] x/audit: action finalization postpone+recover --- proto/lumera/audit/v1/params.proto | 39 +++ .../action_finalization_postponement_state.go | 29 ++ x/audit/v1/keeper/enforcement.go | 114 +++++++ x/audit/v1/keeper/evidence.go | 10 + x/audit/v1/keeper/evidence_window_count.go | 32 ++ x/audit/v1/keeper/prune.go | 5 + x/audit/v1/types/keys.go | 36 ++ x/audit/v1/types/params.go | 77 +++++ x/audit/v1/types/params.pb.go | 319 ++++++++++++++++-- 9 files changed, 630 insertions(+), 31 deletions(-) create mode 100644 x/audit/v1/keeper/action_finalization_postponement_state.go create mode 100644 x/audit/v1/keeper/evidence_window_count.go diff --git a/proto/lumera/audit/v1/params.proto b/proto/lumera/audit/v1/params.proto index c62a1b2..1a57364 100644 --- a/proto/lumera/audit/v1/params.proto +++ b/proto/lumera/audit/v1/params.proto @@ -39,4 +39,43 @@ message Params { // 100 means unanimous. // Example: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%). uint32 peer_port_postpone_threshold_percent = 12; + + // Action finalization evidence postponement/recovery settings. + // + // These apply to evidence types emitted by the action module: + // - EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE + // - EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 + // + // Postponement triggers when, for a given supernode and evidence type: + // - the number of evidences in a window >= <*_evidences_per_window>, and + // - this happens for <*_consecutive_windows> windows in a row. + // + // Recovery (auto-unpostpone) triggers after a supernode has been postponed for at least + // action_finalization_recovery_windows windows, and ONLY IF the total number of "bad" + // action-finalization evidences across the last action_finalization_recovery_windows windows + // is strictly less than action_finalization_recovery_max_total_bad_evidences. + + // action_finalization_signature_failure_evidences_per_window is the per-window count threshold + // for EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE. + uint32 action_finalization_signature_failure_evidences_per_window = 13; + + // action_finalization_signature_failure_consecutive_windows is the consecutive windows threshold + // for EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE. + uint32 action_finalization_signature_failure_consecutive_windows = 14; + + // action_finalization_not_in_top10_evidences_per_window is the per-window count threshold + // for EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10. + uint32 action_finalization_not_in_top10_evidences_per_window = 15; + + // action_finalization_not_in_top10_consecutive_windows is the consecutive windows threshold + // for EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10. + uint32 action_finalization_not_in_top10_consecutive_windows = 16; + + // action_finalization_recovery_windows is the number of windows to wait before considering recovery. + uint32 action_finalization_recovery_windows = 17; + + // action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad + // action-finalization evidences in the recovery window for auto-recovery to occur. + // Recovery happens ONLY IF total_bad < this value. + uint32 action_finalization_recovery_max_total_bad_evidences = 18; } diff --git a/x/audit/v1/keeper/action_finalization_postponement_state.go b/x/audit/v1/keeper/action_finalization_postponement_state.go new file mode 100644 index 0000000..01272ce --- /dev/null +++ b/x/audit/v1/keeper/action_finalization_postponement_state.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "encoding/binary" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (k Keeper) getActionFinalizationPostponedAtWindowID(ctx sdk.Context, supernodeAccount string) (uint64, bool) { + store := k.kvStore(ctx) + bz := store.Get(types.ActionFinalizationPostponementKey(supernodeAccount)) + if len(bz) != 8 { + return 0, false + } + return binary.BigEndian.Uint64(bz), true +} + +func (k Keeper) setActionFinalizationPostponedAtWindowID(ctx sdk.Context, supernodeAccount string, windowID uint64) { + store := k.kvStore(ctx) + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, windowID) + store.Set(types.ActionFinalizationPostponementKey(supernodeAccount), bz) +} + +func (k Keeper) clearActionFinalizationPostponedAtWindowID(ctx sdk.Context, supernodeAccount string) { + store := k.kvStore(ctx) + store.Delete(types.ActionFinalizationPostponementKey(supernodeAccount)) +} diff --git a/x/audit/v1/keeper/enforcement.go b/x/audit/v1/keeper/enforcement.go index a6b3744..4153f30 100644 --- a/x/audit/v1/keeper/enforcement.go +++ b/x/audit/v1/keeper/enforcement.go @@ -10,6 +10,11 @@ import ( sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) +const ( + postponeReasonActionFinalizationSignatureFailure = "audit_action_finalization_signature_failure" + postponeReasonActionFinalizationNotInTop10 = "audit_action_finalization_not_in_top_10" +) + // EnforceWindowEnd evaluates the completed window and updates supernode states accordingly. // It does not re-check peer assignment gating; that must be enforced at MsgSubmitAuditReport time. func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types.Params) error { @@ -30,6 +35,9 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. continue } + // Avoid stale action-finalization postponement state if the supernode is ACTIVE. + k.clearActionFinalizationPostponedAtWindowID(ctx, sn.SupernodeAccount) + shouldPostpone, reason, err := k.shouldPostponeAtWindowEnd(ctx, sn.SupernodeAccount, windowID, params) if err != nil { return err @@ -41,6 +49,12 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. if err := k.setSupernodePostponed(ctx, sn, reason); err != nil { return err } + switch reason { + case postponeReasonActionFinalizationSignatureFailure, postponeReasonActionFinalizationNotInTop10: + k.setActionFinalizationPostponedAtWindowID(ctx, sn.SupernodeAccount, windowID) + default: + k.clearActionFinalizationPostponedAtWindowID(ctx, sn.SupernodeAccount) + } } // Recover POSTPONED supernodes that meet recovery criteria. @@ -60,12 +74,18 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. if err := k.recoverSupernodeActive(ctx, sn); err != nil { return err } + k.clearActionFinalizationPostponedAtWindowID(ctx, sn.SupernodeAccount) } return nil } func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, string, error) { + // Action finalization evidence-based postponement. + if shouldPostpone, reason := k.shouldPostponeForActionFinalizationEvidence(ctx, supernodeAccount, windowID, params); shouldPostpone { + return true, reason, nil + } + // Missing-report based postponement. consecutive := params.ConsecutiveWindowsToPostpone if consecutive == 0 { @@ -115,6 +135,12 @@ func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount stri } func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { + // If the supernode was postponed due to action-finalization evidence, it recovers using the + // action-finalization recovery rules (not the host/peer-port recovery rules). + if postponedAtWindowID, ok := k.getActionFinalizationPostponedAtWindowID(ctx, supernodeAccount); ok { + return k.shouldRecoverFromActionFinalizationPostponement(ctx, supernodeAccount, windowID, postponedAtWindowID, params), nil + } + // Need one compliant self report. selfCompliant, err := k.selfHostCompliant(ctx, supernodeAccount, windowID, params) if err != nil || !selfCompliant { @@ -171,6 +197,94 @@ func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount strin return false, nil } +func (k Keeper) shouldPostponeForActionFinalizationEvidence(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, string) { + if k.evidenceMeetsConsecutiveWindowsThreshold( + ctx, + supernodeAccount, + windowID, + types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, + params.ActionFinalizationSignatureFailureEvidencesPerWindow, + params.ActionFinalizationSignatureFailureConsecutiveWindows, + ) { + return true, postponeReasonActionFinalizationSignatureFailure + } + + if k.evidenceMeetsConsecutiveWindowsThreshold( + ctx, + supernodeAccount, + windowID, + types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10, + params.ActionFinalizationNotInTop10EvidencesPerWindow, + params.ActionFinalizationNotInTop10ConsecutiveWindows, + ) { + return true, postponeReasonActionFinalizationNotInTop10 + } + + return false, "" +} + +func (k Keeper) evidenceMeetsConsecutiveWindowsThreshold( + ctx sdk.Context, + supernodeAccount string, + windowID uint64, + evidenceType types.EvidenceType, + minEvidencesPerWindow uint32, + consecutiveWindows uint32, +) bool { + if minEvidencesPerWindow == 0 || consecutiveWindows == 0 { + return false + } + if consecutiveWindows > uint32(windowID+1) { + // Not enough history on-chain to satisfy the consecutive rule. + return false + } + + streak := uint32(0) + for offset := uint32(0); offset < consecutiveWindows; offset++ { + w := windowID - uint64(offset) + if k.getEvidenceWindowCount(ctx, w, supernodeAccount, evidenceType) < uint64(minEvidencesPerWindow) { + break + } + streak++ + } + return streak == consecutiveWindows +} + +func (k Keeper) shouldRecoverFromActionFinalizationPostponement( + ctx sdk.Context, + supernodeAccount string, + windowID uint64, + postponedAtWindowID uint64, + params types.Params, +) bool { + recoveryWindows := params.ActionFinalizationRecoveryWindows + if recoveryWindows == 0 { + recoveryWindows = 1 + } + if windowID < postponedAtWindowID+uint64(recoveryWindows) { + return false + } + + var startWindowID uint64 + if windowID+1 > uint64(recoveryWindows) { + startWindowID = windowID + 1 - uint64(recoveryWindows) + } else { + startWindowID = 0 + } + + totalBad := uint64(0) + for w := startWindowID; w <= windowID; w++ { + totalBad += k.getEvidenceWindowCount(ctx, w, supernodeAccount, types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE) + totalBad += k.getEvidenceWindowCount(ctx, w, supernodeAccount, types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10) + } + + maxTotal := params.ActionFinalizationRecoveryMaxTotalBadEvidences + if maxTotal == 0 { + maxTotal = 1 + } + return totalBad < uint64(maxTotal) +} + func (k Keeper) selfHostViolatesMinimums(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { r, found := k.GetReport(ctx, windowID, supernodeAccount) if !found { diff --git a/x/audit/v1/keeper/evidence.go b/x/audit/v1/keeper/evidence.go index 9700861..ad59843 100644 --- a/x/audit/v1/keeper/evidence.go +++ b/x/audit/v1/keeper/evidence.go @@ -66,6 +66,16 @@ func (k Keeper) CreateEvidence( } sdkCtx := sdk.UnwrapSDKContext(ctx) + if evidenceType == types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED || + evidenceType == types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE || + evidenceType == types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 { + params := k.GetParams(ctx) + ws, err := k.getCurrentWindowState(sdkCtx, params) + if err != nil { + return 0, err + } + k.incrementEvidenceWindowCount(sdkCtx, ws.WindowID, subjectAddress, evidenceType) + } reportedHeight := uint64(sdkCtx.BlockHeight()) evidenceID := k.GetNextEvidenceID(sdkCtx) diff --git a/x/audit/v1/keeper/evidence_window_count.go b/x/audit/v1/keeper/evidence_window_count.go new file mode 100644 index 0000000..74dfafb --- /dev/null +++ b/x/audit/v1/keeper/evidence_window_count.go @@ -0,0 +1,32 @@ +package keeper + +import ( + "encoding/binary" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (k Keeper) getEvidenceWindowCount(ctx sdk.Context, windowID uint64, subjectAddress string, evidenceType types.EvidenceType) uint64 { + store := k.kvStore(ctx) + bz := store.Get(types.EvidenceWindowCountKey(windowID, subjectAddress, evidenceType)) + if len(bz) != 8 { + return 0 + } + return binary.BigEndian.Uint64(bz) +} + +func (k Keeper) incrementEvidenceWindowCount(ctx sdk.Context, windowID uint64, subjectAddress string, evidenceType types.EvidenceType) { + store := k.kvStore(ctx) + key := types.EvidenceWindowCountKey(windowID, subjectAddress, evidenceType) + + current := uint64(0) + if bz := store.Get(key); len(bz) == 8 { + current = binary.BigEndian.Uint64(bz) + } + + next := current + 1 + out := make([]byte, 8) + binary.BigEndian.PutUint64(out, next) + store.Set(key, out) +} diff --git a/x/audit/v1/keeper/prune.go b/x/audit/v1/keeper/prune.go index bdfe49a..12431ed 100644 --- a/x/audit/v1/keeper/prune.go +++ b/x/audit/v1/keeper/prune.go @@ -43,6 +43,11 @@ func (k Keeper) PruneOldWindows(ctx sdk.Context, currentWindowID uint64, params pruneReporterTrailingWindowID(store, []byte("ss/"), minKeepWindowID) pruneSupernodeWindowReporter(store, []byte("sr/"), minKeepWindowID) + // Evidence window counts: evw//... + if err := prunePrefixByWindowIDLeadingU64(store, types.EvidenceWindowCountPrefix(), minKeepWindowID); err != nil { + return err + } + return nil } diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go index 9cb5a6b..97fef5e 100644 --- a/x/audit/v1/types/keys.go +++ b/x/audit/v1/types/keys.go @@ -64,10 +64,20 @@ var ( // - EvidenceKey: "ev/r/" + u64be(evidence_id) -> Evidence bytes // - EvidenceBySubjectIndexKey: "ev/s/" + subject_address + "/" + u64be(evidence_id) -> empty // - EvidenceByActionIndexKey: "ev/a/" + action_id + 0x00 + u64be(evidence_id) -> empty + // + // Evidence window counts (window-scoped aggregates used for postponement/recovery): + // - EvidenceWindowCountKey: "evw/" + u64be(window_id) + "/" + subject_address + "/" + u32be(evidence_type) -> 8 bytes u64be(count) + // + // Action finalization postponement state: + // - ActionFinalizationPostponementKey: "ap/af/" + supernode_account -> 8 bytes u64be(postponed_at_window_id) nextEvidenceIDKey = []byte("ev/next_id") evidenceRecordPrefix = []byte("ev/r/") evidenceBySubjectPrefix = []byte("ev/s/") evidenceByActionIDPrefix = []byte("ev/a/") + + evidenceWindowCountPrefix = []byte("evw/") + + actionFinalizationPostponementPrefix = []byte("ap/af/") ) // WindowSnapshotKey returns the store key for the WindowSnapshot identified by windowID. @@ -218,3 +228,29 @@ func EvidenceByActionIndexPrefix(actionID string) []byte { key = append(key, 0) // delimiter return key } + +func EvidenceWindowCountKey(windowID uint64, subjectAddress string, evidenceType EvidenceType) []byte { + key := make([]byte, 0, len(evidenceWindowCountPrefix)+8+1+len(subjectAddress)+1+4) // "evw/" + u64be(window_id) + "/" + subject + "/" + u32be(evidence_type) + key = append(key, evidenceWindowCountPrefix...) + key = binary.BigEndian.AppendUint64(key, windowID) + key = append(key, '/') + key = append(key, subjectAddress...) + key = append(key, '/') + key = binary.BigEndian.AppendUint32(key, uint32(evidenceType)) + return key +} + +func EvidenceWindowCountPrefix() []byte { + return evidenceWindowCountPrefix +} + +func ActionFinalizationPostponementKey(supernodeAccount string) []byte { + key := make([]byte, 0, len(actionFinalizationPostponementPrefix)+len(supernodeAccount)) // "ap/af/" + supernode + key = append(key, actionFinalizationPostponementPrefix...) + key = append(key, supernodeAccount...) + return key +} + +func ActionFinalizationPostponementPrefix() []byte { + return actionFinalizationPostponementPrefix +} diff --git a/x/audit/v1/types/params.go b/x/audit/v1/types/params.go index a703f84..6d99599 100644 --- a/x/audit/v1/types/params.go +++ b/x/audit/v1/types/params.go @@ -21,6 +21,13 @@ var ( KeyConsecutiveWindowsToPostpone = []byte("ConsecutiveWindowsToPostpone") KeyKeepLastWindowEntries = []byte("KeepLastWindowEntries") KeyPeerPortPostponeThresholdPercent = []byte("PeerPortPostponeThresholdPercent") + + KeyActionFinalizationSignatureFailureEvidencesPerWindow = []byte("ActionFinalizationSignatureFailureEvidencesPerWindow") + KeyActionFinalizationSignatureFailureConsecutiveWindows = []byte("ActionFinalizationSignatureFailureConsecutiveWindows") + KeyActionFinalizationNotInTop10EvidencesPerWindow = []byte("ActionFinalizationNotInTop10EvidencesPerWindow") + KeyActionFinalizationNotInTop10ConsecutiveWindows = []byte("ActionFinalizationNotInTop10ConsecutiveWindows") + KeyActionFinalizationRecoveryWindows = []byte("ActionFinalizationRecoveryWindows") + KeyActionFinalizationRecoveryMaxTotalBadEvidences = []byte("ActionFinalizationRecoveryMaxTotalBadEvidences") ) var ( @@ -35,6 +42,13 @@ var ( DefaultConsecutiveWindowsToPostpone = uint32(1) DefaultKeepLastWindowEntries = uint64(200) DefaultPeerPortPostponeThresholdPercent = uint32(100) + + DefaultActionFinalizationSignatureFailureEvidencesPerWindow = uint32(1) + DefaultActionFinalizationSignatureFailureConsecutiveWindows = uint32(1) + DefaultActionFinalizationNotInTop10EvidencesPerWindow = uint32(1) + DefaultActionFinalizationNotInTop10ConsecutiveWindows = uint32(1) + DefaultActionFinalizationRecoveryWindows = uint32(1) + DefaultActionFinalizationRecoveryMaxTotalBadEvidences = uint32(1) ) // Params notes @@ -47,6 +61,7 @@ var ( // - consecutive_windows_to_postpone: consecutive windows of peer port CLOSED meeting threshold needed to postpone. // - peer_port_postpone_threshold_percent: percent of peers that must report CLOSED for port-based postponement (100 = unanimous). // - keep_last_window_entries: how many windows of window-scoped state to keep (pruning at window end). +// - action_finalization_*: windowed postponement + recovery settings for action-finalization evidence types. func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) @@ -64,6 +79,12 @@ func NewParams( consecutiveWindowsToPostpone uint32, keepLastWindowEntries uint64, peerPortPostponeThresholdPercent uint32, + actionFinalizationSignatureFailureEvidencesPerWindow uint32, + actionFinalizationSignatureFailureConsecutiveWindows uint32, + actionFinalizationNotInTop10EvidencesPerWindow uint32, + actionFinalizationNotInTop10ConsecutiveWindows uint32, + actionFinalizationRecoveryWindows uint32, + actionFinalizationRecoveryMaxTotalBadEvidences uint32, ) Params { return Params{ ReportingWindowBlocks: reportingWindowBlocks, @@ -77,6 +98,13 @@ func NewParams( ConsecutiveWindowsToPostpone: consecutiveWindowsToPostpone, KeepLastWindowEntries: keepLastWindowEntries, PeerPortPostponeThresholdPercent: peerPortPostponeThresholdPercent, + + ActionFinalizationSignatureFailureEvidencesPerWindow: actionFinalizationSignatureFailureEvidencesPerWindow, + ActionFinalizationSignatureFailureConsecutiveWindows: actionFinalizationSignatureFailureConsecutiveWindows, + ActionFinalizationNotInTop10EvidencesPerWindow: actionFinalizationNotInTop10EvidencesPerWindow, + ActionFinalizationNotInTop10ConsecutiveWindows: actionFinalizationNotInTop10ConsecutiveWindows, + ActionFinalizationRecoveryWindows: actionFinalizationRecoveryWindows, + ActionFinalizationRecoveryMaxTotalBadEvidences: actionFinalizationRecoveryMaxTotalBadEvidences, } } @@ -93,6 +121,12 @@ func DefaultParams() Params { DefaultConsecutiveWindowsToPostpone, DefaultKeepLastWindowEntries, DefaultPeerPortPostponeThresholdPercent, + DefaultActionFinalizationSignatureFailureEvidencesPerWindow, + DefaultActionFinalizationSignatureFailureConsecutiveWindows, + DefaultActionFinalizationNotInTop10EvidencesPerWindow, + DefaultActionFinalizationNotInTop10ConsecutiveWindows, + DefaultActionFinalizationRecoveryWindows, + DefaultActionFinalizationRecoveryMaxTotalBadEvidences, ) } @@ -121,6 +155,24 @@ func (p Params) WithDefaults() Params { if p.PeerPortPostponeThresholdPercent == 0 { p.PeerPortPostponeThresholdPercent = DefaultPeerPortPostponeThresholdPercent } + if p.ActionFinalizationSignatureFailureEvidencesPerWindow == 0 { + p.ActionFinalizationSignatureFailureEvidencesPerWindow = DefaultActionFinalizationSignatureFailureEvidencesPerWindow + } + if p.ActionFinalizationSignatureFailureConsecutiveWindows == 0 { + p.ActionFinalizationSignatureFailureConsecutiveWindows = DefaultActionFinalizationSignatureFailureConsecutiveWindows + } + if p.ActionFinalizationNotInTop10EvidencesPerWindow == 0 { + p.ActionFinalizationNotInTop10EvidencesPerWindow = DefaultActionFinalizationNotInTop10EvidencesPerWindow + } + if p.ActionFinalizationNotInTop10ConsecutiveWindows == 0 { + p.ActionFinalizationNotInTop10ConsecutiveWindows = DefaultActionFinalizationNotInTop10ConsecutiveWindows + } + if p.ActionFinalizationRecoveryWindows == 0 { + p.ActionFinalizationRecoveryWindows = DefaultActionFinalizationRecoveryWindows + } + if p.ActionFinalizationRecoveryMaxTotalBadEvidences == 0 { + p.ActionFinalizationRecoveryMaxTotalBadEvidences = DefaultActionFinalizationRecoveryMaxTotalBadEvidences + } return p } @@ -137,6 +189,13 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyConsecutiveWindowsToPostpone, &p.ConsecutiveWindowsToPostpone, validateUint32), paramtypes.NewParamSetPair(KeyKeepLastWindowEntries, &p.KeepLastWindowEntries, validateUint64), paramtypes.NewParamSetPair(KeyPeerPortPostponeThresholdPercent, &p.PeerPortPostponeThresholdPercent, validateUint32), + + paramtypes.NewParamSetPair(KeyActionFinalizationSignatureFailureEvidencesPerWindow, &p.ActionFinalizationSignatureFailureEvidencesPerWindow, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationSignatureFailureConsecutiveWindows, &p.ActionFinalizationSignatureFailureConsecutiveWindows, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationNotInTop10EvidencesPerWindow, &p.ActionFinalizationNotInTop10EvidencesPerWindow, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationNotInTop10ConsecutiveWindows, &p.ActionFinalizationNotInTop10ConsecutiveWindows, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationRecoveryWindows, &p.ActionFinalizationRecoveryWindows, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationRecoveryMaxTotalBadEvidences, &p.ActionFinalizationRecoveryMaxTotalBadEvidences, validateUint32), } } @@ -173,6 +232,24 @@ func (p Params) Validate() error { if p.PeerPortPostponeThresholdPercent == 0 || p.PeerPortPostponeThresholdPercent > 100 { return fmt.Errorf("peer_port_postpone_threshold_percent must be within 1..100") } + if p.ActionFinalizationSignatureFailureEvidencesPerWindow == 0 { + return fmt.Errorf("action_finalization_signature_failure_evidences_per_window must be > 0") + } + if p.ActionFinalizationSignatureFailureConsecutiveWindows == 0 { + return fmt.Errorf("action_finalization_signature_failure_consecutive_windows must be > 0") + } + if p.ActionFinalizationNotInTop10EvidencesPerWindow == 0 { + return fmt.Errorf("action_finalization_not_in_top_10_evidences_per_window must be > 0") + } + if p.ActionFinalizationNotInTop10ConsecutiveWindows == 0 { + return fmt.Errorf("action_finalization_not_in_top_10_consecutive_windows must be > 0") + } + if p.ActionFinalizationRecoveryWindows == 0 { + return fmt.Errorf("action_finalization_recovery_windows must be > 0") + } + if p.ActionFinalizationRecoveryMaxTotalBadEvidences == 0 { + return fmt.Errorf("action_finalization_recovery_max_total_bad_evidences must be > 0") + } ports := append([]uint32(nil), p.RequiredOpenPorts...) sort.Slice(ports, func(i, j int) bool { return ports[i] < ports[j] }) diff --git a/x/audit/v1/types/params.pb.go b/x/audit/v1/types/params.pb.go index 0a4c312..fe37742 100644 --- a/x/audit/v1/types/params.pb.go +++ b/x/audit/v1/types/params.pb.go @@ -49,6 +49,24 @@ type Params struct { // 100 means unanimous. // Example: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%). PeerPortPostponeThresholdPercent uint32 `protobuf:"varint,12,opt,name=peer_port_postpone_threshold_percent,json=peerPortPostponeThresholdPercent,proto3" json:"peer_port_postpone_threshold_percent,omitempty"` + // action_finalization_signature_failure_evidences_per_window is the per-window count threshold + // for EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE. + ActionFinalizationSignatureFailureEvidencesPerWindow uint32 `protobuf:"varint,13,opt,name=action_finalization_signature_failure_evidences_per_window,json=actionFinalizationSignatureFailureEvidencesPerWindow,proto3" json:"action_finalization_signature_failure_evidences_per_window,omitempty"` + // action_finalization_signature_failure_consecutive_windows is the consecutive windows threshold + // for EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE. + ActionFinalizationSignatureFailureConsecutiveWindows uint32 `protobuf:"varint,14,opt,name=action_finalization_signature_failure_consecutive_windows,json=actionFinalizationSignatureFailureConsecutiveWindows,proto3" json:"action_finalization_signature_failure_consecutive_windows,omitempty"` + // action_finalization_not_in_top10_evidences_per_window is the per-window count threshold + // for EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10. + ActionFinalizationNotInTop10EvidencesPerWindow uint32 `protobuf:"varint,15,opt,name=action_finalization_not_in_top10_evidences_per_window,json=actionFinalizationNotInTop10EvidencesPerWindow,proto3" json:"action_finalization_not_in_top10_evidences_per_window,omitempty"` + // action_finalization_not_in_top10_consecutive_windows is the consecutive windows threshold + // for EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10. + ActionFinalizationNotInTop10ConsecutiveWindows uint32 `protobuf:"varint,16,opt,name=action_finalization_not_in_top10_consecutive_windows,json=actionFinalizationNotInTop10ConsecutiveWindows,proto3" json:"action_finalization_not_in_top10_consecutive_windows,omitempty"` + // action_finalization_recovery_windows is the number of windows to wait before considering recovery. + ActionFinalizationRecoveryWindows uint32 `protobuf:"varint,17,opt,name=action_finalization_recovery_windows,json=actionFinalizationRecoveryWindows,proto3" json:"action_finalization_recovery_windows,omitempty"` + // action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad + // action-finalization evidences in the recovery window for auto-recovery to occur. + // Recovery happens ONLY IF total_bad < this value. + ActionFinalizationRecoveryMaxTotalBadEvidences uint32 `protobuf:"varint,18,opt,name=action_finalization_recovery_max_total_bad_evidences,json=actionFinalizationRecoveryMaxTotalBadEvidences,proto3" json:"action_finalization_recovery_max_total_bad_evidences,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -161,6 +179,48 @@ func (m *Params) GetPeerPortPostponeThresholdPercent() uint32 { return 0 } +func (m *Params) GetActionFinalizationSignatureFailureEvidencesPerWindow() uint32 { + if m != nil { + return m.ActionFinalizationSignatureFailureEvidencesPerWindow + } + return 0 +} + +func (m *Params) GetActionFinalizationSignatureFailureConsecutiveWindows() uint32 { + if m != nil { + return m.ActionFinalizationSignatureFailureConsecutiveWindows + } + return 0 +} + +func (m *Params) GetActionFinalizationNotInTop10EvidencesPerWindow() uint32 { + if m != nil { + return m.ActionFinalizationNotInTop10EvidencesPerWindow + } + return 0 +} + +func (m *Params) GetActionFinalizationNotInTop10ConsecutiveWindows() uint32 { + if m != nil { + return m.ActionFinalizationNotInTop10ConsecutiveWindows + } + return 0 +} + +func (m *Params) GetActionFinalizationRecoveryWindows() uint32 { + if m != nil { + return m.ActionFinalizationRecoveryWindows + } + return 0 +} + +func (m *Params) GetActionFinalizationRecoveryMaxTotalBadEvidences() uint32 { + if m != nil { + return m.ActionFinalizationRecoveryMaxTotalBadEvidences + } + return 0 +} + func init() { proto.RegisterType((*Params)(nil), "lumera.audit.v1.Params") } @@ -168,37 +228,48 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/params.proto", fileDescriptor_3788ca0fc7eb9d86) } var fileDescriptor_3788ca0fc7eb9d86 = []byte{ - // 475 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0xc7, 0x63, 0x35, 0x0d, 0xb0, 0x80, 0xa0, 0x6e, 0x2b, 0xac, 0x2a, 0x72, 0x23, 0xc4, 0xa1, - 0xe2, 0x60, 0x2b, 0x42, 0x02, 0x89, 0x03, 0x87, 0x42, 0x39, 0xf1, 0x61, 0xa2, 0x48, 0x48, 0x5c, - 0x56, 0x1b, 0x7b, 0x48, 0x57, 0xc9, 0x7e, 0x74, 0x76, 0x9d, 0x86, 0x67, 0xe0, 0xc2, 0x23, 0xf0, - 0x38, 0x1c, 0x7b, 0xe4, 0x88, 0x92, 0x0b, 0x8f, 0x81, 0x76, 0xd7, 0x0e, 0xa9, 0x04, 0x97, 0x68, - 0x95, 0xdf, 0xff, 0xe7, 0x99, 0xd9, 0x59, 0xd2, 0x9f, 0xd7, 0x02, 0x90, 0xe5, 0xac, 0xae, 0xb8, - 0xcd, 0x17, 0xc3, 0x5c, 0x33, 0x64, 0xc2, 0x64, 0x1a, 0x95, 0x55, 0xf1, 0xbd, 0x40, 0x33, 0x4f, - 0xb3, 0xc5, 0xf0, 0x68, 0x8f, 0x09, 0x2e, 0x55, 0xee, 0x7f, 0x43, 0xe6, 0xe8, 0x60, 0xaa, 0xa6, - 0xca, 0x1f, 0x73, 0x77, 0x0a, 0xff, 0x3e, 0xfc, 0xba, 0x4b, 0x7a, 0x85, 0xff, 0x54, 0xfc, 0x94, - 0x3c, 0x40, 0xd0, 0x0a, 0x2d, 0x97, 0x53, 0x7a, 0xc9, 0x65, 0xa5, 0x2e, 0xe9, 0x64, 0xae, 0xca, - 0x99, 0x49, 0xa2, 0x41, 0x74, 0xd2, 0x1d, 0x1d, 0x6e, 0xf0, 0x47, 0x4f, 0x4f, 0x3d, 0x8c, 0x33, - 0xb2, 0xaf, 0x01, 0x90, 0x5e, 0xd4, 0x0a, 0x6b, 0x41, 0x43, 0xc8, 0x24, 0x3b, 0x83, 0xe8, 0xe4, - 0xee, 0x68, 0xcf, 0xa1, 0x0f, 0x9e, 0x8c, 0x02, 0x88, 0x5f, 0x90, 0xbe, 0xe0, 0x92, 0x6a, 0x54, - 0x13, 0xa0, 0x96, 0xe1, 0x14, 0xac, 0xa1, 0x1a, 0xb0, 0xa9, 0x99, 0x74, 0xbd, 0x98, 0x08, 0x2e, - 0x0b, 0x17, 0x19, 0x87, 0x44, 0x01, 0x18, 0xaa, 0x7a, 0x9f, 0x2d, 0xff, 0xef, 0xef, 0x36, 0x3e, - 0x5b, 0xfe, 0xdb, 0xcf, 0xc8, 0x3e, 0xc2, 0x45, 0xcd, 0x11, 0x2a, 0xaa, 0x34, 0x48, 0x1a, 0xfa, - 0xed, 0x0d, 0x76, 0x5c, 0xbf, 0x2d, 0x7a, 0xaf, 0x41, 0x16, 0xbe, 0xdf, 0x9c, 0x1c, 0xb8, 0x7e, - 0x4b, 0x5d, 0xd3, 0xcf, 0x08, 0xe0, 0x4a, 0x95, 0x20, 0x6d, 0x72, 0x23, 0x0c, 0x28, 0xb8, 0x7c, - 0xa9, 0xeb, 0xd7, 0x08, 0x50, 0x04, 0xd0, 0x0a, 0x02, 0xc4, 0x75, 0xe1, 0xe6, 0x46, 0x78, 0x0b, - 0x62, 0x5b, 0x18, 0x92, 0x43, 0x27, 0x54, 0xdc, 0xcc, 0xae, 0x1b, 0xb7, 0xbc, 0x11, 0x0b, 0x2e, - 0x5f, 0x71, 0x33, 0xdb, 0x56, 0xce, 0xc8, 0x71, 0xa9, 0xa4, 0x81, 0xb2, 0xb6, 0x7c, 0x01, 0xcd, - 0xe8, 0x86, 0x5a, 0x45, 0xb5, 0x32, 0x56, 0x2b, 0x09, 0x09, 0xf1, 0x72, 0x7f, 0x2b, 0x16, 0x2e, - 0xc0, 0x8c, 0x55, 0xd1, 0x64, 0xe2, 0x67, 0x24, 0x99, 0x01, 0x68, 0x3a, 0x67, 0xc6, 0xb6, 0x3b, - 0x07, 0x69, 0x91, 0x83, 0x49, 0x6e, 0x87, 0xa5, 0x3b, 0xfe, 0x86, 0x19, 0x1b, 0xe4, 0xb3, 0x00, - 0xe3, 0x77, 0xe4, 0x91, 0x5f, 0xba, 0xbb, 0xbb, 0x4d, 0x49, 0x6a, 0xcf, 0x11, 0xcc, 0xb9, 0x9a, - 0x57, 0x9b, 0x09, 0xee, 0xf8, 0x26, 0x06, 0x2e, 0xeb, 0x6e, 0xb3, 0x2d, 0x3c, 0x6e, 0x83, 0xcd, - 0x3c, 0xcf, 0xbb, 0xbf, 0xbf, 0x1f, 0x47, 0xa7, 0x8f, 0x7f, 0xac, 0xd2, 0xe8, 0x6a, 0x95, 0x46, - 0xbf, 0x56, 0x69, 0xf4, 0x6d, 0x9d, 0x76, 0xae, 0xd6, 0x69, 0xe7, 0xe7, 0x3a, 0xed, 0x7c, 0xba, - 0xbf, 0xfc, 0xfb, 0xf4, 0xed, 0x17, 0x0d, 0x66, 0xd2, 0xf3, 0x0f, 0xf8, 0xc9, 0x9f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xe5, 0x8c, 0xda, 0xf3, 0x1a, 0x03, 0x00, 0x00, + // 644 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x4f, 0x4f, 0x13, 0x41, + 0x18, 0xc6, 0xd9, 0x80, 0xa8, 0xa3, 0x08, 0x2c, 0x10, 0x37, 0x84, 0x94, 0x6a, 0x38, 0x10, 0x0f, + 0xad, 0x8d, 0xa8, 0x91, 0x83, 0x07, 0x10, 0x12, 0x13, 0x81, 0xb5, 0x36, 0x31, 0xf1, 0x32, 0x99, + 0xee, 0xbe, 0x94, 0x49, 0x77, 0xfe, 0x30, 0x33, 0x5b, 0x8a, 0x9f, 0xc2, 0xb3, 0x27, 0x3f, 0x8e, + 0x47, 0x8e, 0x1e, 0x0d, 0x5c, 0xfc, 0x18, 0x66, 0x66, 0xba, 0x4b, 0x09, 0x4b, 0xe0, 0xd2, 0x6e, + 0xfb, 0x3c, 0xbf, 0xf7, 0x79, 0xdf, 0x77, 0x36, 0x83, 0x56, 0xb2, 0x9c, 0x81, 0x22, 0x4d, 0x92, + 0xa7, 0xd4, 0x34, 0x07, 0xad, 0xa6, 0x24, 0x8a, 0x30, 0xdd, 0x90, 0x4a, 0x18, 0x11, 0xce, 0x7a, + 0xb5, 0xe1, 0xd4, 0xc6, 0xa0, 0xb5, 0x3c, 0x4f, 0x18, 0xe5, 0xa2, 0xe9, 0x3e, 0xbd, 0x67, 0x79, + 0xb1, 0x27, 0x7a, 0xc2, 0x3d, 0x36, 0xed, 0x93, 0xff, 0xf7, 0xf9, 0x4f, 0x84, 0xa6, 0x63, 0x57, + 0x2a, 0x7c, 0x83, 0x9e, 0x2a, 0x90, 0x42, 0x19, 0xca, 0x7b, 0xf8, 0x84, 0xf2, 0x54, 0x9c, 0xe0, + 0x6e, 0x26, 0x92, 0xbe, 0x8e, 0x82, 0x7a, 0xb0, 0x3e, 0xd5, 0x5e, 0x2a, 0xe5, 0xaf, 0x4e, 0xdd, + 0x72, 0x62, 0xd8, 0x40, 0x0b, 0x12, 0x40, 0xe1, 0xe3, 0x5c, 0xa8, 0x9c, 0x61, 0x6f, 0xd2, 0xd1, + 0x64, 0x3d, 0x58, 0x9f, 0x69, 0xcf, 0x5b, 0xe9, 0xb3, 0x53, 0xda, 0x5e, 0x08, 0xdf, 0xa3, 0x15, + 0x46, 0x39, 0x96, 0x4a, 0x74, 0x01, 0x1b, 0xa2, 0x7a, 0x60, 0x34, 0x96, 0xa0, 0x46, 0x99, 0xd1, + 0x94, 0x03, 0x23, 0x46, 0x79, 0x6c, 0x2d, 0x1d, 0xef, 0x88, 0x41, 0xf9, 0x54, 0xc7, 0x93, 0xe1, + 0xcd, 0xfc, 0xbd, 0x11, 0x4f, 0x86, 0xd5, 0x7c, 0x03, 0x2d, 0x28, 0x38, 0xce, 0xa9, 0x82, 0x14, + 0x0b, 0x09, 0x1c, 0xfb, 0x7e, 0xa7, 0xeb, 0x93, 0xb6, 0xdf, 0x42, 0x3a, 0x90, 0xc0, 0x63, 0xd7, + 0x6f, 0x13, 0x2d, 0xda, 0x7e, 0x13, 0x99, 0xe3, 0x43, 0x05, 0x60, 0xa3, 0x12, 0xe0, 0x26, 0xba, + 0xef, 0x07, 0x64, 0x94, 0x6f, 0xcb, 0x7c, 0x57, 0x01, 0xc4, 0x5e, 0x28, 0x00, 0x06, 0xec, 0x2a, + 0xf0, 0xa0, 0x04, 0xf6, 0x80, 0x8d, 0x03, 0x2d, 0xb4, 0x64, 0x81, 0x94, 0xea, 0xfe, 0x55, 0xe2, + 0xa1, 0x23, 0x42, 0x46, 0xf9, 0x07, 0xaa, 0xfb, 0xe3, 0xc8, 0x0e, 0x5a, 0x4d, 0x04, 0xd7, 0x90, + 0xe4, 0x86, 0x0e, 0x60, 0x34, 0xba, 0xc6, 0x46, 0x60, 0x29, 0xb4, 0x91, 0x82, 0x43, 0x84, 0x1c, + 0xbc, 0x32, 0x66, 0xf3, 0x0b, 0xd0, 0x1d, 0x11, 0x8f, 0x3c, 0xe1, 0x5b, 0x14, 0xf5, 0x01, 0x24, + 0xce, 0x88, 0x36, 0xc5, 0x99, 0x03, 0x37, 0x8a, 0x82, 0x8e, 0x1e, 0xf9, 0x43, 0xb7, 0xfa, 0x27, + 0xa2, 0x8d, 0x87, 0x77, 0xbc, 0x18, 0xee, 0xa3, 0x35, 0x77, 0xe8, 0x76, 0x77, 0x65, 0x24, 0x36, + 0x47, 0x0a, 0xf4, 0x91, 0xc8, 0xd2, 0x72, 0x82, 0xc7, 0xae, 0x89, 0xba, 0xf5, 0xda, 0x6d, 0x16, + 0xc1, 0x9d, 0xc2, 0x58, 0xcc, 0x33, 0x44, 0x9b, 0x24, 0x31, 0x54, 0x70, 0x7c, 0x48, 0x39, 0xc9, + 0xe8, 0x77, 0xe2, 0x7e, 0x68, 0xda, 0xe3, 0xc4, 0xe4, 0x0a, 0xf0, 0x21, 0xa1, 0x99, 0xfd, 0x86, + 0x01, 0x4d, 0x81, 0x27, 0x70, 0xe5, 0xc8, 0x67, 0x5c, 0xca, 0x86, 0xaf, 0xb0, 0x3b, 0x56, 0xe0, + 0x4b, 0xc1, 0xef, 0x7a, 0x7c, 0xa7, 0xa0, 0x2f, 0x5f, 0x87, 0x13, 0xf4, 0xee, 0x6e, 0xc9, 0x15, + 0xfb, 0x8e, 0x9e, 0xdc, 0x35, 0x78, 0xfb, 0xda, 0x29, 0x84, 0x0c, 0xbd, 0xae, 0x0a, 0xe6, 0xc2, + 0x60, 0xca, 0xb1, 0x11, 0xb2, 0xf5, 0xb2, 0x7a, 0xda, 0x59, 0x17, 0xda, 0xb8, 0x1e, 0xba, 0x2f, + 0xcc, 0x47, 0xde, 0xb1, 0x60, 0xc5, 0x9c, 0x19, 0xda, 0xb8, 0x35, 0xae, 0x6a, 0xc4, 0xb9, 0xdb, + 0xd3, 0x2a, 0x86, 0x3b, 0x40, 0x6b, 0x55, 0x69, 0x0a, 0x12, 0x31, 0x00, 0x75, 0x5a, 0x56, 0x9f, + 0x77, 0xd5, 0x9f, 0x5d, 0xaf, 0xde, 0x1e, 0x39, 0x8b, 0x82, 0x37, 0xb4, 0x5f, 0x16, 0xb4, 0x57, + 0x82, 0x11, 0x86, 0x64, 0xb8, 0x4b, 0xd2, 0xcb, 0xbd, 0x45, 0xe1, 0x4d, 0xed, 0x17, 0x01, 0x7b, + 0x64, 0xd8, 0xb1, 0xdc, 0x16, 0x49, 0xcb, 0xad, 0x6d, 0x4e, 0xfd, 0xfb, 0xb5, 0x1a, 0x6c, 0xbd, + 0xf8, 0x7d, 0x5e, 0x0b, 0xce, 0xce, 0x6b, 0xc1, 0xdf, 0xf3, 0x5a, 0xf0, 0xe3, 0xa2, 0x36, 0x71, + 0x76, 0x51, 0x9b, 0xf8, 0x73, 0x51, 0x9b, 0xf8, 0x36, 0x37, 0xbc, 0xbc, 0x89, 0xcd, 0xa9, 0x04, + 0xdd, 0x9d, 0x76, 0xf7, 0xe9, 0xab, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x98, 0xb5, 0x04, 0xce, + 0xa9, 0x05, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -258,6 +329,24 @@ func (this *Params) Equal(that interface{}) bool { if this.PeerPortPostponeThresholdPercent != that1.PeerPortPostponeThresholdPercent { return false } + if this.ActionFinalizationSignatureFailureEvidencesPerWindow != that1.ActionFinalizationSignatureFailureEvidencesPerWindow { + return false + } + if this.ActionFinalizationSignatureFailureConsecutiveWindows != that1.ActionFinalizationSignatureFailureConsecutiveWindows { + return false + } + if this.ActionFinalizationNotInTop10EvidencesPerWindow != that1.ActionFinalizationNotInTop10EvidencesPerWindow { + return false + } + if this.ActionFinalizationNotInTop10ConsecutiveWindows != that1.ActionFinalizationNotInTop10ConsecutiveWindows { + return false + } + if this.ActionFinalizationRecoveryWindows != that1.ActionFinalizationRecoveryWindows { + return false + } + if this.ActionFinalizationRecoveryMaxTotalBadEvidences != that1.ActionFinalizationRecoveryMaxTotalBadEvidences { + return false + } return true } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -280,6 +369,42 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ActionFinalizationRecoveryMaxTotalBadEvidences != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationRecoveryMaxTotalBadEvidences)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x90 + } + if m.ActionFinalizationRecoveryWindows != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationRecoveryWindows)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x88 + } + if m.ActionFinalizationNotInTop10ConsecutiveWindows != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationNotInTop10ConsecutiveWindows)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + } + if m.ActionFinalizationNotInTop10EvidencesPerWindow != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationNotInTop10EvidencesPerWindow)) + i-- + dAtA[i] = 0x78 + } + if m.ActionFinalizationSignatureFailureConsecutiveWindows != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationSignatureFailureConsecutiveWindows)) + i-- + dAtA[i] = 0x70 + } + if m.ActionFinalizationSignatureFailureEvidencesPerWindow != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationSignatureFailureEvidencesPerWindow)) + i-- + dAtA[i] = 0x68 + } if m.PeerPortPostponeThresholdPercent != 0 { i = encodeVarintParams(dAtA, i, uint64(m.PeerPortPostponeThresholdPercent)) i-- @@ -405,6 +530,24 @@ func (m *Params) Size() (n int) { if m.PeerPortPostponeThresholdPercent != 0 { n += 1 + sovParams(uint64(m.PeerPortPostponeThresholdPercent)) } + if m.ActionFinalizationSignatureFailureEvidencesPerWindow != 0 { + n += 1 + sovParams(uint64(m.ActionFinalizationSignatureFailureEvidencesPerWindow)) + } + if m.ActionFinalizationSignatureFailureConsecutiveWindows != 0 { + n += 1 + sovParams(uint64(m.ActionFinalizationSignatureFailureConsecutiveWindows)) + } + if m.ActionFinalizationNotInTop10EvidencesPerWindow != 0 { + n += 1 + sovParams(uint64(m.ActionFinalizationNotInTop10EvidencesPerWindow)) + } + if m.ActionFinalizationNotInTop10ConsecutiveWindows != 0 { + n += 2 + sovParams(uint64(m.ActionFinalizationNotInTop10ConsecutiveWindows)) + } + if m.ActionFinalizationRecoveryWindows != 0 { + n += 2 + sovParams(uint64(m.ActionFinalizationRecoveryWindows)) + } + if m.ActionFinalizationRecoveryMaxTotalBadEvidences != 0 { + n += 2 + sovParams(uint64(m.ActionFinalizationRecoveryMaxTotalBadEvidences)) + } return n } @@ -709,6 +852,120 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationSignatureFailureEvidencesPerWindow", wireType) + } + m.ActionFinalizationSignatureFailureEvidencesPerWindow = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActionFinalizationSignatureFailureEvidencesPerWindow |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationSignatureFailureConsecutiveWindows", wireType) + } + m.ActionFinalizationSignatureFailureConsecutiveWindows = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActionFinalizationSignatureFailureConsecutiveWindows |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationNotInTop10EvidencesPerWindow", wireType) + } + m.ActionFinalizationNotInTop10EvidencesPerWindow = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActionFinalizationNotInTop10EvidencesPerWindow |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationNotInTop10ConsecutiveWindows", wireType) + } + m.ActionFinalizationNotInTop10ConsecutiveWindows = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActionFinalizationNotInTop10ConsecutiveWindows |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 17: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationRecoveryWindows", wireType) + } + m.ActionFinalizationRecoveryWindows = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActionFinalizationRecoveryWindows |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 18: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationRecoveryMaxTotalBadEvidences", wireType) + } + m.ActionFinalizationRecoveryMaxTotalBadEvidences = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActionFinalizationRecoveryMaxTotalBadEvidences |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) From d0baedef2a59f855619a5eedfb9839767a67e8be Mon Sep 17 00:00:00 2001 From: J Bilal rafique <113895287+j-rafique@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:30:44 +0500 Subject: [PATCH 12/18] x/supernode: persist postpone reason (#100) --- .../lumera/supernode/v1/supernode_state.proto | 11 +- x/supernode/v1/keeper/metrics_state.go | 2 +- x/supernode/v1/types/supernode_state.pb.go | 110 +++++++++++++----- 3 files changed, 90 insertions(+), 33 deletions(-) diff --git a/proto/lumera/supernode/v1/supernode_state.proto b/proto/lumera/supernode/v1/supernode_state.proto index ac40787..a1a3081 100644 --- a/proto/lumera/supernode/v1/supernode_state.proto +++ b/proto/lumera/supernode/v1/supernode_state.proto @@ -17,7 +17,10 @@ enum SuperNodeState { SUPERNODE_STATE_POSTPONED = 5 [(gogoproto.enumvalue_customname) = "SuperNodeStatePostponed"]; } -message SuperNodeStateRecord { - SuperNodeState state = 1 [(gogoproto.moretags) = "yaml:\"state\""]; - int64 height = 2; -} +message SuperNodeStateRecord { + SuperNodeState state = 1 [(gogoproto.moretags) = "yaml:\"state\""]; + int64 height = 2; + // reason is an optional string describing why the state transition occurred. + // It is currently set only for transitions into POSTPONED. + string reason = 3 [(gogoproto.moretags) = "yaml:\"reason\""]; +} diff --git a/x/supernode/v1/keeper/metrics_state.go b/x/supernode/v1/keeper/metrics_state.go index 8b84e92..42cf6fb 100644 --- a/x/supernode/v1/keeper/metrics_state.go +++ b/x/supernode/v1/keeper/metrics_state.go @@ -18,7 +18,7 @@ func markPostponed(ctx sdk.Context, keeper types.SupernodeKeeper, sn *types.Supe if last.State == types.SuperNodeStatePostponed { return nil } - sn.States = append(sn.States, &types.SuperNodeStateRecord{State: types.SuperNodeStatePostponed, Height: ctx.BlockHeight()}) + sn.States = append(sn.States, &types.SuperNodeStateRecord{State: types.SuperNodeStatePostponed, Height: ctx.BlockHeight(), Reason: reason}) if err := keeper.SetSuperNode(ctx, *sn); err != nil { return err } diff --git a/x/supernode/v1/types/supernode_state.pb.go b/x/supernode/v1/types/supernode_state.pb.go index 1b75422..d660281 100644 --- a/x/supernode/v1/types/supernode_state.pb.go +++ b/x/supernode/v1/types/supernode_state.pb.go @@ -63,6 +63,9 @@ func (SuperNodeState) EnumDescriptor() ([]byte, []int) { type SuperNodeStateRecord struct { State SuperNodeState `protobuf:"varint,1,opt,name=state,proto3,enum=lumera.supernode.v1.SuperNodeState" json:"state,omitempty" yaml:"state"` Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` + // reason is an optional string describing why the state transition occurred. + // It is currently set only for transitions into POSTPONED. + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty" yaml:"reason"` } func (m *SuperNodeStateRecord) Reset() { *m = SuperNodeStateRecord{} } @@ -112,6 +115,13 @@ func (m *SuperNodeStateRecord) GetHeight() int64 { return 0 } +func (m *SuperNodeStateRecord) GetReason() string { + if m != nil { + return m.Reason + } + return "" +} + func init() { proto.RegisterEnum("lumera.supernode.v1.SuperNodeState", SuperNodeState_name, SuperNodeState_value) proto.RegisterType((*SuperNodeStateRecord)(nil), "lumera.supernode.v1.SuperNodeStateRecord") @@ -122,34 +132,35 @@ func init() { } var fileDescriptor_bb8b41f035e29780 = []byte{ - // 418 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcc, 0x29, 0xcd, 0x4d, - 0x2d, 0x4a, 0xd4, 0x2f, 0x2e, 0x2d, 0x48, 0x2d, 0xca, 0xcb, 0x4f, 0x49, 0xd5, 0x2f, 0x33, 0x44, - 0x70, 0xe2, 0x8b, 0x4b, 0x12, 0x4b, 0x52, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x84, 0x21, - 0x4a, 0xf5, 0xe0, 0xb2, 0x7a, 0x65, 0x86, 0x52, 0x22, 0xe9, 0xf9, 0xe9, 0xf9, 0x60, 0x79, 0x7d, - 0x10, 0x0b, 0xa2, 0x54, 0xa9, 0x9a, 0x4b, 0x24, 0x18, 0xa4, 0xca, 0x2f, 0x3f, 0x25, 0x35, 0x18, - 0x64, 0x44, 0x50, 0x6a, 0x72, 0x7e, 0x51, 0x8a, 0x90, 0x37, 0x17, 0x2b, 0xd8, 0x44, 0x09, 0x46, - 0x05, 0x46, 0x0d, 0x3e, 0x23, 0x65, 0x3d, 0x2c, 0x46, 0xea, 0xa1, 0xea, 0x74, 0x12, 0xf8, 0x74, - 0x4f, 0x9e, 0xa7, 0x32, 0x31, 0x37, 0xc7, 0x4a, 0x09, 0xac, 0x57, 0x29, 0x08, 0x62, 0x86, 0x90, - 0x18, 0x17, 0x5b, 0x46, 0x6a, 0x66, 0x7a, 0x46, 0x89, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x73, 0x10, - 0x94, 0xa7, 0xf5, 0x8b, 0x89, 0x8b, 0x0f, 0xd5, 0x0c, 0x21, 0x3b, 0x2e, 0xe9, 0xe0, 0xd0, 0x00, - 0xd7, 0x20, 0x3f, 0x7f, 0x17, 0xd7, 0xf8, 0xe0, 0x10, 0xc7, 0x10, 0xd7, 0xf8, 0x50, 0xbf, 0xe0, - 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x29, 0xd9, 0xae, 0xb9, 0x0a, 0x92, - 0xa8, 0x9a, 0x42, 0xf3, 0x8a, 0x0b, 0x52, 0x93, 0x33, 0xd3, 0x32, 0x53, 0x53, 0x84, 0x4c, 0xb8, - 0xc4, 0xd0, 0xf5, 0x3b, 0x3a, 0x87, 0x78, 0x86, 0xb9, 0x0a, 0x30, 0x4a, 0x49, 0x74, 0xcd, 0x55, - 0x40, 0xf3, 0xad, 0x63, 0x72, 0x49, 0x66, 0x59, 0xaa, 0x90, 0x05, 0x97, 0x04, 0xba, 0x2e, 0x17, - 0xcf, 0x60, 0x47, 0x27, 0x1f, 0x57, 0x17, 0x01, 0x26, 0x29, 0xa9, 0xae, 0xb9, 0x0a, 0x62, 0xa8, - 0xfa, 0x5c, 0x32, 0x8b, 0x13, 0x93, 0x72, 0x52, 0x53, 0x84, 0xcc, 0xb8, 0xc4, 0xd1, 0x75, 0x06, - 0x87, 0xf8, 0x07, 0x04, 0xb8, 0xba, 0x08, 0x30, 0x4b, 0x49, 0x76, 0xcd, 0x55, 0x10, 0x45, 0xd5, - 0x18, 0x5c, 0x92, 0x5f, 0x50, 0x90, 0x9a, 0x22, 0x64, 0xc5, 0x25, 0x89, 0xae, 0x2f, 0xc0, 0xd5, - 0xcf, 0xd1, 0xc7, 0x33, 0xca, 0xd5, 0x45, 0x80, 0x45, 0x4a, 0xba, 0x6b, 0xae, 0x82, 0x38, 0xaa, - 0xce, 0x80, 0xd4, 0xbc, 0xc4, 0x9c, 0xcc, 0x2a, 0x1c, 0x7a, 0xfd, 0x83, 0x43, 0x02, 0xfc, 0xfd, - 0x5c, 0x5d, 0x04, 0x58, 0xb1, 0xea, 0xcd, 0x2f, 0x2e, 0x29, 0xc8, 0xcf, 0x4b, 0x4d, 0x91, 0xe2, - 0xe8, 0x58, 0x2c, 0xc7, 0xb0, 0x62, 0x89, 0x1c, 0xa3, 0x93, 0xde, 0x89, 0x47, 0x72, 0x8c, 0x17, - 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, - 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x89, 0x54, 0xa0, 0x26, 0xb2, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, - 0x36, 0x70, 0x82, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x09, 0xfa, 0xab, 0x3f, 0x88, 0x02, - 0x00, 0x00, + // 447 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0xd2, 0x41, 0x6b, 0xd3, 0x60, + 0x18, 0x07, 0xf0, 0xbc, 0xad, 0x2b, 0xfa, 0xa2, 0x23, 0xbe, 0xd6, 0x2e, 0xcd, 0x30, 0x0b, 0xf5, + 0xd2, 0x79, 0x48, 0x99, 0x8a, 0xc8, 0x0e, 0x42, 0xba, 0xbc, 0x42, 0x70, 0xa4, 0x21, 0x6f, 0xea, + 0x61, 0x97, 0x92, 0x35, 0x8f, 0x5d, 0xa0, 0xcb, 0x1b, 0x92, 0xac, 0x38, 0x3f, 0x81, 0xe4, 0xe4, + 0x17, 0xc8, 0x49, 0x11, 0x3f, 0x8a, 0xc7, 0x1d, 0x3d, 0x0d, 0x69, 0xbf, 0xc1, 0x8e, 0x9e, 0xa4, + 0xc9, 0x50, 0x12, 0xb6, 0x5b, 0x9e, 0x3c, 0xff, 0xdf, 0x3f, 0x10, 0x1e, 0xbc, 0x3b, 0x3f, 0x3b, + 0x85, 0xd8, 0x1b, 0x24, 0x67, 0x11, 0xc4, 0x21, 0xf7, 0x61, 0xb0, 0xd8, 0xfb, 0x3f, 0x4c, 0x92, + 0xd4, 0x4b, 0x41, 0x8b, 0x62, 0x9e, 0x72, 0xf2, 0xa8, 0x8c, 0x6a, 0xff, 0xb6, 0xda, 0x62, 0x4f, + 0x6e, 0xcf, 0xf8, 0x8c, 0x17, 0xfb, 0xc1, 0xfa, 0xa9, 0x8c, 0xf6, 0xbe, 0x23, 0xdc, 0x66, 0xeb, + 0x98, 0xc5, 0x7d, 0x60, 0xeb, 0x0e, 0x07, 0xa6, 0x3c, 0xf6, 0xc9, 0x3b, 0xbc, 0x51, 0x54, 0x4a, + 0x48, 0x45, 0xfd, 0xcd, 0xe7, 0x4f, 0xb5, 0x1b, 0x3a, 0xb5, 0xaa, 0x1c, 0x8a, 0x57, 0x97, 0x3b, + 0xf7, 0xcf, 0xbd, 0xd3, 0xf9, 0x7e, 0xaf, 0xb0, 0x3d, 0xa7, 0xec, 0x20, 0x1d, 0xdc, 0x3a, 0x81, + 0x60, 0x76, 0x92, 0x4a, 0x0d, 0x15, 0xf5, 0x9b, 0xce, 0xf5, 0x44, 0x76, 0x71, 0x2b, 0x06, 0x2f, + 0xe1, 0xa1, 0xd4, 0x54, 0x51, 0xff, 0xde, 0xf0, 0xe1, 0xd5, 0xe5, 0xce, 0x83, 0xb2, 0xa0, 0x7c, + 0xdf, 0x73, 0xae, 0x03, 0xcf, 0xfe, 0x34, 0xf0, 0x66, 0xf5, 0x73, 0xe4, 0x0d, 0xde, 0x66, 0x63, + 0x9b, 0x3a, 0xd6, 0xc8, 0xa0, 0x13, 0xe6, 0xea, 0x2e, 0x9d, 0x8c, 0x2d, 0x66, 0xd3, 0x03, 0xf3, + 0xad, 0x49, 0x0d, 0x51, 0x90, 0x9f, 0x64, 0xb9, 0xda, 0xad, 0xa2, 0x71, 0x98, 0x44, 0x30, 0x0d, + 0x3e, 0x04, 0xe0, 0x93, 0x97, 0xb8, 0x53, 0xf7, 0xfa, 0x81, 0x6b, 0xbe, 0xa7, 0x22, 0x92, 0xa5, + 0x2c, 0x57, 0x6b, 0x3f, 0x46, 0x9f, 0xa6, 0xc1, 0x02, 0xc8, 0x6b, 0x2c, 0xd5, 0x95, 0x61, 0x32, + 0x7d, 0x78, 0x48, 0x0d, 0xb1, 0x21, 0xcb, 0x59, 0xae, 0x76, 0xaa, 0xce, 0x08, 0x12, 0xef, 0x78, + 0x0e, 0x3e, 0x79, 0x85, 0xb7, 0xea, 0x92, 0xb9, 0x23, 0xdb, 0xa6, 0x86, 0xd8, 0x94, 0xbb, 0x59, + 0xae, 0x3e, 0xae, 0x42, 0x96, 0xf2, 0x28, 0x02, 0x9f, 0xec, 0xe3, 0x6e, 0xdd, 0xd9, 0xd4, 0xd2, + 0x0f, 0xcd, 0x23, 0x6a, 0x88, 0x77, 0xe4, 0xed, 0x2c, 0x57, 0xb7, 0xaa, 0xd2, 0x86, 0xd0, 0x9b, + 0x07, 0x9f, 0x6e, 0xb1, 0x23, 0xe6, 0xda, 0x23, 0x8b, 0x1a, 0xe2, 0xc6, 0x8d, 0x96, 0x27, 0x69, + 0xc4, 0x43, 0xf0, 0xe5, 0xbb, 0x9f, 0xbf, 0x2a, 0xc2, 0x8f, 0x6f, 0x0a, 0x1a, 0x6a, 0x3f, 0x97, + 0x0a, 0xba, 0x58, 0x2a, 0xe8, 0xf7, 0x52, 0x41, 0x5f, 0x56, 0x8a, 0x70, 0xb1, 0x52, 0x84, 0x5f, + 0x2b, 0x45, 0x38, 0x6a, 0x7f, 0xac, 0x1e, 0x64, 0x7a, 0x1e, 0x41, 0x72, 0xdc, 0x2a, 0x8e, 0xeb, + 0xc5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xfd, 0x91, 0xc1, 0xb4, 0x02, 0x00, 0x00, } func (m *SuperNodeStateRecord) Marshal() (dAtA []byte, err error) { @@ -172,6 +183,13 @@ func (m *SuperNodeStateRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Reason) > 0 { + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintSupernodeState(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + } if m.Height != 0 { i = encodeVarintSupernodeState(dAtA, i, uint64(m.Height)) i-- @@ -208,6 +226,10 @@ func (m *SuperNodeStateRecord) Size() (n int) { if m.Height != 0 { n += 1 + sovSupernodeState(uint64(m.Height)) } + l = len(m.Reason) + if l > 0 { + n += 1 + l + sovSupernodeState(uint64(l)) + } return n } @@ -284,6 +306,38 @@ func (m *SuperNodeStateRecord) Unmarshal(dAtA []byte) error { break } } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSupernodeState + } + 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 ErrInvalidLengthSupernodeState + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSupernodeState + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipSupernodeState(dAtA[iNdEx:]) From 3f9fcc7042b02f340e7d7a73e17782657ea14494 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Fri, 6 Feb 2026 22:30:41 +0500 Subject: [PATCH 13/18] audit: epoch-based reporting --- docs/static/openapi.yml | 2 +- proto/lumera/audit/v1/audit.proto | 18 +- proto/lumera/audit/v1/epoch.proto | 36 + proto/lumera/audit/v1/evidence.proto | 3 + proto/lumera/audit/v1/evidence_metadata.proto | 23 + proto/lumera/audit/v1/params.proto | 65 +- proto/lumera/audit/v1/query.proto | 74 +- proto/lumera/audit/v1/tx.proto | 2 +- x/audit/v1/POSTPONEMENT_RULES.md | 30 +- x/audit/v1/README.md | 299 ++-- x/audit/v1/keeper/abci.go | 33 +- .../action_finalization_postponement_state.go | 8 +- .../assignment/DETERMINISTIC_ASSIGNMENT.md | 122 -- x/audit/v1/keeper/assignment/assignment.go | 126 -- x/audit/v1/keeper/audit_peer_assignment.go | 102 ++ x/audit/v1/keeper/enforcement.go | 142 +- x/audit/v1/keeper/enforcement_test.go | 22 +- x/audit/v1/keeper/epoch_anchor.go | 145 ++ x/audit/v1/keeper/epoch_math.go | 61 + x/audit/v1/keeper/evidence.go | 107 +- ...indow_count.go => evidence_epoch_count.go} | 8 +- x/audit/v1/keeper/genesis.go | 7 + x/audit/v1/keeper/keeper.go | 4 + x/audit/v1/keeper/msg_submit_audit_report.go | 80 +- .../v1/keeper/msg_submit_audit_report_test.go | 79 ++ x/audit/v1/keeper/msg_update_params.go | 17 +- x/audit/v1/keeper/params.go | 4 + x/audit/v1/keeper/prune.go | 70 +- x/audit/v1/keeper/query_assigned_targets.go | 34 +- x/audit/v1/keeper/query_audit_report.go | 2 +- .../keeper/query_audit_reports_by_reporter.go | 12 +- x/audit/v1/keeper/query_current_epoch.go | 31 + .../v1/keeper/query_current_epoch_anchor.go | 31 + x/audit/v1/keeper/query_current_window.go | 32 - ...ndow_snapshot.go => query_epoch_anchor.go} | 8 +- x/audit/v1/keeper/query_evidence.go | 5 +- x/audit/v1/keeper/query_self_reports.go | 18 +- x/audit/v1/keeper/query_supernode_reports.go | 21 +- x/audit/v1/keeper/state.go | 22 +- .../keeper/storage_challenge_deterministic.go | 92 ++ .../keeper/storage_challenge_evidence_test.go | 82 ++ .../v1/keeper/supernode_metrics_staleness.go | 84 -- .../supernode_metrics_staleness_test.go | 51 - x/audit/v1/keeper/window.go | 87 -- x/audit/v1/keeper/window_state.go | 183 --- x/audit/v1/keeper/window_state_test.go | 123 -- x/audit/v1/module/autocli.go | 18 +- x/audit/v1/types/audit.pb.go | 580 +------- x/audit/v1/types/epoch.pb.go | 814 +++++++++++ x/audit/v1/types/errors.go | 4 +- x/audit/v1/types/evidence.pb.go | 62 +- x/audit/v1/types/evidence_metadata.pb.go | 518 ++++++- x/audit/v1/types/keys.go | 133 +- x/audit/v1/types/params.go | 407 ++++-- x/audit/v1/types/params.pb.go | 921 ++++++++++--- x/audit/v1/types/query.pb.go | 1208 +++++++++++------ x/audit/v1/types/query.pb.gw.go | 155 ++- x/audit/v1/types/tx.pb.go | 108 +- 58 files changed, 4819 insertions(+), 2716 deletions(-) create mode 100644 proto/lumera/audit/v1/epoch.proto delete mode 100644 x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md delete mode 100644 x/audit/v1/keeper/assignment/assignment.go create mode 100644 x/audit/v1/keeper/audit_peer_assignment.go create mode 100644 x/audit/v1/keeper/epoch_anchor.go create mode 100644 x/audit/v1/keeper/epoch_math.go rename x/audit/v1/keeper/{evidence_window_count.go => evidence_epoch_count.go} (52%) create mode 100644 x/audit/v1/keeper/msg_submit_audit_report_test.go create mode 100644 x/audit/v1/keeper/query_current_epoch.go create mode 100644 x/audit/v1/keeper/query_current_epoch_anchor.go delete mode 100644 x/audit/v1/keeper/query_current_window.go rename x/audit/v1/keeper/{query_window_snapshot.go => query_epoch_anchor.go} (50%) create mode 100644 x/audit/v1/keeper/storage_challenge_deterministic.go create mode 100644 x/audit/v1/keeper/storage_challenge_evidence_test.go delete mode 100644 x/audit/v1/keeper/supernode_metrics_staleness.go delete mode 100644 x/audit/v1/keeper/supernode_metrics_staleness_test.go delete mode 100644 x/audit/v1/keeper/window.go delete mode 100644 x/audit/v1/keeper/window_state.go delete mode 100644 x/audit/v1/keeper/window_state_test.go create mode 100644 x/audit/v1/types/epoch.pb.go diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index 2461282..3d1df14 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1 +1 @@ -{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}":{"get":{"tags":["Query"],"summary":"AssignedTargets returns the prober -\u003e targets assignment for a given supernode_account.\nIf filter_by_window_id is false, it returns the assignments for the current window.","operationId":"GithubComLumeraProtocollumeraQuery_AssignedTargets","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"boolean","name":"filter_by_window_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAssignedTargetsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_report/{window_id}/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReport","parameters":[{"type":"string","format":"uint64","name":"window_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_window":{"get":{"tags":["Query"],"summary":"CurrentWindow returns the current derived window boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentWindow","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentWindowResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin11","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SelfReports returns self-reports submitted by the given supernode_account across windows.","operationId":"GithubComLumeraProtocollumeraQuery_SelfReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_window_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySelfReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SupernodeReports returns all reports that include observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_SupernodeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"window_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_window_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySupernodeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/window_snapshot/{window_id}":{"get":{"tags":["Query"],"summary":"WindowSnapshot returns the persisted window snapshot for the given window_id.","operationId":"GithubComLumeraProtocollumeraQuery_WindowSnapshot","parameters":[{"type":"string","format":"uint64","name":"window_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryWindowSnapshotResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin16","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin21","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin29","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitAuditReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitAuditReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin12","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin17","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin22","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin33","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.AuditPeerObservation":{"type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the window.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.AuditReport":{"type":"object","properties":{"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.AuditSelfReport":{"type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.MsgSubmitAuditReport":{"type":"object","properties":{"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgSubmitAuditReportResponse":{"type":"object"},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"consecutive_windows_to_postpone":{"description":"Number of consecutive windows a required port must be unanimously reported CLOSED\nby peers (with at least 2 peer reports per window) before postponing the supernode.","type":"integer","format":"int64"},"keep_last_window_entries":{"description":"How many completed windows to keep in state for window-scoped data like WindowSnapshot,\nAuditReport, and related indices. Pruning runs at window end.","type":"string","format":"uint64"},"max_probe_targets_per_window":{"type":"integer","format":"int64"},"min_cpu_free_percent":{"description":"Minimum required host free capacity (self reported).\nfree% = 100 - usage%\nA usage% of 0 is treated as \"unknown\" (no action).","type":"integer","format":"int64"},"min_disk_free_percent":{"type":"integer","format":"int64"},"min_mem_free_percent":{"type":"integer","format":"int64"},"min_probe_targets_per_window":{"type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"reporting_window_blocks":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.ProberTargets":{"description":"ProberTargets captures the deterministic prober -\u003e targets mapping for a window.","type":"object","properties":{"prober_supernode_account":{"type":"string"},"target_supernode_accounts":{"type":"array","items":{"type":"string"}}}},"lumera.audit.v1.QueryAssignedTargetsResponse":{"type":"object","properties":{"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"target_supernode_accounts":{"type":"array","items":{"type":"string"}},"window_id":{"type":"string","format":"uint64"},"window_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryAuditReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.AuditReport"}}},"lumera.audit.v1.QueryAuditReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditReport"}}}},"lumera.audit.v1.QueryCurrentWindowResponse":{"type":"object","properties":{"window_end_height":{"type":"string","format":"int64"},"window_id":{"type":"string","format":"uint64"},"window_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QuerySelfReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SelfReport"}}}},"lumera.audit.v1.QuerySupernodeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SupernodeReport"}}}},"lumera.audit.v1.QueryWindowSnapshotResponse":{"type":"object","properties":{"snapshot":{"$ref":"#/definitions/lumera.audit.v1.WindowSnapshot"}}},"lumera.audit.v1.SelfReport":{"type":"object","properties":{"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.SupernodeReport":{"type":"object","properties":{"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"},"window_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.WindowSnapshot":{"type":"object","properties":{"assignments":{"description":"assignments is the minimal per-window source-of-truth for prober -\u003e targets mapping.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.ProberTargets"}},"window_id":{"type":"string","format":"uint64"},"window_start_height":{"type":"string","format":"int64"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}}},"tags":[{"name":"Query"},{"name":"Msg"}]} \ No newline at end of file +{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}":{"get":{"tags":["Query"],"summary":"AssignedTargets returns the prober -\u003e targets assignment for a given supernode_account.\nIf filter_by_epoch_id is false, it returns the assignments for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_AssignedTargets","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAssignedTargetsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_report/{epoch_id}/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReport","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch":{"get":{"tags":["Query"],"summary":"CurrentEpoch returns the current derived epoch boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpoch","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch_anchor":{"get":{"tags":["Query"],"summary":"CurrentEpochAnchor returns the persisted epoch anchor for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpochAnchor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_anchor/{epoch_id}":{"get":{"tags":["Query"],"summary":"EpochAnchor returns the persisted epoch anchor for the given epoch_id.","operationId":"GithubComLumeraProtocollumeraQuery_EpochAnchor","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_action/{action_id}":{"get":{"tags":["Query"],"summary":"EvidenceByAction queries evidence records by action id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceByAction","parameters":[{"type":"string","name":"action_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_subject/{subject_address}":{"get":{"tags":["Query"],"summary":"EvidenceBySubject queries evidence records by subject address.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceBySubject","parameters":[{"type":"string","name":"subject_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceBySubjectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/{evidence_id}":{"get":{"tags":["Query"],"summary":"EvidenceById queries a single evidence record by id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceById","parameters":[{"type":"string","format":"uint64","name":"evidence_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByIdResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin14","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SelfReports returns self-reports submitted by the given supernode_account across epochs.","operationId":"GithubComLumeraProtocollumeraQuery_SelfReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySelfReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SupernodeReports returns all reports that include observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_SupernodeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySupernodeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin19","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin24","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin32","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the x/auth module\nparameters. The authority defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","operationId":"UpgradeMsg_Exec","parameters":[{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Grant":{"post":{"tags":["Msg"],"summary":"Grant grants the provided authorization to the grantee on the granter's\naccount with the provided expiration time. If there is already a grant\nfor the given (granter, grantee, Authorization) triple, then the grant\nwill be overwritten.","operationId":"UpgradeMsg_Grant","parameters":[{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Revoke":{"post":{"tags":["Msg"],"summary":"Revoke revokes any authorization corresponding to the provided method name on the\ngranter's account that has been granted to the grantee.","operationId":"UpgradeMsg_Revoke","parameters":[{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.autocli.v1.Query/AppOptions":{"post":{"tags":["Query"],"summary":"AppOptions returns the autocli options for all of the modules in an app.","operationId":"UpgradeQuery_AppOptions","parameters":[{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/MultiSend":{"post":{"tags":["Msg"],"summary":"MultiSend defines a method for sending coins from some accounts to other accounts.","operationId":"UpgradeMsg_MultiSend","parameters":[{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method for sending coins from one account to another account.","operationId":"UpgradeMsg_Send","parameters":[{"description":"MsgSend represents a message to send coins from one account to another.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/SetSendEnabled":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"SetSendEnabled is a governance operation for setting the SendEnabled flag\non any number of Denoms. Only the entries to add or update should be\nincluded. Entries that already exist in the store, but that aren't\nincluded in this message, will be left unchanged.","operationId":"UpgradeMsg_SetSendEnabled","parameters":[{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabled"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin53","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/AuthorizeCircuitBreaker":{"post":{"tags":["Msg"],"summary":"AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another\naccount's circuit breaker permissions.","operationId":"UpgradeMsg_AuthorizeCircuitBreaker","parameters":[{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/ResetCircuitBreaker":{"post":{"tags":["Msg"],"summary":"ResetCircuitBreaker resumes processing of Msg's in the state machine that\nhave been been paused using TripCircuitBreaker.","operationId":"UpgradeMsg_ResetCircuitBreaker","parameters":[{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/TripCircuitBreaker":{"post":{"tags":["Msg"],"summary":"TripCircuitBreaker pauses processing of Msg's in the state machine.","operationId":"UpgradeMsg_TripCircuitBreaker","parameters":[{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.consensus.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin66","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin68","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/VerifyInvariant":{"post":{"tags":["Msg"],"summary":"VerifyInvariant defines a method to verify a particular invariant.","operationId":"UpgradeMsg_VerifyInvariant","parameters":[{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/distribution module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"UpgradeMsg_CommunityPoolSpend","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/DepositValidatorRewardsPool":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"UpgradeMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"UpgradeMsg_FundCommunityPool","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress":{"post":{"tags":["Msg"],"summary":"SetWithdrawAddress defines a method to change the withdraw address\nfor a delegator (or validator self-delegation).","operationId":"UpgradeMsg_SetWithdrawAddress","parameters":[{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin79","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward":{"post":{"tags":["Msg"],"summary":"WithdrawDelegatorReward defines a method to withdraw rewards of delegator\nfrom a single validator.","operationId":"UpgradeMsg_WithdrawDelegatorReward","parameters":[{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission":{"post":{"tags":["Msg"],"summary":"WithdrawValidatorCommission defines a method to withdraw the\nfull commission to the validator address.","operationId":"UpgradeMsg_WithdrawValidatorCommission","parameters":[{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evidence.v1beta1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or\ncounterfactual signing.","operationId":"UpgradeMsg_SubmitEvidence","parameters":[{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/GrantAllowance":{"post":{"tags":["Msg"],"summary":"GrantAllowance grants fee allowance to the grantee on the granter's\naccount with the provided expiration time.","operationId":"UpgradeMsg_GrantAllowance","parameters":[{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/PruneAllowances":{"post":{"description":"Since cosmos-sdk 0.50","tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"UpgradeMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowances"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/RevokeAllowance":{"post":{"tags":["Msg"],"summary":"RevokeAllowance revokes any fee allowance of granter's account that\nhas been granted to the grantee.","operationId":"UpgradeMsg_RevokeAllowance","parameters":[{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/CancelProposal":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"UpgradeMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"UpgradeMsg_Deposit","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/ExecLegacyContent":{"post":{"tags":["Msg"],"summary":"ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal\nto execute a legacy content-based proposal.","operationId":"UpgradeMsg_ExecLegacyContent","parameters":[{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContent"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given the messages.","operationId":"UpgradeMsg_SubmitProposal","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin92","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"UpgradeMsg_Vote","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"UpgradeMsg_VoteWeighted","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"UpgradeMsg_DepositMixin96","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given a content.","operationId":"UpgradeMsg_SubmitProposalMixin96","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"UpgradeMsg_VoteMixin96","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/VoteWeighted":{"post":{"description":"Since: cosmos-sdk 0.43","tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"UpgradeMsg_VoteWeightedMixin96","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroup":{"post":{"tags":["Msg"],"summary":"CreateGroup creates a new group with an admin account address, a list of members and some optional metadata.","operationId":"UpgradeMsg_CreateGroup","parameters":[{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupPolicy creates a new group policy using given DecisionPolicy.","operationId":"UpgradeMsg_CreateGroupPolicy","parameters":[{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupWithPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupWithPolicy creates a new group with policy.","operationId":"UpgradeMsg_CreateGroupWithPolicy","parameters":[{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec executes a proposal.","operationId":"UpgradeMsg_ExecMixin100","parameters":[{"description":"MsgExec is the Msg/Exec request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/LeaveGroup":{"post":{"tags":["Msg"],"summary":"LeaveGroup allows a group member to leave the group.","operationId":"UpgradeMsg_LeaveGroup","parameters":[{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal submits a new proposal.","operationId":"UpgradeMsg_SubmitProposalMixin100","parameters":[{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupAdmin updates the group admin with given group id and previous admin address.","operationId":"UpgradeMsg_UpdateGroupAdmin","parameters":[{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMembers":{"post":{"tags":["Msg"],"summary":"UpdateGroupMembers updates the group members with given group id and admin address.","operationId":"UpgradeMsg_UpdateGroupMembers","parameters":[{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembers"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupMetadata updates the group metadata with given group id and admin address.","operationId":"UpgradeMsg_UpdateGroupMetadata","parameters":[{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyAdmin updates a group policy admin.","operationId":"UpgradeMsg_UpdateGroupPolicyAdmin","parameters":[{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyDecisionPolicy":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated.","operationId":"UpgradeMsg_UpdateGroupPolicyDecisionPolicy","parameters":[{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyMetadata updates a group policy metadata.","operationId":"UpgradeMsg_UpdateGroupPolicyMetadata","parameters":[{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote allows a voter to vote on a proposal.","operationId":"UpgradeMsg_VoteMixin100","parameters":[{"description":"MsgVote is the Msg/Vote request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/WithdrawProposal":{"post":{"tags":["Msg"],"summary":"WithdrawProposal withdraws a proposal.","operationId":"UpgradeMsg_WithdrawProposal","parameters":[{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.mint.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/mint module\nparameters. The authority is defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParamsMixin105","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.nft.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method to send a nft from one account to another account.","operationId":"UpgradeMsg_SendMixin111","parameters":[{"description":"MsgSend represents a message to send a nft from one account to another account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/Unjail":{"post":{"tags":["Msg"],"summary":"Unjail defines a method for unjailing a jailed validator, thus returning\nthem into the bonded validator set, so they can begin receiving provisions\nand rewards again.","operationId":"UpgradeMsg_Unjail","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjail"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjailResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/slashing module\nparameters. The authority defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParamsMixin118","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/BeginRedelegate":{"post":{"tags":["Msg"],"summary":"BeginRedelegate defines a method for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","operationId":"UpgradeMsg_BeginRedelegate","parameters":[{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"UpgradeMsg_CancelUnbondingDelegation","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegation"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CreateValidator":{"post":{"tags":["Msg"],"summary":"CreateValidator defines a method for creating a new validator.","operationId":"UpgradeMsg_CreateValidator","parameters":[{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Delegate":{"post":{"tags":["Msg"],"summary":"Delegate defines a method for performing a delegation of coins\nfrom a delegator to a validator.","operationId":"UpgradeMsg_Delegate","parameters":[{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/EditValidator":{"post":{"tags":["Msg"],"summary":"EditValidator defines a method for editing an existing validator.","operationId":"UpgradeMsg_EditValidator","parameters":[{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Undelegate":{"post":{"tags":["Msg"],"summary":"Undelegate defines a method for performing an undelegation from a\ndelegate and a validator.","operationId":"UpgradeMsg_Undelegate","parameters":[{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines an operation for updating the x/staking module\nparameters.\nSince: cosmos-sdk 0.47","operationId":"UpgradeMsg_UpdateParamsMixin123","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenCommit":{"post":{"tags":["ABCIListenerService"],"summary":"ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit","operationId":"UpgradeABCIListenerService_ListenCommit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenFinalizeBlock":{"post":{"tags":["ABCIListenerService"],"summary":"ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock","operationId":"UpgradeABCIListenerService_ListenFinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/CancelUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"UpgradeMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"UpgradeMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"UpgradeMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"UpgradeMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreateVestingAccount":{"post":{"tags":["Msg"],"summary":"CreateVestingAccount defines a method that enables creating a vesting\naccount.","operationId":"UpgradeMsg_CreateVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/account_info/{address}":{"get":{"description":"Since: cosmos-sdk 0.47","tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"UpgradeQuery_AccountInfo","parameters":[{"type":"string","description":"address is the account address string.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.43","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"UpgradeQuery_Accounts","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account details based on address.","operationId":"UpgradeQuery_Account","parameters":[{"type":"string","description":"address defines the address to query for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/address_by_id/{id}":{"get":{"description":"Since: cosmos-sdk 0.46.2","tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"UpgradeQuery_AccountAddressByID","parameters":[{"type":"string","format":"int64","description":"Deprecated, use account_id instead\n\nid is the account number of the address to be queried. This field\nshould have been an uint64 (like all account numbers), and will be\nupdated to uint64 in a future version of the auth query.","name":"id","in":"path","required":true},{"type":"string","format":"uint64","description":"account_id is the account number of the address to be queried.\n\nSince: cosmos-sdk 0.47","name":"account_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountAddressByIDResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"UpgradeQuery_Bech32Prefix","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.Bech32PrefixResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_bytes}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"UpgradeQuery_AddressBytesToString","parameters":[{"type":"string","format":"byte","name":"address_bytes","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressBytesToStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_string}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"UpgradeQuery_AddressStringToBytes","parameters":[{"type":"string","name":"address_string","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressStringToBytesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"UpgradeQuery_ModuleAccounts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts/{name}":{"get":{"tags":["Query"],"summary":"ModuleAccountByName returns the module account info by module name","operationId":"UpgradeQuery_ModuleAccountByName","parameters":[{"type":"string","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountByNameResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters.","operationId":"UpgradeQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants":{"get":{"tags":["Query"],"summary":"Returns list of `Authorization`, granted to the grantee by the granter.","operationId":"UpgradeQuery_Grants","parameters":[{"type":"string","name":"granter","in":"query"},{"type":"string","name":"grantee","in":"query"},{"type":"string","description":"Optional, msg_type_url, when set, will query only grants matching given msg type.","name":"msg_type_url","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/grantee/{grantee}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"UpgradeQuery_GranteeGrants","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranteeGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/granter/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"UpgradeQuery_GranterGrants","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranterGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"AllBalances queries the balance of all coins for a single account.","operationId":"UpgradeQuery_AllBalances","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"boolean","description":"resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.\n\nSince: cosmos-sdk 0.50","name":"resolve_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryAllBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}/by_denom":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a single coin for a single account.","operationId":"UpgradeQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners/{denom}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"UpgradeQuery_DenomOwners","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners_by_query":{"get":{"description":"Since: cosmos-sdk 0.50.3","tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"UpgradeQuery_DenomOwnersByQuery","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata":{"get":{"tags":["Query"],"summary":"DenomsMetadata queries the client metadata for all registered coin\ndenominations.","operationId":"UpgradeQuery_DenomsMetadata","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomsMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata/{denom}":{"get":{"tags":["Query"],"summary":"DenomMetadata queries the client metadata of a given coin denomination.","operationId":"UpgradeQuery_DenomMetadata","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata_by_query_string":{"get":{"tags":["Query"],"summary":"DenomMetadataByQueryString queries the client metadata of a given coin denomination.","operationId":"UpgradeQuery_DenomMetadataByQueryString","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/bank module.","operationId":"UpgradeQuery_ParamsMixin52","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/send_enabled":{"get":{"description":"This query only returns denominations that have specific SendEnabled settings.\nAny denomination that does not have a specific setting will use the default\nparams.default_send_enabled, and will not be returned by this query.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"UpgradeQuery_SendEnabled","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"denoms is the specific denoms you want look up. Leave empty to get all entries.","name":"denoms","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"UpgradeQuery_SpendableBalances","parameters":[{"type":"string","description":"address is the address to query spendable balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"UpgradeQuery_SpendableBalanceByDenom","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"TotalSupply queries the total supply of all coins.","operationId":"UpgradeQuery_TotalSupply","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryTotalSupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SupplyOf queries the supply of a single coin.","operationId":"UpgradeQuery_SupplyOf","parameters":[{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySupplyOfResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/config":{"get":{"tags":["Service"],"summary":"Config queries for the operator configuration.","operationId":"UpgradeService_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.ConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/status":{"get":{"tags":["Service"],"summary":"Status queries for the node status.","operationId":"UpgradeService_Status","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.StatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/authn":{"get":{"tags":["ReflectionService"],"summary":"GetAuthnDescriptor returns information on how to authenticate transactions in the application\nNOTE: this RPC is still experimental and might be subject to breaking changes or removal in\nfuture releases of the cosmos-sdk.","operationId":"UpgradeReflectionService_GetAuthnDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/chain":{"get":{"tags":["ReflectionService"],"summary":"GetChainDescriptor returns the description of the chain","operationId":"UpgradeReflectionService_GetChainDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/codec":{"get":{"tags":["ReflectionService"],"summary":"GetCodecDescriptor returns the descriptor of the codec of the application","operationId":"UpgradeReflectionService_GetCodecDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/configuration":{"get":{"tags":["ReflectionService"],"summary":"GetConfigurationDescriptor returns the descriptor for the sdk.Config of the application","operationId":"UpgradeReflectionService_GetConfigurationDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/query_services":{"get":{"tags":["ReflectionService"],"summary":"GetQueryServicesDescriptor returns the available gRPC queryable services of the application","operationId":"UpgradeReflectionService_GetQueryServicesDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/tx_descriptor":{"get":{"tags":["ReflectionService"],"summary":"GetTxDescriptor returns information on the used transaction object and available msgs that can be used","operationId":"UpgradeReflectionService_GetTxDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces":{"get":{"tags":["ReflectionService"],"summary":"ListAllInterfaces lists all the interfaces registered in the interface\nregistry.","operationId":"UpgradeReflectionService_ListAllInterfaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListAllInterfacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces/{interface_name}/implementations":{"get":{"tags":["ReflectionService"],"summary":"ListImplementations list all the concrete types that implement a given\ninterface.","operationId":"UpgradeReflectionService_ListImplementations","parameters":[{"type":"string","description":"interface_name defines the interface to query the implementations for.","name":"interface_name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListImplementationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/abci_query":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Service"],"summary":"ABCIQuery defines a query handler that supports ABCI queries directly to the\napplication, bypassing Tendermint completely. The ABCI query must contain\na valid and supported path, including app, custom, p2p, and store.","operationId":"UpgradeService_ABCIQuery","parameters":[{"type":"string","format":"byte","name":"data","in":"query"},{"type":"string","name":"path","in":"query"},{"type":"string","format":"int64","name":"height","in":"query"},{"type":"boolean","name":"prove","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ABCIQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/latest":{"get":{"tags":["Service"],"summary":"GetLatestBlock returns the latest block.","operationId":"UpgradeService_GetLatestBlock","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/{height}":{"get":{"tags":["Service"],"summary":"GetBlockByHeight queries block for given height.","operationId":"UpgradeService_GetBlockByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/node_info":{"get":{"tags":["Service"],"summary":"GetNodeInfo queries the current node info.","operationId":"UpgradeService_GetNodeInfo","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetNodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/syncing":{"get":{"tags":["Service"],"summary":"GetSyncing queries node syncing.","operationId":"UpgradeService_GetSyncing","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetSyncingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/latest":{"get":{"tags":["Service"],"summary":"GetLatestValidatorSet queries latest validator-set.","operationId":"UpgradeService_GetLatestValidatorSet","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/{height}":{"get":{"tags":["Service"],"summary":"GetValidatorSetByHeight queries validator-set at a given height.","operationId":"UpgradeService_GetValidatorSetByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"UpgradeQuery_AccountsMixin62","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"UpgradeQuery_AccountMixin62","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/disable_list":{"get":{"tags":["Query"],"summary":"DisabledList returns a list of disabled message urls","operationId":"UpgradeQuery_DisabledList","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.DisabledListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/consensus/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/consensus module.","operationId":"UpgradeQuery_ParamsMixin65","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"UpgradeQuery_CommunityPool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards":{"get":{"tags":["Query"],"summary":"DelegationTotalRewards queries the total rewards accrued by each\nvalidator.","operationId":"UpgradeQuery_DelegationTotalRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}":{"get":{"tags":["Query"],"summary":"DelegationRewards queries the total rewards accrued by a delegation.","operationId":"UpgradeQuery_DelegationRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true},{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators":{"get":{"tags":["Query"],"summary":"DelegatorValidators queries the validators of a delegator.","operationId":"UpgradeQuery_DelegatorValidators","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address":{"get":{"tags":["Query"],"summary":"DelegatorWithdrawAddress queries withdraw address of a delegator.","operationId":"UpgradeQuery_DelegatorWithdrawAddress","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries params of the distribution module.","operationId":"UpgradeQuery_ParamsMixin78","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}":{"get":{"tags":["Query"],"summary":"ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator","operationId":"UpgradeQuery_ValidatorDistributionInfo","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/commission":{"get":{"tags":["Query"],"summary":"ValidatorCommission queries accumulated commission for a validator.","operationId":"UpgradeQuery_ValidatorCommission","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards":{"get":{"tags":["Query"],"summary":"ValidatorOutstandingRewards queries rewards of a validator address.","operationId":"UpgradeQuery_ValidatorOutstandingRewards","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes":{"get":{"tags":["Query"],"summary":"ValidatorSlashes queries slash events of a validator.","operationId":"UpgradeQuery_ValidatorSlashes","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true},{"type":"string","format":"uint64","description":"starting_height defines the optional starting height to query the slashes.","name":"starting_height","in":"query"},{"type":"string","format":"uint64","description":"starting_height defines the optional ending height to query the slashes.","name":"ending_height","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorSlashesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence":{"get":{"tags":["Query"],"summary":"AllEvidence queries all evidence.","operationId":"UpgradeQuery_AllEvidence","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryAllEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence/{hash}":{"get":{"tags":["Query"],"summary":"Evidence queries evidence based on evidence hash.","operationId":"UpgradeQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.\n\nSince: cosmos-sdk 0.47","name":"hash","in":"path","required":true},{"type":"string","format":"byte","description":"evidence_hash defines the hash of the requested evidence.\nDeprecated: Use hash, a HEX encoded string, instead.","name":"evidence_hash","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}":{"get":{"tags":["Query"],"summary":"Allowance returns granted allwance to the grantee by the granter.","operationId":"UpgradeQuery_Allowance","parameters":[{"type":"string","description":"granter is the address of the user granting an allowance of their funds.","name":"granter","in":"path","required":true},{"type":"string","description":"grantee is the address of the user being granted an allowance of another user's funds.","name":"grantee","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowances/{grantee}":{"get":{"tags":["Query"],"summary":"Allowances returns all the grants for the given grantee address.","operationId":"UpgradeQuery_Allowances","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/issued/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"UpgradeQuery_AllowancesByGranter","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/constitution":{"get":{"tags":["Query"],"summary":"Constitution queries the chain's constitution.","operationId":"UpgradeQuery_Constitution","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryConstitutionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"UpgradeQuery_ParamsMixin91","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"UpgradeQuery_Proposals","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"UpgradeQuery_Proposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"UpgradeQuery_Deposits","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositAddr.","operationId":"UpgradeQuery_Deposit","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"UpgradeQuery_TallyResult","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"UpgradeQuery_Votes","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"UpgradeQuery_Vote","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"UpgradeQuery_ParamsMixin95","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"UpgradeQuery_ProposalsMixin95","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"UpgradeQuery_ProposalMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"UpgradeQuery_DepositsMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositor address.","operationId":"UpgradeQuery_DepositMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"UpgradeQuery_TallyResultMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"UpgradeQuery_VotesMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"UpgradeQuery_VoteMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_info/{group_id}":{"get":{"tags":["Query"],"summary":"GroupInfo queries group info based on group id.","operationId":"UpgradeQuery_GroupInfo","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_members/{group_id}":{"get":{"tags":["Query"],"summary":"GroupMembers queries members of a group by group id.","operationId":"UpgradeQuery_GroupMembers","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByAdmin queries group policies by admin address.","operationId":"UpgradeQuery_GroupPoliciesByAdmin","parameters":[{"type":"string","description":"admin is the admin address of the group policy.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_group/{group_id}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByGroup queries group policies by group id.","operationId":"UpgradeQuery_GroupPoliciesByGroup","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group policy's group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policy_info/{address}":{"get":{"tags":["Query"],"summary":"GroupPolicyInfo queries group policy info based on account address of group policy.","operationId":"UpgradeQuery_GroupPolicyInfo","parameters":[{"type":"string","description":"address is the account address of the group policy.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPolicyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups":{"get":{"description":"Since: cosmos-sdk 0.47.1","tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"UpgradeQuery_Groups","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupsByAdmin queries groups by admin address.","operationId":"UpgradeQuery_GroupsByAdmin","parameters":[{"type":"string","description":"admin is the account address of a group's admin.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_member/{address}":{"get":{"tags":["Query"],"summary":"GroupsByMember queries groups by member address.","operationId":"UpgradeQuery_GroupsByMember","parameters":[{"type":"string","description":"address is the group member address.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByMemberResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries a proposal based on proposal id.","operationId":"UpgradeQuery_ProposalMixin99","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult returns the tally result of a proposal. If the proposal is\nstill in voting period, then this query computes the current tally state,\nwhich might not be final. On the other hand, if the proposal is final,\nthen it simply returns the `final_tally_result` state stored in the\nproposal itself.","operationId":"UpgradeQuery_TallyResultMixin99","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique id of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals_by_group_policy/{address}":{"get":{"tags":["Query"],"summary":"ProposalsByGroupPolicy queries proposals based on account address of group policy.","operationId":"UpgradeQuery_ProposalsByGroupPolicy","parameters":[{"type":"string","description":"address is the account address of the group policy related to proposals.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalsByGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}":{"get":{"tags":["Query"],"summary":"VoteByProposalVoter queries a vote by proposal id and voter.","operationId":"UpgradeQuery_VoteByProposalVoter","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVoteByProposalVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"VotesByProposal queries a vote by proposal id.","operationId":"UpgradeQuery_VotesByProposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_voter/{voter}":{"get":{"tags":["Query"],"summary":"VotesByVoter queries a vote by voter.","operationId":"UpgradeQuery_VotesByVoter","parameters":[{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/annual_provisions":{"get":{"tags":["Query"],"summary":"AnnualProvisions current minting annual provisions value.","operationId":"UpgradeQuery_AnnualProvisions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryAnnualProvisionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/inflation":{"get":{"tags":["Query"],"summary":"Inflation returns the current minting inflation value.","operationId":"UpgradeQuery_Inflation","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryInflationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of minting parameters.","operationId":"UpgradeQuery_ParamsMixin104","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/balance/{owner}/{class_id}":{"get":{"tags":["Query"],"summary":"Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721","operationId":"UpgradeQuery_BalanceMixin110","parameters":[{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"path","required":true},{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes":{"get":{"tags":["Query"],"summary":"Classes queries all NFT classes","operationId":"UpgradeQuery_Classes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes/{class_id}":{"get":{"tags":["Query"],"summary":"Class queries an NFT class based on its id","operationId":"UpgradeQuery_Class","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts":{"get":{"tags":["Query"],"summary":"NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in\nERC721Enumerable","operationId":"UpgradeQuery_NFTs","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"query"},{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"NFT queries an NFT based on its class and id.","operationId":"UpgradeQuery_NFT","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/owner/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721","operationId":"UpgradeQuery_Owner","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryOwnerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/supply/{class_id}":{"get":{"tags":["Query"],"summary":"Supply queries the number of NFTs from the given class, same as totalSupply of ERC721.","operationId":"UpgradeQuery_Supply","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QuerySupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries a specific parameter of a module, given its subspace and\nkey.","operationId":"UpgradeQuery_ParamsMixin113","parameters":[{"type":"string","description":"subspace defines the module to query the parameter for.","name":"subspace","in":"query"},{"type":"string","description":"key defines the key of the parameter in the subspace.","name":"key","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/subspaces":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"UpgradeQuery_Subspaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QuerySubspacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of slashing module","operationId":"UpgradeQuery_ParamsMixin116","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos":{"get":{"tags":["Query"],"summary":"SigningInfos queries signing info of all validators","operationId":"UpgradeQuery_SigningInfos","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos/{cons_address}":{"get":{"tags":["Query"],"summary":"SigningInfo queries the signing info of given cons address","operationId":"UpgradeQuery_SigningInfo","parameters":[{"type":"string","description":"cons_address is the address to query signing info of","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegations/{delegator_addr}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorDelegations queries all delegations of a given delegator address.","operationId":"UpgradeQuery_DelegatorDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Redelegations queries redelegations of given address.","operationId":"UpgradeQuery_Redelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"src_validator_addr defines the validator address to redelegate from.","name":"src_validator_addr","in":"query"},{"type":"string","description":"dst_validator_addr defines the validator address to redelegate to.","name":"dst_validator_addr","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryRedelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorUnbondingDelegations queries all unbonding delegations of a given\ndelegator address.","operationId":"UpgradeQuery_DelegatorUnbondingDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorValidators queries all validators info for given delegator\naddress.","operationId":"UpgradeQuery_DelegatorValidatorsMixin121","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"DelegatorValidator queries validator info for given delegator validator\npair.","operationId":"UpgradeQuery_DelegatorValidator","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/historical_info/{height}":{"get":{"tags":["Query"],"summary":"HistoricalInfo queries the historical info for given height.","operationId":"UpgradeQuery_HistoricalInfo","parameters":[{"type":"string","format":"int64","description":"height defines at which height to query the historical info.","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryHistoricalInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the staking parameters.","operationId":"UpgradeQuery_ParamsMixin121","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/pool":{"get":{"tags":["Query"],"summary":"Pool queries the pool info.","operationId":"UpgradeQuery_Pool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Validators queries all validators that match the given status.","operationId":"UpgradeQuery_Validators","parameters":[{"type":"string","description":"status enables to query for validators matching a given status.","name":"status","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"Validator queries validator info for given validator address.","operationId":"UpgradeQuery_Validator","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorDelegations queries delegate info for given validator.","operationId":"UpgradeQuery_ValidatorDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}":{"get":{"tags":["Query"],"summary":"Delegation queries delegate info for given validator delegator pair.","operationId":"UpgradeQuery_Delegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation":{"get":{"tags":["Query"],"summary":"UnbondingDelegation queries unbonding info for given validator delegator\npair.","operationId":"UpgradeQuery_UnbondingDelegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorUnbondingDelegations queries unbonding delegations of a validator.","operationId":"UpgradeQuery_ValidatorUnbondingDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"UpgradeService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"UpgradeService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"UpgradeService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"UpgradeService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/simulate":{"post":{"tags":["Service"],"summary":"Simulate simulates executing a transaction for estimating gas usage.","operationId":"UpgradeService_Simulate","parameters":[{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs":{"get":{"tags":["Service"],"summary":"GetTxsEvent fetches txs by event.","operationId":"UpgradeService_GetTxsEvent","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"events is the list of transaction event type.\nDeprecated post v0.47.x: use query instead, which should contain a valid\nevents query.","name":"events","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"],"type":"string","default":"ORDER_BY_UNSPECIFIED","description":" - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","name":"order_by","in":"query"},{"type":"string","format":"uint64","description":"page is the page number to query, starts at 1. If not provided, will\ndefault to first page.","name":"page","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"limit","in":"query"},{"type":"string","description":"query defines the transaction event query that is proxied to Tendermint's\nTxSearch RPC method. The query must be valid.\n\nSince cosmos-sdk 0.50","name":"query","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}},"post":{"tags":["Service"],"summary":"BroadcastTx broadcast transaction.","operationId":"UpgradeService_BroadcastTx","parameters":[{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/block/{height}":{"get":{"description":"Since: cosmos-sdk 0.45.2","tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"UpgradeService_GetBlockWithTxs","parameters":[{"type":"string","format":"int64","description":"height is the height of the block to query.","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetBlockWithTxsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/{hash}":{"get":{"tags":["Service"],"summary":"GetTx fetches a tx by hash.","operationId":"UpgradeService_GetTx","parameters":[{"type":"string","description":"hash is the tx hash to query, encoded as a hex string.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/applied_plan/{name}":{"get":{"tags":["Query"],"summary":"AppliedPlan queries a previously applied upgrade plan by its name.","operationId":"UpgradeQuery_AppliedPlan","parameters":[{"type":"string","description":"name is the name of the applied plan to query for.","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAppliedPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/authority":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"UpgradeQuery_Authority","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAuthorityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/current_plan":{"get":{"tags":["Query"],"summary":"CurrentPlan queries the current upgrade plan.","operationId":"UpgradeQuery_CurrentPlan","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryCurrentPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/module_versions":{"get":{"description":"Since: cosmos-sdk 0.43","tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"UpgradeQuery_ModuleVersions","parameters":[{"type":"string","description":"module_name is a field to query a specific module\nconsensus version from state. Leaving this empty will\nfetch the full list of module versions from state","name":"module_name","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryModuleVersionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries the consensus state that will serve\nas a trusted kernel for the next version of this chain. It will only be\nstored at the last height of this chain.\nUpgradedConsensusState RPC not supported with legacy querier\nThis rpc is deprecated now that IBC has its own replacement\n(https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)","operationId":"UpgradeQuery_UpgradedConsensusState","parameters":[{"type":"string","format":"int64","description":"last height of the current chain must be sent in request\nas this is the height under which next consensus state is stored","name":"last_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/AddCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"AddCodeUploadParamsAddresses defines a governance operation for\nadding addresses to code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_AddCodeUploadParamsAddresses","parameters":[{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ClearAdmin":{"post":{"tags":["Msg"],"summary":"ClearAdmin removes any admin stored for a smart contract","operationId":"WasmMsg_ClearAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ExecuteContract":{"post":{"tags":["Msg"],"summary":"Execute submits the given message data to a smart contract","operationId":"WasmMsg_ExecuteContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract":{"post":{"tags":["Msg"],"summary":"InstantiateContract creates a new smart contract instance for the given\n code id.","operationId":"WasmMsg_InstantiateContract","parameters":[{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract2":{"post":{"tags":["Msg"],"summary":"InstantiateContract2 creates a new smart contract instance for the given\n code id with a predictable address","operationId":"WasmMsg_InstantiateContract2","parameters":[{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"Migrate runs a code upgrade/ downgrade for a smart contract","operationId":"WasmMsg_MigrateContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/PinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"PinCodes defines a governance operation for pinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_PinCodes","parameters":[{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/RemoveCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"RemoveCodeUploadParamsAddresses defines a governance operation for\nremoving addresses from code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_RemoveCodeUploadParamsAddresses","parameters":[{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndInstantiateContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"StoreAndInstantiateContract defines a governance operation for storing\nand instantiating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndInstantiateContract","parameters":[{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndMigrateContract":{"post":{"description":"Since: 0.42","tags":["Msg"],"summary":"StoreAndMigrateContract defines a governance operation for storing\nand migrating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndMigrateContract","parameters":[{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode to submit Wasm code to the system","operationId":"WasmMsg_StoreCode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/SudoContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"SudoContract defines a governance operation for calling sudo\non a contract. The authority is defined in the keeper.","operationId":"WasmMsg_SudoContract","parameters":[{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UnpinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UnpinCodes defines a governance operation for unpinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_UnpinCodes","parameters":[{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateAdmin":{"post":{"tags":["Msg"],"summary":"UpdateAdmin sets a new admin for a smart contract","operationId":"WasmMsg_UpdateAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateContractLabel":{"post":{"description":"Since: 0.43","tags":["Msg"],"summary":"UpdateContractLabel sets a new label for a smart contract","operationId":"WasmMsg_UpdateContractLabel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateInstantiateConfig":{"post":{"tags":["Msg"],"summary":"UpdateInstantiateConfig updates instantiate config for a smart contract","operationId":"WasmMsg_UpdateInstantiateConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateParams":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/wasm\nmodule parameters. The authority is defined in the keeper.","operationId":"WasmMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code":{"get":{"tags":["Query"],"summary":"Codes gets the metadata for all stored wasm codes","operationId":"WasmQuery_Codes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code-info/{code_id}":{"get":{"tags":["Query"],"summary":"CodeInfo gets the metadata for a single wasm code","operationId":"WasmQuery_CodeInfo","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}":{"get":{"tags":["Query"],"summary":"Code gets the binary code and metadata for a single wasm code","operationId":"WasmQuery_Code","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}/contracts":{"get":{"tags":["Query"],"summary":"ContractsByCode lists all smart contracts for a code id","operationId":"WasmQuery_ContractsByCode","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/params":{"get":{"tags":["Query"],"summary":"Params gets the module params","operationId":"WasmQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/pinned":{"get":{"tags":["Query"],"summary":"PinnedCodes gets the pinned code ids","operationId":"WasmQuery_PinnedCodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryPinnedCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/build_address":{"get":{"tags":["Query"],"summary":"BuildAddress builds a contract address","operationId":"WasmQuery_BuildAddress","parameters":[{"type":"string","description":"CodeHash is the hash of the code","name":"code_hash","in":"query"},{"type":"string","description":"CreatorAddress is the address of the contract instantiator","name":"creator_address","in":"query"},{"type":"string","description":"Salt is a hex encoded salt","name":"salt","in":"query"},{"type":"string","format":"byte","description":"InitArgs are optional json encoded init args to be used in contract address\nbuilding if provided","name":"init_args","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryBuildAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}":{"get":{"tags":["Query"],"summary":"ContractInfo gets the contract meta data","operationId":"WasmQuery_ContractInfo","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/history":{"get":{"tags":["Query"],"summary":"ContractHistory gets the contract code history","operationId":"WasmQuery_ContractHistory","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractHistoryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}":{"get":{"tags":["Query"],"summary":"RawContractState gets single key from the raw store data of a contract","operationId":"WasmQuery_RawContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryRawContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}":{"get":{"tags":["Query"],"summary":"SmartContractState get smart query result from the contract","operationId":"WasmQuery_SmartContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"QueryData contains the query data passed to the contract","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QuerySmartContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/state":{"get":{"tags":["Query"],"summary":"AllContractState gets all raw store data for a single contract","operationId":"WasmQuery_AllContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryAllContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contracts/creator/{creator_address}":{"get":{"tags":["Query"],"summary":"ContractsByCreator gets the contracts by creator","operationId":"WasmQuery_ContractsByCreator","parameters":[{"type":"string","description":"CreatorAddress is the address of contract creator","name":"creator_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/wasm-limits-config":{"get":{"tags":["Query"],"summary":"WasmLimitsConfig gets the configured limits for static validation of Wasm\nfiles, encoded in JSON.","operationId":"WasmQuery_WasmLimitsConfig","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/RegisterInterchainAccount":{"post":{"tags":["Msg"],"summary":"RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount.","operationId":"ControllerMsg_RegisterInterchainAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/SendTx":{"post":{"tags":["Msg"],"summary":"SendTx defines a rpc handler for MsgSendTx.","operationId":"ControllerMsg_SendTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/ModuleQuerySafe":{"post":{"tags":["Msg"],"summary":"ModuleQuerySafe defines a rpc handler for MsgModuleQuerySafe.","operationId":"ControllerMsg_ModuleQuerySafe","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin160","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/Transfer":{"post":{"tags":["Msg"],"summary":"Transfer defines a rpc handler method for MsgTransfer.","operationId":"ControllerMsg_Transfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin171","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_Acknowledgement","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseConfirm":{"post":{"tags":["Msg"],"summary":"ChannelCloseConfirm defines a rpc handler method for\nMsgChannelCloseConfirm.","operationId":"ControllerMsg_ChannelCloseConfirm","parameters":[{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseInit":{"post":{"tags":["Msg"],"summary":"ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit.","operationId":"ControllerMsg_ChannelCloseInit","parameters":[{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenAck":{"post":{"tags":["Msg"],"summary":"ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck.","operationId":"ControllerMsg_ChannelOpenAck","parameters":[{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenConfirm":{"post":{"tags":["Msg"],"summary":"ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm.","operationId":"ControllerMsg_ChannelOpenConfirm","parameters":[{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenInit":{"post":{"tags":["Msg"],"summary":"ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit.","operationId":"ControllerMsg_ChannelOpenInit","parameters":[{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenTry":{"post":{"tags":["Msg"],"summary":"ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry.","operationId":"ControllerMsg_ChannelOpenTry","parameters":[{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacket","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_Timeout","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/TimeoutOnClose":{"post":{"tags":["Msg"],"summary":"TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose.","operationId":"ControllerMsg_TimeoutOnClose","parameters":[{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnCloseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_AcknowledgementMixin179","parameters":[{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacketMixin179","parameters":[{"description":"MsgRecvPacket receives an incoming IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/SendPacket":{"post":{"tags":["Msg"],"summary":"SendPacket defines a rpc handler method for MsgSendPacket.","operationId":"ControllerMsg_SendPacket","parameters":[{"description":"MsgSendPacket sends an outgoing IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_TimeoutMixin179","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/CreateClient":{"post":{"tags":["Msg"],"summary":"CreateClient defines a rpc handler method for MsgCreateClient.","operationId":"ControllerMsg_CreateClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/DeleteClientCreator":{"post":{"tags":["Msg"],"summary":"DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator.","operationId":"ControllerMsg_DeleteClientCreator","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/IBCSoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade.","operationId":"ControllerMsg_IBCSoftwareUpgrade","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/RecoverClient":{"post":{"tags":["Msg"],"summary":"RecoverClient defines a rpc handler method for MsgRecoverClient.","operationId":"ControllerMsg_RecoverClient","parameters":[{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/SubmitMisbehaviour":{"post":{"tags":["Msg"],"summary":"SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.","operationId":"ControllerMsg_SubmitMisbehaviour","parameters":[{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviour"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviourResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClient":{"post":{"tags":["Msg"],"summary":"UpdateClient defines a rpc handler method for MsgUpdateClient.","operationId":"ControllerMsg_UpdateClient","parameters":[{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClientParams":{"post":{"tags":["Msg"],"summary":"UpdateClientParams defines a rpc handler method for MsgUpdateParams.","operationId":"ControllerMsg_UpdateClientParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpgradeClient":{"post":{"tags":["Msg"],"summary":"UpgradeClient defines a rpc handler method for MsgUpgradeClient.","operationId":"ControllerMsg_UpgradeClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/RegisterCounterparty":{"post":{"tags":["Msg"],"summary":"RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty.","operationId":"ControllerMsg_RegisterCounterparty","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterparty"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterpartyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/UpdateClientConfig":{"post":{"tags":["Msg"],"summary":"UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig.","operationId":"ControllerMsg_UpdateClientConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenAck":{"post":{"tags":["Msg"],"summary":"ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck.","operationId":"ControllerMsg_ConnectionOpenAck","parameters":[{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenConfirm":{"post":{"tags":["Msg"],"summary":"ConnectionOpenConfirm defines a rpc handler method for\nMsgConnectionOpenConfirm.","operationId":"ControllerMsg_ConnectionOpenConfirm","parameters":[{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenInit":{"post":{"tags":["Msg"],"summary":"ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit.","operationId":"ControllerMsg_ConnectionOpenInit","parameters":[{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenTry":{"post":{"tags":["Msg"],"summary":"ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry.","operationId":"ControllerMsg_ConnectionOpenTry","parameters":[{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/UpdateConnectionParams":{"post":{"tags":["Msg"],"summary":"UpdateConnectionParams defines a rpc handler method for\nMsgUpdateParams.","operationId":"ControllerMsg_UpdateConnectionParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"MigrateContract defines a rpc handler method for MsgMigrateContract.","operationId":"ControllerMsg_MigrateContract","parameters":[{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/RemoveChecksum":{"post":{"tags":["Msg"],"summary":"RemoveChecksum defines a rpc handler method for MsgRemoveChecksum.","operationId":"ControllerMsg_RemoveChecksum","parameters":[{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode defines a rpc handler method for MsgStoreCode.","operationId":"ControllerMsg_StoreCode","parameters":[{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"InterchainAccount returns the interchain account address for a given owner address on a given connection","operationId":"ControllerQuery_InterchainAccount","parameters":[{"type":"string","name":"owner","in":"path","required":true},{"type":"string","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA controller submodule.","operationId":"ControllerQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/host/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA host submodule.","operationId":"ControllerQuery_ParamsMixin159","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address":{"get":{"tags":["Query"],"summary":"EscrowAddress returns the escrow address for a particular port and channel id.","operationId":"ControllerQuery_EscrowAddress","parameters":[{"type":"string","description":"unique channel identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"unique port identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryEscrowAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denom_hashes/{trace}":{"get":{"tags":["Query"],"summary":"DenomHash queries a denomination hash information.","operationId":"ControllerQuery_DenomHash","parameters":[{"pattern":".+","type":"string","description":"The denomination trace ([port_id]/[channel_id])+/[denom]","name":"trace","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomHashResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms":{"get":{"tags":["Query"],"summary":"Denoms queries all denominations","operationId":"ControllerQuery_Denoms","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms/{hash}":{"get":{"tags":["Query"],"summary":"Denom queries a denomination","operationId":"ControllerQuery_Denom","parameters":[{"pattern":".+","type":"string","description":"hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ibc-transfer module.","operationId":"ControllerQuery_ParamsMixin168","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/total_escrow/{denom}":{"get":{"tags":["Query"],"summary":"TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.","operationId":"ControllerQuery_TotalEscrowForDenom","parameters":[{"pattern":".+","type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels":{"get":{"tags":["Query"],"summary":"Channels queries all the IBC channels of a chain.","operationId":"ControllerQuery_Channels","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}":{"get":{"tags":["Query"],"summary":"Channel queries an IBC Channel.","operationId":"ControllerQuery_Channel","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state":{"get":{"tags":["Query"],"summary":"ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.","operationId":"ControllerQuery_ChannelClientState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ChannelConsensusState queries for the consensus state for the channel\nassociated with the provided channel identifiers.","operationId":"ControllerQuery_ChannelConsensusState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"revision number of the consensus state","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"revision height of the consensus state","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence":{"get":{"tags":["Query"],"summary":"NextSequenceReceive returns the next receive sequence for a given channel.","operationId":"ControllerQuery_NextSequenceReceive","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceReceiveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSend","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all the packet acknowledgements associated\nwith a channel.","operationId":"ControllerQuery_PacketAcknowledgements","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored packet acknowledgement hash.","operationId":"ControllerQuery_PacketAcknowledgement","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments returns all the packet commitments hashes associated\nwith a channel.","operationId":"ControllerQuery_PacketCommitments","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated\nwith a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcks","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a\nchannel and sequences.","operationId":"ControllerQuery_UnreceivedPackets","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"packet_commitment_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitment","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries if a given packet sequence has been received on the\nqueried chain","operationId":"ControllerQuery_PacketReceipt","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/connections/{connection}/channels":{"get":{"tags":["Query"],"summary":"ConnectionChannels queries all the channels associated with a connection\nend.","operationId":"ControllerQuery_ConnectionChannels","parameters":[{"type":"string","description":"connection unique identifier","name":"connection","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryConnectionChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSendMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all packet acknowledgements associated with a channel.","operationId":"ControllerQuery_PacketAcknowledgementsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored acknowledgement commitment hash.","operationId":"ControllerQuery_PacketAcknowledgementMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcksMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedPacketsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries a stored packet receipt.","operationId":"ControllerQuery_PacketReceiptMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_creator/{client_id}":{"get":{"tags":["Query"],"summary":"ClientCreator queries the creator of a given client.","operationId":"ControllerQuery_ClientCreator","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states":{"get":{"tags":["Query"],"summary":"ClientStates queries all the IBC light clients of a chain.","operationId":"ControllerQuery_ClientStates","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states/{client_id}":{"get":{"tags":["Query"],"summary":"ClientState queries an IBC light client.","operationId":"ControllerQuery_ClientState","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_status/{client_id}":{"get":{"tags":["Query"],"summary":"Status queries the status of an IBC client.","operationId":"ControllerQuery_ClientStatus","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}":{"get":{"tags":["Query"],"summary":"ConsensusStates queries all the consensus state associated with a given\nclient.","operationId":"ControllerQuery_ConsensusStates","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/heights":{"get":{"tags":["Query"],"summary":"ConsensusStateHeights queries the height of every consensus states associated with a given client.","operationId":"ControllerQuery_ConsensusStateHeights","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateHeightsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConsensusState queries a consensus state associated with a client state at\na given height.","operationId":"ControllerQuery_ConsensusState","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision number","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision height","name":"revision_height","in":"path","required":true},{"type":"boolean","description":"latest_height overrides the height field and queries the latest stored\nConsensusState","name":"latest_height","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/params":{"get":{"tags":["Query"],"summary":"ClientParams queries all parameters of the ibc client submodule.","operationId":"ControllerQuery_ClientParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_client_states":{"get":{"tags":["Query"],"summary":"UpgradedClientState queries an Upgraded IBC light client.","operationId":"ControllerQuery_UpgradedClientState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_consensus_states":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries an Upgraded IBC consensus state.","operationId":"ControllerQuery_UpgradedConsensusState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/verify_membership":{"post":{"tags":["Query"],"summary":"VerifyMembership queries an IBC light client for proof verification of a value at a given key path.","operationId":"ControllerQuery_VerifyMembership","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/config/{client_id}":{"get":{"tags":["Query"],"summary":"Config queries the IBC client v2 configuration for a given client.","operationId":"ControllerQuery_Config","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/counterparty_info/{client_id}":{"get":{"tags":["Query"],"summary":"CounterpartyInfo queries an IBC light counter party info.","operationId":"ControllerQuery_CounterpartyInfo","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryCounterpartyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/client_connections/{client_id}":{"get":{"tags":["Query"],"summary":"ClientConnections queries the connection paths associated with a client\nstate.","operationId":"ControllerQuery_ClientConnections","parameters":[{"type":"string","description":"client identifier associated with a connection","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryClientConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections":{"get":{"tags":["Query"],"summary":"Connections queries all the IBC connections of a chain.","operationId":"ControllerQuery_Connections","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"Connection queries an IBC connection end.","operationId":"ControllerQuery_Connection","parameters":[{"type":"string","description":"connection unique identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/client_state":{"get":{"tags":["Query"],"summary":"ConnectionClientState queries the client state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionClientState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConnectionConsensusState queries the consensus state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionConsensusState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/params":{"get":{"tags":["Query"],"summary":"ConnectionParams queries all parameters of the ibc connection submodule.","operationId":"ControllerQuery_ConnectionParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums":{"get":{"tags":["Query"],"summary":"Get all Wasm checksums","operationId":"ControllerQuery_Checksums","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryChecksumsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums/{checksum}/code":{"get":{"tags":["Query"],"summary":"Get Wasm code for given checksum","operationId":"ControllerQuery_Code","parameters":[{"type":"string","description":"checksum is a hex encoded string of the code stored.","name":"checksum","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitAuditReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitAuditReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence defines the SubmitEvidence RPC.","operationId":"GithubComLumeraProtocollumeraMsg_SubmitEvidence","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin15","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin20","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin25","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin36","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ApplySnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestApplySnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/CheckTx":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_CheckTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCheckTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCheckTx"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Commit":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Commit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCommit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Echo":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Echo","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestEcho"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseEcho"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ExtendVote":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ExtendVote","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestExtendVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseExtendVote"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/FinalizeBlock":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_FinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Flush":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Flush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFlush"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFlush"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Info":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Info","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInfo"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInfo"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/InitChain":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_InitChain","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInitChain"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInitChain"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ListSnapshots":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ListSnapshots","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestListSnapshots"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseListSnapshots"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/LoadSnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_LoadSnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestLoadSnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseLoadSnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/OfferSnapshot":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_OfferSnapshot","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestOfferSnapshot"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/PrepareProposal":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_PrepareProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestPrepareProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponsePrepareProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ProcessProposal":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ProcessProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestProcessProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Query":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Query","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestQuery"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseQuery"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/VerifyVoteExtension":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_VerifyVoteExtension","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestVerifyVoteExtension"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.auth.v1beta1.AddressBytesToStringResponse":{"description":"AddressBytesToStringResponse is the response type for AddressString rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_bytes":{"type":"string","format":"byte"}}},"cosmos.auth.v1beta1.BaseAccount":{"description":"BaseAccount defines a base account type. It contains all the necessary fields\nfor basic account functionality. Any custom account type should extend this\ntype for additional functionality (e.g. vesting).","type":"object","properties":{"account_number":{"type":"string","format":"uint64"},"address":{"type":"string"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"sequence":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.Bech32PrefixResponse":{"description":"Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/auth parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.auth.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.auth.v1beta1.Params":{"description":"Params defines the parameters for the auth module.","type":"object","properties":{"max_memo_characters":{"type":"string","format":"uint64"},"sig_verify_cost_ed25519":{"type":"string","format":"uint64"},"sig_verify_cost_secp256k1":{"type":"string","format":"uint64"},"tx_sig_limit":{"type":"string","format":"uint64"},"tx_size_cost_per_byte":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.QueryAccountAddressByIDResponse":{"description":"Since: cosmos-sdk 0.46.2","type":"object","title":"QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method","properties":{"account_address":{"type":"string"}}},"cosmos.auth.v1beta1.QueryAccountInfoResponse":{"description":"QueryAccountInfoResponse is the Query/AccountInfo response type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"info":{"description":"info is the account info which is represented by BaseAccount.","$ref":"#/definitions/cosmos.auth.v1beta1.BaseAccount"}}},"cosmos.auth.v1beta1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"account":{"description":"account defines the account of the corresponding address.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryAccountsResponse":{"description":"QueryAccountsResponse is the response type for the Query/Accounts RPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"accounts":{"type":"array","title":"accounts are the existing accounts","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.auth.v1beta1.QueryModuleAccountByNameResponse":{"description":"QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method.","type":"object","properties":{"account":{"$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryModuleAccountsResponse":{"description":"QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.auth.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.authz.v1beta1.Grant":{"description":"Grant gives permissions to execute\nthe provide method with expiration time.","type":"object","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time","title":"time when the grant will expire and will be pruned. If null, then the grant\ndoesn't have a time expiration (other conditions in `authorization`\nmay apply to invalidate the grant)"}}},"cosmos.authz.v1beta1.GrantAuthorization":{"type":"object","title":"GrantAuthorization extends a grant with both the addresses of the grantee and granter.\nIt is used in genesis.proto and query.proto","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgExec":{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","type":"object","properties":{"grantee":{"type":"string"},"msgs":{"description":"Execute Msg.\nThe x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg))\ntriple and validate it.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.authz.v1beta1.MsgExecResponse":{"description":"MsgExecResponse defines the Msg/MsgExecResponse response type.","type":"object","properties":{"results":{"type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.authz.v1beta1.MsgGrant":{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","type":"object","properties":{"grant":{"$ref":"#/definitions/cosmos.authz.v1beta1.Grant"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgGrantResponse":{"description":"MsgGrantResponse defines the Msg/MsgGrant response type.","type":"object"},"cosmos.authz.v1beta1.MsgRevoke":{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","type":"object","properties":{"grantee":{"type":"string"},"granter":{"type":"string"},"msg_type_url":{"type":"string"}}},"cosmos.authz.v1beta1.MsgRevokeResponse":{"description":"MsgRevokeResponse defines the Msg/MsgRevokeResponse response type.","type":"object"},"cosmos.authz.v1beta1.QueryGranteeGrantsResponse":{"description":"QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted to the grantee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGranterGrantsResponse":{"description":"QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGrantsResponse":{"description":"QueryGrantsResponse is the response type for the Query/Authorizations RPC method.","type":"object","properties":{"grants":{"description":"authorizations is a list of grants granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.autocli.v1.AppOptionsRequest":{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","type":"object"},"cosmos.autocli.v1.AppOptionsResponse":{"description":"AppOptionsResponse is the RemoteInfoService/AppOptions response type.","type":"object","properties":{"module_options":{"description":"module_options is a map of module name to autocli module options.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ModuleOptions"}}}},"cosmos.autocli.v1.FlagOptions":{"description":"FlagOptions are options for flags generated from rpc request fields.\nBy default, all request fields are configured as flags based on the\nkebab-case name of the field. Fields can be turned into positional arguments\ninstead by using RpcCommandOptions.positional_args.","type":"object","properties":{"default_value":{"description":"default_value is the default value as text.","type":"string"},"deprecated":{"description":"deprecated is the usage text to show if this flag is deprecated.","type":"string"},"hidden":{"type":"boolean","title":"hidden hides the flag from help/usage text"},"name":{"description":"name is an alternate name to use for the field flag.","type":"string"},"shorthand":{"description":"shorthand is a one-letter abbreviated flag.","type":"string"},"shorthand_deprecated":{"description":"shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated.","type":"string"},"usage":{"description":"usage is the help message.","type":"string"}}},"cosmos.autocli.v1.ModuleOptions":{"description":"ModuleOptions describes the CLI options for a Cosmos SDK module.","type":"object","properties":{"query":{"description":"query describes the queries commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"},"tx":{"description":"tx describes the tx commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}},"cosmos.autocli.v1.PositionalArgDescriptor":{"description":"PositionalArgDescriptor describes a positional argument.","type":"object","properties":{"proto_field":{"description":"proto_field specifies the proto field to use as the positional arg. Any\nfields used as positional args will not have a flag generated.","type":"string"},"varargs":{"description":"varargs makes a positional parameter a varargs parameter. This can only be\napplied to last positional parameter and the proto_field must a repeated\nfield.","type":"boolean"}}},"cosmos.autocli.v1.RpcCommandOptions":{"description":"RpcCommandOptions specifies options for commands generated from protobuf\nrpc methods.","type":"object","properties":{"alias":{"description":"alias is an array of aliases that can be used instead of the first word in Use.","type":"array","items":{"type":"string"}},"deprecated":{"description":"deprecated defines, if this command is deprecated and should print this string when used.","type":"string"},"example":{"description":"example is examples of how to use the command.","type":"string"},"flag_options":{"description":"flag_options are options for flags generated from rpc request fields.\nBy default all request fields are configured as flags. They can\nalso be configured as positional args instead using positional_args.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.FlagOptions"}},"long":{"description":"long is the long message shown in the 'help \u003cthis-command\u003e' output.","type":"string"},"positional_args":{"description":"positional_args specifies positional arguments for the command.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.PositionalArgDescriptor"}},"rpc_method":{"description":"rpc_method is short name of the protobuf rpc method that this command is\ngenerated from.","type":"string"},"short":{"description":"short is the short description shown in the 'help' output.","type":"string"},"skip":{"description":"skip specifies whether to skip this rpc method when generating commands.","type":"boolean"},"suggest_for":{"description":"suggest_for is an array of command names for which this command will be suggested -\nsimilar to aliases but only suggests.","type":"array","items":{"type":"string"}},"use":{"description":"use is the one-line usage method. It also allows specifying an alternate\nname for the command as the first word of the usage text.\n\nBy default the name of an rpc command is the kebab-case short name of the\nrpc method.","type":"string"},"version":{"description":"version defines the version for this command. If this value is non-empty and the command does not\ndefine a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\nwill print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\ncommand does not define one.","type":"string"}}},"cosmos.autocli.v1.ServiceCommandDescriptor":{"description":"ServiceCommandDescriptor describes a CLI command based on a protobuf service.","type":"object","properties":{"rpc_command_options":{"description":"rpc_command_options are options for commands generated from rpc methods.\nIf no options are specified for a given rpc method on the service, a\ncommand will be generated for that method with the default options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.RpcCommandOptions"}},"service":{"description":"service is the fully qualified name of the protobuf service to build\nthe command from. It can be left empty if sub_commands are used instead\nwhich may be the case if a module provides multiple tx and/or query services.","type":"string"},"sub_commands":{"description":"sub_commands is a map of optional sub-commands for this command based on\ndifferent protobuf services. The map key is used as the name of the\nsub-command.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}}},"cosmos.bank.v1beta1.DenomOwner":{"description":"DenomOwner defines structure representing an account that owns or holds a\nparticular denominated token. It contains the account address and account\nbalance of the denominated token.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address":{"description":"address defines the address that owns a particular denomination.","type":"string"},"balance":{"description":"balance is the balance of the denominated coin for an account.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.DenomUnit":{"description":"DenomUnit represents a struct that describes a given\ndenomination unit of the basic token.","type":"object","properties":{"aliases":{"type":"array","title":"aliases is a list of string aliases for the given denom","items":{"type":"string"}},"denom":{"description":"denom represents the string name of the given denom unit (e.g uatom).","type":"string"},"exponent":{"description":"exponent represents power of 10 exponent that one must\nraise the base_denom to in order to equal the given DenomUnit's denom\n1 denom = 10^exponent base_denom\n(e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\nexponent = 6, thus: 1 atom = 10^6 uatom).","type":"integer","format":"int64"}}},"cosmos.bank.v1beta1.Input":{"description":"Input models transaction input.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Metadata":{"description":"Metadata represents a struct that describes\na basic token.","type":"object","properties":{"base":{"description":"base represents the base denom (should be the DenomUnit with exponent = 0).","type":"string"},"denom_units":{"type":"array","title":"denom_units represents the list of DenomUnit's for a given coin","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomUnit"}},"description":{"type":"string"},"display":{"description":"display indicates the suggested denom that should be\ndisplayed in clients.","type":"string"},"name":{"description":"Since: cosmos-sdk 0.43","type":"string","title":"name defines the name of the token (eg: Cosmos Atom)"},"symbol":{"description":"symbol is the token symbol usually shown on exchanges (eg: ATOM). This can\nbe the same as the display.\n\nSince: cosmos-sdk 0.43","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"},"uri_hash":{"description":"URIHash is a sha256 hash of a document pointed by URI. It's used to verify that\nthe document didn't change. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"}}},"cosmos.bank.v1beta1.MsgMultiSend":{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","type":"object","properties":{"inputs":{"description":"Inputs, despite being `repeated`, only allows one sender input. This is\nchecked in MsgMultiSend's ValidateBasic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Input"}},"outputs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Output"}}}},"cosmos.bank.v1beta1.MsgMultiSendResponse":{"description":"MsgMultiSendResponse defines the Msg/MultiSend response type.","type":"object"},"cosmos.bank.v1beta1.MsgSend":{"description":"MsgSend represents a message to send coins from one account to another.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.bank.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.bank.v1beta1.MsgSetSendEnabled":{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module.","type":"string"},"send_enabled":{"description":"send_enabled is the list of entries to add or update.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}},"use_default_for":{"description":"use_default_for is a list of denoms that should use the params.default_send_enabled value.\nDenoms listed here will have their SendEnabled entries deleted.\nIf a denom is included that doesn't have a SendEnabled entry,\nit will be ignored.","type":"array","items":{"type":"string"}}}},"cosmos.bank.v1beta1.MsgSetSendEnabledResponse":{"description":"MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/bank parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.Output":{"description":"Output models transaction outputs.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Params":{"description":"Params defines the parameters for the bank module.","type":"object","properties":{"default_send_enabled":{"type":"boolean"},"send_enabled":{"description":"Deprecated: Use of SendEnabled in params is deprecated.\nFor genesis, use the newly added send_enabled field in the genesis object.\nStorage, lookup, and manipulation of this information is now in the keeper.\n\nAs of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QueryAllBalancesResponse":{"description":"QueryAllBalancesResponse is the response type for the Query/AllBalances RPC\nmethod.","type":"object","properties":{"balances":{"description":"balances is the balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse":{"description":"QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC\nmethod. Identical with QueryDenomMetadataResponse but receives denom as query string in request.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomMetadataResponse":{"description":"QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC\nmethod.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse":{"description":"QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query.\n\nSince: cosmos-sdk 0.50.3","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomOwnersResponse":{"description":"QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomsMetadataResponse":{"description":"QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC\nmethod.","type":"object","properties":{"metadatas":{"description":"metadata provides the client information for all the registered tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/bank parameters.","type":"object","properties":{"params":{"description":"params provides the parameters of the bank module.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.QuerySendEnabledResponse":{"description":"QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response. This field is only\npopulated if the denoms field in the request is empty.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"send_enabled":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse":{"description":"QuerySpendableBalanceByDenomResponse defines the gRPC response structure for\nquerying an account's spendable balance for a specific denom.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QuerySpendableBalancesResponse":{"description":"QuerySpendableBalancesResponse defines the gRPC response structure for querying\nan account's spendable balances.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"balances":{"description":"balances is the spendable balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QuerySupplyOfResponse":{"description":"QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method.","type":"object","properties":{"amount":{"description":"amount is the supply of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryTotalSupplyResponse":{"type":"object","title":"QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC\nmethod","properties":{"pagination":{"description":"pagination defines the pagination in the response.\n\nSince: cosmos-sdk 0.43","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supply":{"type":"array","title":"supply is the supply of the coins","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.SendEnabled":{"description":"SendEnabled maps coin denom to a send_enabled status (whether a denom is\nsendable).","type":"object","properties":{"denom":{"type":"string"},"enabled":{"type":"boolean"}}},"cosmos.base.abci.v1beta1.ABCIMessageLog":{"description":"ABCIMessageLog defines a structure containing an indexed tx ABCI message log.","type":"object","properties":{"events":{"description":"Events contains a slice of Event objects that were emitted during some\nexecution.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.StringEvent"}},"log":{"type":"string"},"msg_index":{"type":"integer","format":"int64"}}},"cosmos.base.abci.v1beta1.Attribute":{"description":"Attribute defines an attribute wrapper where the key and value are\nstrings instead of raw bytes.","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"cosmos.base.abci.v1beta1.GasInfo":{"description":"GasInfo defines tx execution gas context.","type":"object","properties":{"gas_used":{"description":"GasUsed is the amount of gas actually consumed.","type":"string","format":"uint64"},"gas_wanted":{"description":"GasWanted is the maximum units of work we allow this tx to perform.","type":"string","format":"uint64"}}},"cosmos.base.abci.v1beta1.Result":{"description":"Result is the union of ResponseFormat and ResponseCheckTx.","type":"object","properties":{"data":{"description":"Data is any data returned from message or handler execution. It MUST be\nlength prefixed in order to separate data from multiple message executions.\nDeprecated. This field is still populated, but prefer msg_response instead\nbecause it also contains the Msg response typeURL.","type":"string","format":"byte"},"events":{"description":"Events contains a slice of Event objects that were emitted during message\nor handler execution.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"log":{"description":"Log contains the log information from message or handler execution.","type":"string"},"msg_responses":{"description":"msg_responses contains the Msg handler responses type packed in Anys.\n\nSince: cosmos-sdk 0.46","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.base.abci.v1beta1.StringEvent":{"description":"StringEvent defines en Event object wrapper where all the attributes\ncontain key/value pairs that are strings instead of raw bytes.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.Attribute"}},"type":{"type":"string"}}},"cosmos.base.abci.v1beta1.TxResponse":{"description":"TxResponse defines a structure containing relevant tx data and metadata. The\ntags are stringified and the log is JSON decoded.","type":"object","properties":{"code":{"description":"Response code.","type":"integer","format":"int64"},"codespace":{"type":"string","title":"Namespace for the Code"},"data":{"description":"Result bytes, if any.","type":"string"},"events":{"description":"Events defines all the events emitted by processing a transaction. Note,\nthese events include those emitted by processing all the messages and those\nemitted from the ante. Whereas Logs contains the events, with\nadditional metadata, emitted only by processing the messages.\n\nSince: cosmos-sdk 0.42.11, 0.44.5, 0.45","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"description":"Amount of gas consumed by transaction.","type":"string","format":"int64"},"gas_wanted":{"description":"Amount of gas requested for transaction.","type":"string","format":"int64"},"height":{"type":"string","format":"int64","title":"The block height"},"info":{"description":"Additional information. May be non-deterministic.","type":"string"},"logs":{"description":"The output of the application's logger (typed). May be non-deterministic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.ABCIMessageLog"}},"raw_log":{"description":"The output of the application's logger (raw string). May be\nnon-deterministic.","type":"string"},"timestamp":{"description":"Time of the previous block. For heights \u003e 1, it's the weighted median of\nthe timestamps of the valid votes in the block.LastCommit. For height == 1,\nit's genesis time.","type":"string"},"tx":{"description":"The request transaction bytes.","$ref":"#/definitions/google.protobuf.Any"},"txhash":{"description":"The transaction hash.","type":"string"}}},"cosmos.base.node.v1beta1.ConfigResponse":{"description":"ConfigResponse defines the response structure for the Config gRPC query.","type":"object","properties":{"halt_height":{"type":"string","format":"uint64"},"minimum_gas_price":{"type":"string"},"pruning_interval":{"type":"string"},"pruning_keep_recent":{"type":"string"}}},"cosmos.base.node.v1beta1.StatusResponse":{"description":"StateResponse defines the response structure for the status of a node.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"app hash of the current block"},"earliest_store_height":{"type":"string","format":"uint64","title":"earliest block height available in the store"},"height":{"type":"string","format":"uint64","title":"current block height"},"timestamp":{"type":"string","format":"date-time","title":"block height timestamp"},"validator_hash":{"type":"string","format":"byte","title":"validator hash provided by the consensus header"}}},"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.reflection.v1beta1.ListAllInterfacesResponse":{"description":"ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC.","type":"object","properties":{"interface_names":{"description":"interface_names is an array of all the registered interfaces.","type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v1beta1.ListImplementationsResponse":{"description":"ListImplementationsResponse is the response type of the ListImplementations\nRPC.","type":"object","properties":{"implementation_message_names":{"type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v2alpha1.AuthnDescriptor":{"type":"object","title":"AuthnDescriptor provides information on how to sign transactions without relying\non the online RPCs GetTxMetadata and CombineUnsignedTxAndSignatures","properties":{"sign_modes":{"type":"array","title":"sign_modes defines the supported signature algorithm","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.SigningModeDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ChainDescriptor":{"type":"object","title":"ChainDescriptor describes chain information of the application","properties":{"id":{"type":"string","title":"id is the chain id"}}},"cosmos.base.reflection.v2alpha1.CodecDescriptor":{"type":"object","title":"CodecDescriptor describes the registered interfaces and provides metadata information on the types","properties":{"interfaces":{"type":"array","title":"interfaces is a list of the registerted interfaces descriptors","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ConfigurationDescriptor":{"type":"object","title":"ConfigurationDescriptor contains metadata information on the sdk.Config","properties":{"bech32_account_address_prefix":{"type":"string","title":"bech32_account_address_prefix is the account address prefix"}}},"cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse":{"type":"object","title":"GetAuthnDescriptorResponse is the response returned by the GetAuthnDescriptor RPC","properties":{"authn":{"title":"authn describes how to authenticate to the application when sending transactions","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.AuthnDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse":{"type":"object","title":"GetChainDescriptorResponse is the response returned by the GetChainDescriptor RPC","properties":{"chain":{"title":"chain describes application chain information","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ChainDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse":{"type":"object","title":"GetCodecDescriptorResponse is the response returned by the GetCodecDescriptor RPC","properties":{"codec":{"title":"codec describes the application codec such as registered interfaces and implementations","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.CodecDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse":{"type":"object","title":"GetConfigurationDescriptorResponse is the response returned by the GetConfigurationDescriptor RPC","properties":{"config":{"title":"config describes the application's sdk.Config","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ConfigurationDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse":{"type":"object","title":"GetQueryServicesDescriptorResponse is the response returned by the GetQueryServicesDescriptor RPC","properties":{"queries":{"title":"queries provides information on the available queryable services","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServicesDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse":{"type":"object","title":"GetTxDescriptorResponse is the response returned by the GetTxDescriptor RPC","properties":{"tx":{"title":"tx provides information on msgs that can be forwarded to the application\nalongside the accepted transaction protobuf type","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.TxDescriptor"}}},"cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor":{"type":"object","title":"InterfaceAcceptingMessageDescriptor describes a protobuf message which contains\nan interface represented as a google.protobuf.Any","properties":{"field_descriptor_names":{"type":"array","title":"field_descriptor_names is a list of the protobuf name (not fullname) of the field\nwhich contains the interface as google.protobuf.Any (the interface is the same, but\nit can be in multiple fields of the same proto message)","items":{"type":"string"}},"fullname":{"type":"string","title":"fullname is the protobuf fullname of the type containing the interface"}}},"cosmos.base.reflection.v2alpha1.InterfaceDescriptor":{"type":"object","title":"InterfaceDescriptor describes the implementation of an interface","properties":{"fullname":{"type":"string","title":"fullname is the name of the interface"},"interface_accepting_messages":{"type":"array","title":"interface_accepting_messages contains information regarding the proto messages which contain the interface as\ngoogle.protobuf.Any field","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor"}},"interface_implementers":{"type":"array","title":"interface_implementers is a list of the descriptors of the interface implementers","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor"}}}},"cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor":{"type":"object","title":"InterfaceImplementerDescriptor describes an interface implementer","properties":{"fullname":{"type":"string","title":"fullname is the protobuf queryable name of the interface implementer"},"type_url":{"type":"string","title":"type_url defines the type URL used when marshalling the type as any\nthis is required so we can provide type safe google.protobuf.Any marshalling and\nunmarshalling, making sure that we don't accept just 'any' type\nin our interface fields"}}},"cosmos.base.reflection.v2alpha1.MsgDescriptor":{"type":"object","title":"MsgDescriptor describes a cosmos-sdk message that can be delivered with a transaction","properties":{"msg_type_url":{"description":"msg_type_url contains the TypeURL of a sdk.Msg.","type":"string"}}},"cosmos.base.reflection.v2alpha1.QueryMethodDescriptor":{"type":"object","title":"QueryMethodDescriptor describes a queryable method of a query service\nno other info is provided beside method name and tendermint queryable path\nbecause it would be redundant with the grpc reflection service","properties":{"full_query_path":{"type":"string","title":"full_query_path is the path that can be used to query\nthis method via tendermint abci.Query"},"name":{"type":"string","title":"name is the protobuf name (not fullname) of the method"}}},"cosmos.base.reflection.v2alpha1.QueryServiceDescriptor":{"type":"object","title":"QueryServiceDescriptor describes a cosmos-sdk queryable service","properties":{"fullname":{"type":"string","title":"fullname is the protobuf fullname of the service descriptor"},"is_module":{"type":"boolean","title":"is_module describes if this service is actually exposed by an application's module"},"methods":{"type":"array","title":"methods provides a list of query service methods","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryMethodDescriptor"}}}},"cosmos.base.reflection.v2alpha1.QueryServicesDescriptor":{"type":"object","title":"QueryServicesDescriptor contains the list of cosmos-sdk queriable services","properties":{"query_services":{"type":"array","title":"query_services is a list of cosmos-sdk QueryServiceDescriptor","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServiceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.SigningModeDescriptor":{"type":"object","title":"SigningModeDescriptor provides information on a signing flow of the application\nNOTE(fdymylja): here we could go as far as providing an entire flow on how\nto sign a message given a SigningModeDescriptor, but it's better to think about\nthis another time","properties":{"authn_info_provider_method_fullname":{"type":"string","title":"authn_info_provider_method_fullname defines the fullname of the method to call to get\nthe metadata required to authenticate using the provided sign_modes"},"name":{"type":"string","title":"name defines the unique name of the signing mode"},"number":{"type":"integer","format":"int32","title":"number is the unique int32 identifier for the sign_mode enum"}}},"cosmos.base.reflection.v2alpha1.TxDescriptor":{"type":"object","title":"TxDescriptor describes the accepted transaction type","properties":{"fullname":{"description":"fullname is the protobuf fullname of the raw transaction type (for instance the tx.Tx type)\nit is not meant to support polymorphism of transaction types, it is supposed to be used by\nreflection clients to understand if they can handle a specific transaction type in an application.","type":"string"},"msgs":{"type":"array","title":"msgs lists the accepted application messages (sdk.Msg)","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.MsgDescriptor"}}}},"cosmos.base.tendermint.v1beta1.ABCIQueryResponse":{"description":"ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query.\n\nNote: This type is a duplicate of the ResponseQuery proto type defined in\nTendermint.","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"type":"string","title":"nondeterministic"},"proof_ops":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOps"},"value":{"type":"string","format":"byte"}}},"cosmos.base.tendermint.v1beta1.Block":{"description":"Block is tendermint type Block, with the Header proposer address\nfield converted to bech32 string.","type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse":{"description":"GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestBlockResponse":{"description":"GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse":{"description":"GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.GetNodeInfoResponse":{"description":"GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method.","type":"object","properties":{"application_version":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.VersionInfo"},"default_node_info":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfo"}}},"cosmos.base.tendermint.v1beta1.GetSyncingResponse":{"description":"GetSyncingResponse is the response type for the Query/GetSyncing RPC method.","type":"object","properties":{"syncing":{"type":"boolean"}}},"cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse":{"description":"GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.Header":{"description":"Header defines the structure of a Tendermint block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"description":"proposer_address is the original block proposer address, formatted as a Bech32 string.\nIn Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\nfor better UX.\n\noriginal proposer of the block","type":"string"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"cosmos.base.tendermint.v1beta1.Module":{"type":"object","title":"Module is the type for VersionInfo","properties":{"path":{"type":"string","title":"module path"},"sum":{"type":"string","title":"checksum"},"version":{"type":"string","title":"module version"}}},"cosmos.base.tendermint.v1beta1.ProofOp":{"description":"ProofOp defines an operation used for calculating Merkle root. The data could\nbe arbitrary format, providing necessary data for example neighbouring node\nhash.\n\nNote: This type is a duplicate of the ProofOp proto type defined in Tendermint.","type":"object","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"cosmos.base.tendermint.v1beta1.ProofOps":{"description":"ProofOps is Merkle proof defined by the list of ProofOps.\n\nNote: This type is a duplicate of the ProofOps proto type defined in Tendermint.","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOp"}}}},"cosmos.base.tendermint.v1beta1.Validator":{"description":"Validator is the type for the validator-set.","type":"object","properties":{"address":{"type":"string"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"voting_power":{"type":"string","format":"int64"}}},"cosmos.base.tendermint.v1beta1.VersionInfo":{"description":"VersionInfo is the type for the GetNodeInfoResponse message.","type":"object","properties":{"app_name":{"type":"string"},"build_deps":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Module"}},"build_tags":{"type":"string"},"cosmos_sdk_version":{"type":"string","title":"Since: cosmos-sdk 0.43"},"git_commit":{"type":"string"},"go_version":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.base.v1beta1.DecCoin":{"description":"DecCoin defines a token with a denomination and a decimal amount.\n\nNOTE: The amount field is an Dec which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.circuit.v1.AccountResponse":{"description":"AccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"permission":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.AccountsResponse":{"description":"AccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.circuit.v1.GenesisAccountPermissions"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.circuit.v1.DisabledListResponse":{"description":"DisabledListResponse is the response type for the Query/DisabledList RPC method.","type":"object","properties":{"disabled_list":{"type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.GenesisAccountPermissions":{"type":"object","title":"GenesisAccountPermissions is the account permissions for the circuit breaker in genesis","properties":{"address":{"type":"string"},"permissions":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreaker":{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","type":"object","properties":{"grantee":{"description":"grantee is the account authorized with the provided permissions.","type":"string"},"granter":{"description":"granter is the granter of the circuit breaker permissions and must have\nLEVEL_SUPER_ADMIN.","type":"string"},"permissions":{"description":"permissions are the circuit breaker permissions that the grantee receives.\nThese will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can\nbe specified to revoke all permissions.","$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse":{"description":"MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgResetCircuitBreaker":{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip or reset the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of Msg type URLs to resume processing. If\nit is left empty all Msg processing for type URLs that the account is\nauthorized to trip will resume.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgResetCircuitBreakerResponse":{"description":"MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgTripCircuitBreaker":{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of type URLs to immediately stop processing.\nIF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY.\nThis value is validated against the authority's permissions and if the\nauthority does not have permissions to trip the specified msg type URLs\n(or all URLs), the operation will fail.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgTripCircuitBreakerResponse":{"description":"MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.Permissions":{"description":"Permissions are the permissions that an account has to trip\nor reset the circuit breaker.","type":"object","properties":{"level":{"description":"level is the level of permissions granted to this account.","$ref":"#/definitions/cosmos.circuit.v1.Permissions.Level"},"limit_type_urls":{"description":"limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type\nURLs that the account can trip. It is an error to use limit_type_urls with\na level other than LEVEL_SOME_MSGS.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.Permissions.Level":{"description":"Level is the permission level.\n\n - LEVEL_NONE_UNSPECIFIED: LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit\nbreaker permissions.\n - LEVEL_SOME_MSGS: LEVEL_SOME_MSGS indicates that the account will have permission to\ntrip or reset the circuit breaker for some Msg type URLs. If this level\nis chosen, a non-empty list of Msg type URLs must be provided in\nlimit_type_urls.\n - LEVEL_ALL_MSGS: LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit\nbreaker for Msg's of all type URLs.\n - LEVEL_SUPER_ADMIN: LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker\nactions and can grant permissions to other accounts.","type":"string","default":"LEVEL_NONE_UNSPECIFIED","enum":["LEVEL_NONE_UNSPECIFIED","LEVEL_SOME_MSGS","LEVEL_ALL_MSGS","LEVEL_SUPER_ADMIN"]},"cosmos.consensus.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"abci":{"title":"Since: cosmos-sdk 0.50","$ref":"#/definitions/tendermint.types.ABCIParams"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"block":{"description":"params defines the x/consensus parameters to update.\nVersionsParams is not included in this Msg because it is tracked\nsepararately in x/upgrade.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"}}},"cosmos.consensus.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.consensus.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/consensus parameters.","type":"object","properties":{"params":{"description":"params are the tendermint consensus params stored in the consensus module.\nPlease note that `params.version` is not populated in this response, it is\ntracked separately in the x/upgrade module.","$ref":"#/definitions/tendermint.types.ConsensusParams"}}},"cosmos.crisis.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"constant_fee":{"description":"constant_fee defines the x/crisis parameter.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.crisis.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.crisis.v1beta1.MsgVerifyInvariant":{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","type":"object","properties":{"invariant_module_name":{"description":"name of the invariant module.","type":"string"},"invariant_route":{"description":"invariant_route is the msg's invariant route.","type":"string"},"sender":{"description":"sender is the account address of private key to send coins to fee collector account.","type":"string"}}},"cosmos.crisis.v1beta1.MsgVerifyInvariantResponse":{"description":"MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type.","type":"object"},"cosmos.crypto.multisig.v1beta1.CompactBitArray":{"description":"CompactBitArray is an implementation of a space efficient bit array.\nThis is used to ensure that the encoded data takes up a minimal amount of\nspace after proto encoding.\nThis is not thread safe, and is not intended for concurrent usage.","type":"object","properties":{"elems":{"type":"string","format":"byte"},"extra_bits_stored":{"type":"integer","format":"int64"}}},"cosmos.distribution.v1beta1.DelegationDelegatorReward":{"description":"DelegationDelegatorReward represents the properties\nof a delegator's delegation reward.","type":"object","properties":{"reward":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse":{"description":"MsgDepositValidatorRewardsPoolResponse defines the response to executing a\nMsgDepositValidatorRewardsPool message.\n\nSince: cosmos-sdk 0.50","type":"object"},"cosmos.distribution.v1beta1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.distribution.v1beta1.MsgSetWithdrawAddress":{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","type":"object","properties":{"delegator_address":{"type":"string"},"withdraw_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse":{"description":"MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response\ntype.","type":"object"},"cosmos.distribution.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/distribution parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward":{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse":{"description":"MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward\nresponse type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission":{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","type":"object","properties":{"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse":{"description":"MsgWithdrawValidatorCommissionResponse defines the\nMsg/WithdrawValidatorCommission response type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.Params":{"description":"Params defines the set of params for the distribution module.","type":"object","properties":{"base_proposer_reward":{"description":"Deprecated: The base_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"bonus_proposer_reward":{"description":"Deprecated: The bonus_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"community_tax":{"type":"string"},"withdraw_addr_enabled":{"type":"boolean"}}},"cosmos.distribution.v1beta1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationRewardsResponse":{"description":"QueryDelegationRewardsResponse is the response type for the\nQuery/DelegationRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines the rewards accrued by a delegation.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse":{"description":"QueryDelegationTotalRewardsResponse is the response type for the\nQuery/DelegationTotalRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines all the rewards accrued by a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.DelegationDelegatorReward"}},"total":{"description":"total defines the sum of all the rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is the response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"validators":{"description":"validators defines the validators a delegator is delegating for.","type":"array","items":{"type":"string"}}}},"cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse":{"description":"QueryDelegatorWithdrawAddressResponse is the response type for the\nQuery/DelegatorWithdrawAddress RPC method.","type":"object","properties":{"withdraw_address":{"description":"withdraw_address defines the delegator address to query for.","type":"string"}}},"cosmos.distribution.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.QueryValidatorCommissionResponse":{"type":"object","title":"QueryValidatorCommissionResponse is the response type for the\nQuery/ValidatorCommission RPC method","properties":{"commission":{"description":"commission defines the commission the validator received.","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorAccumulatedCommission"}}},"cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse":{"description":"QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method.","type":"object","properties":{"commission":{"description":"commission defines the commission the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"operator_address":{"description":"operator_address defines the validator operator address.","type":"string"},"self_bond_rewards":{"description":"self_bond_rewards defines the self delegations rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse":{"description":"QueryValidatorOutstandingRewardsResponse is the response type for the\nQuery/ValidatorOutstandingRewards RPC method.","type":"object","properties":{"rewards":{"$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorOutstandingRewards"}}},"cosmos.distribution.v1beta1.QueryValidatorSlashesResponse":{"description":"QueryValidatorSlashesResponse is the response type for the\nQuery/ValidatorSlashes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"slashes":{"description":"slashes defines the slashes the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorSlashEvent"}}}},"cosmos.distribution.v1beta1.ValidatorAccumulatedCommission":{"description":"ValidatorAccumulatedCommission represents accumulated commission\nfor a validator kept as a running counter, can be withdrawn at any time.","type":"object","properties":{"commission":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorOutstandingRewards":{"description":"ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\nfor a validator inexpensive to track, allows simple sanity checks.","type":"object","properties":{"rewards":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorSlashEvent":{"description":"ValidatorSlashEvent represents a validator slash event.\nHeight is implicit within the store key.\nThis is needed to calculate appropriate amount of staking tokens\nfor delegations which are withdrawn after a slash has occurred.","type":"object","properties":{"fraction":{"type":"string"},"validator_period":{"type":"string","format":"uint64"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidence":{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","type":"object","properties":{"evidence":{"description":"evidence defines the evidence of misbehavior.","$ref":"#/definitions/google.protobuf.Any"},"submitter":{"description":"submitter is the signer account address of evidence.","type":"string"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse":{"description":"MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.","type":"object","properties":{"hash":{"description":"hash defines the hash of the evidence.","type":"string","format":"byte"}}},"cosmos.evidence.v1beta1.QueryAllEvidenceResponse":{"description":"QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC\nmethod.","type":"object","properties":{"evidence":{"description":"evidence returns all evidences.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.evidence.v1beta1.QueryEvidenceResponse":{"description":"QueryEvidenceResponse is the response type for the Query/Evidence RPC method.","type":"object","properties":{"evidence":{"description":"evidence returns the requested evidence.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.feegrant.v1beta1.Grant":{"type":"object","title":"Grant is stored in the KVStore to record a grant with full context","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowance":{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","type":"object","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse":{"description":"MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgPruneAllowances":{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","type":"object","properties":{"pruner":{"description":"pruner is the address of the user pruning expired allowances.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse":{"description":"MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type.\n\nSince cosmos-sdk 0.50","type":"object"},"cosmos.feegrant.v1beta1.MsgRevokeAllowance":{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","type":"object","properties":{"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse":{"description":"MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.QueryAllowanceResponse":{"description":"QueryAllowanceResponse is the response type for the Query/Allowance RPC method.","type":"object","properties":{"allowance":{"description":"allowance is a allowance granted for grantee by granter.","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}}},"cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse":{"description":"QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"allowances":{"description":"allowances that have been issued by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.feegrant.v1beta1.QueryAllowancesResponse":{"description":"QueryAllowancesResponse is the response type for the Query/Allowances RPC method.","type":"object","properties":{"allowances":{"description":"allowances are allowance's granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1.MsgCancelProposal":{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1.MsgCancelProposalResponse":{"description":"MsgCancelProposalResponse defines the response structure for executing a\nMsgCancelProposal message.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"canceled_height":{"description":"canceled_height defines the block height at which the proposal is canceled.","type":"string","format":"uint64"},"canceled_time":{"description":"canceled_time is the time when proposal is canceled.","type":"string","format":"date-time"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1.MsgExecLegacyContent":{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","type":"object","properties":{"authority":{"description":"authority must be the gov module address.","type":"string"},"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.gov.v1.MsgExecLegacyContentResponse":{"description":"MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type.","type":"object"},"cosmos.gov.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited or not"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"messages":{"description":"messages are the arbitrary messages to be executed if proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.gov.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/gov parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.gov.v1.Params"}}},"cosmos.gov.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.gov.v1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the Vote.","type":"string"},"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the VoteWeighted.","type":"string"},"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1.Params":{"description":"Params defines the parameters for the x/gov module.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"burn_proposal_deposit_prevote":{"type":"boolean","title":"burn deposits if the proposal does not enter voting period"},"burn_vote_quorum":{"type":"boolean","title":"burn deposits if a proposal does not meet quorum"},"burn_vote_veto":{"type":"boolean","title":"burn deposits if quorum with vote type no_veto is met"},"expedited_min_deposit":{"description":"Minimum expedited deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"expedited_threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.67.\n\nSince: cosmos-sdk 0.50","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.\n\nSince: cosmos-sdk 0.50","type":"string"},"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"min_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value minimum that must be met when making a deposit.\nDefault value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be\nrequired.\n\nSince: cosmos-sdk 0.50","type":"string"},"min_initial_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value that must be paid at proposal submission.","type":"string"},"proposal_cancel_dest":{"description":"The address which will receive (proposal_cancel_ratio * deposit) proposal deposits.\nIf empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned.\n\nSince: cosmos-sdk 0.50","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.\n\nSince: cosmos-sdk 0.50","type":"string"},"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\n considered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\n vetoed. Default value: 1/3.","type":"string"},"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"description":"Since: cosmos-sdk 0.50","type":"string","title":"failed_reason defines the reason why the proposal failed"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"},"id":{"description":"id defines the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages are the arbitrary messages to be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/gov#proposal-3"},"proposer":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"proposer is the address of the proposal sumbitter"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1.QueryConstitutionResponse":{"type":"object","title":"QueryConstitutionResponse is the response type for the Query/Constitution RPC method","properties":{"constitution":{"type":"string"}}},"cosmos.gov.v1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1.Deposit"}}},"cosmos.gov.v1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"Deprecated: Prefer to use `params` instead.\ndeposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1.DepositParams"},"params":{"description":"params defines all the paramaters of x/gov module.\n\nSince: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.gov.v1.Params"},"tally_params":{"description":"Deprecated: Prefer to use `params` instead.\ntally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1.TallyParams"},"voting_params":{"description":"Deprecated: Prefer to use `params` instead.\nvoting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1.VotingParams"}}},"cosmos.gov.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"description":"proposal is the requested governance proposal.","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}},"cosmos.gov.v1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}}},"cosmos.gov.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"}}},"cosmos.gov.v1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1.Vote"}}},"cosmos.gov.v1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Vote"}}}},"cosmos.gov.v1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string"}}},"cosmos.gov.v1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the number of abstain votes on a proposal.","type":"string"},"no_count":{"description":"no_count is the number of no votes on a proposal.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the number of no with veto votes on a proposal.","type":"string"},"yes_count":{"description":"yes_count is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.gov.v1beta1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1beta1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1beta1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1beta1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1beta1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.\n\nSince: cosmos-sdk 0.43","type":"object"},"cosmos.gov.v1beta1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1beta1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1beta1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1beta1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}}},"cosmos.gov.v1beta1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"deposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.DepositParams"},"tally_params":{"description":"tally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyParams"},"voting_params":{"description":"voting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1beta1.VotingParams"}}},"cosmos.gov.v1beta1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}},"cosmos.gov.v1beta1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}}},"cosmos.gov.v1beta1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"}}},"cosmos.gov.v1beta1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}},"cosmos.gov.v1beta1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}}},"cosmos.gov.v1beta1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string","format":"byte"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string","format":"byte"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string","format":"byte"}}},"cosmos.gov.v1beta1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain":{"description":"abstain is the number of abstain votes on a proposal.","type":"string"},"no":{"description":"no is the number of no votes on a proposal.","type":"string"},"no_with_veto":{"description":"no_with_veto is the number of no with veto votes on a proposal.","type":"string"},"yes":{"description":"yes is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1beta1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"option":{"description":"Deprecated: Prefer to use `options` instead. This field is set in queries\nif and only if `len(options) == 1` and that option has weight 1. In all\nother cases, this field will default to VOTE_OPTION_UNSPECIFIED.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"options":{"description":"options is the weighted vote options.\n\nSince: cosmos-sdk 0.43","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1beta1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1beta1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1beta1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.group.v1.Exec":{"description":"Exec defines modes of execution of a proposal on creation or on new vote.\n\n - EXEC_UNSPECIFIED: An empty value means that there should be a separate\nMsgExec request for the proposal to execute.\n - EXEC_TRY: Try to execute the proposal immediately.\nIf the proposal is not allowed per the DecisionPolicy,\nthe proposal will still be open and could\nbe executed at a later point.","type":"string","default":"EXEC_UNSPECIFIED","enum":["EXEC_UNSPECIFIED","EXEC_TRY"]},"cosmos.group.v1.GroupInfo":{"description":"GroupInfo represents the high-level on-chain information for a group.","type":"object","properties":{"admin":{"description":"admin is the account address of the group's admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group was created.","type":"string","format":"date-time"},"id":{"description":"id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata to attached to the group.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1"},"total_weight":{"description":"total_weight is the sum of the group members' weights.","type":"string"},"version":{"type":"string","format":"uint64","title":"version is used to track changes to a group's membership structure that\nwould break existing proposals. Whenever any members weight is changed,\nor any member is added or removed this version is incremented and will\ncause proposals based on older versions of this group to fail"}}},"cosmos.group.v1.GroupMember":{"description":"GroupMember represents the relationship between a group and a member.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member":{"description":"member is the member data.","$ref":"#/definitions/cosmos.group.v1.Member"}}},"cosmos.group.v1.GroupPolicyInfo":{"description":"GroupPolicyInfo represents the high-level on-chain information for a group policy.","type":"object","properties":{"address":{"description":"address is the account address of group policy.","type":"string"},"admin":{"description":"admin is the account address of the group admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group policy was created.","type":"string","format":"date-time"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the group policy.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#decision-policy-1"},"version":{"description":"version is used to track changes to a group's GroupPolicyInfo structure that\nwould create a different result on a running proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.Member":{"description":"Member represents a group member with an account address,\nnon-zero weight, metadata and added_at timestamp.","type":"object","properties":{"added_at":{"description":"added_at is a timestamp specifying when a member was added.","type":"string","format":"date-time"},"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MemberRequest":{"description":"MemberRequest represents a group member to be used in Msg server requests.\nContrary to `Member`, it doesn't have any `added_at` field\nsince this field cannot be set as part of requests.","type":"object","properties":{"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MsgCreateGroup":{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}},"metadata":{"description":"metadata is any arbitrary metadata to attached to the group.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicy":{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is any arbitrary metadata attached to the group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicyResponse":{"description":"MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type.","type":"object","properties":{"address":{"description":"address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupResponse":{"description":"MsgCreateGroupResponse is the Msg/CreateGroup response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgCreateGroupWithPolicy":{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group and group policy admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_metadata":{"description":"group_metadata is any arbitrary metadata attached to the group.","type":"string"},"group_policy_as_admin":{"description":"group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group\nand group policy admin.","type":"boolean"},"group_policy_metadata":{"description":"group_policy_metadata is any arbitrary metadata attached to the group policy.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgCreateGroupWithPolicyResponse":{"description":"MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group with policy.","type":"string","format":"uint64"},"group_policy_address":{"description":"group_policy_address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgExec":{"description":"MsgExec is the Msg/Exec request type.","type":"object","properties":{"executor":{"description":"executor is the account address used to execute the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgExecResponse":{"description":"MsgExecResponse is the Msg/Exec request type.","type":"object","properties":{"result":{"description":"result is the final result of the proposal execution.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"}}},"cosmos.group.v1.MsgLeaveGroup":{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","type":"object","properties":{"address":{"description":"address is the account address of the group member.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgLeaveGroupResponse":{"description":"MsgLeaveGroupResponse is the Msg/LeaveGroup response type.","type":"object"},"cosmos.group.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","type":"object","properties":{"exec":{"description":"exec defines the mode of execution of the proposal,\nwhether it should be executed immediately on creation or not.\nIf so, proposers signatures are considered as Yes votes.","$ref":"#/definitions/cosmos.group.v1.Exec"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposers":{"description":"proposers are the account addresses of the proposers.\nProposers signatures will be counted as yes votes.","type":"array","items":{"type":"string"}},"summary":{"description":"summary is the summary of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.group.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse is the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgUpdateGroupAdmin":{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the current account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"new_admin":{"description":"new_admin is the group new admin account address.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupAdminResponse":{"description":"MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMembers":{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member_updates":{"description":"member_updates is the list of members to update,\nset weight to 0 to remove a member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgUpdateGroupMembersResponse":{"description":"MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMetadata":{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is the updated group's metadata.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupMetadataResponse":{"description":"MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyAdmin":{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of the group policy.","type":"string"},"new_admin":{"description":"new_admin is the new group policy admin.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse":{"description":"MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy":{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy is the updated group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse":{"description":"MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyMetadata":{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"metadata":{"description":"metadata is the group policy metadata to be updated.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse":{"description":"MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type.","type":"object"},"cosmos.group.v1.MsgVote":{"description":"MsgVote is the Msg/Vote request type.","type":"object","properties":{"exec":{"description":"exec defines whether the proposal should be executed\nimmediately after voting or not.","$ref":"#/definitions/cosmos.group.v1.Exec"},"metadata":{"description":"metadata is any arbitrary metadata attached to the vote.","type":"string"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter account address.","type":"string"}}},"cosmos.group.v1.MsgVoteResponse":{"description":"MsgVoteResponse is the Msg/Vote response type.","type":"object"},"cosmos.group.v1.MsgWithdrawProposal":{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","type":"object","properties":{"address":{"description":"address is the admin of the group policy or one of the proposer of the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgWithdrawProposalResponse":{"description":"MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type.","type":"object"},"cosmos.group.v1.Proposal":{"description":"Proposal defines a group proposal. Any member of a group can submit a proposal\nfor a group policy to decide upon.\nA proposal consists of a set of `sdk.Msg`s that will be executed if the proposal\npasses as well as some optional metadata associated with the proposal.","type":"object","properties":{"executor_result":{"description":"executor_result is the final result of the proposal execution. Initial value is NotRun.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"},"final_tally_result":{"description":"final_tally_result contains the sums of all weighted votes for this\nproposal for each vote option. It is empty at submission, and only\npopulated after tallying, at voting period end or at proposal execution,\nwhichever happens first.","$ref":"#/definitions/cosmos.group.v1.TallyResult"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"group_policy_version":{"description":"group_policy_version tracks the version of the group policy at proposal submission.\nWhen a decision policy is changed, existing proposals from previous policy\nversions will become invalid with the `ABORTED` status.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"group_version":{"description":"group_version tracks the version of the group at proposal submission.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"id":{"description":"id is the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#proposal-4"},"proposers":{"description":"proposers are the account addresses of the proposers.","type":"array","items":{"type":"string"}},"status":{"description":"status represents the high level position in the life cycle of the proposal. Initial value is Submitted.","$ref":"#/definitions/cosmos.group.v1.ProposalStatus"},"submit_time":{"description":"submit_time is a timestamp specifying when a proposal was submitted.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"voting_period_end":{"description":"voting_period_end is the timestamp before which voting must be done.\nUnless a successful MsgExec is called before (to execute a proposal whose\ntally is successful before the voting period ends), tallying will be done\nat this point, and the `final_tally_result`and `status` fields will be\naccordingly updated.","type":"string","format":"date-time"}}},"cosmos.group.v1.ProposalExecutorResult":{"description":"ProposalExecutorResult defines types of proposal executor results.\n\n - PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED: An empty value is not allowed.\n - PROPOSAL_EXECUTOR_RESULT_NOT_RUN: We have not yet run the executor.\n - PROPOSAL_EXECUTOR_RESULT_SUCCESS: The executor was successful and proposed action updated state.\n - PROPOSAL_EXECUTOR_RESULT_FAILURE: The executor returned an error and proposed action didn't update state.","type":"string","default":"PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","enum":["PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","PROPOSAL_EXECUTOR_RESULT_NOT_RUN","PROPOSAL_EXECUTOR_RESULT_SUCCESS","PROPOSAL_EXECUTOR_RESULT_FAILURE"]},"cosmos.group.v1.ProposalStatus":{"description":"ProposalStatus defines proposal statuses.\n\n - PROPOSAL_STATUS_UNSPECIFIED: An empty value is invalid and not allowed.\n - PROPOSAL_STATUS_SUBMITTED: Initial status of a proposal when submitted.\n - PROPOSAL_STATUS_ACCEPTED: Final status of a proposal when the final tally is done and the outcome\npasses the group policy's decision policy.\n - PROPOSAL_STATUS_REJECTED: Final status of a proposal when the final tally is done and the outcome\nis rejected by the group policy's decision policy.\n - PROPOSAL_STATUS_ABORTED: Final status of a proposal when the group policy is modified before the\nfinal tally.\n - PROPOSAL_STATUS_WITHDRAWN: A proposal can be withdrawn before the voting start time by the owner.\nWhen this happens the final status is Withdrawn.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_SUBMITTED","PROPOSAL_STATUS_ACCEPTED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_ABORTED","PROPOSAL_STATUS_WITHDRAWN"]},"cosmos.group.v1.QueryGroupInfoResponse":{"description":"QueryGroupInfoResponse is the Query/GroupInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupInfo of the group.","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}}},"cosmos.group.v1.QueryGroupMembersResponse":{"description":"QueryGroupMembersResponse is the Query/GroupMembersResponse response type.","type":"object","properties":{"members":{"description":"members are the members of the group with given group_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupMember"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByAdminResponse":{"description":"QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info with provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByGroupResponse":{"description":"QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info associated with the provided group.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPolicyInfoResponse":{"description":"QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupPolicyInfo of the group policy.","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}}},"cosmos.group.v1.QueryGroupsByAdminResponse":{"description":"QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsByMemberResponse":{"description":"QueryGroupsByMemberResponse is the Query/GroupsByMember response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided group member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsResponse":{"description":"QueryGroupsResponse is the Query/Groups response type.\n\nSince: cosmos-sdk 0.47.1","type":"object","properties":{"groups":{"description":"`groups` is all the groups present in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the Query/Proposal response type.","type":"object","properties":{"proposal":{"description":"proposal is the proposal info.","$ref":"#/definitions/cosmos.group.v1.Proposal"}}},"cosmos.group.v1.QueryProposalsByGroupPolicyResponse":{"description":"QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals are the proposals with given group policy.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Proposal"}}}},"cosmos.group.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the Query/TallyResult response type.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.group.v1.TallyResult"}}},"cosmos.group.v1.QueryVoteByProposalVoterResponse":{"description":"QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type.","type":"object","properties":{"vote":{"description":"vote is the vote with given proposal_id and voter.","$ref":"#/definitions/cosmos.group.v1.Vote"}}},"cosmos.group.v1.QueryVotesByProposalResponse":{"description":"QueryVotesByProposalResponse is the Query/VotesByProposal response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes for given proposal_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.QueryVotesByVoterResponse":{"description":"QueryVotesByVoterResponse is the Query/VotesByVoter response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes by given voter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.TallyResult":{"description":"TallyResult represents the sum of weighted votes for each vote option.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the weighted sum of abstainers.","type":"string"},"no_count":{"description":"no_count is the weighted sum of no votes.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the weighted sum of veto.","type":"string"},"yes_count":{"description":"yes_count is the weighted sum of yes votes.","type":"string"}}},"cosmos.group.v1.Vote":{"type":"object","title":"Vote represents a vote for a proposal.string metadata","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"submit_time":{"description":"submit_time is the timestamp when the vote was submitted.","type":"string","format":"date-time"},"voter":{"description":"voter is the account address of the voter.","type":"string"}}},"cosmos.group.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will\nreturn an error.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.mint.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.mint.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.mint.v1beta1.Params":{"description":"Params defines the parameters for the x/mint module.","type":"object","properties":{"blocks_per_year":{"type":"string","format":"uint64","title":"expected blocks per year"},"goal_bonded":{"type":"string","title":"goal of percent bonded atoms"},"inflation_max":{"type":"string","title":"maximum inflation rate"},"inflation_min":{"type":"string","title":"minimum inflation rate"},"inflation_rate_change":{"type":"string","title":"maximum annual change in inflation rate"},"mint_denom":{"type":"string","title":"type of coin to mint"}}},"cosmos.mint.v1beta1.QueryAnnualProvisionsResponse":{"description":"QueryAnnualProvisionsResponse is the response type for the\nQuery/AnnualProvisions RPC method.","type":"object","properties":{"annual_provisions":{"description":"annual_provisions is the current minting annual provisions value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryInflationResponse":{"description":"QueryInflationResponse is the response type for the Query/Inflation RPC\nmethod.","type":"object","properties":{"inflation":{"description":"inflation is the current minting inflation value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.nft.v1beta1.Class":{"description":"Class defines the class of the nft type.","type":"object","properties":{"data":{"title":"data is the app specific metadata of the NFT class. Optional","$ref":"#/definitions/google.protobuf.Any"},"description":{"type":"string","title":"description is a brief description of nft classification. Optional"},"id":{"type":"string","title":"id defines the unique identifier of the NFT classification, similar to the contract address of ERC721"},"name":{"type":"string","title":"name defines the human-readable name of the NFT classification. Optional"},"symbol":{"type":"string","title":"symbol is an abbreviated name for nft classification. Optional"},"uri":{"type":"string","title":"uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri. Optional"}}},"cosmos.nft.v1beta1.MsgSend":{"description":"MsgSend represents a message to send a nft from one account to another account.","type":"object","properties":{"class_id":{"type":"string","title":"class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721"},"id":{"type":"string","title":"id defines the unique identification of nft"},"receiver":{"type":"string","title":"receiver is the receiver address of nft"},"sender":{"type":"string","title":"sender is the address of the owner of nft"}}},"cosmos.nft.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.nft.v1beta1.NFT":{"description":"NFT defines the NFT.","type":"object","properties":{"class_id":{"type":"string","title":"class_id associated with the NFT, similar to the contract address of ERC721"},"data":{"title":"data is an app specific data of the NFT. Optional","$ref":"#/definitions/google.protobuf.Any"},"id":{"type":"string","title":"id is a unique identifier of the NFT"},"uri":{"type":"string","title":"uri for the NFT metadata stored off chain"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri"}}},"cosmos.nft.v1beta1.QueryBalanceResponse":{"type":"object","title":"QueryBalanceResponse is the response type for the Query/Balance RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs of a given class owned by the owner"}}},"cosmos.nft.v1beta1.QueryClassResponse":{"type":"object","title":"QueryClassResponse is the response type for the Query/Class RPC method","properties":{"class":{"description":"class defines the class of the nft type.","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}}},"cosmos.nft.v1beta1.QueryClassesResponse":{"type":"object","title":"QueryClassesResponse is the response type for the Query/Classes RPC method","properties":{"classes":{"description":"class defines the class of the nft type.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryNFTResponse":{"type":"object","title":"QueryNFTResponse is the response type for the Query/NFT RPC method","properties":{"nft":{"title":"owner is the owner address of the nft","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}}},"cosmos.nft.v1beta1.QueryNFTsResponse":{"type":"object","title":"QueryNFTsResponse is the response type for the Query/NFTs RPC methods","properties":{"nfts":{"type":"array","title":"NFT defines the NFT","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryOwnerResponse":{"type":"object","title":"QueryOwnerResponse is the response type for the Query/Owner RPC method","properties":{"owner":{"type":"string","title":"owner is the owner address of the nft"}}},"cosmos.nft.v1beta1.QuerySupplyResponse":{"type":"object","title":"QuerySupplyResponse is the response type for the Query/Supply RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs from the given class"}}},"cosmos.params.v1beta1.ParamChange":{"description":"ParamChange defines an individual parameter change, for use in\nParameterChangeProposal.","type":"object","properties":{"key":{"type":"string"},"subspace":{"type":"string"},"value":{"type":"string"}}},"cosmos.params.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"param":{"description":"param defines the queried parameter.","$ref":"#/definitions/cosmos.params.v1beta1.ParamChange"}}},"cosmos.params.v1beta1.QuerySubspacesResponse":{"description":"QuerySubspacesResponse defines the response types for querying for all\nregistered subspaces and all keys for a subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"subspaces":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.params.v1beta1.Subspace"}}}},"cosmos.params.v1beta1.Subspace":{"description":"Subspace defines a parameter subspace name and all the keys that exist for\nthe subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjail":{"type":"object","title":"MsgUnjail defines the Msg/Unjail request type","properties":{"validator_addr":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjailResponse":{"type":"object","title":"MsgUnjailResponse defines the Msg/Unjail response type"},"cosmos.slashing.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/slashing parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.slashing.v1beta1.Params":{"description":"Params represents the parameters used for by the slashing module.","type":"object","properties":{"downtime_jail_duration":{"type":"string"},"min_signed_per_window":{"type":"string","format":"byte"},"signed_blocks_window":{"type":"string","format":"int64"},"slash_fraction_double_sign":{"type":"string","format":"byte"},"slash_fraction_downtime":{"type":"string","format":"byte"}}},"cosmos.slashing.v1beta1.QueryParamsResponse":{"type":"object","title":"QueryParamsResponse is the response type for the Query/Params RPC method","properties":{"params":{"$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.QuerySigningInfoResponse":{"type":"object","title":"QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC\nmethod","properties":{"val_signing_info":{"title":"val_signing_info is the signing info of requested val cons address","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}}},"cosmos.slashing.v1beta1.QuerySigningInfosResponse":{"type":"object","title":"QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC\nmethod","properties":{"info":{"type":"array","title":"info is the signing info of all validators","items":{"type":"object","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.slashing.v1beta1.ValidatorSigningInfo":{"description":"ValidatorSigningInfo defines a validator's signing info for monitoring their\nliveness activity.","type":"object","properties":{"address":{"type":"string"},"index_offset":{"description":"Index which is incremented every time a validator is bonded in a block and\n_may_ have signed a pre-commit or not. This in conjunction with the\nsigned_blocks_window param determines the index in the missed block bitmap.","type":"string","format":"int64"},"jailed_until":{"description":"Timestamp until which the validator is jailed due to liveness downtime.","type":"string","format":"date-time"},"missed_blocks_counter":{"description":"A counter of missed (unsigned) blocks. It is used to avoid unnecessary\nreads in the missed block bitmap.","type":"string","format":"int64"},"start_height":{"type":"string","format":"int64","title":"Height at which validator was first a candidate OR was un-jailed"},"tombstoned":{"description":"Whether or not a validator has been tombstoned (killed out of validator\nset). It is set once the validator commits an equivocation or for any other\nconfigured misbehavior.","type":"boolean"}}},"cosmos.staking.v1beta1.BondStatus":{"description":"BondStatus is the status of a validator.\n\n - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.","type":"string","default":"BOND_STATUS_UNSPECIFIED","enum":["BOND_STATUS_UNSPECIFIED","BOND_STATUS_UNBONDED","BOND_STATUS_UNBONDING","BOND_STATUS_BONDED"]},"cosmos.staking.v1beta1.Commission":{"description":"Commission defines commission parameters for a given validator.","type":"object","properties":{"commission_rates":{"description":"commission_rates defines the initial commission rates to be used for creating a validator.","$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"update_time":{"description":"update_time is the last time the commission rate was changed.","type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.CommissionRates":{"description":"CommissionRates defines the initial commission rates to be used for creating\na validator.","type":"object","properties":{"max_change_rate":{"description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction.","type":"string"},"max_rate":{"description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction.","type":"string"},"rate":{"description":"rate is the commission rate charged to delegators, as a fraction.","type":"string"}}},"cosmos.staking.v1beta1.Delegation":{"description":"Delegation represents the bond with tokens held by an account. It is\nowned by one delegator, and is associated with the voting power of one\nvalidator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"shares":{"description":"shares define the delegation shares received.","type":"string"},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.DelegationResponse":{"description":"DelegationResponse is equivalent to Delegation except that it contains a\nbalance in addition to shares which is more suitable for client responses.","type":"object","properties":{"balance":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Delegation"}}},"cosmos.staking.v1beta1.Description":{"description":"Description defines a validator description.","type":"object","properties":{"details":{"description":"details define other optional details.","type":"string"},"identity":{"description":"identity defines an optional identity signature (ex. UPort or Keybase).","type":"string"},"moniker":{"description":"moniker defines a human-readable name for the validator.","type":"string"},"security_contact":{"description":"security_contact defines an optional email for security contact.","type":"string"},"website":{"description":"website defines an optional website link.","type":"string"}}},"cosmos.staking.v1beta1.HistoricalInfo":{"description":"HistoricalInfo contains header and validator information for a given block.\nIt is stored as part of staking module's state, which persists the `n` most\nrecent HistoricalInfo\n(`n` is set by the staking module's `historical_entries` parameter).","type":"object","properties":{"header":{"$ref":"#/definitions/tendermint.types.Header"},"valset":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgBeginRedelegateResponse":{"description":"MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegation":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator","properties":{"amount":{"title":"amount is always less than or equal to unbonding delegation entry balance","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegationResponse"},"cosmos.staking.v1beta1.MsgCreateValidator":{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","type":"object","properties":{"commission":{"$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"delegator_address":{"description":"Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated.\nThe validator address bytes and delegator address bytes refer to the same account while creating validator (defer\nonly in bech32 notation).","type":"string"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"pubkey":{"$ref":"#/definitions/google.protobuf.Any"},"validator_address":{"type":"string"},"value":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.staking.v1beta1.MsgCreateValidatorResponse":{"description":"MsgCreateValidatorResponse defines the Msg/CreateValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgDelegate":{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgDelegateResponse":{"description":"MsgDelegateResponse defines the Msg/Delegate response type.","type":"object"},"cosmos.staking.v1beta1.MsgEditValidator":{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","type":"object","properties":{"commission_rate":{"type":"string","title":"We pass a reference to the new commission rate and min self delegation as\nit's not mandatory to update. If not updated, the deserialized rate will be\nzero with no way to distinguish if an update was intended.\nREF: #2373"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgEditValidatorResponse":{"description":"MsgEditValidatorResponse defines the Msg/EditValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgUndelegate":{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgUndelegateResponse":{"description":"MsgUndelegateResponse defines the Msg/Undelegate response type.","type":"object","properties":{"amount":{"description":"Since: cosmos-sdk 0.50","title":"amount returns the amount of undelegated coins","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/staking parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.staking.v1beta1.Params":{"description":"Params defines the parameters for the x/staking module.","type":"object","properties":{"bond_denom":{"description":"bond_denom defines the bondable coin denomination.","type":"string"},"historical_entries":{"description":"historical_entries is the number of historical entries to persist.","type":"integer","format":"int64"},"max_entries":{"description":"max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio).","type":"integer","format":"int64"},"max_validators":{"description":"max_validators is the maximum number of validators.","type":"integer","format":"int64"},"min_commission_rate":{"type":"string","title":"min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators"},"unbonding_time":{"description":"unbonding_time is the time duration of unbonding.","type":"string"}}},"cosmos.staking.v1beta1.Pool":{"description":"Pool is used for tracking bonded and not-bonded token supply of the bond\ndenomination.","type":"object","properties":{"bonded_tokens":{"type":"string"},"not_bonded_tokens":{"type":"string"}}},"cosmos.staking.v1beta1.QueryDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/Delegation RPC method.","type":"object","properties":{"delegation_response":{"description":"delegation_responses defines the delegation info of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse":{"description":"QueryDelegatorDelegationsResponse is response type for the\nQuery/DelegatorDelegations RPC method.","type":"object","properties":{"delegation_responses":{"description":"delegation_responses defines all the delegations' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse":{"description":"QueryUnbondingDelegatorDelegationsResponse is response type for the\nQuery/UnbondingDelegatorDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorResponse":{"description":"QueryDelegatorValidatorResponse response type for the\nQuery/DelegatorValidator RPC method.","type":"object","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators defines the validators' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.QueryHistoricalInfoResponse":{"description":"QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC\nmethod.","type":"object","properties":{"hist":{"description":"hist defines the historical info at the given height.","$ref":"#/definitions/cosmos.staking.v1beta1.HistoricalInfo"}}},"cosmos.staking.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.QueryPoolResponse":{"description":"QueryPoolResponse is response type for the Query/Pool RPC method.","type":"object","properties":{"pool":{"description":"pool defines the pool info.","$ref":"#/definitions/cosmos.staking.v1beta1.Pool"}}},"cosmos.staking.v1beta1.QueryRedelegationsResponse":{"description":"QueryRedelegationsResponse is response type for the Query/Redelegations RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"redelegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationResponse"}}}},"cosmos.staking.v1beta1.QueryUnbondingDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/UnbondingDelegation\nRPC method.","type":"object","properties":{"unbond":{"description":"unbond defines the unbonding information of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}},"cosmos.staking.v1beta1.QueryValidatorDelegationsResponse":{"type":"object","title":"QueryValidatorDelegationsResponse is response type for the\nQuery/ValidatorDelegations RPC method","properties":{"delegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryValidatorResponse":{"type":"object","title":"QueryValidatorResponse is response type for the Query/Validator RPC method","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse":{"description":"QueryValidatorUnbondingDelegationsResponse is response type for the\nQuery/ValidatorUnbondingDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryValidatorsResponse":{"type":"object","title":"QueryValidatorsResponse is response type for the Query/Validators RPC method","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators contains all the queried validators.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.Redelegation":{"description":"Redelegation contains the list of a particular delegator's redelegating bonds\nfrom a particular source validator to a particular destination validator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the bech32-encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the redelegation entries.\n\nredelegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}},"validator_dst_address":{"description":"validator_dst_address is the validator redelegation destination operator address.","type":"string"},"validator_src_address":{"description":"validator_src_address is the validator redelegation source operator address.","type":"string"}}},"cosmos.staking.v1beta1.RedelegationEntry":{"description":"RedelegationEntry defines a redelegation object with relevant metadata.","type":"object","properties":{"completion_time":{"description":"completion_time defines the unix time for redelegation completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height defines the height which the redelegation took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the initial balance when redelegation started.","type":"string"},"shares_dst":{"description":"shares_dst is the amount of destination-validator shares created by redelegation.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.RedelegationEntryResponse":{"description":"RedelegationEntryResponse is equivalent to a RedelegationEntry except that it\ncontains a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"balance":{"type":"string"},"redelegation_entry":{"$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}}},"cosmos.staking.v1beta1.RedelegationResponse":{"description":"RedelegationResponse is equivalent to a Redelegation except that its entries\ncontain a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntryResponse"}},"redelegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Redelegation"}}},"cosmos.staking.v1beta1.UnbondingDelegation":{"description":"UnbondingDelegation stores all of a single delegator's unbonding bonds\nfor a single validator in an time-ordered list.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the unbonding delegation entries.\n\nunbonding delegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegationEntry"}},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.UnbondingDelegationEntry":{"description":"UnbondingDelegationEntry defines an unbonding object with relevant metadata.","type":"object","properties":{"balance":{"description":"balance defines the tokens to receive at completion.","type":"string"},"completion_time":{"description":"completion_time is the unix time for unbonding completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the tokens initially scheduled to receive at completion.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.Validator":{"description":"Validator defines a validator, together with the total amount of the\nValidator's bond shares and their exchange rate to coins. Slashing results in\na decrease in the exchange rate, allowing correct calculation of future\nundelegations without iterating over delegators. When coins are delegated to\nthis validator, the validator is credited with a delegation whose number of\nbond shares is based on the amount of coins delegated divided by the current\nexchange rate. Voting power can be calculated as total bonded shares\nmultiplied by exchange rate.","type":"object","properties":{"commission":{"description":"commission defines the commission parameters.","$ref":"#/definitions/cosmos.staking.v1beta1.Commission"},"consensus_pubkey":{"description":"consensus_pubkey is the consensus public key of the validator, as a Protobuf Any.","$ref":"#/definitions/google.protobuf.Any"},"delegator_shares":{"description":"delegator_shares defines total shares issued to a validator's delegators.","type":"string"},"description":{"description":"description defines the description terms for the validator.","$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"jailed":{"description":"jailed defined whether the validator has been jailed from bonded status or not.","type":"boolean"},"min_self_delegation":{"description":"min_self_delegation is the validator's self declared minimum self delegation.\n\nSince: cosmos-sdk 0.46","type":"string"},"operator_address":{"description":"operator_address defines the address of the validator's operator; bech encoded in JSON.","type":"string"},"status":{"description":"status is the validator status (bonded/unbonding/unbonded).","$ref":"#/definitions/cosmos.staking.v1beta1.BondStatus"},"tokens":{"description":"tokens define the delegated tokens (incl. self-delegation).","type":"string"},"unbonding_height":{"description":"unbonding_height defines, if unbonding, the height at which this validator has begun unbonding.","type":"string","format":"int64"},"unbonding_ids":{"type":"array","title":"list of unbonding ids, each uniquely identifing an unbonding of this validator","items":{"type":"string","format":"uint64"}},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"strictly positive if this validator's unbonding has been stopped by external modules"},"unbonding_time":{"description":"unbonding_time defines, if unbonding, the min time for the validator to complete unbonding.","type":"string","format":"date-time"}}},"cosmos.store.streaming.abci.ListenCommitRequest":{"type":"object","title":"ListenCommitRequest is the request type for the ListenCommit RPC method","properties":{"block_height":{"type":"string","format":"int64","title":"explicitly pass in block height as ResponseCommit does not contain this info"},"change_set":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.store.v1beta1.StoreKVPair"}},"res":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}}},"cosmos.store.streaming.abci.ListenCommitResponse":{"type":"object","title":"ListenCommitResponse is the response type for the ListenCommit RPC method"},"cosmos.store.streaming.abci.ListenFinalizeBlockRequest":{"type":"object","title":"ListenEndBlockRequest is the request type for the ListenEndBlock RPC method","properties":{"req":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"},"res":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}}},"cosmos.store.streaming.abci.ListenFinalizeBlockResponse":{"type":"object","title":"ListenEndBlockResponse is the response type for the ListenEndBlock RPC method"},"cosmos.store.v1beta1.StoreKVPair":{"description":"Since: cosmos-sdk 0.43","type":"object","title":"StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes)\nIt optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and\nDeletes","properties":{"delete":{"type":"boolean","title":"true indicates a delete operation, false indicates a set operation"},"key":{"type":"string","format":"byte"},"store_key":{"type":"string","title":"the store key for the KVStore this pair originates from"},"value":{"type":"string","format":"byte"}}},"cosmos.tx.signing.v1beta1.SignMode":{"description":"SignMode represents a signing mode with its own security guarantees.\n\nThis enum should be considered a registry of all known sign modes\nin the Cosmos ecosystem. Apps are not expected to support all known\nsign modes. Apps that would like to support custom sign modes are\nencouraged to open a small PR against this file to add a new case\nto this SignMode enum describing their sign mode so that different\napps have a consistent version of this enum.\n\n - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\nrejected.\n - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\nverified with raw bytes from Tx.\n - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\nhuman-readable textual representation on top of the binary representation\nfrom SIGN_MODE_DIRECT.\n\nSince: cosmos-sdk 0.50\n - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\nSignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\nrequire signers signing over other signers' `signer_info`.\n\nSince: cosmos-sdk 0.46\n - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\nAmino JSON and will be removed in the future.\n - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\nSDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\nCurrently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\nbut is not implemented on the SDK by default. To enable EIP-191, you need\nto pass a custom `TxConfig` that has an implementation of\n`SignModeHandler` for EIP-191. The SDK may decide to fully support\nEIP-191 in the future.\n\nSince: cosmos-sdk 0.45.2","type":"string","default":"SIGN_MODE_UNSPECIFIED","enum":["SIGN_MODE_UNSPECIFIED","SIGN_MODE_DIRECT","SIGN_MODE_TEXTUAL","SIGN_MODE_DIRECT_AUX","SIGN_MODE_LEGACY_AMINO_JSON","SIGN_MODE_EIP_191"]},"cosmos.tx.v1beta1.AuthInfo":{"description":"AuthInfo describes the fee and signer modes that are used to sign a\ntransaction.","type":"object","properties":{"fee":{"description":"Fee is the fee and gas limit for the transaction. The first signer is the\nprimary signer and the one which pays the fee. The fee can be calculated\nbased on the cost of evaluating the body and doing signature verification\nof the signers. This can be estimated via simulation.","$ref":"#/definitions/cosmos.tx.v1beta1.Fee"},"signer_infos":{"description":"signer_infos defines the signing modes for the required signers. The number\nand order of elements must match the required signers from TxBody's\nmessages. The first element is the primary signer and the one which pays\nthe fee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.SignerInfo"}},"tip":{"description":"Tip is the optional tip used for transactions fees paid in another denom.\n\nThis field is ignored if the chain didn't enable tips, i.e. didn't add the\n`TipDecorator` in its posthandler.\n\nSince: cosmos-sdk 0.46","$ref":"#/definitions/cosmos.tx.v1beta1.Tip"}}},"cosmos.tx.v1beta1.BroadcastMode":{"description":"BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\nmethod.\n\n - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\nBROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits\nfor a CheckTx execution response only.\n - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client\nreturns immediately.","type":"string","default":"BROADCAST_MODE_UNSPECIFIED","enum":["BROADCAST_MODE_UNSPECIFIED","BROADCAST_MODE_BLOCK","BROADCAST_MODE_SYNC","BROADCAST_MODE_ASYNC"]},"cosmos.tx.v1beta1.BroadcastTxRequest":{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","type":"object","properties":{"mode":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastMode"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.BroadcastTxResponse":{"description":"BroadcastTxResponse is the response type for the\nService.BroadcastTx method.","type":"object","properties":{"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.Fee":{"description":"Fee includes the amount of coins paid in fees and the maximum\ngas to be used by the transaction. The ratio yields an effective \"gasprice\",\nwhich must be above some miminum to be accepted into the mempool.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of coins to be paid as a fee","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"gas_limit":{"type":"string","format":"uint64","title":"gas_limit is the maximum gas that can be used in transaction processing\nbefore an out of gas error occurs"},"granter":{"type":"string","title":"if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used\nto pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\nnot support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees.\nthe payer must be a tx signer (and thus have signed this field in AuthInfo).\nsetting this field does *not* change the ordering of required signers for the transaction.","type":"string"}}},"cosmos.tx.v1beta1.GetBlockWithTxsResponse":{"description":"GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs\nmethod.\n\nSince: cosmos-sdk 0.45.2","type":"object","properties":{"block":{"$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"pagination":{"description":"pagination defines a pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"txs":{"description":"txs are the transactions in the block.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.GetTxResponse":{"description":"GetTxResponse is the response type for the Service.GetTx method.","type":"object","properties":{"tx":{"description":"tx is the queried transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.GetTxsEventResponse":{"description":"GetTxsEventResponse is the response type for the Service.TxsByEvents\nRPC method.","type":"object","properties":{"pagination":{"description":"pagination defines a pagination for the response.\nDeprecated post v0.46.x: use total instead.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64","title":"total is total number of results available"},"tx_responses":{"description":"tx_responses is the list of queried TxResponses.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}},"txs":{"description":"txs is the list of queried transactions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.ModeInfo":{"description":"ModeInfo describes the signing mode of a single or nested multisig signer.","type":"object","properties":{"multi":{"title":"multi represents a nested multisig signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi"},"single":{"title":"single represents a single signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Single"}}},"cosmos.tx.v1beta1.ModeInfo.Multi":{"type":"object","title":"Multi is the mode info for a multisig public key","properties":{"bitarray":{"title":"bitarray specifies which keys within the multisig are signing","$ref":"#/definitions/cosmos.crypto.multisig.v1beta1.CompactBitArray"},"mode_infos":{"type":"array","title":"mode_infos is the corresponding modes of the signers of the multisig\nwhich could include nested multisig public keys","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"}}}},"cosmos.tx.v1beta1.ModeInfo.Single":{"type":"object","title":"Single is the mode info for a single signer. It is structured as a message\nto allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\nfuture","properties":{"mode":{"title":"mode is the signing mode of the single signer","$ref":"#/definitions/cosmos.tx.signing.v1beta1.SignMode"}}},"cosmos.tx.v1beta1.OrderBy":{"description":"- ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","type":"string","title":"OrderBy defines the sorting order","default":"ORDER_BY_UNSPECIFIED","enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"]},"cosmos.tx.v1beta1.SignerInfo":{"description":"SignerInfo describes the public key and signing mode of a single top-level\nsigner.","type":"object","properties":{"mode_info":{"title":"mode_info describes the signing mode of the signer and is a nested\nstructure to support nested multisig pubkey's","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"},"public_key":{"description":"public_key is the public key of the signer. It is optional for accounts\nthat already exist in state. If unset, the verifier can use the required \\\nsigner address for this position and lookup the public key.","$ref":"#/definitions/google.protobuf.Any"},"sequence":{"description":"sequence is the sequence of the account, which describes the\nnumber of committed transactions signed by a given address. It is used to\nprevent replay attacks.","type":"string","format":"uint64"}}},"cosmos.tx.v1beta1.SimulateRequest":{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to simulate.\nDeprecated. Send raw tx bytes instead.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_bytes":{"description":"tx_bytes is the raw transaction.\n\nSince: cosmos-sdk 0.43","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.SimulateResponse":{"description":"SimulateResponse is the response type for the\nService.SimulateRPC method.","type":"object","properties":{"gas_info":{"description":"gas_info is the information about gas used in the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.GasInfo"},"result":{"description":"result is the result of the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.Result"}}},"cosmos.tx.v1beta1.Tip":{"description":"Tip is the tip used for meta-transactions.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of the tip","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"tipper":{"type":"string","title":"tipper is the address of the account paying for the tip"}}},"cosmos.tx.v1beta1.Tx":{"description":"Tx is the standard type used for broadcasting transactions.","type":"object","properties":{"auth_info":{"title":"auth_info is the authorization related content of the transaction,\nspecifically signers, signer modes and fee","$ref":"#/definitions/cosmos.tx.v1beta1.AuthInfo"},"body":{"title":"body is the processable content of the transaction","$ref":"#/definitions/cosmos.tx.v1beta1.TxBody"},"signatures":{"description":"signatures is a list of signatures that matches the length and order of\nAuthInfo's signer_infos to allow connecting signature meta information like\npublic key and signing mode by position.","type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.tx.v1beta1.TxBody":{"description":"TxBody is the body of a transaction that all signers sign over.","type":"object","properties":{"extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, the transaction will be rejected","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"memo":{"description":"memo is any arbitrary note/comment to be added to the transaction.\nWARNING: in clients, any publicly exposed text should not be called memo,\nbut should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).","type":"string"},"messages":{"description":"messages is a list of messages to be executed. The required signers of\nthose messages define the number and order of elements in AuthInfo's\nsigner_infos and Tx's signatures. Each required signer address is added to\nthe list only the first time it occurs.\nBy convention, the first required signer (usually from the first message)\nis referred to as the primary signer and pays the fee for the whole\ntransaction.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"non_critical_extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, they will be ignored","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"timeout_height":{"type":"string","format":"uint64","title":"timeout is the block height after which this transaction will not\nbe processed by the chain"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeAminoResponse":{"description":"TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeResponse":{"description":"TxDecodeResponse is the response type for the\nService.TxDecode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the decoded transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeAminoRequest":{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxEncodeRequest":{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the transaction to encode.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeResponse":{"description":"TxEncodeResponse is the response type for the\nService.TxEncode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the encoded transaction bytes.","type":"string","format":"byte"}}},"cosmos.upgrade.v1beta1.ModuleVersion":{"description":"ModuleVersion specifies a module and its consensus version.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"name":{"type":"string","title":"name of the app module"},"version":{"type":"string","format":"uint64","title":"consensus version of the app module"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgrade":{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse":{"description":"MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"plan":{"description":"plan is the upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse":{"description":"MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.Plan":{"description":"Plan specifies information about a planned upgrade and when it should occur.","type":"object","properties":{"height":{"description":"The height at which the upgrade must be performed.","type":"string","format":"int64"},"info":{"type":"string","title":"Any application specific upgrade info to be included on-chain\nsuch as a git commit that validators could automatically upgrade to"},"name":{"description":"Sets the name for the upgrade. This name will be used by the upgraded\nversion of the software to apply any special \"on-upgrade\" commands during\nthe first BeginBlock method after the upgrade is applied. It is also used\nto detect whether a software version can handle a given upgrade. If no\nupgrade handler with this name has been set in the software, it will be\nassumed that the software is out-of-date when the upgrade Time or Height is\nreached and the software will exit.","type":"string"},"time":{"description":"Deprecated: Time based upgrades have been deprecated. Time based upgrade logic\nhas been removed from the SDK.\nIf this field is not empty, an error will be thrown.","type":"string","format":"date-time"},"upgraded_client_state":{"description":"Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been\nmoved to the IBC module in the sub module 02-client.\nIf this field is not empty, an error will be thrown.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.upgrade.v1beta1.QueryAppliedPlanResponse":{"description":"QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC\nmethod.","type":"object","properties":{"height":{"description":"height is the block height at which the plan was applied.","type":"string","format":"int64"}}},"cosmos.upgrade.v1beta1.QueryAuthorityResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"QueryAuthorityResponse is the response type for Query/Authority","properties":{"address":{"type":"string"}}},"cosmos.upgrade.v1beta1.QueryCurrentPlanResponse":{"description":"QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC\nmethod.","type":"object","properties":{"plan":{"description":"plan is the current upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.QueryModuleVersionsResponse":{"description":"QueryModuleVersionsResponse is the response type for the Query/ModuleVersions\nRPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"module_versions":{"description":"module_versions is a list of module names with their consensus versions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.upgrade.v1beta1.ModuleVersion"}}}},"cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState\nRPC method.","type":"object","properties":{"upgraded_consensus_state":{"type":"string","format":"byte","title":"Since: cosmos-sdk 0.43"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"from_address":{"type":"string"},"start_time":{"description":"start of vesting as unix time (in seconds).","type":"string","format":"int64"},"to_address":{"type":"string"},"vesting_periods":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.vesting.v1beta1.Period"}}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount\nresponse type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse":{"description":"MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreateVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"delayed":{"type":"boolean"},"end_time":{"description":"end of vesting as unix time (in seconds).","type":"string","format":"int64"},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type.","type":"object"},"cosmos.vesting.v1beta1.Period":{"description":"Period defines a length of time and amount of coins that will vest.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"length":{"description":"Period duration in seconds.","type":"string","format":"int64"}}},"cosmwasm.wasm.v1.AbsoluteTxPosition":{"description":"AbsoluteTxPosition is a unique transaction position that allows for global\nordering of transactions.","type":"object","properties":{"block_height":{"type":"string","format":"uint64","title":"BlockHeight is the block the contract was created at"},"tx_index":{"type":"string","format":"uint64","title":"TxIndex is a monotonic counter within the block (actual transaction index,\nor gas consumed)"}}},"cosmwasm.wasm.v1.AccessConfig":{"description":"AccessConfig access control type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.AccessType":{"description":"- ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty value\n - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses","type":"string","title":"AccessType permission types","default":"ACCESS_TYPE_UNSPECIFIED","enum":["ACCESS_TYPE_UNSPECIFIED","ACCESS_TYPE_NOBODY","ACCESS_TYPE_EVERYBODY","ACCESS_TYPE_ANY_OF_ADDRESSES"]},"cosmwasm.wasm.v1.CodeInfoResponse":{"type":"object","title":"CodeInfoResponse contains code meta data from CodeInfo","properties":{"code_id":{"type":"string","format":"uint64","title":"id for legacy support"},"creator":{"type":"string"},"data_hash":{"type":"string","format":"byte"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.ContractCodeHistoryEntry":{"description":"ContractCodeHistoryEntry metadata to a contract.","type":"object","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"msg":{"type":"string","format":"byte"},"operation":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryOperationType"},"updated":{"description":"Updated Tx position when the operation was executed.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"}}},"cosmwasm.wasm.v1.ContractCodeHistoryOperationType":{"description":"- CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data","type":"string","title":"ContractCodeHistoryOperationType actions that caused a code change","default":"CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","enum":["CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT","CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE","CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS"]},"cosmwasm.wasm.v1.ContractInfo":{"type":"object","title":"ContractInfo stores a WASM contract instance","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored Wasm code"},"created":{"description":"Created Tx position when the contract was instantiated.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"},"creator":{"type":"string","title":"Creator address who initially instantiated the contract"},"extension":{"description":"Extension is an extension point to store custom metadata within the\npersistence model.","$ref":"#/definitions/google.protobuf.Any"},"ibc2_port_id":{"type":"string"},"ibc_port_id":{"type":"string"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"}}},"cosmwasm.wasm.v1.Model":{"type":"object","title":"Model is a struct that holds a KV pair","properties":{"key":{"type":"string","format":"byte","title":"hex-encode key to read it better (this is often ascii)"},"value":{"type":"string","format":"byte","title":"base64-encode raw value"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses":{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse":{"description":"MsgAddCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgAddCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgClearAdmin":{"type":"object","title":"MsgClearAdmin removes any admin stored for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgClearAdminResponse":{"type":"object","title":"MsgClearAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgExecuteContract":{"type":"object","title":"MsgExecuteContract submits the given message data to a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on execution","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgExecuteContractResponse":{"description":"MsgExecuteContractResponse returns execution result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContract":{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2":{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"fix_msg":{"type":"boolean","title":"FixMsg include the msg value into the hash for the predictable address.\nDefault is false"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"salt":{"description":"Salt is an arbitrary value provided by the sender. Size can be 1 to 64.","type":"string","format":"byte"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2Response":{"type":"object","title":"MsgInstantiateContract2Response return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContractResponse":{"type":"object","title":"MsgInstantiateContractResponse return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgMigrateContract":{"type":"object","title":"MsgMigrateContract runs a code upgrade/ downgrade for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the new WASM code"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgMigrateContractResponse":{"description":"MsgMigrateContractResponse returns contract migration result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains same raw bytes returned as data from the wasm contract.\n(May be empty)"}}},"cosmwasm.wasm.v1.MsgPinCodes":{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the new WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgPinCodesResponse":{"description":"MsgPinCodesResponse defines the response structure for executing a\nMsgPinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses":{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse":{"description":"MsgRemoveCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgRemoveCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContract":{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"authority":{"description":"Authority is the address of the governance account.","type":"string"},"builder":{"type":"string","title":"Builder is the docker image used to build the code deterministically, used\nfor smart contract verification"},"code_hash":{"type":"string","format":"byte","title":"CodeHash is the SHA256 sum of the code outputted by builder, used for smart\ncontract verification"},"funds":{"type":"array","title":"Funds coins that are transferred from the authority account to the contract\non instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"source":{"type":"string","title":"Source is the URL where the code is hosted"},"unpin_code":{"description":"UnpinCode code on upload, optional. As default the uploaded contract is\npinned to cache.","type":"boolean"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse":{"description":"MsgStoreAndInstantiateContractResponse defines the response structure\nfor executing a MsgStoreAndInstantiateContract message.\n\nSince: 0.40","type":"object","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContract":{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse":{"description":"MsgStoreAndMigrateContractResponse defines the response structure\nfor executing a MsgStoreAndMigrateContract message.\n\nSince: 0.42","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreCode":{"type":"object","title":"MsgStoreCode submit Wasm code to the system","properties":{"instantiate_permission":{"title":"InstantiatePermission access control to apply on contract creation,\noptional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreCodeResponse":{"description":"MsgStoreCodeResponse returns store result data.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"}}},"cosmwasm.wasm.v1.MsgSudoContract":{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract as sudo"}}},"cosmwasm.wasm.v1.MsgSudoContractResponse":{"description":"MsgSudoContractResponse defines the response structure for executing a\nMsgSudoContract message.\n\nSince: 0.40","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgUnpinCodes":{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgUnpinCodesResponse":{"description":"MsgUnpinCodesResponse defines the response structure for executing a\nMsgUnpinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgUpdateAdmin":{"type":"object","title":"MsgUpdateAdmin sets a new admin for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_admin":{"type":"string","title":"NewAdmin address to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateAdminResponse":{"type":"object","title":"MsgUpdateAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateContractLabel":{"type":"object","title":"MsgUpdateContractLabel sets a new label for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_label":{"type":"string","title":"NewLabel string to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateContractLabelResponse":{"type":"object","title":"MsgUpdateContractLabelResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfig":{"type":"object","title":"MsgUpdateInstantiateConfig updates instantiate config for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the stored WASM code"},"new_instantiate_permission":{"title":"NewInstantiatePermission is the new access control","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse":{"type":"object","title":"MsgUpdateInstantiateConfigResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/wasm parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.Params":{"description":"Params defines the set of wasm parameters.","type":"object","properties":{"code_upload_access":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"instantiate_default_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.QueryAllContractStateResponse":{"type":"object","title":"QueryAllContractStateResponse is the response type for the\nQuery/AllContractState RPC method","properties":{"models":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.Model"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryBuildAddressResponse":{"description":"QueryBuildAddressResponse is the response type for the Query/BuildAddress RPC\nmethod.","type":"object","properties":{"address":{"type":"string","title":"Address is the contract address"}}},"cosmwasm.wasm.v1.QueryCodeInfoResponse":{"type":"object","title":"QueryCodeInfoResponse is the response type for the Query/CodeInfo RPC method","properties":{"checksum":{"type":"string","format":"byte"},"code_id":{"type":"string","format":"uint64"},"creator":{"type":"string"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.QueryCodeResponse":{"type":"object","title":"QueryCodeResponse is the response type for the Query/Code RPC method","properties":{"code_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"},"data":{"type":"string","format":"byte"}}},"cosmwasm.wasm.v1.QueryCodesResponse":{"type":"object","title":"QueryCodesResponse is the response type for the Query/Codes RPC method","properties":{"code_infos":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractHistoryResponse":{"type":"object","title":"QueryContractHistoryResponse is the response type for the\nQuery/ContractHistory RPC method","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryEntry"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractInfoResponse":{"type":"object","title":"QueryContractInfoResponse is the response type for the Query/ContractInfo RPC\nmethod","properties":{"address":{"type":"string","title":"address is the address of the contract"},"contract_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractInfo"}}},"cosmwasm.wasm.v1.QueryContractsByCodeResponse":{"type":"object","title":"QueryContractsByCodeResponse is the response type for the\nQuery/ContractsByCode RPC method","properties":{"contracts":{"type":"array","title":"contracts are a set of contract addresses","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractsByCreatorResponse":{"description":"QueryContractsByCreatorResponse is the response type for the\nQuery/ContractsByCreator RPC method.","type":"object","properties":{"contract_addresses":{"type":"array","title":"ContractAddresses result set","items":{"type":"string"}},"pagination":{"description":"Pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.QueryPinnedCodesResponse":{"type":"object","title":"QueryPinnedCodesResponse is the response type for the\nQuery/PinnedCodes RPC method","properties":{"code_ids":{"type":"array","items":{"type":"string","format":"uint64"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryRawContractStateResponse":{"type":"object","title":"QueryRawContractStateResponse is the response type for the\nQuery/RawContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the raw store data"}}},"cosmwasm.wasm.v1.QuerySmartContractStateResponse":{"type":"object","title":"QuerySmartContractStateResponse is the response type for the\nQuery/SmartContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the json data returned from the smart contract"}}},"cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse":{"description":"QueryWasmLimitsConfigResponse is the response type for the\nQuery/WasmLimitsConfig RPC method. It contains the JSON encoded limits for\nstatic validation of Wasm files.","type":"object","properties":{"config":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount":{"type":"object","title":"MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount","properties":{"connection_id":{"type":"string"},"ordering":{"$ref":"#/definitions/ibc.core.channel.v1.Order"},"owner":{"type":"string"},"version":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse":{"type":"object","title":"MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTx":{"type":"object","title":"MsgSendTx defines the payload for Msg/SendTx","properties":{"connection_id":{"type":"string"},"owner":{"type":"string"},"packet_data":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.InterchainAccountPacketData"},"relative_timeout":{"description":"Relative timeout timestamp provided will be added to the current block time during transaction execution.\nThe timeout timestamp must be non-zero.","type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse":{"type":"object","title":"MsgSendTxResponse defines the response for MsgSendTx","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/controller parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.controller.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the controller submodule.","type":"object","properties":{"controller_enabled":{"description":"controller_enabled enables or disables the controller submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse":{"description":"QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method.","type":"object","properties":{"address":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe":{"type":"object","title":"MsgModuleQuerySafe defines the payload for Msg/ModuleQuerySafe","properties":{"requests":{"description":"requests defines the module safe queries to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryRequest"}},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse":{"type":"object","title":"MsgModuleQuerySafeResponse defines the response for Msg/ModuleQuerySafe","properties":{"height":{"type":"string","format":"uint64","title":"height at which the responses were queried"},"responses":{"type":"array","title":"protobuf encoded responses for each query","items":{"type":"string","format":"byte"}}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/host parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.host.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the host submodule.","type":"object","properties":{"allow_messages":{"description":"allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain.","type":"array","items":{"type":"string"}},"host_enabled":{"description":"host_enabled enables or disables the host submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.host.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.QueryRequest":{"description":"QueryRequest defines the parameters for a particular query request\nby an interchain account.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"data defines the payload of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"},"path":{"type":"string","title":"path defines the path of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"}}},"ibc.applications.interchain_accounts.v1.InterchainAccountPacketData":{"description":"InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.","type":"object","properties":{"data":{"type":"string","format":"byte"},"memo":{"type":"string"},"type":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.Type"}}},"ibc.applications.interchain_accounts.v1.Type":{"description":"- TYPE_UNSPECIFIED: Default zero value enumeration\n - TYPE_EXECUTE_TX: Execute a transaction on an interchain accounts host chain","type":"string","title":"Type defines a classification of message issued from a controller chain to its associated interchain accounts\nhost","default":"TYPE_UNSPECIFIED","enum":["TYPE_UNSPECIFIED","TYPE_EXECUTE_TX"]},"ibc.applications.transfer.v1.Denom":{"description":"Denom holds the base denom of a Token and a trace of the chains it was sent through.","type":"object","properties":{"base":{"type":"string","title":"the base token denomination"},"trace":{"type":"array","title":"the trace of the token","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Hop"}}}},"ibc.applications.transfer.v1.Hop":{"type":"object","title":"Hop defines a port ID, channel ID pair specifying a unique \"hop\" in a trace","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.transfer.v1.MsgTransfer":{"type":"object","title":"MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between\nICS20 enabled chains. See ICS Spec here:\nhttps://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures","properties":{"encoding":{"type":"string","title":"optional encoding"},"memo":{"type":"string","title":"optional memo"},"receiver":{"type":"string","title":"the recipient address on the destination chain"},"sender":{"type":"string","title":"the sender address"},"source_channel":{"type":"string","title":"the channel by which the packet will be sent"},"source_port":{"type":"string","title":"the port on which the packet will be sent"},"timeout_height":{"description":"Timeout height relative to the current block height.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted.","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"description":"Timeout timestamp in absolute nanoseconds since unix epoch.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set.","type":"string","format":"uint64"},"token":{"title":"token to be transferred","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.applications.transfer.v1.MsgTransferResponse":{"description":"MsgTransferResponse defines the Msg/Transfer response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64","title":"sequence number of the transfer packet sent"}}},"ibc.applications.transfer.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"params":{"description":"params defines the transfer parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.transfer.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibc.applications.transfer.v1.Params":{"description":"Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false.","type":"object","properties":{"receive_enabled":{"description":"receive_enabled enables or disables all cross-chain token transfers to this\nchain.","type":"boolean"},"send_enabled":{"description":"send_enabled enables or disables all cross-chain token transfers from this\nchain.","type":"boolean"}}},"ibc.applications.transfer.v1.QueryDenomHashResponse":{"description":"QueryDenomHashResponse is the response type for the Query/DenomHash RPC\nmethod.","type":"object","properties":{"hash":{"description":"hash (in hex format) of the denomination trace information.","type":"string"}}},"ibc.applications.transfer.v1.QueryDenomResponse":{"description":"QueryDenomResponse is the response type for the Query/Denom RPC\nmethod.","type":"object","properties":{"denom":{"description":"denom returns the requested denomination.","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}}},"ibc.applications.transfer.v1.QueryDenomsResponse":{"description":"QueryDenomsResponse is the response type for the Query/Denoms RPC\nmethod.","type":"object","properties":{"denoms":{"description":"denoms returns all denominations.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.applications.transfer.v1.QueryEscrowAddressResponse":{"description":"QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.","type":"object","properties":{"escrow_address":{"type":"string","title":"the escrow account address"}}},"ibc.applications.transfer.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"}}},"ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse":{"description":"QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.core.channel.v1.Channel":{"description":"Channel defines pipeline for exactly-once packet delivery between specific\nmodules on separate blockchains, which has at least one end capable of\nsending packets and one end capable of receiving packets.","type":"object","properties":{"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.Counterparty":{"type":"object","title":"Counterparty defines a channel end counterparty","properties":{"channel_id":{"type":"string","title":"channel end on the counterparty chain"},"port_id":{"description":"port on the counterparty chain which owns the other end of the channel.","type":"string"}}},"ibc.core.channel.v1.IdentifiedChannel":{"description":"IdentifiedChannel defines a channel with additional port and channel\nidentifier fields.","type":"object","properties":{"channel_id":{"type":"string","title":"channel identifier"},"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"port_id":{"type":"string","title":"port identifier"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.MsgAcknowledgement":{"type":"object","title":"MsgAcknowledgement receives incoming IBC acknowledgement","properties":{"acknowledgement":{"type":"string","format":"byte"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgChannelCloseConfirm":{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseConfirmResponse":{"description":"MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelCloseInit":{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseInitResponse":{"description":"MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenAck":{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"counterparty_channel_id":{"type":"string"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenAckResponse":{"description":"MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenConfirm":{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenConfirmResponse":{"description":"MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenInit":{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","type":"object","properties":{"channel":{"$ref":"#/definitions/ibc.core.channel.v1.Channel"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenInitResponse":{"description":"MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTry":{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","type":"object","properties":{"channel":{"description":"NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC.","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"previous_channel_id":{"description":"Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC.","type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTryResponse":{"description":"MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacket":{"type":"object","title":"MsgRecvPacket receives incoming IBC packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnClose":{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","type":"object","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_close":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnCloseResponse":{"description":"MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.Order":{"description":"- ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\nwhich they were sent.\n - ORDER_ORDERED: packets are delivered exactly in the order which they were sent","type":"string","title":"Order defines if a channel is ORDERED or UNORDERED","default":"ORDER_NONE_UNSPECIFIED","enum":["ORDER_NONE_UNSPECIFIED","ORDER_UNORDERED","ORDER_ORDERED"]},"ibc.core.channel.v1.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"data":{"type":"string","format":"byte","title":"actual opaque bytes transferred directly to the application module"},"destination_channel":{"description":"identifies the channel end on the receiving chain.","type":"string"},"destination_port":{"description":"identifies the port on the receiving chain.","type":"string"},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_channel":{"description":"identifies the channel end on the sending chain.","type":"string"},"source_port":{"description":"identifies the port on the sending chain.","type":"string"},"timeout_height":{"title":"block height after which the packet times out","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"type":"string","format":"uint64","title":"block timestamp (in nanoseconds) after which the packet times out"}}},"ibc.core.channel.v1.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"channel_id":{"description":"channel unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"port_id":{"description":"channel port identifier.","type":"string"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v1.QueryChannelClientStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelConsensusStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelResponse":{"description":"QueryChannelResponse is the response type for the Query/Channel RPC method.\nBesides the Channel end, it includes a proof and the height from which the\nproof was retrieved.","type":"object","properties":{"channel":{"title":"channel associated with the request identifiers","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelsResponse":{"description":"QueryChannelsResponse is the response type for the Query/Channels RPC method.","type":"object","properties":{"channels":{"description":"list of stored channels of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryConnectionChannelsResponse":{"type":"object","title":"QueryConnectionChannelsResponse is the Response type for the\nQuery/QueryConnectionChannels RPC method","properties":{"channels":{"description":"list of channels associated with a connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryNextSequenceReceiveResponse":{"type":"object","title":"QuerySequenceResponse is the response type for the\nQuery/QueryNextSequenceReceiveResponse RPC method","properties":{"next_sequence_receive":{"type":"string","format":"uint64","title":"next sequence receive number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the request type for the\nQuery/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementResponse":{"type":"object","title":"QueryPacketAcknowledgementResponse defines the client query response for a\npacket which also includes a proof and the height from which the\nproof was retrieved","properties":{"acknowledgement":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketCommitmentResponse":{"type":"object","title":"QueryPacketCommitmentResponse defines the client query response for a packet\nwhich also includes a proof and the height from which the proof was\nretrieved","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketCommitmentsResponse":{"type":"object","title":"QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method","properties":{"commitments":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketReceiptResponse":{"type":"object","title":"QueryPacketReceiptResponse defines the client query response for a packet\nreceipt which also includes a proof, and the height from which the proof was\nretrieved","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v1.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.channel.v1.State":{"description":"State defines if a channel is in one of the following states:\nCLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A channel has just started the opening handshake.\n - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n - STATE_OPEN: A channel has completed the handshake. Open channels are\nready to send and receive packets.\n - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\npackets.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN","STATE_CLOSED"]},"ibc.core.channel.v2.Acknowledgement":{"description":"Acknowledgement contains a list of all ack results associated with a single packet.\nIn the case of a successful receive, the acknowledgement will contain an app acknowledgement\nfor each application that received a payload in the same order that the payloads were sent\nin the packet.\nIf the receive is not successful, the acknowledgement will contain a single app acknowledgment\nwhich will be a constant error acknowledgment as defined by the IBC v2 protocol.","type":"object","properties":{"app_acknowledgements":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.channel.v2.MsgAcknowledgement":{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","type":"object","properties":{"acknowledgement":{"$ref":"#/definitions/ibc.core.channel.v2.Acknowledgement"},"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgRecvPacket":{"description":"MsgRecvPacket receives an incoming IBC packet.","type":"object","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgSendPacket":{"description":"MsgSendPacket sends an outgoing IBC packet.","type":"object","properties":{"payloads":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"signer":{"type":"string"},"source_client":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgSendPacketResponse":{"description":"MsgSendPacketResponse defines the Msg/SendPacket response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"destination_client":{"description":"identifies the receiving client on the receiving chain.","type":"string"},"payloads":{"description":"a list of payloads, each one for a specific application.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_client":{"description":"identifies the sending client on the sending chain.","type":"string"},"timeout_timestamp":{"description":"timeout timestamp in seconds after which the packet times out.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"client_id":{"description":"client unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.Payload":{"type":"object","title":"Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes)","properties":{"destination_port":{"description":"specifies the destination port of the packet.","type":"string"},"encoding":{"description":"the encoding used for the provided value.","type":"string"},"source_port":{"description":"specifies the source port of the packet.","type":"string"},"value":{"description":"the raw bytes for the payload.","type":"string","format":"byte"},"version":{"description":"version of the specified application.","type":"string"}}},"ibc.core.channel.v2.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementResponse":{"description":"QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method.","type":"object","properties":{"acknowledgement":{"type":"string","format":"byte","title":"acknowledgement associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketCommitmentResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketCommitmentsResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitments":{"description":"collection of packet commitments for the requested channel identifier.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"description":"query block height.","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"description":"pagination response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketReceiptResponse":{"description":"QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method.","type":"object","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence or absence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v2.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.client.v1.ConsensusStateWithHeight":{"description":"ConsensusStateWithHeight defines a consensus state with an additional height\nfield.","type":"object","properties":{"consensus_state":{"title":"consensus state","$ref":"#/definitions/google.protobuf.Any"},"height":{"title":"consensus state height","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.Height":{"description":"Normally the RevisionHeight is incremented at each height while keeping\nRevisionNumber the same. However some consensus algorithms may choose to\nreset the height in certain conditions e.g. hard forks, state-machine\nbreaking changes In these cases, the RevisionNumber is incremented so that\nheight continues to be monitonically increasing even as the RevisionHeight\ngets reset\n\nPlease note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag.\nThis enforces the Go json marshaller to always emit zero values for both revision_number and revision_height.","type":"object","title":"Height is a monotonically increasing data type\nthat can be compared against another Height for the purposes of updating and\nfreezing clients","properties":{"revision_height":{"type":"string","format":"uint64","title":"the height within the given revision"},"revision_number":{"type":"string","format":"uint64","title":"the revision that the client is currently on"}}},"ibc.core.client.v1.IdentifiedClientState":{"description":"IdentifiedClientState defines a client state with an additional client\nidentifier field.","type":"object","properties":{"client_id":{"type":"string","title":"client identifier"},"client_state":{"title":"client state","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgCreateClient":{"type":"object","title":"MsgCreateClient defines a message to create an IBC client","properties":{"client_state":{"title":"light client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"description":"consensus state associated with the client that corresponds to a given\nheight.","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgCreateClientResponse":{"description":"MsgCreateClientResponse defines the Msg/CreateClient response type.","type":"object","properties":{"client_id":{"type":"string"}}},"ibc.core.client.v1.MsgDeleteClientCreator":{"type":"object","title":"MsgDeleteClientCreator defines a message to delete the client creator of a client","properties":{"client_id":{"type":"string","title":"client identifier"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgDeleteClientCreatorResponse":{"description":"MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type.","type":"object"},"ibc.core.client.v1.MsgIBCSoftwareUpgrade":{"type":"object","title":"MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal","properties":{"plan":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"},"signer":{"type":"string","title":"signer address"},"upgraded_client_state":{"description":"An UpgradedClientState must be provided to perform an IBC breaking upgrade.\nThis will make the chain commit to the correct upgraded (self) client state\nbefore the upgrade occurs, so that connecting chains can verify that the\nnew upgraded client is valid by verifying a proof on the previous version\nof the chain. This will allow IBC connections to persist smoothly across\nplanned chain upgrades. Correspondingly, the UpgradedClientState field has been\ndeprecated in the Cosmos SDK to allow for this logic to exist solely in\nthe 02-client module.","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse":{"description":"MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type.","type":"object"},"ibc.core.client.v1.MsgRecoverClient":{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"subject_client_id":{"type":"string","title":"the client identifier for the client to be updated if the proposal passes"},"substitute_client_id":{"type":"string","title":"the substitute client identifier for the client which will replace the subject\nclient"}}},"ibc.core.client.v1.MsgRecoverClientResponse":{"description":"MsgRecoverClientResponse defines the Msg/RecoverClient response type.","type":"object"},"ibc.core.client.v1.MsgSubmitMisbehaviour":{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"misbehaviour":{"title":"misbehaviour used for freezing the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgSubmitMisbehaviourResponse":{"description":"MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response\ntype.","type":"object"},"ibc.core.client.v1.MsgUpdateClient":{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_message":{"title":"client message to update the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateClientResponse":{"description":"MsgUpdateClientResponse defines the Msg/UpdateClient response type.","type":"object"},"ibc.core.client.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","type":"object","properties":{"params":{"description":"params defines the client parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.client.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.client.v1.MsgUpgradeClient":{"type":"object","title":"MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client\nstate","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_state":{"title":"upgraded client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"title":"upgraded consensus state, only contains enough information to serve as a\nbasis of trust in update logic","$ref":"#/definitions/google.protobuf.Any"},"proof_upgrade_client":{"type":"string","format":"byte","title":"proof that old chain committed to new client"},"proof_upgrade_consensus_state":{"type":"string","format":"byte","title":"proof that old chain committed to new consensus state"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpgradeClientResponse":{"description":"MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.","type":"object"},"ibc.core.client.v1.Params":{"description":"Params defines the set of IBC light client parameters.","type":"object","properties":{"allowed_clients":{"description":"allowed_clients defines the list of allowed client state types which can be created\nand interacted with. If a client type is removed from the allowed clients list, usage\nof this client will be disabled until it is added again to the list.","type":"array","items":{"type":"string"}}}},"ibc.core.client.v1.QueryClientCreatorResponse":{"description":"QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC\nmethod.","type":"object","properties":{"creator":{"type":"string","title":"creator of the client"}}},"ibc.core.client.v1.QueryClientParamsResponse":{"description":"QueryClientParamsResponse is the response type for the Query/ClientParams RPC\nmethod.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.client.v1.Params"}}},"ibc.core.client.v1.QueryClientStateResponse":{"description":"QueryClientStateResponse is the response type for the Query/ClientState RPC\nmethod. Besides the client state, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryClientStatesResponse":{"description":"QueryClientStatesResponse is the response type for the Query/ClientStates RPC\nmethod.","type":"object","properties":{"client_states":{"description":"list of stored ClientStates of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryClientStatusResponse":{"description":"QueryClientStatusResponse is the response type for the Query/ClientStatus RPC\nmethod. It returns the current status of the IBC client.","type":"object","properties":{"status":{"type":"string"}}},"ibc.core.client.v1.QueryConsensusStateHeightsResponse":{"type":"object","title":"QueryConsensusStateHeightsResponse is the response type for the\nQuery/ConsensusStateHeights RPC method","properties":{"consensus_state_heights":{"type":"array","title":"consensus state heights","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.Height"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryConsensusStateResponse":{"type":"object","title":"QueryConsensusStateResponse is the response type for the Query/ConsensusState\nRPC method","properties":{"consensus_state":{"title":"consensus state associated with the client identifier at the given height","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryConsensusStatesResponse":{"type":"object","title":"QueryConsensusStatesResponse is the response type for the\nQuery/ConsensusStates RPC method","properties":{"consensus_states":{"type":"array","title":"consensus states associated with the identifier","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.ConsensusStateWithHeight"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryUpgradedClientStateResponse":{"description":"QueryUpgradedClientStateResponse is the response type for the\nQuery/UpgradedClientState RPC method.","type":"object","properties":{"upgraded_client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the\nQuery/UpgradedConsensusState RPC method.","type":"object","properties":{"upgraded_consensus_state":{"title":"Consensus state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryVerifyMembershipRequest":{"type":"object","title":"QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method","properties":{"block_delay":{"type":"string","format":"uint64","title":"optional block delay"},"client_id":{"description":"client unique identifier.","type":"string"},"merkle_path":{"description":"the commitment key path.","$ref":"#/definitions/ibc.core.commitment.v2.MerklePath"},"proof":{"description":"the proof to be verified by the client.","type":"string","format":"byte"},"proof_height":{"description":"the height of the commitment root at which the proof is verified.","$ref":"#/definitions/ibc.core.client.v1.Height"},"time_delay":{"type":"string","format":"uint64","title":"optional time delay"},"value":{"description":"the value which is proven.","type":"string","format":"byte"}}},"ibc.core.client.v1.QueryVerifyMembershipResponse":{"type":"object","title":"QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method","properties":{"success":{"description":"boolean indicating success or failure of proof verification.","type":"boolean"}}},"ibc.core.client.v2.Config":{"type":"object","title":"Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages\nfor a given client.\nIf it is set, then only relayers in the allow list can send v2 messages\nIf it is not set, then the client allows permissionless relaying of v2 messages","properties":{"allowed_relayers":{"type":"array","title":"allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client","items":{"type":"string"}}}},"ibc.core.client.v2.CounterpartyInfo":{"type":"object","title":"CounterpartyInfo defines the key that the counterparty will use to message our client","properties":{"client_id":{"type":"string","title":"client identifier is the identifier used to send packet messages to our client"},"merkle_prefix":{"type":"array","title":"merkle prefix key is the prefix that ics provable keys are stored under","items":{"type":"string","format":"byte"}}}},"ibc.core.client.v2.MsgRegisterCounterparty":{"type":"object","title":"MsgRegisterCounterparty defines a message to register a counterparty on a client","properties":{"client_id":{"type":"string","title":"client identifier"},"counterparty_client_id":{"type":"string","title":"counterparty client identifier"},"counterparty_merkle_prefix":{"type":"array","title":"counterparty merkle prefix","items":{"type":"string","format":"byte"}},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgRegisterCounterpartyResponse":{"description":"MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type.","type":"object"},"ibc.core.client.v2.MsgUpdateClientConfig":{"type":"object","title":"MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client","properties":{"client_id":{"type":"string","title":"client identifier"},"config":{"description":"NOTE: All fields in the config must be supplied.","title":"allowed relayers","$ref":"#/definitions/ibc.core.client.v2.Config"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgUpdateClientConfigResponse":{"description":"MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type.","type":"object"},"ibc.core.client.v2.QueryConfigResponse":{"type":"object","title":"QueryConfigResponse is the response type for the Query/Config RPC method","properties":{"config":{"$ref":"#/definitions/ibc.core.client.v2.Config"}}},"ibc.core.client.v2.QueryCounterpartyInfoResponse":{"description":"QueryCounterpartyInfoResponse is the response type for the\nQuery/CounterpartyInfo RPC method.","type":"object","properties":{"counterparty_info":{"$ref":"#/definitions/ibc.core.client.v2.CounterpartyInfo"}}},"ibc.core.commitment.v1.MerklePrefix":{"type":"object","title":"MerklePrefix is merkle path prefixed to the key.\nThe constructed key from the Path and the key will be append(Path.KeyPath,\nappend(Path.KeyPrefix, key...))","properties":{"key_prefix":{"type":"string","format":"byte"}}},"ibc.core.commitment.v2.MerklePath":{"description":"MerklePath is the path used to verify commitment proofs, which can be an\narbitrary structured object (defined by a commitment type).\nICS-23 verification supports membership proofs for nested merkle trees.\nThe ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix.\nThe IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash\nstored in the consensus state of the client.\nEach element of the path represents the key of a merkle tree from the root to the leaf.\nThe elements of the path before the final element must be the path to the tree that contains\nthe ICS24 provable store. Thus, it should remain constant for all ICS24 proofs.\nThe final element of the path is the key of the leaf in the ICS24 provable store,\nThus IBC core will append the ICS24 path to the final element of the MerklePath\nstored in the counterparty to create the full path to the leaf for proof verification.\nExamples:\nCosmos SDK:\nThe Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes\nare hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"ibc\", \"\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"ibc\", \"{packetCommitmentPath}\"] which will then be used for final verification.\nEthereum:\nThe Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed\nby the smart contract state. Each smart contract has a specific prefix reserved within the global trie.\nThus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie.\nSince there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"IBCCoreContractAddressStoragePrefix\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"IBCCoreContractAddressStoragePrefix{packetCommitmentPath}\"] which will then be used for final\nverification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the\nconsensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24\nprovable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified\nby the client against the root hash in the client's consensus state.","type":"object","properties":{"key_path":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.connection.v1.ConnectionEnd":{"description":"ConnectionEnd defines a stateful object on a chain connected to another\nseparate one.\nNOTE: there must only be 2 defined ConnectionEnds to establish\na connection between two chains.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period that must pass before a consensus state can be used for\npacket-verification NOTE: delay period logic is only implemented by some\nclients.","type":"string","format":"uint64"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"description":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.Counterparty":{"description":"Counterparty defines the counterparty chain associated with a connection end.","type":"object","properties":{"client_id":{"description":"identifies the client on the counterparty chain associated with a given\nconnection.","type":"string"},"connection_id":{"description":"identifies the connection end on the counterparty chain associated with a\ngiven connection.","type":"string"},"prefix":{"description":"commitment merkle prefix of the counterparty chain.","$ref":"#/definitions/ibc.core.commitment.v1.MerklePrefix"}}},"ibc.core.connection.v1.IdentifiedConnection":{"description":"IdentifiedConnection defines a connection with additional connection\nidentifier field.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period associated with this connection.","type":"string","format":"uint64"},"id":{"description":"connection identifier.","type":"string"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"type":"array","title":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.MsgConnectionOpenAck":{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","type":"object","properties":{"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"connection_id":{"type":"string"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty_connection_id":{"type":"string"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain B: `UNINITIALIZED -\u003e\nTRYOPEN`"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenAckResponse":{"description":"MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenConfirm":{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","type":"object","properties":{"connection_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte","title":"proof for the change of the connection state on Chain A: `INIT -\u003e OPEN`"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenConfirmResponse":{"description":"MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm\nresponse type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenInit":{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","type":"object","properties":{"client_id":{"type":"string"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"type":"string","format":"uint64"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenInitResponse":{"description":"MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response\ntype.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenTry":{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","type":"object","properties":{"client_id":{"type":"string"},"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"counterparty_versions":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}},"delay_period":{"type":"string","format":"uint64"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"previous_connection_id":{"description":"Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC.","type":"string"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain A: `UNINITIALIZED -\u003e\nINIT`"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenTryResponse":{"description":"MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type.","type":"object"},"ibc.core.connection.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","type":"object","properties":{"params":{"description":"params defines the connection parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.connection.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.connection.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.connection.v1.Params":{"description":"Params defines the set of Connection parameters.","type":"object","properties":{"max_expected_time_per_block":{"description":"maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the\nlargest amount of time that the chain might reasonably take to produce the next block under normal operating\nconditions. A safe choice is 3-5x the expected time per block.","type":"string","format":"uint64"}}},"ibc.core.connection.v1.QueryClientConnectionsResponse":{"type":"object","title":"QueryClientConnectionsResponse is the response type for the\nQuery/ClientConnections RPC method","properties":{"connection_paths":{"description":"slice of all the connection paths associated with a client.","type":"array","items":{"type":"string"}},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was generated","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionClientStateResponse":{"type":"object","title":"QueryConnectionClientStateResponse is the response type for the\nQuery/ConnectionClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionConsensusStateResponse":{"type":"object","title":"QueryConnectionConsensusStateResponse is the response type for the\nQuery/ConnectionConsensusState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionParamsResponse":{"description":"QueryConnectionParamsResponse is the response type for the Query/ConnectionParams RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.connection.v1.Params"}}},"ibc.core.connection.v1.QueryConnectionResponse":{"description":"QueryConnectionResponse is the response type for the Query/Connection RPC\nmethod. Besides the connection end, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"connection":{"title":"connection associated with the request identifier","$ref":"#/definitions/ibc.core.connection.v1.ConnectionEnd"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionsResponse":{"description":"QueryConnectionsResponse is the response type for the Query/Connections RPC\nmethod.","type":"object","properties":{"connections":{"description":"list of stored connections of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.IdentifiedConnection"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.connection.v1.State":{"description":"State defines if a connection is in one of the following states:\nINIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A connection end has just started the opening handshake.\n - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\nchain.\n - STATE_OPEN: A connection end has completed the handshake.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN"]},"ibc.core.connection.v1.Version":{"description":"Version defines the versioning scheme used to negotiate the IBC version in\nthe connection handshake.","type":"object","properties":{"features":{"type":"array","title":"list of features compatible with the specified identifier","items":{"type":"string"}},"identifier":{"type":"string","title":"unique version identifier"}}},"ibc.lightclients.wasm.v1.MsgMigrateContract":{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the new wasm byte code for the contract"},"client_id":{"type":"string","title":"the client id of the contract"},"msg":{"type":"string","format":"byte","title":"the json encoded message to be passed to the contract on migration"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgMigrateContractResponse":{"type":"object","title":"MsgMigrateContractResponse defines the response type for the MigrateContract rpc"},"ibc.lightclients.wasm.v1.MsgRemoveChecksum":{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash to be removed from the store"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse":{"type":"object","title":"MsgStoreChecksumResponse defines the response type for the StoreCode rpc"},"ibc.lightclients.wasm.v1.MsgStoreCode":{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"wasm_byte_code":{"type":"string","format":"byte","title":"wasm byte code of light client contract. It can be raw or gzip compressed"}}},"ibc.lightclients.wasm.v1.MsgStoreCodeResponse":{"type":"object","title":"MsgStoreCodeResponse defines the response type for the StoreCode rpc","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the stored code"}}},"ibc.lightclients.wasm.v1.QueryChecksumsResponse":{"description":"QueryChecksumsResponse is the response type for the Query/Checksums RPC method.","type":"object","properties":{"checksums":{"description":"checksums is a list of the hex encoded checksums of all wasm codes stored.","type":"array","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.lightclients.wasm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC method.","type":"object","properties":{"data":{"type":"string","format":"byte"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.AuditPeerObservation":{"type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the epoch.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.AuditReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"}}},"lumera.audit.v1.AuditSelfReport":{"type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.EpochAnchor":{"description":"EpochAnchor is a minimal per-epoch on-chain anchor that freezes the deterministic seed\nand the eligible supernode sets used for deterministic selection off-chain.","type":"object","properties":{"active_set_commitment":{"type":"string","format":"byte"},"active_supernode_accounts":{"description":"active_supernode_accounts is the sorted list of ACTIVE supernodes at epoch start.","type":"array","items":{"type":"string"}},"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"params_commitment":{"description":"params_commitment is a hash commitment to Params (with defaults) at epoch start.","type":"string","format":"byte"},"seed":{"description":"seed is a fixed 32-byte value derived at epoch start (domain-separated).","type":"string","format":"byte"},"target_supernode_accounts":{"description":"target_supernode_accounts is the sorted list of eligible targets at epoch start:\nACTIVE + POSTPONED supernodes.","type":"array","items":{"type":"string"}},"targets_set_commitment":{"type":"string","format":"byte"}}},"lumera.audit.v1.Evidence":{"description":"Evidence is a stable outer record that stores evidence about an audited subject.\nType-specific fields are encoded into the `metadata` bytes field.","type":"object","properties":{"action_id":{"description":"action_id optionally links this evidence to a specific action.","type":"string"},"evidence_id":{"description":"evidence_id is a chain-assigned unique identifier.","type":"string","format":"uint64"},"evidence_type":{"description":"evidence_type is a stable discriminator used to interpret metadata.","$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is protobuf-binary bytes of a type-specific Evidence metadata message.","type":"string","format":"byte"},"reported_height":{"description":"reported_height is the block height when the evidence was submitted.","type":"string","format":"uint64"},"reporter_address":{"description":"reporter_address is the submitter of the evidence.","type":"string"},"subject_address":{"description":"subject_address is the audited subject (e.g. supernode-related actor).","type":"string"}}},"lumera.audit.v1.EvidenceType":{"description":" - EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE: action finalization rejected due to an invalid signature / signature-derived data.\n - EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: action finalization rejected because the attempted finalizer is not in the top-10 supernodes.\n - EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE: storage challenge failure evidence submitted by the deterministic challenger.","type":"string","default":"EVIDENCE_TYPE_UNSPECIFIED","enum":["EVIDENCE_TYPE_UNSPECIFIED","EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE","EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10","EVIDENCE_TYPE_ACTION_EXPIRED","EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE"]},"lumera.audit.v1.MsgSubmitAuditReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"}}},"lumera.audit.v1.MsgSubmitAuditReportResponse":{"type":"object"},"lumera.audit.v1.MsgSubmitEvidence":{"type":"object","properties":{"action_id":{"type":"string"},"creator":{"type":"string"},"evidence_type":{"$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is JSON for the type-specific Evidence metadata message.\nThe chain stores protobuf-binary bytes derived from this JSON.","type":"string"},"subject_address":{"type":"string"}}},"lumera.audit.v1.MsgSubmitEvidenceResponse":{"type":"object","properties":{"evidence_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"action_finalization_not_in_top10_consecutive_epochs":{"description":"action_finalization_not_in_top10_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_not_in_top10_evidences_per_epoch":{"description":"action_finalization_not_in_top10_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_recovery_epochs":{"description":"action_finalization_recovery_epochs is the number of epochs to wait before considering recovery.","type":"integer","format":"int64"},"action_finalization_recovery_max_total_bad_evidences":{"description":"action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad\naction-finalization evidences in the recovery epoch-span for auto-recovery to occur.\nRecovery happens ONLY IF total_bad \u003c this value.","type":"integer","format":"int64"},"action_finalization_signature_failure_consecutive_epochs":{"description":"action_finalization_signature_failure_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"action_finalization_signature_failure_evidences_per_epoch":{"description":"action_finalization_signature_failure_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"consecutive_epochs_to_postpone":{"description":"Number of consecutive epochs a required port must be reported CLOSED by peers\nat or above peer_port_postpone_threshold_percent before postponing the supernode.","type":"integer","format":"int64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_zero_height":{"description":"epoch_zero_height defines the reference chain height at which epoch_id = 0 starts.\nThis makes epoch boundaries deterministic from genesis without needing to query state.","type":"string","format":"uint64"},"keep_last_epoch_entries":{"description":"How many completed epochs to keep in state for epoch-scoped data like AuditReport\nand related indices. Pruning runs at epoch end.","type":"string","format":"uint64"},"max_probe_targets_per_epoch":{"type":"integer","format":"int64"},"min_cpu_free_percent":{"description":"Minimum required host free capacity (self reported).\nfree% = 100 - usage%\nA usage% of 0 is treated as \"unknown\" (no action).","type":"integer","format":"int64"},"min_disk_free_percent":{"type":"integer","format":"int64"},"min_mem_free_percent":{"type":"integer","format":"int64"},"min_probe_targets_per_epoch":{"type":"integer","format":"int64"},"peer_port_postpone_threshold_percent":{"description":"Minimum percent (1-100) of peer reports that must report a required port as CLOSED\nfor the port to be treated as CLOSED for postponement purposes.\n\n100 means unanimous.\nExample: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%).","type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"sc_affirmation_timeout_ms":{"type":"string","format":"uint64"},"sc_candidate_keys_lookback_epochs":{"type":"integer","format":"int64"},"sc_challengers_per_epoch":{"type":"integer","format":"int64"},"sc_enabled":{"description":"Storage Challenge (SC) params.","type":"boolean"},"sc_evidence_max_bytes":{"type":"string","format":"uint64"},"sc_evidence_submitter_must_be_challenger":{"type":"boolean"},"sc_files_per_challenger":{"type":"integer","format":"int64"},"sc_max_slice_bytes":{"type":"string","format":"uint64"},"sc_min_slice_bytes":{"type":"string","format":"uint64"},"sc_observer_threshold":{"type":"integer","format":"int64"},"sc_replica_count":{"type":"integer","format":"int64"},"sc_response_timeout_ms":{"type":"string","format":"uint64"},"sc_start_jitter_ms":{"type":"string","format":"uint64"}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.QueryAssignedTargetsResponse":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"target_supernode_accounts":{"type":"array","items":{"type":"string"}}}},"lumera.audit.v1.QueryAuditReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.AuditReport"}}},"lumera.audit.v1.QueryAuditReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditReport"}}}},"lumera.audit.v1.QueryCurrentEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryCurrentEpochResponse":{"type":"object","properties":{"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryEvidenceByActionResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryEvidenceByIdResponse":{"type":"object","properties":{"evidence":{"$ref":"#/definitions/lumera.audit.v1.Evidence"}}},"lumera.audit.v1.QueryEvidenceBySubjectResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QuerySelfReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SelfReport"}}}},"lumera.audit.v1.QuerySupernodeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SupernodeReport"}}}},"lumera.audit.v1.SelfReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"}}},"lumera.audit.v1.SupernodeReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"reason":{"description":"reason is an optional string describing why the state transition occurred.\nIt is currently set only for transitions into POSTPONED.","type":"string"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"tendermint.abci.CheckTxType":{"type":"string","default":"NEW","enum":["NEW","RECHECK"]},"tendermint.abci.CommitInfo":{"type":"object","properties":{"round":{"type":"integer","format":"int32"},"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.VoteInfo"}}}},"tendermint.abci.Event":{"description":"Event allows application developers to attach additional information to\nResponseFinalizeBlock and ResponseCheckTx.\nLater, transactions may be queried using these events.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.EventAttribute"}},"type":{"type":"string"}}},"tendermint.abci.EventAttribute":{"description":"EventAttribute is a single key-value pair, associated with an event.","type":"object","properties":{"index":{"type":"boolean","title":"nondeterministic"},"key":{"type":"string"},"value":{"type":"string"}}},"tendermint.abci.ExecTxResult":{"description":"ExecTxResult contains results of executing one individual transaction.\n\n* Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","title":"nondeterministic","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ExtendedCommitInfo":{"description":"ExtendedCommitInfo is similar to CommitInfo except that it is only used in\nthe PrepareProposal request such that CometBFT can provide vote extensions\nto the application.","type":"object","properties":{"round":{"description":"The round at which the block proposer decided in the previous height.","type":"integer","format":"int32"},"votes":{"description":"List of validators' addresses in the last validator set with their voting\ninformation, including vote extensions.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExtendedVoteInfo"}}}},"tendermint.abci.ExtendedVoteInfo":{"type":"object","properties":{"block_id_flag":{"title":"block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all","$ref":"#/definitions/tendermint.types.BlockIDFlag"},"extension_signature":{"type":"string","format":"byte","title":"Vote extension signature created by CometBFT"},"validator":{"description":"The validator that sent the vote.","$ref":"#/definitions/tendermint.abci.Validator"},"vote_extension":{"description":"Non-deterministic extension provided by the sending validator's application.","type":"string","format":"byte"}}},"tendermint.abci.Misbehavior":{"type":"object","properties":{"height":{"type":"string","format":"int64","title":"The height when the offense occurred"},"time":{"type":"string","format":"date-time","title":"The corresponding time where the offense occurred"},"total_voting_power":{"type":"string","format":"int64","title":"Total voting power of the validator set in case the ABCI application does\nnot store historical validators.\nhttps://github.com/tendermint/tendermint/issues/4581"},"type":{"$ref":"#/definitions/tendermint.abci.MisbehaviorType"},"validator":{"title":"The offending validator","$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.abci.MisbehaviorType":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","DUPLICATE_VOTE","LIGHT_CLIENT_ATTACK"]},"tendermint.abci.RequestApplySnapshotChunk":{"type":"object","title":"Applies a snapshot chunk","properties":{"chunk":{"type":"string","format":"byte"},"index":{"type":"integer","format":"int64"},"sender":{"type":"string"}}},"tendermint.abci.RequestCheckTx":{"type":"object","properties":{"tx":{"type":"string","format":"byte"},"type":{"$ref":"#/definitions/tendermint.abci.CheckTxType"}}},"tendermint.abci.RequestCommit":{"type":"object"},"tendermint.abci.RequestEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.RequestExtendVote":{"type":"object","title":"Extends a vote with application-injected data","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this vote may be referring to"},"height":{"type":"string","format":"int64","title":"the height of the extended vote"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time","title":"info of the block that this vote may be referring to"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFinalizeBlock":{"type":"object","properties":{"decided_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"hash":{"description":"hash is the merkle root hash of the fields of the decided block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"proposer_address is the address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFlush":{"type":"object"},"tendermint.abci.RequestInfo":{"type":"object","properties":{"abci_version":{"type":"string"},"block_version":{"type":"string","format":"uint64"},"p2p_version":{"type":"string","format":"uint64"},"version":{"type":"string"}}},"tendermint.abci.RequestInitChain":{"type":"object","properties":{"app_state_bytes":{"type":"string","format":"byte"},"chain_id":{"type":"string"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"initial_height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.RequestListSnapshots":{"type":"object","title":"lists available snapshots"},"tendermint.abci.RequestLoadSnapshotChunk":{"type":"object","title":"loads a snapshot chunk","properties":{"chunk":{"type":"integer","format":"int64"},"format":{"type":"integer","format":"int64"},"height":{"type":"string","format":"uint64"}}},"tendermint.abci.RequestOfferSnapshot":{"type":"object","title":"offers a snapshot to the application","properties":{"app_hash":{"type":"string","format":"byte","title":"light client-verified app hash for snapshot height"},"snapshot":{"title":"snapshot offered by peers","$ref":"#/definitions/tendermint.abci.Snapshot"}}},"tendermint.abci.RequestPrepareProposal":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"local_last_commit":{"$ref":"#/definitions/tendermint.abci.ExtendedCommitInfo"},"max_tx_bytes":{"description":"the modified transactions cannot exceed this size.","type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"address of the public key of the validator proposing the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"description":"txs is an array of transactions that will be included in a block,\nsent to the app for possible modifications.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestProcessProposal":{"type":"object","properties":{"hash":{"description":"hash is the merkle root hash of the fields of the proposed block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestQuery":{"type":"object","properties":{"data":{"type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"path":{"type":"string"},"prove":{"type":"boolean"}}},"tendermint.abci.RequestVerifyVoteExtension":{"type":"object","title":"Verify the vote extension","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this received vote corresponds to"},"height":{"type":"string","format":"int64"},"validator_address":{"type":"string","format":"byte","title":"the validator that signed the vote extension"},"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseApplySnapshotChunk":{"type":"object","properties":{"refetch_chunks":{"type":"array","title":"Chunks to refetch and reapply","items":{"type":"integer","format":"int64"}},"reject_senders":{"type":"array","title":"Chunk senders to reject and ban","items":{"type":"string"}},"result":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk.Result"}}},"tendermint.abci.ResponseApplySnapshotChunk.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Chunk successfully accepted\n - ABORT: Abort all snapshot restoration\n - RETRY: Retry chunk (combine with refetch and reject)\n - RETRY_SNAPSHOT: Retry snapshot (combine with refetch and reject)\n - REJECT_SNAPSHOT: Reject this snapshot, try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","RETRY","RETRY_SNAPSHOT","REJECT_SNAPSHOT"]},"tendermint.abci.ResponseCheckTx":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ResponseCommit":{"type":"object","properties":{"retain_height":{"type":"string","format":"int64"}}},"tendermint.abci.ResponseEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.ResponseExtendVote":{"type":"object","properties":{"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseFinalizeBlock":{"type":"object","properties":{"app_hash":{"description":"app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was\ndeterministic. It is up to the application to decide which algorithm to use.","type":"string","format":"byte"},"consensus_param_updates":{"description":"updates to the consensus params, if any.","$ref":"#/definitions/tendermint.types.ConsensusParams"},"events":{"type":"array","title":"set of block events emmitted as part of executing the block","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"tx_results":{"type":"array","title":"the result of executing each transaction including the events\nthe particular transction emitted. This should match the order\nof the transactions delivered in the block itself","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExecTxResult"}},"validator_updates":{"description":"a list of updates to the validator set. These will reflect the validator set at current height + 2.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseFlush":{"type":"object"},"tendermint.abci.ResponseInfo":{"type":"object","properties":{"app_version":{"type":"string","format":"uint64"},"data":{"type":"string"},"last_block_app_hash":{"type":"string","format":"byte"},"last_block_height":{"type":"string","format":"int64"},"version":{"type":"string"}}},"tendermint.abci.ResponseInitChain":{"type":"object","properties":{"app_hash":{"type":"string","format":"byte"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseListSnapshots":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Snapshot"}}}},"tendermint.abci.ResponseLoadSnapshotChunk":{"type":"object","properties":{"chunk":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseOfferSnapshot":{"type":"object","properties":{"result":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot.Result"}}},"tendermint.abci.ResponseOfferSnapshot.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Snapshot accepted, apply chunks\n - ABORT: Abort all snapshot restoration\n - REJECT: Reject this specific snapshot, try others\n - REJECT_FORMAT: Reject all snapshots of this format, try others\n - REJECT_SENDER: Reject all snapshots from the sender(s), try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","REJECT","REJECT_FORMAT","REJECT_SENDER"]},"tendermint.abci.ResponsePrepareProposal":{"type":"object","properties":{"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.ResponseProcessProposal":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal.ProposalStatus"}}},"tendermint.abci.ResponseProcessProposal.ProposalStatus":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.ResponseQuery":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"description":"bytes data = 2; // use \"value\" instead.\n\nnondeterministic","type":"string"},"proof_ops":{"$ref":"#/definitions/tendermint.crypto.ProofOps"},"value":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseVerifyVoteExtension":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus"}}},"tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus":{"description":" - REJECT: Rejecting the vote extension will reject the entire precommit by the sender.\nIncorrectly implementing this thus has liveness implications as it may affect\nCometBFT's ability to receive 2/3+ valid votes to finalize the block.\nHonest nodes should never be rejected.","type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.Snapshot":{"type":"object","properties":{"chunks":{"type":"integer","format":"int64","title":"Number of chunks in the snapshot"},"format":{"type":"integer","format":"int64","title":"The application-specific snapshot format"},"hash":{"type":"string","format":"byte","title":"Arbitrary snapshot hash, equal only if identical"},"height":{"type":"string","format":"uint64","title":"The height at which the snapshot was taken"},"metadata":{"type":"string","format":"byte","title":"Arbitrary application metadata"}}},"tendermint.abci.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte","title":"The first 20 bytes of SHA256(public key)"},"power":{"description":"The voting power","type":"string","format":"int64","title":"PubKey pub_key = 2 [(gogoproto.nullable)=false];"}}},"tendermint.abci.ValidatorUpdate":{"type":"object","properties":{"power":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"}}},"tendermint.abci.VoteInfo":{"type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"validator":{"$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.crypto.ProofOp":{"type":"object","title":"ProofOp defines an operation used for calculating Merkle root\nThe data could be arbitrary format, providing nessecary data\nfor example neighbouring node hash","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"tendermint.crypto.ProofOps":{"type":"object","title":"ProofOps is Merkle proof defined by the list of ProofOps","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.crypto.ProofOp"}}}},"tendermint.crypto.PublicKey":{"type":"object","title":"PublicKey defines the keys available for use with Validators","properties":{"ed25519":{"type":"string","format":"byte"},"secp256k1":{"type":"string","format":"byte"}}},"tendermint.p2p.DefaultNodeInfo":{"type":"object","properties":{"channels":{"type":"string","format":"byte"},"default_node_id":{"type":"string"},"listen_addr":{"type":"string"},"moniker":{"type":"string"},"network":{"type":"string"},"other":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfoOther"},"protocol_version":{"$ref":"#/definitions/tendermint.p2p.ProtocolVersion"},"version":{"type":"string"}}},"tendermint.p2p.DefaultNodeInfoOther":{"type":"object","properties":{"rpc_address":{"type":"string"},"tx_index":{"type":"string"}}},"tendermint.p2p.ProtocolVersion":{"type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"},"p2p":{"type":"string","format":"uint64"}}},"tendermint.types.ABCIParams":{"description":"ABCIParams configure functionality specific to the Application Blockchain Interface.","type":"object","properties":{"vote_extensions_enable_height":{"description":"vote_extensions_enable_height configures the first height during which\nvote extensions will be enabled. During this specified height, and for all\nsubsequent heights, precommit messages that do not contain valid extension data\nwill be considered invalid. Prior to this height, vote extensions will not\nbe used or accepted by validators on the network.\n\nOnce enabled, vote extensions will be created by the application in ExtendVote,\npassed to the application for validation in VerifyVoteExtension and given\nto the application to use when proposing a block during PrepareProposal.","type":"string","format":"int64"}}},"tendermint.types.Block":{"type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/tendermint.types.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"tendermint.types.BlockID":{"type":"object","title":"BlockID","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"$ref":"#/definitions/tendermint.types.PartSetHeader"}}},"tendermint.types.BlockIDFlag":{"description":"- BLOCK_ID_FLAG_UNKNOWN: indicates an error condition\n - BLOCK_ID_FLAG_ABSENT: the vote was not received\n - BLOCK_ID_FLAG_COMMIT: voted for the block that received the majority\n - BLOCK_ID_FLAG_NIL: voted for nil","type":"string","title":"BlockIdFlag indicates which BlockID the signature is for","default":"BLOCK_ID_FLAG_UNKNOWN","enum":["BLOCK_ID_FLAG_UNKNOWN","BLOCK_ID_FLAG_ABSENT","BLOCK_ID_FLAG_COMMIT","BLOCK_ID_FLAG_NIL"]},"tendermint.types.BlockParams":{"description":"BlockParams contains limits on the block size.","type":"object","properties":{"max_bytes":{"type":"string","format":"int64","title":"Max block size, in bytes.\nNote: must be greater than 0"},"max_gas":{"type":"string","format":"int64","title":"Max gas per block.\nNote: must be greater or equal to -1"}}},"tendermint.types.Commit":{"description":"Commit contains the evidence that a block was committed by a set of validators.","type":"object","properties":{"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signatures":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.CommitSig"}}}},"tendermint.types.CommitSig":{"description":"CommitSig is a part of the Vote included in a Commit.","type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"signature":{"type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"validator_address":{"type":"string","format":"byte"}}},"tendermint.types.ConsensusParams":{"description":"ConsensusParams contains consensus critical parameters that determine the\nvalidity of blocks.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"block":{"$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"},"version":{"$ref":"#/definitions/tendermint.types.VersionParams"}}},"tendermint.types.Data":{"type":"object","title":"Data contains the set of transactions included in the block","properties":{"txs":{"description":"Txs that will be applied by state @ block.Height+1.\nNOTE: not all txs here are valid. We're just agreeing on the order first.\nThis means that block.AppHash does not include these txs.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.types.DuplicateVoteEvidence":{"description":"DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.","type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"},"validator_power":{"type":"string","format":"int64"},"vote_a":{"$ref":"#/definitions/tendermint.types.Vote"},"vote_b":{"$ref":"#/definitions/tendermint.types.Vote"}}},"tendermint.types.Evidence":{"type":"object","properties":{"duplicate_vote_evidence":{"$ref":"#/definitions/tendermint.types.DuplicateVoteEvidence"},"light_client_attack_evidence":{"$ref":"#/definitions/tendermint.types.LightClientAttackEvidence"}}},"tendermint.types.EvidenceList":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Evidence"}}}},"tendermint.types.EvidenceParams":{"description":"EvidenceParams determine how we handle evidence of malfeasance.","type":"object","properties":{"max_age_duration":{"description":"Max age of evidence, in time.\n\nIt should correspond with an app's \"unbonding period\" or other similar\nmechanism for handling [Nothing-At-Stake\nattacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).","type":"string"},"max_age_num_blocks":{"description":"Max age of evidence, in blocks.\n\nThe basic formula for calculating this is: MaxAgeDuration / {average block\ntime}.","type":"string","format":"int64"},"max_bytes":{"type":"string","format":"int64","title":"This sets the maximum size of total evidence in bytes that can be committed in a single block.\nand should fall comfortably under the max block bytes.\nDefault is 1048576 or 1MB"}}},"tendermint.types.Header":{"description":"Header defines the structure of a block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"type":"string","format":"byte","title":"original proposer of the block"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"tendermint.types.LightBlock":{"type":"object","properties":{"signed_header":{"$ref":"#/definitions/tendermint.types.SignedHeader"},"validator_set":{"$ref":"#/definitions/tendermint.types.ValidatorSet"}}},"tendermint.types.LightClientAttackEvidence":{"description":"LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.","type":"object","properties":{"byzantine_validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}},"common_height":{"type":"string","format":"int64"},"conflicting_block":{"$ref":"#/definitions/tendermint.types.LightBlock"},"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"}}},"tendermint.types.PartSetHeader":{"type":"object","title":"PartsetHeader","properties":{"hash":{"type":"string","format":"byte"},"total":{"type":"integer","format":"int64"}}},"tendermint.types.SignedHeader":{"type":"object","properties":{"commit":{"$ref":"#/definitions/tendermint.types.Commit"},"header":{"$ref":"#/definitions/tendermint.types.Header"}}},"tendermint.types.SignedMsgType":{"description":"SignedMsgType is a type of signed message in the consensus.\n\n - SIGNED_MSG_TYPE_PREVOTE: Votes\n - SIGNED_MSG_TYPE_PROPOSAL: Proposals","type":"string","default":"SIGNED_MSG_TYPE_UNKNOWN","enum":["SIGNED_MSG_TYPE_UNKNOWN","SIGNED_MSG_TYPE_PREVOTE","SIGNED_MSG_TYPE_PRECOMMIT","SIGNED_MSG_TYPE_PROPOSAL"]},"tendermint.types.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"},"voting_power":{"type":"string","format":"int64"}}},"tendermint.types.ValidatorParams":{"description":"ValidatorParams restrict the public key types validators can use.\nNOTE: uses ABCI pubkey naming, not Amino names.","type":"object","properties":{"pub_key_types":{"type":"array","items":{"type":"string"}}}},"tendermint.types.ValidatorSet":{"type":"object","properties":{"proposer":{"$ref":"#/definitions/tendermint.types.Validator"},"total_voting_power":{"type":"string","format":"int64"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}}}},"tendermint.types.VersionParams":{"description":"VersionParams contains the ABCI application version.","type":"object","properties":{"app":{"type":"string","format":"uint64"}}},"tendermint.types.Vote":{"description":"Vote represents a prevote or precommit vote from validators for\nconsensus.","type":"object","properties":{"block_id":{"description":"zero if vote is nil.","$ref":"#/definitions/tendermint.types.BlockID"},"extension":{"description":"Vote extension provided by the application. Only valid for precommit\nmessages.","type":"string","format":"byte"},"extension_signature":{"description":"Vote extension signature by the validator if they participated in\nconsensus for the associated block.\nOnly valid for precommit messages.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signature":{"description":"Vote signature by the validator if they participated in consensus for the\nassociated block.","type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"type":{"$ref":"#/definitions/tendermint.types.SignedMsgType"},"validator_address":{"type":"string","format":"byte"},"validator_index":{"type":"integer","format":"int32"}}},"tendermint.version.Consensus":{"description":"Consensus captures the consensus rules for processing a block in the blockchain,\nincluding all blockchain data structures and the rules of the application's\nstate transition machine.","type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"}}}},"tags":[{"name":"Query"},{"name":"Msg"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file diff --git a/proto/lumera/audit/v1/audit.proto b/proto/lumera/audit/v1/audit.proto index 7e88dfd..392549e 100644 --- a/proto/lumera/audit/v1/audit.proto +++ b/proto/lumera/audit/v1/audit.proto @@ -26,29 +26,15 @@ message AuditSelfReport { message AuditPeerObservation { string target_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - // port_states[i] refers to required_open_ports[i] for the window. + // port_states[i] refers to required_open_ports[i] for the epoch. repeated PortState port_states = 2; } message AuditReport { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; + uint64 epoch_id = 2; int64 report_height = 3; AuditSelfReport self_report = 4 [(gogoproto.nullable) = false]; repeated AuditPeerObservation peer_observations = 5; } - -// ProberTargets captures the deterministic prober -> targets mapping for a window. -message ProberTargets { - string prober_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - repeated string target_supernode_accounts = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; -} - -message WindowSnapshot { - uint64 window_id = 1; - int64 window_start_height = 2; - - // assignments is the minimal per-window source-of-truth for prober -> targets mapping. - repeated ProberTargets assignments = 3 [(gogoproto.nullable) = false]; -} diff --git a/proto/lumera/audit/v1/epoch.proto b/proto/lumera/audit/v1/epoch.proto new file mode 100644 index 0000000..180ded7 --- /dev/null +++ b/proto/lumera/audit/v1/epoch.proto @@ -0,0 +1,36 @@ +syntax = "proto3"; +package lumera.audit.v1; + +option go_package = "x/audit/v1/types"; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; + +// EpochAnchor is a minimal per-epoch on-chain anchor that freezes the deterministic seed +// and the eligible supernode sets used for deterministic selection off-chain. +message EpochAnchor { + option (gogoproto.equal) = true; + + uint64 epoch_id = 1; + int64 epoch_start_height = 2; + int64 epoch_end_height = 3; + uint64 epoch_length_blocks = 4; + + // seed is a fixed 32-byte value derived at epoch start (domain-separated). + bytes seed = 5; + + // active_supernode_accounts is the sorted list of ACTIVE supernodes at epoch start. + repeated string active_supernode_accounts = 6 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + + // target_supernode_accounts is the sorted list of eligible targets at epoch start: + // ACTIVE + POSTPONED supernodes. + repeated string target_supernode_accounts = 7 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + + // params_commitment is a hash commitment to Params (with defaults) at epoch start. + bytes params_commitment = 8; + + bytes active_set_commitment = 9; + bytes targets_set_commitment = 10; +} + diff --git a/proto/lumera/audit/v1/evidence.proto b/proto/lumera/audit/v1/evidence.proto index 18b0204..b880844 100644 --- a/proto/lumera/audit/v1/evidence.proto +++ b/proto/lumera/audit/v1/evidence.proto @@ -15,6 +15,9 @@ enum EvidenceType { EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 = 2; EVIDENCE_TYPE_ACTION_EXPIRED = 3; + + // storage challenge failure evidence submitted by the deterministic challenger. + EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE = 4; } // Evidence is a stable outer record that stores evidence about an audited subject. diff --git a/proto/lumera/audit/v1/evidence_metadata.proto b/proto/lumera/audit/v1/evidence_metadata.proto index 29a5d4d..0d26131 100644 --- a/proto/lumera/audit/v1/evidence_metadata.proto +++ b/proto/lumera/audit/v1/evidence_metadata.proto @@ -24,3 +24,26 @@ message ActionFinalizationNotInTop10EvidenceMetadata { // top_10_validator_addresses is the expected validator set for the action's block height. repeated string top_10_validator_addresses = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } + +// StorageChallengeFailureEvidenceMetadata is metadata for a storage challenge failure submitted by a challenger. +message StorageChallengeFailureEvidenceMetadata { + uint64 epoch_id = 1; + + // challenger_supernode_account must be the tx signer for evidence submission. + string challenger_supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + + // challenged_supernode_account should match Evidence.subject_address. + string challenged_supernode_account = 3 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + + // challenge_id is the deterministic per-(epoch,challenger) identifier (hex-encoded blake3-256). + string challenge_id = 4; + + // file_key is the challenged file key (typically base58). + string file_key = 5; + + // failure_type is a short discriminator (e.g. TIMEOUT, INVALID_PROOF, MISSING_FILE). + string failure_type = 6; + + // transcript_hash is a hash commitment to the off-chain transcript (hex-encoded blake3-256). + string transcript_hash = 7; +} diff --git a/proto/lumera/audit/v1/params.proto b/proto/lumera/audit/v1/params.proto index 1a57364..0d7f672 100644 --- a/proto/lumera/audit/v1/params.proto +++ b/proto/lumera/audit/v1/params.proto @@ -10,11 +10,15 @@ import "gogoproto/gogo.proto"; message Params { option (gogoproto.equal) = true; - uint64 reporting_window_blocks = 1; + uint64 epoch_length_blocks = 1; + + // epoch_zero_height defines the reference chain height at which epoch_id = 0 starts. + // This makes epoch boundaries deterministic from genesis without needing to query state. + uint64 epoch_zero_height = 2; uint32 peer_quorum_reports = 3; - uint32 min_probe_targets_per_window = 4; - uint32 max_probe_targets_per_window = 5; + uint32 min_probe_targets_per_epoch = 4; + uint32 max_probe_targets_per_epoch = 5; repeated uint32 required_open_ports = 6; @@ -25,13 +29,13 @@ message Params { uint32 min_mem_free_percent = 8; uint32 min_disk_free_percent = 9; - // Number of consecutive windows a required port must be reported CLOSED by peers + // Number of consecutive epochs a required port must be reported CLOSED by peers // at or above peer_port_postpone_threshold_percent before postponing the supernode. - uint32 consecutive_windows_to_postpone = 10; + uint32 consecutive_epochs_to_postpone = 10; - // How many completed windows to keep in state for window-scoped data like WindowSnapshot, - // AuditReport, and related indices. Pruning runs at window end. - uint64 keep_last_window_entries = 11; + // How many completed epochs to keep in state for epoch-scoped data like AuditReport + // and related indices. Pruning runs at epoch end. + uint64 keep_last_epoch_entries = 11; // Minimum percent (1-100) of peer reports that must report a required port as CLOSED // for the port to be treated as CLOSED for postponement purposes. @@ -47,35 +51,50 @@ message Params { // - EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 // // Postponement triggers when, for a given supernode and evidence type: - // - the number of evidences in a window >= <*_evidences_per_window>, and - // - this happens for <*_consecutive_windows> windows in a row. + // - the number of evidences in an epoch >= <*_evidences_per_epoch>, and + // - this happens for <*_consecutive_epochs> epochs in a row. // // Recovery (auto-unpostpone) triggers after a supernode has been postponed for at least - // action_finalization_recovery_windows windows, and ONLY IF the total number of "bad" - // action-finalization evidences across the last action_finalization_recovery_windows windows + // action_finalization_recovery_epochs epochs, and ONLY IF the total number of "bad" + // action-finalization evidences across the last action_finalization_recovery_epochs epochs // is strictly less than action_finalization_recovery_max_total_bad_evidences. - // action_finalization_signature_failure_evidences_per_window is the per-window count threshold + // action_finalization_signature_failure_evidences_per_epoch is the per-epoch count threshold // for EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE. - uint32 action_finalization_signature_failure_evidences_per_window = 13; + uint32 action_finalization_signature_failure_evidences_per_epoch = 13; - // action_finalization_signature_failure_consecutive_windows is the consecutive windows threshold + // action_finalization_signature_failure_consecutive_epochs is the consecutive epochs threshold // for EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE. - uint32 action_finalization_signature_failure_consecutive_windows = 14; + uint32 action_finalization_signature_failure_consecutive_epochs = 14; - // action_finalization_not_in_top10_evidences_per_window is the per-window count threshold + // action_finalization_not_in_top10_evidences_per_epoch is the per-epoch count threshold // for EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10. - uint32 action_finalization_not_in_top10_evidences_per_window = 15; + uint32 action_finalization_not_in_top10_evidences_per_epoch = 15; - // action_finalization_not_in_top10_consecutive_windows is the consecutive windows threshold + // action_finalization_not_in_top10_consecutive_epochs is the consecutive epochs threshold // for EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10. - uint32 action_finalization_not_in_top10_consecutive_windows = 16; + uint32 action_finalization_not_in_top10_consecutive_epochs = 16; - // action_finalization_recovery_windows is the number of windows to wait before considering recovery. - uint32 action_finalization_recovery_windows = 17; + // action_finalization_recovery_epochs is the number of epochs to wait before considering recovery. + uint32 action_finalization_recovery_epochs = 17; // action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad - // action-finalization evidences in the recovery window for auto-recovery to occur. + // action-finalization evidences in the recovery epoch-span for auto-recovery to occur. // Recovery happens ONLY IF total_bad < this value. uint32 action_finalization_recovery_max_total_bad_evidences = 18; + + // Storage Challenge (SC) params. + bool sc_enabled = 19; + uint32 sc_challengers_per_epoch = 20; + uint32 sc_files_per_challenger = 21; + uint32 sc_replica_count = 22; + uint32 sc_observer_threshold = 23; + uint64 sc_min_slice_bytes = 24; + uint64 sc_max_slice_bytes = 25; + uint64 sc_response_timeout_ms = 26; + uint64 sc_affirmation_timeout_ms = 27; + uint64 sc_evidence_max_bytes = 28; + uint32 sc_candidate_keys_lookback_epochs = 29; + uint64 sc_start_jitter_ms = 30; + bool sc_evidence_submitter_must_be_challenger = 31; } diff --git a/proto/lumera/audit/v1/query.proto b/proto/lumera/audit/v1/query.proto index e32d539..cee3806 100644 --- a/proto/lumera/audit/v1/query.proto +++ b/proto/lumera/audit/v1/query.proto @@ -12,6 +12,7 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "lumera/audit/v1/params.proto"; import "lumera/audit/v1/audit.proto"; import "lumera/audit/v1/evidence.proto"; +import "lumera/audit/v1/epoch.proto"; // Query defines the gRPC querier service. service Query { @@ -35,24 +36,29 @@ service Query { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/evidence/by_action/{action_id}"; } - // CurrentWindow returns the current derived window boundaries at the current chain height. - rpc CurrentWindow(QueryCurrentWindowRequest) returns (QueryCurrentWindowResponse) { - option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/current_window"; + // CurrentEpoch returns the current derived epoch boundaries at the current chain height. + rpc CurrentEpoch(QueryCurrentEpochRequest) returns (QueryCurrentEpochResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/current_epoch"; } - // WindowSnapshot returns the persisted window snapshot for the given window_id. - rpc WindowSnapshot(QueryWindowSnapshotRequest) returns (QueryWindowSnapshotResponse) { - option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/window_snapshot/{window_id}"; + // EpochAnchor returns the persisted epoch anchor for the given epoch_id. + rpc EpochAnchor(QueryEpochAnchorRequest) returns (QueryEpochAnchorResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/epoch_anchor/{epoch_id}"; + } + + // CurrentEpochAnchor returns the persisted epoch anchor for the current epoch. + rpc CurrentEpochAnchor(QueryCurrentEpochAnchorRequest) returns (QueryCurrentEpochAnchorResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/current_epoch_anchor"; } // AssignedTargets returns the prober -> targets assignment for a given supernode_account. - // If filter_by_window_id is false, it returns the assignments for the current window. + // If filter_by_epoch_id is false, it returns the assignments for the current epoch. rpc AssignedTargets(QueryAssignedTargetsRequest) returns (QueryAssignedTargetsResponse) { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}"; } rpc AuditReport(QueryAuditReportRequest) returns (QueryAuditReportResponse) { - option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_report/{window_id}/{supernode_account}"; + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_report/{epoch_id}/{supernode_account}"; } rpc AuditReportsByReporter(QueryAuditReportsByReporterRequest) returns (QueryAuditReportsByReporterResponse) { @@ -64,7 +70,7 @@ service Query { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}"; } - // SelfReports returns self-reports submitted by the given supernode_account across windows. + // SelfReports returns self-reports submitted by the given supernode_account across epochs. rpc SelfReports(QuerySelfReportsRequest) returns (QuerySelfReportsResponse) { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}"; } @@ -104,37 +110,43 @@ message QueryEvidenceByActionResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryCurrentWindowRequest {} +message QueryCurrentEpochRequest {} -message QueryCurrentWindowResponse { - uint64 window_id = 1; - int64 window_start_height = 2; - int64 window_end_height = 3; +message QueryCurrentEpochResponse { + uint64 epoch_id = 1; + int64 epoch_start_height = 2; + int64 epoch_end_height = 3; } -message QueryWindowSnapshotRequest { - uint64 window_id = 1; +message QueryEpochAnchorRequest { + uint64 epoch_id = 1; } -message QueryWindowSnapshotResponse { - WindowSnapshot snapshot = 1 [(gogoproto.nullable) = false]; +message QueryEpochAnchorResponse { + EpochAnchor anchor = 1 [(gogoproto.nullable) = false]; +} + +message QueryCurrentEpochAnchorRequest {} + +message QueryCurrentEpochAnchorResponse { + EpochAnchor anchor = 1 [(gogoproto.nullable) = false]; } message QueryAssignedTargetsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; - bool filter_by_window_id = 3; + uint64 epoch_id = 2; + bool filter_by_epoch_id = 3; } message QueryAssignedTargetsResponse { - uint64 window_id = 1; - int64 window_start_height = 2; + uint64 epoch_id = 1; + int64 epoch_start_height = 2; repeated uint32 required_open_ports = 3; repeated string target_supernode_accounts = 4 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; } message QueryAuditReportRequest { - uint64 window_id = 1; + uint64 epoch_id = 1; string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; } @@ -144,7 +156,9 @@ message QueryAuditReportResponse { message QueryAuditReportsByReporterRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - cosmos.base.query.v1beta1.PageRequest pagination = 2; + uint64 epoch_id = 2; + cosmos.base.query.v1beta1.PageRequest pagination = 3; + bool filter_by_epoch_id = 4; } message QueryAuditReportsByReporterResponse { @@ -154,14 +168,14 @@ message QueryAuditReportsByReporterResponse { message QuerySupernodeReportsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; + uint64 epoch_id = 2; cosmos.base.query.v1beta1.PageRequest pagination = 3; - bool filter_by_window_id = 4; + bool filter_by_epoch_id = 4; } message SupernodeReport { string reporter_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; + uint64 epoch_id = 2; int64 report_height = 3; repeated PortState port_states = 4; } @@ -173,13 +187,13 @@ message QuerySupernodeReportsResponse { message QuerySelfReportsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; + uint64 epoch_id = 2; cosmos.base.query.v1beta1.PageRequest pagination = 3; - bool filter_by_window_id = 4; + bool filter_by_epoch_id = 4; } message SelfReport { - uint64 window_id = 1; + uint64 epoch_id = 1; int64 report_height = 2; AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; } diff --git a/proto/lumera/audit/v1/tx.proto b/proto/lumera/audit/v1/tx.proto index 0e7ba15..3bd21ce 100644 --- a/proto/lumera/audit/v1/tx.proto +++ b/proto/lumera/audit/v1/tx.proto @@ -40,7 +40,7 @@ message MsgSubmitAuditReport { option (cosmos.msg.v1.signer) = "supernode_account"; string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; + uint64 epoch_id = 2; AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; repeated AuditPeerObservation peer_observations = 4; diff --git a/x/audit/v1/POSTPONEMENT_RULES.md b/x/audit/v1/POSTPONEMENT_RULES.md index fa833d7..456044e 100644 --- a/x/audit/v1/POSTPONEMENT_RULES.md +++ b/x/audit/v1/POSTPONEMENT_RULES.md @@ -4,32 +4,32 @@ This document describes the on-chain rules implemented by `x/audit/v1` for switc ## Definitions -- **Window**: a contiguous block-height interval `[window_start_height, window_end_height]` derived from `reporting_window_blocks`. -- **Probers (reporters with assignments)**: supernodes that are `ACTIVE` at `window_start_height`. These appear as keys in `WindowSnapshot.assignments`. -- **Targets**: supernodes that are `ACTIVE` or `POSTPONED` at `window_start_height`. These may appear in `WindowSnapshot.assignments[*].target_supernode_accounts`. -- **Report**: `MsgSubmitAuditReport` stored under `(window_id, supernode_account)`. +- **Epoch**: a contiguous block-height interval `[epoch_start_height, epoch_end_height]` derived from `epoch_zero_height` and `epoch_length_blocks`. +- **Probers**: supernodes that are `ACTIVE` at epoch start (i.e., present in `EpochAnchor.active_supernode_accounts`). +- **Targets**: supernodes that are `ACTIVE` or `POSTPONED` at epoch start (i.e., present in `EpochAnchor.target_supernode_accounts`). +- **Report**: `MsgSubmitAuditReport` stored under `(epoch_id, supernode_account)`. ## Enforcement timing -All postpone/recovery decisions are evaluated only at **window end** (`window_end_height`) in `EndBlocker`. +All postpone/recovery decisions are evaluated only at **epoch end** (`epoch_end_height`) in `EndBlocker`. ## Submission-time gating and completeness Peer observation gating is enforced only when `MsgSubmitAuditReport` is accepted (enforcement later assumes stored observations already passed these checks): -- If the reporter is a **prober** for the window (it has a non-empty assignment in `WindowSnapshot.assignments`), then: +- If the reporter is a **prober** for the epoch (it is in `EpochAnchor.active_supernode_accounts`), then: - `peer_observations` must include **exactly one entry per assigned target** (no missing targets, no extra targets, no duplicates). - For each `peer_observation`, `port_states` length must equal the configured `required_open_ports` length. -- If the reporter is **not** a prober for the window (e.g. `POSTPONED`), then: +- If the reporter is **not** a prober for the epoch (e.g. `POSTPONED`), then: - `peer_observations` must be empty (self-report only). ## Postpone rules ### 1) Missing reports -If an `ACTIVE` supernode fails to submit any report for `consecutive_windows_to_postpone` consecutive windows, it is set to `POSTPONED`. +If an `ACTIVE` supernode fails to submit any report for `consecutive_epochs_to_postpone` consecutive epochs, it is set to `POSTPONED`. -This is evaluated by checking for a stored report in each of the last `N` windows. +This is evaluated by checking for a stored report in each of the last `N` epochs. ### 2) Host requirements (self report) @@ -44,14 +44,14 @@ The following self-report fields are currently ignored by postponement logic: ### 3) Peer ports (peer observations) -For any required port index `i`, a target is postponed if peers report that port as `CLOSED` at or above `peer_port_postpone_threshold_percent` for `consecutive_windows_to_postpone` consecutive windows. +For any required port index `i`, a target is postponed if peers report that port as `CLOSED` at or above `peer_port_postpone_threshold_percent` for `consecutive_epochs_to_postpone` consecutive epochs. -A window counts toward the consecutive requirement only if: -- there is at least **1** peer reporter about the target in that window, and -- the share of peer reporters about the target in that window that report `PORT_STATE_CLOSED` for port index `i` meets or exceeds `peer_port_postpone_threshold_percent`. +An epoch counts toward the consecutive requirement only if: +- there is at least **1** peer reporter about the target in that epoch, and +- the share of peer reporters about the target in that epoch that report `PORT_STATE_CLOSED` for port index `i` meets or exceeds `peer_port_postpone_threshold_percent`. ## Recovery rule (POSTPONED → ACTIVE) -In a single window, a `POSTPONED` supernode becomes `ACTIVE` if: +In a single epoch, a `POSTPONED` supernode becomes `ACTIVE` if: - it submits one compliant self report (host requirements), and -- there exists at least **1** peer report about that supernode in the same window where **all** required ports are `PORT_STATE_OPEN`. +- there exists at least **1** peer report about that supernode in the same epoch where **all** required ports are `PORT_STATE_OPEN`. diff --git a/x/audit/v1/README.md b/x/audit/v1/README.md index 42fabcf..4da517f 100644 --- a/x/audit/v1/README.md +++ b/x/audit/v1/README.md @@ -3,217 +3,212 @@ ## Contents 1. [Abstract](#abstract) 2. [Overview](#overview) -3. [Genesis State Implementation](#genesis-state-implementation) -4. [Components](#components) -5. [State Transitions](#state-transitions) -6. [Messages](#messages) -7. [Queries](#queries) -8. [Events](#events) -9. [Parameters](#parameters) -10. [Client](#client) +3. [Epochs and Anchoring](#epochs-and-anchoring) +4. [Reports](#reports) +5. [Epoch-End Enforcement](#epoch-end-enforcement) +6. [Evidence](#evidence) +7. [Pruning and State Layout](#pruning-and-state-layout) +8. [Messages](#messages) +9. [Queries](#queries) +10. [Parameters](#parameters) +11. [Genesis](#genesis) +12. [Client](#client) ## Abstract -The Audit module provides deterministic, window-based reporting for supernodes. It persists audit reports and a per-window `WindowSnapshot` that serves as the minimal source-of-truth for the prober → targets mapping for that window. +The audit module provides **epoch-based** reporting and enforcement for supernodes. Each epoch persists an on-chain `EpochAnchor` that freezes: -## Overview +- a deterministic epoch seed, and +- the eligible supernode sets at epoch start (ACTIVE set and target set). -High-level behavior: -- The chain advances in deterministic reporting windows derived from block height. -- At each window start, the module persists a `WindowSnapshot` containing the prober → targets mapping (`assignments`). -- Supernodes submit one report per window containing: - - self metrics (self-attested) - - peer reachability observations (only when the reporter is a prober for the window) +Supernodes submit one report per epoch (`MsgSubmitAuditReport`). At epoch end, the chain evaluates the collected reports (plus selected evidence) to postpone or recover supernodes. -Notes: -- This module currently focuses on windowing/snapshotting and report persistence. Penalties and aggregation are intentionally not implemented. -- Postponement/recovery enforcement is implemented; rules are documented in `x/audit/v1/POSTPONEMENT_RULES.md`. +## Overview -## Genesis State Implementation +High-level flow: -The Audit module genesis state only initializes module parameters: +1. **Derive epoch boundaries from height** using `epoch_zero_height` and `epoch_length_blocks`. +2. **At epoch start height** (`BeginBlocker`), persist `EpochAnchor(epoch_id)` for the epoch. +3. **During the epoch**, supernodes submit `MsgSubmitAuditReport` (one per supernode per epoch). +4. **At epoch end height** (`EndBlocker`), evaluate postponement/recovery rules and prune old epoch-scoped state. -```protobuf -message GenesisState { - Params params = 1; -} -``` +## Epochs and Anchoring -## Components +Epoch boundaries are computed deterministically from params: -### 1. Params +- `epoch_id`: integer epoch index +- `epoch_start_height`: inclusive +- `epoch_end_height`: inclusive -Module parameters are defined in `proto/lumera/audit/v1/params.proto` and persisted under a module store key. +At `epoch_start_height`, `BeginBlocker` creates an `EpochAnchor` if it does not already exist. The anchor stores: -Key fields: -- `reporting_window_blocks` -- `peer_quorum_reports` -- `min_probe_targets_per_window` -- `max_probe_targets_per_window` -- `required_open_ports` -- `min_cpu_free_percent` -- `min_mem_free_percent` -- `min_disk_free_percent` -- `consecutive_windows_to_postpone` -- `peer_port_postpone_threshold_percent` -- `keep_last_window_entries` +- `seed`: 32-byte deterministic seed derived at epoch start +- `active_supernode_accounts`: sorted ACTIVE supernode accounts at epoch start +- `target_supernode_accounts`: sorted (ACTIVE + POSTPONED) supernode accounts at epoch start +- commitment fields (`params_commitment`, `active_set_commitment`, `targets_set_commitment`) -### 2. Window State and Window IDs +Note: commitment fields are stored on-chain but are not currently validated/used by the module logic. -The module maintains a persisted **current window state** in KV-store and advances it deterministically as the chain height increases. +## Reports -The current window state includes: -- `window_id` -- `window_start_height` -- `window_end_height` -- `window_blocks` (effective window size for the current window) +Reports are persisted per `(epoch_id, supernode_account)` and include: -#### Window size changes (`reporting_window_blocks`) +- `self_report`: self-attested host metrics and counters +- `peer_observations`: port-state observations about other supernodes -`reporting_window_blocks` may be updated by governance. To keep historical window boundaries stable, any change is applied **at the next window boundary**: -- the current window’s start/end heights do not change mid-window -- the new window size takes effect starting at `window_end_height + 1` +Report submission rules: -Implementation note: the module persists a pending “next window size” value and consumes it when advancing into the next window. +- only the **current** `epoch_id` (as derived at the current block height) is accepted +- only one report per `(epoch_id, supernode_account)` is accepted +- if `required_open_ports` is non-empty, each peer observation must include exactly that many `port_states` +- `self_report.inbound_port_states` must be either empty (unknown/unreported) or exactly `len(required_open_ports)` (same ordering) -### 3. Window Snapshots +### Deterministic peer-observation gating -At `window_start_height`, the module stores a `WindowSnapshot`: -- `window_id` -- `window_start_height` -- `assignments`: the per-window prober → targets mapping +Peer observation requirements are enforced at `MsgSubmitAuditReport` time: -Snapshots freeze the per-window prober → targets mapping at the start of the window so later logic can rely on a deterministic, persisted mapping. +- If the reporter is **ACTIVE at epoch start** (i.e. is present in `EpochAnchor.active_supernode_accounts`), the chain deterministically computes the reporter’s assigned targets and requires exactly one observation per target (no extras, no duplicates). +- If the reporter is **not** ACTIVE at epoch start, `peer_observations` must be empty. -### 4. Reports +Assignments are derived from: -Reports are stored per `(window_id, supernode_account)` and include: -- `supernode_account` -- `self_report` -- `peer_observations` +- anchored ACTIVE/target sets, +- anchored epoch seed, and +- current params that drive the per-reporter target count (`peer_quorum_reports`, `min_probe_targets_per_epoch`, `max_probe_targets_per_epoch`). -Uniqueness is guaranteed (one report per reporter per window). +## Epoch-End Enforcement -## State Transitions +Enforcement occurs only at epoch end, and may transition supernodes via the supernode keeper. -### Report submission +### Postponement (`ACTIVE -> POSTPONED`) -On `MsgSubmitAuditReport`: -1. Resolve reporter supernode from `supernode_account` via `x/supernode`. -2. Validate window acceptance (only the current `window_id` at the current height is accepted). -3. If the reporter is a **prober** for the window (i.e., appears in `WindowSnapshot.assignments`), require peer observations for **all** assigned targets. - - If the reporter is **not** a prober for the window (e.g. `POSTPONED`), peer observations must be empty (self-report only). -4. Ensure per-window uniqueness for the reporter. -5. Persist the report. +At epoch end, a supernode can be postponed for: -### Window end enforcement +- **Action-finalization evidence thresholds** (per-epoch counts meeting consecutive-epoch windows), +- **Missing reports** for `consecutive_epochs_to_postpone` consecutive epochs, +- **Self host minimum failures** (CPU/mem/disk free% thresholds), +- **Peer port thresholds**: a required port is treated as CLOSED if peer observations meet `peer_port_postpone_threshold_percent`, and this happens for `consecutive_epochs_to_postpone` consecutive epochs. -At `window_end_height`, the module evaluates the completed window and may transition supernodes: -- `ACTIVE` → `POSTPONED` for: - - missing reports for `consecutive_windows_to_postpone` consecutive windows - - host requirement failures (self report) - - peer port threshold on `CLOSED` (at or above `peer_port_postpone_threshold_percent`) for `consecutive_windows_to_postpone` consecutive windows -- `POSTPONED` → `ACTIVE` if, in a single window, there is: - - one compliant self report, and - - at least one peer report about the supernode where all required ports are `OPEN` +### Recovery (`POSTPONED -> ACTIVE`) -## Messages +At epoch end, a supernode can recover: -### MsgSubmitAuditReport +- If postponed due to action-finalization evidence: by the action-finalization recovery window and total-bad-evidence constraint. +- Otherwise: if it has a compliant self report and at least one peer observation in the epoch where all required ports are `OPEN`. -Signed by `supernode_account`: +Detailed behavior is implemented in `x/audit/v1/keeper/enforcement.go`. -```protobuf -message MsgSubmitAuditReport { - string supernode_account = 1; - uint64 window_id = 2; - AuditSelfReport self_report = 3; - repeated AuditPeerObservation peer_observations = 4; -} -``` +## Evidence -### MsgUpdateParams +Evidence records are append-only on-chain records used by enforcement logic. -Governance-authority-gated parameter update: +Supported evidence types include: -```protobuf -message MsgUpdateParams { - string authority = 1; - Params params = 2; -} -``` +- action module evidence (submitted by the action module account via keeper integration; reserved types are rejected by `MsgSubmitEvidence`) +- storage challenge failure evidence (submitted by challengers; optionally restricted to deterministic challengers for an epoch) -## Queries +Evidence metadata is provided as JSON in `MsgSubmitEvidence` and stored on-chain as protobuf-binary bytes derived from the JSON. Evidence submission enforces size bounds (and honors `sc_evidence_max_bytes` for SC evidence). -### Params +For storage challenge failure evidence, challenger authorization (when enabled) is derived deterministically from the epoch anchor seed and anchored ACTIVE set. -Returns current module params: -- gRPC: `Query/Params` -- REST: `GET /LumeraProtocol/lumera/audit/v1/params` +## Pruning and State Layout -### AuditReport +At epoch end, `PruneOldEpochs` prunes epoch-scoped state to keep only the last `keep_last_epoch_entries` epochs (inclusive). -Returns `AuditReport` for a window and reporter: -- gRPC: `Query/AuditReport` +State is stored under human-readable prefixes with binary epoch IDs (`u64be(epoch_id)`) so lexicographic ordering matches numeric ordering. Key layouts are defined in `x/audit/v1/types/keys.go`, including: -### AuditReportsByReporter +- epoch anchors: `ea/` +- reports: `r/` +- indices for reporter/self/target views +- evidence records and evidence indices +- evidence epoch counts used by enforcement -Lists `AuditReport` submitted by a reporter (paginated): -- gRPC: `Query/AuditReportsByReporter` -- REST: `GET /LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}` +Note: evidence records are not currently pruned by `PruneOldEpochs`. -### CurrentWindow +## Messages -Returns the current reporting window boundaries: -- gRPC: `Query/CurrentWindow` -- REST: `GET /LumeraProtocol/lumera/audit/v1/current_window` +### `MsgSubmitAuditReport` -### SupernodeReports +Signed by `supernode_account`: -Lists peer-observation chunks about a given supernode (by other reporters): -- gRPC: `Query/SupernodeReports` -- REST: `GET /LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}` -Notes: -- To filter by a specific window (including `window_id = 0`), use `filter_by_window_id = true`. +```protobuf +message MsgSubmitAuditReport { + string supernode_account = 1; + uint64 epoch_id = 2; + AuditSelfReport self_report = 3; + repeated AuditPeerObservation peer_observations = 4; +} +``` -### SelfReports +### `MsgSubmitEvidence` -Lists self-report chunks for a supernode across windows: -- gRPC: `Query/SelfReports` -- REST: `GET /LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}` -Notes: -- To filter by a specific window (including `window_id = 0`), use `filter_by_window_id = true`. +Signed by `creator`: -### WindowSnapshot +```protobuf +message MsgSubmitEvidence { + string creator = 1; + string subject_address = 2; + EvidenceType evidence_type = 3; + string action_id = 4; + string metadata = 5; // JSON +} +``` -Returns the persisted `WindowSnapshot` for a given window: -- gRPC: `Query/WindowSnapshot` -- REST: `GET /LumeraProtocol/lumera/audit/v1/window_snapshot/{window_id}` +### `MsgUpdateParams` -### AssignedTargets +Governance-authority-gated parameter update: -Returns the reporter’s assigned targets for a given window (or the current window by default): -- gRPC: `Query/AssignedTargets` -- REST: `GET /LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}` +- `epoch_zero_height` and `epoch_length_blocks` are immutable after genesis (changing epoch math would break deterministic epoch mapping). -## Events +## Queries -Audit-specific events are not emitted. +- `Query/Params` +- `Query/CurrentEpoch` +- `Query/EpochAnchor(epoch_id)` +- `Query/CurrentEpochAnchor` +- `Query/AssignedTargets(supernode_account)` (optional `epoch_id` filter) +- `Query/AuditReport(epoch_id, supernode_account)` +- `Query/AuditReportsByReporter(supernode_account)` (paginated; optional `epoch_id` filter) +- `Query/SupernodeReports(supernode_account)` (paginated; optional `epoch_id` filter) +- `Query/SelfReports(supernode_account)` (paginated; optional `epoch_id` filter) +- Evidence: + - `Query/EvidenceById` + - `Query/EvidenceBySubject` (paginated) + - `Query/EvidenceByAction` (paginated) ## Parameters -Default values (as implemented in `x/audit/v1/types/params.go`): -- `reporting_window_blocks`: `400` -- `peer_quorum_reports`: `3` -- `min_probe_targets_per_window`: `3` -- `max_probe_targets_per_window`: `5` -- `required_open_ports`: `[4444, 4445, 8002]` -- `min_cpu_free_percent`: `0` (disabled) -- `min_mem_free_percent`: `0` (disabled) -- `min_disk_free_percent`: `0` (disabled) -- `consecutive_windows_to_postpone`: `1` -- `peer_port_postpone_threshold_percent`: `100` -- `keep_last_window_entries`: `200` +Params are initialized from genesis and may later be updated by governance via `MsgUpdateParams` (with epoch-cadence fields immutable). Defaults (see `x/audit/v1/types/params.go`): + +- Epoch cadence: + - `epoch_length_blocks`: `400` (immutable after genesis) + - `epoch_zero_height`: `1` (immutable after genesis) +- Report/assignment gating: + - `peer_quorum_reports`: `3` + - `min_probe_targets_per_epoch`: `3` + - `max_probe_targets_per_epoch`: `5` + - `required_open_ports`: `[4444, 4445, 8002]` +- Enforcement: + - `min_cpu_free_percent`: `0` (disabled) + - `min_mem_free_percent`: `0` (disabled) + - `min_disk_free_percent`: `0` (disabled) + - `consecutive_epochs_to_postpone`: `1` + - `peer_port_postpone_threshold_percent`: `100` + - `keep_last_epoch_entries`: `200` +- Action-finalization evidence: + - `action_finalization_*` thresholds and windows +- Storage challenge: + - `sc_*` settings, including `sc_evidence_max_bytes` (max SC evidence metadata bytes) + +## Genesis + +Genesis initializes: + +- params +- optional evidence records +- `next_evidence_id` + +Epoch boundaries are purely param-derived; there is no mutable “current epoch” state. ## Client diff --git a/x/audit/v1/keeper/abci.go b/x/audit/v1/keeper/abci.go index 9565b81..3cc0df7 100644 --- a/x/audit/v1/keeper/abci.go +++ b/x/audit/v1/keeper/abci.go @@ -8,46 +8,49 @@ import ( func (k Keeper) BeginBlocker(ctx context.Context) error { sdkCtx := sdk.UnwrapSDKContext(ctx) + // BeginBlocker is responsible for epoch-start duties only. It derives the current epoch + // from immutable epoch-cadence params (length + zero height), and persists an EpochAnchor + // exactly at epoch start. The anchor freezes the epoch seed and eligible sets used by + // deterministic off-chain selection. params := k.GetParams(ctx).WithDefaults() - ws, err := k.getCurrentWindowState(sdkCtx, params) + epoch, err := deriveEpochAtHeight(sdkCtx.BlockHeight(), params) if err != nil { return err } - currentWindowID := ws.WindowID - windowStart := ws.StartHeight - // Only create the snapshot exactly at the window start height. - if sdkCtx.BlockHeight() != windowStart { + // Only create the anchor exactly at the epoch start height. + if sdkCtx.BlockHeight() != epoch.StartHeight { return nil } - return k.CreateWindowSnapshotIfNeeded(sdkCtx, currentWindowID, params) + if err := k.CreateEpochAnchorIfNeeded(sdkCtx, epoch.EpochID, epoch.StartHeight, epoch.EndHeight, params); err != nil { + return err + } + return nil } func (k Keeper) EndBlocker(ctx context.Context) error { sdkCtx := sdk.UnwrapSDKContext(ctx) - // Enforce supernode metrics staleness each block at end-block. - if err := k.HandleSupernodeMetricsStaleness(sdkCtx); err != nil { - return err - } + // EndBlocker does two things: + // 1) epoch-end audit enforcement + pruning (only at epoch end height). params := k.GetParams(ctx).WithDefaults() - ws, err := k.getCurrentWindowState(sdkCtx, params) + epoch, err := deriveEpochAtHeight(sdkCtx.BlockHeight(), params) if err != nil { return err } - // Only enforce and prune exactly at the window end height. - if sdkCtx.BlockHeight() != ws.EndHeight { + // Only enforce and prune exactly at the epoch end height. + if sdkCtx.BlockHeight() != epoch.EndHeight { return nil } - if err := k.EnforceWindowEnd(sdkCtx, ws.WindowID, params); err != nil { + if err := k.EnforceEpochEnd(sdkCtx, epoch.EpochID, params); err != nil { return err } - return k.PruneOldWindows(sdkCtx, ws.WindowID, params) + return k.PruneOldEpochs(sdkCtx, epoch.EpochID, params) } diff --git a/x/audit/v1/keeper/action_finalization_postponement_state.go b/x/audit/v1/keeper/action_finalization_postponement_state.go index 01272ce..76ee5c7 100644 --- a/x/audit/v1/keeper/action_finalization_postponement_state.go +++ b/x/audit/v1/keeper/action_finalization_postponement_state.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) -func (k Keeper) getActionFinalizationPostponedAtWindowID(ctx sdk.Context, supernodeAccount string) (uint64, bool) { +func (k Keeper) getActionFinalizationPostponedAtEpochID(ctx sdk.Context, supernodeAccount string) (uint64, bool) { store := k.kvStore(ctx) bz := store.Get(types.ActionFinalizationPostponementKey(supernodeAccount)) if len(bz) != 8 { @@ -16,14 +16,14 @@ func (k Keeper) getActionFinalizationPostponedAtWindowID(ctx sdk.Context, supern return binary.BigEndian.Uint64(bz), true } -func (k Keeper) setActionFinalizationPostponedAtWindowID(ctx sdk.Context, supernodeAccount string, windowID uint64) { +func (k Keeper) setActionFinalizationPostponedAtEpochID(ctx sdk.Context, supernodeAccount string, epochID uint64) { store := k.kvStore(ctx) bz := make([]byte, 8) - binary.BigEndian.PutUint64(bz, windowID) + binary.BigEndian.PutUint64(bz, epochID) store.Set(types.ActionFinalizationPostponementKey(supernodeAccount), bz) } -func (k Keeper) clearActionFinalizationPostponedAtWindowID(ctx sdk.Context, supernodeAccount string) { +func (k Keeper) clearActionFinalizationPostponedAtEpochID(ctx sdk.Context, supernodeAccount string) { store := k.kvStore(ctx) store.Delete(types.ActionFinalizationPostponementKey(supernodeAccount)) } diff --git a/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md b/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md deleted file mode 100644 index 6ec629a..0000000 --- a/x/audit/v1/keeper/assignment/DETERMINISTIC_ASSIGNMENT.md +++ /dev/null @@ -1,122 +0,0 @@ -# Deterministic Assignment (Window Snapshot) - -This document explains how `x/audit/v1` computes and persists the per-window **prober → targets** mapping (`WindowSnapshot.assignments`). - -## Where it happens - -- Snapshot creation is triggered in `BeginBlocker` exactly at `window_start_height` for a window. - - File: `x/audit/v1/keeper/abci.go` -- Snapshot computation + persistence is implemented in: - - File: `x/audit/v1/keeper/window.go` -- The deterministic assignment algorithm itself is implemented as pure helpers in: - - File: `x/audit/v1/keeper/assignment/assignment.go` - -## Inputs to the mapping - -At `window_start_height` for a given `window_id`, the module builds: - -- `probers` (called `senders` in code): supernodes in state `ACTIVE` -- `targets` (called `receivers` in code): supernodes in state `ACTIVE` + `POSTPONED` -- `params`: module params as of that height: - - `peer_quorum_reports` - - `min_probe_targets_per_window` - - `max_probe_targets_per_window` -- `seedBytes`: `ctx.HeaderHash()` at `window_start_height` (the first 8 bytes are used) - -Note: -- Snapshot creation requires `len(ctx.HeaderHash()) >= 8` (otherwise snapshot creation fails). - -## Ordering (determinism invariant) - -To ensure all nodes compute the same mapping: -- `probers` (`senders`) are sorted lexicographically by `supernode_account` (bech32 string). -- `targets` (`receivers`) are sorted lexicographically by `supernode_account`. - -This sorting step is part of the deterministic assignment helpers. - -## Step 1: Compute `k_window` - -`k_window` is the number of targets assigned to each sender for a window. - -Let: -- `a = len(probers)` -- `n = len(targets)` -- `q = peer_quorum_reports` - -We compute the minimum `k` to get average per-receiver coverage of at least `q`: - -``` -sendersCount * k_window >= peer_quorum_reports * receiversCount -k_needed = ceil(q*n / a) -``` - -Then clamp: -- `k_needed = max(k_needed, min_probe_targets_per_window)` -- `k_needed = min(k_needed, max_probe_targets_per_window)` - -And finally: -- `k_needed <= n - 1` (no self-targeting and no duplicates is only possible up to `n-1`) - -Edge cases: -- If `a <= 0` or `n <= 1`, `k_window = 0`. - -## Step 2: Compute a deterministic ring offset from the seed - -Only the first 8 bytes are used: - -- `offsetU64 = bigEndianUint64(seedBytes[0:8])` -- `offset = offsetU64 % len(targets)` - -This rotates the receiver list per window so assignments don’t always start at receiver index 0. - -## Step 3: Assign targets to each sender - -For each prober at index `senderIndex` in sorted `probers`: - -For each `j` from `0` to `k_window - 1`: - -1) Compute a deterministic slot: - - `slot = senderIndex * k_window + j` -2) Initial candidate: - - `candidateIndex = (offset + slot) % len(targets)` -3) Resolve collisions deterministically by walking forward (wrap-around): - - Reject candidate if: - - `targets[candidateIndex] == sender` (self), or - - candidate already chosen for this sender (no duplicates) - - If rejected, set `candidateIndex = (candidateIndex + 1) % len(targets)` and retry - - Stop once a valid candidate is found, or after `len(targets)` tries (in which case assignment stops early) - -The resulting ordered `targets[]` are stored as one `ProberTargets` record: - -```protobuf -message ProberTargets { - string prober_supernode_account = 1; - repeated string target_supernode_accounts = 2; -} -``` - -## What is persisted - -The module persists a `WindowSnapshot` in state under `ws/`: - -```protobuf -message WindowSnapshot { - uint64 window_id = 1; - int64 window_start_height = 2; - repeated ProberTargets assignments = 3; -} -``` - -Notes: -- The seed is used during snapshot creation, but is **not persisted** in `WindowSnapshot`. -- The persisted mapping is the minimal per-window source-of-truth for prober → targets. - -## Determinism invariants (summary) - -All nodes will compute the same `assignments` for a window if: -- They evaluate at the same `window_start_height` -- They observe the same ACTIVE / ACTIVE+POSTPONED sets at that height -- They sort senders/receivers identically -- They use the same params at that height (`peer_quorum_reports`, min/max probes) -- They use the same `seedBytes` (`HeaderHash()` at that height) -- They run the same collision-resolution rules (self + duplicate avoidance) diff --git a/x/audit/v1/keeper/assignment/assignment.go b/x/audit/v1/keeper/assignment/assignment.go deleted file mode 100644 index e0d304a..0000000 --- a/x/audit/v1/keeper/assignment/assignment.go +++ /dev/null @@ -1,126 +0,0 @@ -package assignment - -import ( - "encoding/binary" - "fmt" - "sort" - - "github.com/LumeraProtocol/lumera/x/audit/v1/types" -) - -// Deterministic assignment helpers. -// -// These helpers are intentionally pure (no keeper/store access) so the same logic can be reused by: -// - snapshot creation at window start -// - any future validation that wants to recompute the expected mapping from inputs -// -// Determinism relies on: -// - identical sender/receiver sets and their ordering (we sort lexicographically) -// - identical params at snapshot time (peer_quorum_reports, min/max probes) -// - identical seed bytes (we use the first 8 bytes to compute a ring offset) - -func ComputeKWindowFromParams(params types.Params, sendersCount, receiversCount int) uint32 { - // k_window is the number of targets each sender is assigned for a window. - // - // We derive it so that, on average, each receiver gets at least peer_quorum_reports observations: - // sendersCount * k_window >= peer_quorum_reports * receiversCount - // Then clamp into [min_probe_targets_per_window, max_probe_targets_per_window] and ensure k_window <= receiversCount-1 - // (no self-targeting, no duplicates). - if sendersCount <= 0 || receiversCount <= 1 { - return 0 - } - - a := uint64(sendersCount) - n := uint64(receiversCount) - q := uint64(params.PeerQuorumReports) - - kNeeded := (q*n + a - 1) / a - - kMin := uint64(params.MinProbeTargetsPerWindow) - kMax := uint64(params.MaxProbeTargetsPerWindow) - if kNeeded < kMin { - kNeeded = kMin - } - if kNeeded > kMax { - kNeeded = kMax - } - - // Avoid self + no duplicates. - if kNeeded > n-1 { - kNeeded = n - 1 - } - - return uint32(kNeeded) -} - -func computeAssignmentsFromInputs(senders []string, receivers []string, kWindow uint32, seedBytes []byte) ([]types.ProberTargets, error) { - assignments := make([]types.ProberTargets, 0, len(senders)) - if kWindow == 0 || len(receivers) == 0 { - for _, sender := range senders { - assignments = append(assignments, types.ProberTargets{ - ProberSupernodeAccount: sender, - TargetSupernodeAccounts: []string{}, - }) - } - return assignments, nil - } - if len(seedBytes) < 8 { - return nil, fmt.Errorf("seed must be at least 8 bytes") - } - - offsetU64 := binary.BigEndian.Uint64(seedBytes[:8]) - n := len(receivers) - offset := int(offsetU64 % uint64(n)) - - for senderIndex, sender := range senders { - seen := make(map[int]struct{}, int(kWindow)) - targets := make([]string, 0, int(kWindow)) - - for j := 0; j < int(kWindow); j++ { - slot := senderIndex*int(kWindow) + j - candidate := (offset + slot) % n - - tries := 0 - for tries < n { - if receivers[candidate] != sender { - if _, ok := seen[candidate]; !ok { - break - } - } - candidate = (candidate + 1) % n - tries++ - } - - if tries >= n { - break - } - - seen[candidate] = struct{}{} - targets = append(targets, receivers[candidate]) - } - - assignments = append(assignments, types.ProberTargets{ - ProberSupernodeAccount: sender, - TargetSupernodeAccounts: targets, - }) - } - - return assignments, nil -} - -func computeSnapshotAssignments(params types.Params, senders []string, receivers []string, seedBytes []byte) ([]types.ProberTargets, error) { - // Sort to guarantee deterministic ordering across nodes. - // Copy first to avoid mutating the caller's slices. - sendersSorted := append([]string(nil), senders...) - receiversSorted := append([]string(nil), receivers...) - sort.Strings(sendersSorted) - sort.Strings(receiversSorted) - - kWindow := ComputeKWindowFromParams(params, len(sendersSorted), len(receiversSorted)) - return computeAssignmentsFromInputs(sendersSorted, receiversSorted, kWindow, seedBytes) -} - -// ComputeSnapshotAssignments is the canonical helper used by the module to derive the per-window prober -> targets mapping. -func ComputeSnapshotAssignments(params types.Params, senders []string, receivers []string, seedBytes []byte) ([]types.ProberTargets, error) { - return computeSnapshotAssignments(params, senders, receivers, seedBytes) -} diff --git a/x/audit/v1/keeper/audit_peer_assignment.go b/x/audit/v1/keeper/audit_peer_assignment.go new file mode 100644 index 0000000..459beec --- /dev/null +++ b/x/audit/v1/keeper/audit_peer_assignment.go @@ -0,0 +1,102 @@ +package keeper + +import ( + "encoding/binary" + "fmt" +) + +// computeAuditPeerTargetsForReporter deterministically computes the set of targets a reporter must observe +// for the given epoch, using only the epoch anchor + current params. +// +// Deterministic assignments are derived from the epoch anchor; we do not store a per-epoch assignment table on-chain. +func computeAuditPeerTargetsForReporter(params paramsLike, activeSorted []string, targetsSorted []string, seed []byte, reporter string) ([]string, bool, error) { + if reporter == "" { + return nil, false, fmt.Errorf("empty reporter") + } + if len(seed) < 8 { + return nil, false, fmt.Errorf("seed must be at least 8 bytes") + } + + reporterIndex := -1 + for i, s := range activeSorted { + if s == reporter { + reporterIndex = i + break + } + } + if reporterIndex < 0 { + return []string{}, false, nil + } + + sendersCount := len(activeSorted) + receiversCount := len(targetsSorted) + kEpoch := computeKFromParams(params, sendersCount, receiversCount) + if kEpoch == 0 || receiversCount == 0 { + return []string{}, true, nil + } + + offsetU64 := binary.BigEndian.Uint64(seed[:8]) + offset := int(offsetU64 % uint64(receiversCount)) + + seen := make(map[int]struct{}, int(kEpoch)) + out := make([]string, 0, int(kEpoch)) + + for j := 0; j < int(kEpoch); j++ { + slot := reporterIndex*int(kEpoch) + j + candidate := (offset + slot) % receiversCount + + tries := 0 + for tries < receiversCount { + if targetsSorted[candidate] != reporter { + if _, ok := seen[candidate]; !ok { + break + } + } + candidate = (candidate + 1) % receiversCount + tries++ + } + + if tries >= receiversCount { + break + } + + seen[candidate] = struct{}{} + out = append(out, targetsSorted[candidate]) + } + + return out, true, nil +} + +type paramsLike interface { + GetPeerQuorumReports() uint32 + GetMinProbeTargetsPerEpoch() uint32 + GetMaxProbeTargetsPerEpoch() uint32 +} + +func computeKFromParams(params paramsLike, sendersCount, receiversCount int) uint32 { + if sendersCount <= 0 || receiversCount <= 1 { + return 0 + } + + a := uint64(sendersCount) + n := uint64(receiversCount) + q := uint64(params.GetPeerQuorumReports()) + + kNeeded := (q*n + a - 1) / a + + kMin := uint64(params.GetMinProbeTargetsPerEpoch()) + kMax := uint64(params.GetMaxProbeTargetsPerEpoch()) + if kNeeded < kMin { + kNeeded = kMin + } + if kNeeded > kMax { + kNeeded = kMax + } + + // Avoid self + no duplicates. + if kNeeded > n-1 { + kNeeded = n - 1 + } + + return uint32(kNeeded) +} diff --git a/x/audit/v1/keeper/enforcement.go b/x/audit/v1/keeper/enforcement.go index 4153f30..7373d48 100644 --- a/x/audit/v1/keeper/enforcement.go +++ b/x/audit/v1/keeper/enforcement.go @@ -15,9 +15,9 @@ const ( postponeReasonActionFinalizationNotInTop10 = "audit_action_finalization_not_in_top_10" ) -// EnforceWindowEnd evaluates the completed window and updates supernode states accordingly. +// EnforceEpochEnd evaluates the completed epoch and updates supernode states accordingly. // It does not re-check peer assignment gating; that must be enforced at MsgSubmitAuditReport time. -func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types.Params) error { +func (k Keeper) EnforceEpochEnd(ctx sdk.Context, epochID uint64, params types.Params) error { params = params.WithDefaults() active, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStateActive) @@ -36,9 +36,9 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. } // Avoid stale action-finalization postponement state if the supernode is ACTIVE. - k.clearActionFinalizationPostponedAtWindowID(ctx, sn.SupernodeAccount) + k.clearActionFinalizationPostponedAtEpochID(ctx, sn.SupernodeAccount) - shouldPostpone, reason, err := k.shouldPostponeAtWindowEnd(ctx, sn.SupernodeAccount, windowID, params) + shouldPostpone, reason, err := k.shouldPostponeAtEpochEnd(ctx, sn.SupernodeAccount, epochID, params) if err != nil { return err } @@ -51,9 +51,9 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. } switch reason { case postponeReasonActionFinalizationSignatureFailure, postponeReasonActionFinalizationNotInTop10: - k.setActionFinalizationPostponedAtWindowID(ctx, sn.SupernodeAccount, windowID) + k.setActionFinalizationPostponedAtEpochID(ctx, sn.SupernodeAccount, epochID) default: - k.clearActionFinalizationPostponedAtWindowID(ctx, sn.SupernodeAccount) + k.clearActionFinalizationPostponedAtEpochID(ctx, sn.SupernodeAccount) } } @@ -63,7 +63,7 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. continue } - shouldRecover, err := k.shouldRecoverAtWindowEnd(ctx, sn.SupernodeAccount, windowID, params) + shouldRecover, err := k.shouldRecoverAtEpochEnd(ctx, sn.SupernodeAccount, epochID, params) if err != nil { return err } @@ -74,29 +74,29 @@ func (k Keeper) EnforceWindowEnd(ctx sdk.Context, windowID uint64, params types. if err := k.recoverSupernodeActive(ctx, sn); err != nil { return err } - k.clearActionFinalizationPostponedAtWindowID(ctx, sn.SupernodeAccount) + k.clearActionFinalizationPostponedAtEpochID(ctx, sn.SupernodeAccount) } return nil } -func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, string, error) { +func (k Keeper) shouldPostponeAtEpochEnd(ctx sdk.Context, supernodeAccount string, epochID uint64, params types.Params) (bool, string, error) { // Action finalization evidence-based postponement. - if shouldPostpone, reason := k.shouldPostponeForActionFinalizationEvidence(ctx, supernodeAccount, windowID, params); shouldPostpone { + if shouldPostpone, reason := k.shouldPostponeForActionFinalizationEvidence(ctx, supernodeAccount, epochID, params); shouldPostpone { return true, reason, nil } // Missing-report based postponement. - consecutive := params.ConsecutiveWindowsToPostpone + consecutive := params.ConsecutiveEpochsToPostpone if consecutive == 0 { consecutive = 1 } - if k.missingReportsForConsecutiveWindows(ctx, supernodeAccount, windowID, consecutive) { + if k.missingReportsForConsecutiveEpochs(ctx, supernodeAccount, epochID, consecutive) { return true, "audit_missing_reports", nil } // Self host-metrics-based postponement (if a self report exists and violates minimums). - if ok, err := k.selfHostViolatesMinimums(ctx, supernodeAccount, windowID, params); err != nil { + if ok, err := k.selfHostViolatesMinimums(ctx, supernodeAccount, epochID, params); err != nil { return false, "", err } else if ok { return true, "audit_host_requirements", nil @@ -108,7 +108,7 @@ func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount stri return false, "", nil } - if consecutive > uint32(windowID+1) { + if consecutive > uint32(epochID+1) { // Not enough history on-chain to satisfy the consecutive rule. return false, "", nil } @@ -116,8 +116,8 @@ func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount stri for portIndex := 0; portIndex < requiredPortsLen; portIndex++ { streak := uint32(0) for offset := uint32(0); offset < consecutive; offset++ { - w := windowID - uint64(offset) - closed, err := k.peersPortStateMeetsThreshold(ctx, supernodeAccount, w, portIndex, types.PortState_PORT_STATE_CLOSED, params.PeerPortPostponeThresholdPercent) + e := epochID - uint64(offset) + closed, err := k.peersPortStateMeetsThreshold(ctx, supernodeAccount, e, portIndex, types.PortState_PORT_STATE_CLOSED, params.PeerPortPostponeThresholdPercent) if err != nil { return false, "", err } @@ -134,15 +134,15 @@ func (k Keeper) shouldPostponeAtWindowEnd(ctx sdk.Context, supernodeAccount stri return false, "", nil } -func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { +func (k Keeper) shouldRecoverAtEpochEnd(ctx sdk.Context, supernodeAccount string, epochID uint64, params types.Params) (bool, error) { // If the supernode was postponed due to action-finalization evidence, it recovers using the // action-finalization recovery rules (not the host/peer-port recovery rules). - if postponedAtWindowID, ok := k.getActionFinalizationPostponedAtWindowID(ctx, supernodeAccount); ok { - return k.shouldRecoverFromActionFinalizationPostponement(ctx, supernodeAccount, windowID, postponedAtWindowID, params), nil + if postponedAtEpochID, ok := k.getActionFinalizationPostponedAtEpochID(ctx, supernodeAccount); ok { + return k.shouldRecoverFromActionFinalizationPostponement(ctx, supernodeAccount, epochID, postponedAtEpochID, params), nil } // Need one compliant self report. - selfCompliant, err := k.selfHostCompliant(ctx, supernodeAccount, windowID, params) + selfCompliant, err := k.selfHostCompliant(ctx, supernodeAccount, epochID, params) if err != nil || !selfCompliant { return false, err } @@ -153,7 +153,7 @@ func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount strin return true, nil } - peers, err := k.peerReportersForTargetWindow(ctx, supernodeAccount, windowID) + peers, err := k.peerReportersForTargetEpoch(ctx, supernodeAccount, epochID) if err != nil { return false, err } @@ -161,9 +161,9 @@ func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount strin return false, nil } - // Recovery requires at least one peer report that shows all required ports OPEN for this supernode in this window. + // Recovery requires at least one peer report that shows all required ports OPEN for this supernode in this epoch. for _, reporter := range peers { - r, found := k.GetReport(ctx, windowID, reporter) + r, found := k.GetReport(ctx, epochID, reporter) if !found { continue } @@ -197,25 +197,25 @@ func (k Keeper) shouldRecoverAtWindowEnd(ctx sdk.Context, supernodeAccount strin return false, nil } -func (k Keeper) shouldPostponeForActionFinalizationEvidence(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, string) { - if k.evidenceMeetsConsecutiveWindowsThreshold( +func (k Keeper) shouldPostponeForActionFinalizationEvidence(ctx sdk.Context, supernodeAccount string, epochID uint64, params types.Params) (bool, string) { + if k.evidenceMeetsConsecutiveEpochsThreshold( ctx, supernodeAccount, - windowID, + epochID, types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE, - params.ActionFinalizationSignatureFailureEvidencesPerWindow, - params.ActionFinalizationSignatureFailureConsecutiveWindows, + params.ActionFinalizationSignatureFailureEvidencesPerEpoch, + params.ActionFinalizationSignatureFailureConsecutiveEpochs, ) { return true, postponeReasonActionFinalizationSignatureFailure } - if k.evidenceMeetsConsecutiveWindowsThreshold( + if k.evidenceMeetsConsecutiveEpochsThreshold( ctx, supernodeAccount, - windowID, + epochID, types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10, - params.ActionFinalizationNotInTop10EvidencesPerWindow, - params.ActionFinalizationNotInTop10ConsecutiveWindows, + params.ActionFinalizationNotInTop10EvidencesPerEpoch, + params.ActionFinalizationNotInTop10ConsecutiveEpochs, ) { return true, postponeReasonActionFinalizationNotInTop10 } @@ -223,59 +223,59 @@ func (k Keeper) shouldPostponeForActionFinalizationEvidence(ctx sdk.Context, sup return false, "" } -func (k Keeper) evidenceMeetsConsecutiveWindowsThreshold( +func (k Keeper) evidenceMeetsConsecutiveEpochsThreshold( ctx sdk.Context, supernodeAccount string, - windowID uint64, + epochID uint64, evidenceType types.EvidenceType, - minEvidencesPerWindow uint32, - consecutiveWindows uint32, + minEvidencesPerEpoch uint32, + consecutiveEpochs uint32, ) bool { - if minEvidencesPerWindow == 0 || consecutiveWindows == 0 { + if minEvidencesPerEpoch == 0 || consecutiveEpochs == 0 { return false } - if consecutiveWindows > uint32(windowID+1) { + if consecutiveEpochs > uint32(epochID+1) { // Not enough history on-chain to satisfy the consecutive rule. return false } streak := uint32(0) - for offset := uint32(0); offset < consecutiveWindows; offset++ { - w := windowID - uint64(offset) - if k.getEvidenceWindowCount(ctx, w, supernodeAccount, evidenceType) < uint64(minEvidencesPerWindow) { + for offset := uint32(0); offset < consecutiveEpochs; offset++ { + e := epochID - uint64(offset) + if k.getEvidenceEpochCount(ctx, e, supernodeAccount, evidenceType) < uint64(minEvidencesPerEpoch) { break } streak++ } - return streak == consecutiveWindows + return streak == consecutiveEpochs } func (k Keeper) shouldRecoverFromActionFinalizationPostponement( ctx sdk.Context, supernodeAccount string, - windowID uint64, - postponedAtWindowID uint64, + epochID uint64, + postponedAtEpochID uint64, params types.Params, ) bool { - recoveryWindows := params.ActionFinalizationRecoveryWindows - if recoveryWindows == 0 { - recoveryWindows = 1 + recoveryEpochs := params.ActionFinalizationRecoveryEpochs + if recoveryEpochs == 0 { + recoveryEpochs = 1 } - if windowID < postponedAtWindowID+uint64(recoveryWindows) { + if epochID < postponedAtEpochID+uint64(recoveryEpochs) { return false } - var startWindowID uint64 - if windowID+1 > uint64(recoveryWindows) { - startWindowID = windowID + 1 - uint64(recoveryWindows) + var startEpochID uint64 + if epochID+1 > uint64(recoveryEpochs) { + startEpochID = epochID + 1 - uint64(recoveryEpochs) } else { - startWindowID = 0 + startEpochID = 0 } totalBad := uint64(0) - for w := startWindowID; w <= windowID; w++ { - totalBad += k.getEvidenceWindowCount(ctx, w, supernodeAccount, types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE) - totalBad += k.getEvidenceWindowCount(ctx, w, supernodeAccount, types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10) + for e := startEpochID; e <= epochID; e++ { + totalBad += k.getEvidenceEpochCount(ctx, e, supernodeAccount, types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE) + totalBad += k.getEvidenceEpochCount(ctx, e, supernodeAccount, types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10) } maxTotal := params.ActionFinalizationRecoveryMaxTotalBadEvidences @@ -285,8 +285,8 @@ func (k Keeper) shouldRecoverFromActionFinalizationPostponement( return totalBad < uint64(maxTotal) } -func (k Keeper) selfHostViolatesMinimums(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { - r, found := k.GetReport(ctx, windowID, supernodeAccount) +func (k Keeper) selfHostViolatesMinimums(ctx sdk.Context, supernodeAccount string, epochID uint64, params types.Params) (bool, error) { + r, found := k.GetReport(ctx, epochID, supernodeAccount) if !found { return false, nil } @@ -305,8 +305,8 @@ func (k Keeper) selfHostViolatesMinimums(ctx sdk.Context, supernodeAccount strin return false, nil } -func (k Keeper) selfHostCompliant(ctx sdk.Context, supernodeAccount string, windowID uint64, params types.Params) (bool, error) { - r, found := k.GetReport(ctx, windowID, supernodeAccount) +func (k Keeper) selfHostCompliant(ctx sdk.Context, supernodeAccount string, epochID uint64, params types.Params) (bool, error) { + r, found := k.GetReport(ctx, epochID, supernodeAccount) if !found { return false, nil } @@ -354,25 +354,25 @@ func compliesMinFree(usagePercent float64, minFreePercent uint32) bool { return free >= float64(minFreePercent) } -func (k Keeper) peersPortStateMeetsThreshold(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState, thresholdPercent uint32) (bool, error) { - peers, err := k.peerReportersForTargetWindow(ctx, target, windowID) +func (k Keeper) peersPortStateMeetsThreshold(ctx sdk.Context, target string, epochID uint64, portIndex int, desired types.PortState, thresholdPercent uint32) (bool, error) { + peers, err := k.peerReportersForTargetEpoch(ctx, target, epochID) if err != nil { return false, err } if len(peers) == 0 { return false, nil } - return k.peersPortStateMeetsThresholdWithPeers(ctx, target, windowID, portIndex, desired, thresholdPercent, peers) + return k.peersPortStateMeetsThresholdWithPeers(ctx, target, epochID, portIndex, desired, thresholdPercent, peers) } -func (k Keeper) peersPortStateMeetsThresholdWithPeers(ctx sdk.Context, target string, windowID uint64, portIndex int, desired types.PortState, thresholdPercent uint32, peers []string) (bool, error) { +func (k Keeper) peersPortStateMeetsThresholdWithPeers(ctx sdk.Context, target string, epochID uint64, portIndex int, desired types.PortState, thresholdPercent uint32, peers []string) (bool, error) { if len(peers) == 0 { return false, nil } matches := uint64(0) for _, reporter := range peers { - r, found := k.GetReport(ctx, windowID, reporter) + r, found := k.GetReport(ctx, epochID, reporter) if !found { return false, nil } @@ -400,16 +400,16 @@ func (k Keeper) peersPortStateMeetsThresholdWithPeers(ctx sdk.Context, target st return matches*100 >= uint64(thresholdPercent)*total, nil } -func (k Keeper) peerReportersForTargetWindow(ctx sdk.Context, target string, windowID uint64) ([]string, error) { +func (k Keeper) peerReportersForTargetEpoch(ctx sdk.Context, target string, epochID uint64) ([]string, error) { store := k.kvStore(ctx) - prefix := types.SupernodeReportIndexWindowPrefix(target, windowID) + prefix := types.SupernodeReportIndexEpochPrefix(target, epochID) it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) defer it.Close() reporters := make([]string, 0, 8) for ; it.Valid(); it.Next() { - // Key is "" under the window-specific prefix. + // Key is "" under the epoch-specific prefix. key := it.Key() if len(key) < len(prefix) { return nil, fmt.Errorf("invalid supernode report index key") @@ -445,17 +445,17 @@ func (k Keeper) recoverSupernodeActive(ctx sdk.Context, sn sntypes.SuperNode) er return k.supernodeKeeper.RecoverSuperNodeFromPostponed(ctx, valAddr) } -func (k Keeper) missingReportsForConsecutiveWindows(ctx sdk.Context, supernodeAccount string, windowID uint64, consecutive uint32) bool { +func (k Keeper) missingReportsForConsecutiveEpochs(ctx sdk.Context, supernodeAccount string, epochID uint64, consecutive uint32) bool { if consecutive == 0 { consecutive = 1 } - if consecutive > uint32(windowID+1) { + if consecutive > uint32(epochID+1) { // Not enough history on-chain to satisfy the consecutive rule. return false } for offset := uint32(0); offset < consecutive; offset++ { - w := windowID - uint64(offset) - if k.HasReport(ctx, w, supernodeAccount) { + e := epochID - uint64(offset) + if k.HasReport(ctx, e, supernodeAccount) { return false } } diff --git a/x/audit/v1/keeper/enforcement_test.go b/x/audit/v1/keeper/enforcement_test.go index c241180..7d1c6d5 100644 --- a/x/audit/v1/keeper/enforcement_test.go +++ b/x/audit/v1/keeper/enforcement_test.go @@ -11,13 +11,13 @@ import ( ) func TestPeerPortPostponementThresholdPercent(t *testing.T) { - makeReports := func(t *testing.T, f *fixture, windowID uint64, target sntypes.SuperNode, peers []sntypes.SuperNode, portStateForPeer []types.PortState) { + makeReports := func(t *testing.T, f *fixture, epochID uint64, target sntypes.SuperNode, peers []sntypes.SuperNode, portStateForPeer []types.PortState) { t.Helper() // Target must submit a report to avoid missing-report postponement. err := f.keeper.SetReport(f.ctx, types.AuditReport{ SupernodeAccount: target.SupernodeAccount, - WindowId: windowID, + EpochId: epochID, ReportHeight: f.ctx.BlockHeight(), SelfReport: types.AuditSelfReport{}, }) @@ -28,7 +28,7 @@ func TestPeerPortPostponementThresholdPercent(t *testing.T) { for i, peer := range peers { err := f.keeper.SetReport(f.ctx, types.AuditReport{ SupernodeAccount: peer.SupernodeAccount, - WindowId: windowID, + EpochId: epochID, ReportHeight: f.ctx.BlockHeight(), SelfReport: types.AuditSelfReport{}, PeerObservations: []*types.AuditPeerObservation{ @@ -41,11 +41,11 @@ func TestPeerPortPostponementThresholdPercent(t *testing.T) { if err != nil { t.Fatalf("failed to set peer report: %v", err) } - f.keeper.SetSupernodeReportIndex(f.ctx, target.SupernodeAccount, windowID, peer.SupernodeAccount) + f.keeper.SetSupernodeReportIndex(f.ctx, target.SupernodeAccount, epochID, peer.SupernodeAccount) } } - windowID := uint64(0) + epochID := uint64(0) _, targetAcc, targetVal := cryptotestutils.SupernodeAddresses() target := sntypes.SuperNode{ @@ -74,10 +74,10 @@ func TestPeerPortPostponementThresholdPercent(t *testing.T) { params := types.DefaultParams() params.RequiredOpenPorts = []uint32{4444} - params.ConsecutiveWindowsToPostpone = 1 + params.ConsecutiveEpochsToPostpone = 1 params.PeerPortPostponeThresholdPercent = 100 - makeReports(t, f, windowID, target, peers, peerStates) + makeReports(t, f, epochID, target, peers, peerStates) f.supernodeKeeper.EXPECT(). GetAllSuperNodes(gomock.AssignableToTypeOf(f.ctx), sntypes.SuperNodeStateActive). @@ -91,7 +91,7 @@ func TestPeerPortPostponementThresholdPercent(t *testing.T) { SetSuperNodePostponed(gomock.AssignableToTypeOf(f.ctx), sdk.ValAddress(targetVal), gomock.Any()). Times(0) - if err := f.keeper.EnforceWindowEnd(f.ctx, windowID, params); err != nil { + if err := f.keeper.EnforceEpochEnd(f.ctx, epochID, params); err != nil { t.Fatalf("unexpected error: %v", err) } }) @@ -101,10 +101,10 @@ func TestPeerPortPostponementThresholdPercent(t *testing.T) { params := types.DefaultParams() params.RequiredOpenPorts = []uint32{4444} - params.ConsecutiveWindowsToPostpone = 1 + params.ConsecutiveEpochsToPostpone = 1 params.PeerPortPostponeThresholdPercent = 66 - makeReports(t, f, windowID, target, peers, peerStates) + makeReports(t, f, epochID, target, peers, peerStates) f.supernodeKeeper.EXPECT(). GetAllSuperNodes(gomock.AssignableToTypeOf(f.ctx), sntypes.SuperNodeStateActive). @@ -119,7 +119,7 @@ func TestPeerPortPostponementThresholdPercent(t *testing.T) { Return(nil). Times(1) - if err := f.keeper.EnforceWindowEnd(f.ctx, windowID, params); err != nil { + if err := f.keeper.EnforceEpochEnd(f.ctx, epochID, params); err != nil { t.Fatalf("unexpected error: %v", err) } }) diff --git a/x/audit/v1/keeper/epoch_anchor.go b/x/audit/v1/keeper/epoch_anchor.go new file mode 100644 index 0000000..a2252dd --- /dev/null +++ b/x/audit/v1/keeper/epoch_anchor.go @@ -0,0 +1,145 @@ +package keeper + +import ( + "bytes" + "encoding/binary" + "fmt" + "sort" + + sdk "github.com/cosmos/cosmos-sdk/types" + "lukechampine.com/blake3" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" +) + +const epochSeedDomain = "lumera:epoch-seed" + +func (k Keeper) GetEpochAnchor(ctx sdk.Context, epochID uint64) (types.EpochAnchor, bool) { + store := k.kvStore(ctx) + bz := store.Get(types.EpochAnchorKey(epochID)) + if bz == nil { + return types.EpochAnchor{}, false + } + var anchor types.EpochAnchor + k.cdc.MustUnmarshal(bz, &anchor) + return anchor, true +} + +func (k Keeper) SetEpochAnchor(ctx sdk.Context, anchor types.EpochAnchor) error { + store := k.kvStore(ctx) + bz, err := k.cdc.Marshal(&anchor) + if err != nil { + return err + } + store.Set(types.EpochAnchorKey(anchor.EpochId), bz) + return nil +} + +// CreateEpochAnchorIfNeeded persists a per-epoch anchor exactly at the epoch start height. +// +// This freezes: +// - the deterministic seed derived from the header hash at epoch start +// - the eligible supernode sets (active + targets) at epoch start +func (k Keeper) CreateEpochAnchorIfNeeded(ctx sdk.Context, epochID uint64, epochStartHeight, epochEndHeight int64, params types.Params) error { + if _, found := k.GetEpochAnchor(ctx, epochID); found { + return nil + } + if ctx.BlockHeight() != epochStartHeight { + return fmt.Errorf("epoch anchor must be created at epoch start height: want=%d got=%d", epochStartHeight, ctx.BlockHeight()) + } + + active, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStateActive) + if err != nil { + return err + } + targetsSN, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStateActive, sntypes.SuperNodeStatePostponed) + if err != nil { + return err + } + + activeAccounts, err := supernodeAccountsFromSet(active) + if err != nil { + return err + } + targetAccounts, err := supernodeAccountsFromSet(targetsSN) + if err != nil { + return err + } + + sort.Strings(activeAccounts) + sort.Strings(targetAccounts) + + seed, err := deriveEpochSeed(ctx, epochID, epochStartHeight) + if err != nil { + return err + } + + params = params.WithDefaults() + paramsBz := k.cdc.MustMarshal(¶ms) + paramsCommit := blake3.Sum256(paramsBz) + + activeCommit := commitStringList(activeAccounts) + targetCommit := commitStringList(targetAccounts) + + anchor := types.EpochAnchor{ + EpochId: epochID, + EpochStartHeight: epochStartHeight, + EpochEndHeight: epochEndHeight, + EpochLengthBlocks: params.EpochLengthBlocks, + Seed: seed, + ActiveSupernodeAccounts: activeAccounts, + TargetSupernodeAccounts: targetAccounts, + ParamsCommitment: paramsCommit[:], + ActiveSetCommitment: activeCommit, + TargetsSetCommitment: targetCommit, + } + + return k.SetEpochAnchor(ctx, anchor) +} + +func deriveEpochSeed(ctx sdk.Context, epochID uint64, epochStartHeight int64) ([]byte, error) { + raw := ctx.HeaderHash() + if len(raw) == 0 { + raw = make([]byte, 8) + binary.BigEndian.PutUint64(raw, uint64(epochStartHeight)) + } + epochBz := make([]byte, 8) + binary.BigEndian.PutUint64(epochBz, epochID) + + var msg bytes.Buffer + msg.WriteString(epochSeedDomain) + msg.Write(raw) + msg.Write(epochBz) + + sum := blake3.Sum256(msg.Bytes()) + out := make([]byte, 32) + copy(out, sum[:]) + return out, nil +} + +func supernodeAccountsFromSet(set []sntypes.SuperNode) ([]string, error) { + out := make([]string, 0, len(set)) + seen := make(map[string]struct{}, len(set)) + for _, sn := range set { + if sn.SupernodeAccount == "" { + return nil, fmt.Errorf("supernode %q has empty supernode_account", sn.ValidatorAddress) + } + if _, ok := seen[sn.SupernodeAccount]; ok { + continue + } + seen[sn.SupernodeAccount] = struct{}{} + out = append(out, sn.SupernodeAccount) + } + return out, nil +} + +func commitStringList(list []string) []byte { + h := blake3.New(32, nil) + for _, s := range list { + _, _ = h.Write([]byte(s)) + _, _ = h.Write([]byte{0}) + } + sum := h.Sum(nil) + return sum +} diff --git a/x/audit/v1/keeper/epoch_math.go b/x/audit/v1/keeper/epoch_math.go new file mode 100644 index 0000000..c59a59b --- /dev/null +++ b/x/audit/v1/keeper/epoch_math.go @@ -0,0 +1,61 @@ +package keeper + +import ( + "fmt" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +type epochInfo struct { + EpochID uint64 + StartHeight int64 + EndHeight int64 +} + +func deriveEpochAtHeight(height int64, params types.Params) (epochInfo, error) { + // Epoch math is consensus-critical. Epoch boundaries must be derived deterministically + // from params (epoch_zero_height, epoch_length_blocks) and height, with no state reads. + params = params.WithDefaults() + if params.EpochLengthBlocks == 0 { + return epochInfo{}, fmt.Errorf("epoch_length_blocks must be > 0") + } + if params.EpochZeroHeight == 0 { + return epochInfo{}, fmt.Errorf("epoch_zero_height must be > 0") + } + + epochZero := int64(params.EpochZeroHeight) + epochLen := int64(params.EpochLengthBlocks) + + // If height is before epoch_zero_height (should not happen on a normal chain), clamp to epoch 0. + var epochID uint64 + var start int64 + if height < epochZero { + epochID = 0 + start = epochZero + } else { + rel := height - epochZero + epochID = uint64(rel / epochLen) + start = epochZero + int64(epochID)*epochLen + } + + end := start + epochLen - 1 + return epochInfo{EpochID: epochID, StartHeight: start, EndHeight: end}, nil +} + +func deriveEpochByID(epochID uint64, params types.Params) (epochInfo, error) { + // Used by queries and validation to reconstruct boundaries from an epoch ID. + params = params.WithDefaults() + if params.EpochLengthBlocks == 0 { + return epochInfo{}, fmt.Errorf("epoch_length_blocks must be > 0") + } + if params.EpochZeroHeight == 0 { + return epochInfo{}, fmt.Errorf("epoch_zero_height must be > 0") + } + + epochZero := int64(params.EpochZeroHeight) + epochLen := int64(params.EpochLengthBlocks) + + start := epochZero + int64(epochID)*epochLen + end := start + epochLen - 1 + return epochInfo{EpochID: epochID, StartHeight: start, EndHeight: end}, nil +} diff --git a/x/audit/v1/keeper/evidence.go b/x/audit/v1/keeper/evidence.go index ad59843..85a4643 100644 --- a/x/audit/v1/keeper/evidence.go +++ b/x/audit/v1/keeper/evidence.go @@ -13,6 +13,21 @@ import ( gogoproto "github.com/cosmos/gogoproto/proto" ) +const ( + // Evidence is currently unpruned and stored on-chain, so these must remain bounded to + // avoid state-bloat/DoS. Keep them "roomy" enough to avoid accidental breakage. + maxEvidenceMetadataJSONBytes = 2 * 1024 * 1024 // 2 MiB + maxEvidenceActionIDBytes = 4 * 1024 // 4 KiB + + // Applies to non-SC evidence types until/unless a dedicated param is introduced. + maxEvidenceMetadataBytes = 256 * 1024 // 256 KiB + + maxScChallengeIDBytes = 256 // 256 B + maxScFileKeyBytes = 4 * 1024 // 4 KiB + maxScFailureTypeBytes = 256 // 256 B + maxScTranscriptHashBytes = 256 // 256 B +) + func (k Keeper) CreateEvidence( ctx context.Context, reporterAddress string, @@ -49,6 +64,9 @@ func (k Keeper) CreateEvidence( if metadataJSON == "" { return 0, types.ErrInvalidMetadata } + if len(metadataJSON) > maxEvidenceMetadataJSONBytes { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "metadata is too large") + } if actionID == "" { // For the initial supported evidence types (action expiration/finalization), action id is required. @@ -59,22 +77,98 @@ func (k Keeper) CreateEvidence( return 0, types.ErrInvalidActionID } } + if len(actionID) > maxEvidenceActionIDBytes { + return 0, errorsmod.Wrap(types.ErrInvalidActionID, "action_id is too large") + } metadataBytes, err := marshalEvidenceMetadataJSON(evidenceType, metadataJSON) if err != nil { return 0, errorsmod.Wrap(types.ErrInvalidMetadata, err.Error()) } + if evidenceType != types.EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE && len(metadataBytes) > maxEvidenceMetadataBytes { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "metadata is too large") + } sdkCtx := sdk.UnwrapSDKContext(ctx) if evidenceType == types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED || evidenceType == types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE || evidenceType == types.EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 { - params := k.GetParams(ctx) - ws, err := k.getCurrentWindowState(sdkCtx, params) + params := k.GetParams(ctx).WithDefaults() + epoch, err := deriveEpochAtHeight(sdkCtx.BlockHeight(), params) if err != nil { return 0, err } - k.incrementEvidenceWindowCount(sdkCtx, ws.WindowID, subjectAddress, evidenceType) + k.incrementEvidenceEpochCount(sdkCtx, epoch.EpochID, subjectAddress, evidenceType) + } + + if evidenceType == types.EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE { + params := k.GetParams(ctx).WithDefaults() + if params.ScEvidenceMaxBytes > 0 && uint64(len(metadataBytes)) > params.ScEvidenceMaxBytes { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "metadata exceeds sc_evidence_max_bytes") + } + + var m types.StorageChallengeFailureEvidenceMetadata + if err := gogoproto.Unmarshal(metadataBytes, &m); err != nil { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, fmt.Sprintf("unmarshal StorageChallengeFailureEvidenceMetadata: %v", err)) + } + if strings.TrimSpace(m.ChallengerSupernodeAccount) == "" { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "challenger_supernode_account is required") + } + if reporterAddress != m.ChallengerSupernodeAccount { + return 0, errorsmod.Wrap(types.ErrInvalidReporter, "reporter must match challenger_supernode_account") + } + if strings.TrimSpace(m.ChallengedSupernodeAccount) == "" { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "challenged_supernode_account is required") + } + if subjectAddress != m.ChallengedSupernodeAccount { + return 0, errorsmod.Wrap(types.ErrInvalidSubject, "subject_address must match challenged_supernode_account") + } + if len(strings.TrimSpace(m.ChallengeId)) > maxScChallengeIDBytes { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "challenge_id is too large") + } + if len(strings.TrimSpace(m.FileKey)) > maxScFileKeyBytes { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "file_key is too large") + } + if len(strings.TrimSpace(m.FailureType)) > maxScFailureTypeBytes { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "failure_type is too large") + } + if len(strings.TrimSpace(m.TranscriptHash)) > maxScTranscriptHashBytes { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "transcript_hash is too large") + } + + anchor, found := k.GetEpochAnchor(sdkCtx, m.EpochId) + if !found { + return 0, errorsmod.Wrap(types.ErrInvalidMetadata, fmt.Sprintf("epoch anchor not found for epoch_id %d", m.EpochId)) + } + + if params.ScEnabled && params.ScEvidenceSubmitterMustBeChallenger { + kc := storageChallengeChallengerCount(len(anchor.ActiveSupernodeAccounts), params.ScChallengersPerEpoch) + target := storageChallengeComparisonTarget(anchor.Seed, m.EpochId) + challengers := selectTopByXORDistance(anchor.ActiveSupernodeAccounts, target, kc) + + allowed := false + for _, c := range challengers { + if c == reporterAddress { + allowed = true + break + } + } + if !allowed { + return 0, errorsmod.Wrap(types.ErrInvalidReporter, "reporter is not an authorized challenger for epoch") + } + } + + // Optional consistency check: ensure subject was eligible as a target at epoch start. + eligible := false + for _, t := range anchor.TargetSupernodeAccounts { + if t == subjectAddress { + eligible = true + break + } + } + if !eligible { + return 0, errorsmod.Wrap(types.ErrInvalidSubject, "subject is not an eligible target for epoch") + } } reportedHeight := uint64(sdkCtx.BlockHeight()) @@ -127,6 +221,13 @@ func marshalEvidenceMetadataJSON(evidenceType types.EvidenceType, metadataJSON s } return gogoproto.Marshal(&m) + case types.EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE: + var m types.StorageChallengeFailureEvidenceMetadata + if err := u.Unmarshal(strings.NewReader(metadataJSON), &m); err != nil { + return nil, fmt.Errorf("unmarshal StorageChallengeFailureEvidenceMetadata: %w", err) + } + return gogoproto.Marshal(&m) + default: return nil, fmt.Errorf("unsupported evidence_type: %s", evidenceType.String()) } diff --git a/x/audit/v1/keeper/evidence_window_count.go b/x/audit/v1/keeper/evidence_epoch_count.go similarity index 52% rename from x/audit/v1/keeper/evidence_window_count.go rename to x/audit/v1/keeper/evidence_epoch_count.go index 74dfafb..01991cd 100644 --- a/x/audit/v1/keeper/evidence_window_count.go +++ b/x/audit/v1/keeper/evidence_epoch_count.go @@ -7,18 +7,18 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) -func (k Keeper) getEvidenceWindowCount(ctx sdk.Context, windowID uint64, subjectAddress string, evidenceType types.EvidenceType) uint64 { +func (k Keeper) getEvidenceEpochCount(ctx sdk.Context, epochID uint64, subjectAddress string, evidenceType types.EvidenceType) uint64 { store := k.kvStore(ctx) - bz := store.Get(types.EvidenceWindowCountKey(windowID, subjectAddress, evidenceType)) + bz := store.Get(types.EvidenceEpochCountKey(epochID, subjectAddress, evidenceType)) if len(bz) != 8 { return 0 } return binary.BigEndian.Uint64(bz) } -func (k Keeper) incrementEvidenceWindowCount(ctx sdk.Context, windowID uint64, subjectAddress string, evidenceType types.EvidenceType) { +func (k Keeper) incrementEvidenceEpochCount(ctx sdk.Context, epochID uint64, subjectAddress string, evidenceType types.EvidenceType) { store := k.kvStore(ctx) - key := types.EvidenceWindowCountKey(windowID, subjectAddress, evidenceType) + key := types.EvidenceEpochCountKey(epochID, subjectAddress, evidenceType) current := uint64(0) if bz := store.Get(key); len(bz) == 8 { diff --git a/x/audit/v1/keeper/genesis.go b/x/audit/v1/keeper/genesis.go index 70eeee7..24faab0 100644 --- a/x/audit/v1/keeper/genesis.go +++ b/x/audit/v1/keeper/genesis.go @@ -10,6 +10,8 @@ import ( // InitGenesis initializes the module's state from a provided genesis state. func (k Keeper) InitGenesis(ctx context.Context, genState types.GenesisState) error { + // Genesis is the initial source of truth for module params. After genesis, params can + // only be updated via governance (MsgUpdateParams). if err := k.SetParams(ctx, genState.Params); err != nil { return err } @@ -19,6 +21,11 @@ func (k Keeper) InitGenesis(ctx context.Context, genState types.GenesisState) er sdkCtx = sdk.UnwrapSDKContext(ctx) } + params := genState.Params.WithDefaults() + if err := params.Validate(); err != nil { + return err + } + var nextEvidenceID uint64 if genState.NextEvidenceId != 0 { nextEvidenceID = genState.NextEvidenceId diff --git a/x/audit/v1/keeper/keeper.go b/x/audit/v1/keeper/keeper.go index 268d813..f8eb36a 100644 --- a/x/audit/v1/keeper/keeper.go +++ b/x/audit/v1/keeper/keeper.go @@ -21,6 +21,8 @@ type Keeper struct { // should be the x/gov module account. authority []byte + // supernodeKeeper is used to snapshot eligible supernodes at epoch start (for anchoring) + // and to apply postpone/recovery transitions at epoch end. supernodeKeeper sntypes.SupernodeKeeper } @@ -32,6 +34,8 @@ func NewKeeper( authority []byte, supernodeKeeper sntypes.SupernodeKeeper, ) Keeper { + // Keeper construction is consensus-critical: authority address validity is verified once + // so later param updates can't panic due to malformed config. if _, err := addressCodec.BytesToString(authority); err != nil { panic(fmt.Sprintf("invalid authority address: %s", err)) } diff --git a/x/audit/v1/keeper/msg_submit_audit_report.go b/x/audit/v1/keeper/msg_submit_audit_report.go index e219398..0ba6dbd 100644 --- a/x/audit/v1/keeper/msg_submit_audit_report.go +++ b/x/audit/v1/keeper/msg_submit_audit_report.go @@ -17,16 +17,16 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu sdkCtx := sdk.UnwrapSDKContext(ctx) params := m.GetParams(ctx).WithDefaults() - // Validate window_id acceptance: only the current window_id is accepted at the current height. - ws, err := m.getCurrentWindowState(sdkCtx, params) + // Validate epoch_id acceptance: only the current epoch_id is accepted at the current height. + epoch, err := deriveEpochAtHeight(sdkCtx.BlockHeight(), params) if err != nil { return nil, err } - if req.WindowId != ws.WindowID { - return nil, errorsmod.Wrapf(types.ErrInvalidWindowID, "window_id %d not accepted at height %d", req.WindowId, sdkCtx.BlockHeight()) + if req.EpochId != epoch.EpochID { + return nil, errorsmod.Wrapf(types.ErrInvalidEpochID, "epoch_id %d not accepted at height %d", req.EpochId, sdkCtx.BlockHeight()) } - if sdkCtx.BlockHeight() < ws.StartHeight || sdkCtx.BlockHeight() > ws.EndHeight { - return nil, errorsmod.Wrapf(types.ErrInvalidWindowID, "window_id not accepted at height %d", sdkCtx.BlockHeight()) + if sdkCtx.BlockHeight() < epoch.StartHeight || sdkCtx.BlockHeight() > epoch.EndHeight { + return nil, errorsmod.Wrapf(types.ErrInvalidEpochID, "epoch_id not accepted at height %d", sdkCtx.BlockHeight()) } _, found, err := m.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.SupernodeAccount) @@ -37,38 +37,55 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu return nil, errorsmod.Wrap(types.ErrReporterNotFound, "unknown supernode_account") } - // Enforce peer-observation gating at submission time using the persisted window snapshot. - // Enforcement later assumes all stored peer observations were gated here. - snap, found := m.GetWindowSnapshot(sdkCtx, req.WindowId) + anchor, found := m.GetEpochAnchor(sdkCtx, req.EpochId) if !found { - return nil, errorsmod.Wrapf(types.ErrWindowSnapshotNotFound, "window snapshot not found for window_id %d", req.WindowId) + return nil, errorsmod.Wrapf(types.ErrInvalidEpochID, "epoch anchor not found for epoch_id %d", req.EpochId) } - allowedTargets := make(map[string]struct{}) - for _, a := range snap.Assignments { - if a.ProberSupernodeAccount != req.SupernodeAccount { - continue - } - for _, t := range a.TargetSupernodeAccounts { - allowedTargets[t] = struct{}{} - } - break + allowedTargetsList, isProber, err := computeAuditPeerTargetsForReporter(¶ms, anchor.ActiveSupernodeAccounts, anchor.TargetSupernodeAccounts, anchor.Seed, req.SupernodeAccount) + if err != nil { + return nil, err + } + allowedTargets := make(map[string]struct{}, len(allowedTargetsList)) + for _, t := range allowedTargetsList { + allowedTargets[t] = struct{}{} } requiredPortsLen := len(params.RequiredOpenPorts) - if len(allowedTargets) == 0 { - // Not a prober for this window (e.g. POSTPONED). Peer observations are not accepted. + // Self report port states are persisted on-chain. To prevent state bloat and keep the + // semantics clear, allow either: + // - an empty list (unknown/unreported), or + // - a full list matching required_open_ports length (same ordering). + if len(req.SelfReport.InboundPortStates) > requiredPortsLen { + return nil, errorsmod.Wrapf( + types.ErrInvalidPortStatesLength, + "inbound_port_states length %d exceeds required_open_ports length %d", + len(req.SelfReport.InboundPortStates), requiredPortsLen, + ) + } + if len(req.SelfReport.InboundPortStates) != 0 && len(req.SelfReport.InboundPortStates) != requiredPortsLen { + return nil, errorsmod.Wrapf( + types.ErrInvalidPortStatesLength, + "inbound_port_states length %d must be 0 or %d", + len(req.SelfReport.InboundPortStates), requiredPortsLen, + ) + } + if !isProber { + // Not a prober for this epoch (e.g. POSTPONED). Peer observations are not accepted. if len(req.PeerObservations) > 0 { - return nil, errorsmod.Wrap(types.ErrInvalidReporterState, "reporter not eligible for peer observations in this window") + return nil, errorsmod.Wrap(types.ErrInvalidReporterState, "reporter not eligible for peer observations in this epoch") } } else { - // Probers must submit peer observations for all assigned targets for the window. + // Probers must submit peer observations for all assigned targets for the epoch. if len(req.PeerObservations) != len(allowedTargets) { return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "expected peer observations for %d assigned targets; got %d", len(allowedTargets), len(req.PeerObservations)) } seenTargets := make(map[string]struct{}, len(req.PeerObservations)) for _, obs := range req.PeerObservations { + if obs == nil { + return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "nil peer observation") + } target := obs.TargetSupernodeAccount if target == "" { return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "empty target_supernode_account") @@ -77,7 +94,7 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "self-targeting is not allowed") } if _, ok := allowedTargets[target]; !ok { - return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "target %q is not assigned to reporter in this window", target) + return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "target %q is not assigned to reporter in this epoch", target) } if _, dup := seenTargets[target]; dup { return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "duplicate peer observation for target %q", target) @@ -94,13 +111,13 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu } reporterAccount := req.SupernodeAccount - if m.HasReport(sdkCtx, req.WindowId, reporterAccount) { - return nil, errorsmod.Wrap(types.ErrDuplicateReport, "report already submitted for this window") + if m.HasReport(sdkCtx, req.EpochId, reporterAccount) { + return nil, errorsmod.Wrap(types.ErrDuplicateReport, "report already submitted for this epoch") } report := types.AuditReport{ SupernodeAccount: reporterAccount, - WindowId: req.WindowId, + EpochId: req.EpochId, ReportHeight: sdkCtx.BlockHeight(), SelfReport: req.SelfReport, PeerObservations: req.PeerObservations, @@ -109,11 +126,14 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu if err := m.SetReport(sdkCtx, report); err != nil { return nil, err } - m.SetReportIndex(sdkCtx, req.WindowId, reporterAccount) - m.SetSelfReportIndex(sdkCtx, req.WindowId, reporterAccount) + m.SetReportIndex(sdkCtx, req.EpochId, reporterAccount) + m.SetSelfReportIndex(sdkCtx, req.EpochId, reporterAccount) seenSupernodes := make(map[string]struct{}, len(req.PeerObservations)) for _, obs := range req.PeerObservations { + if obs == nil { + continue + } supernodeAccount := obs.TargetSupernodeAccount if supernodeAccount == "" { continue @@ -122,7 +142,7 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu continue } seenSupernodes[supernodeAccount] = struct{}{} - m.SetSupernodeReportIndex(sdkCtx, supernodeAccount, req.WindowId, reporterAccount) + m.SetSupernodeReportIndex(sdkCtx, supernodeAccount, req.EpochId, reporterAccount) } return &types.MsgSubmitAuditReportResponse{}, nil diff --git a/x/audit/v1/keeper/msg_submit_audit_report_test.go b/x/audit/v1/keeper/msg_submit_audit_report_test.go new file mode 100644 index 0000000..94b1507 --- /dev/null +++ b/x/audit/v1/keeper/msg_submit_audit_report_test.go @@ -0,0 +1,79 @@ +package keeper_test + +import ( + "testing" + + "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func TestSubmitAuditReport_ValidatesInboundPortStatesLength(t *testing.T) { + f := initFixture(t) + f.ctx = f.ctx.WithBlockHeight(1) + + ms := keeper.NewMsgServerImpl(f.keeper) + + reporter := sdk.AccAddress([]byte("reporter_address_20b")).String() + active := sdk.AccAddress([]byte("active_address__20b")).String() + + // Reporter exists on-chain as a supernode, but is not necessarily ACTIVE at epoch start. + f.supernodeKeeper.EXPECT(). + GetSuperNodeByAccount(gomock.Any(), reporter). + Return(sntypes.SuperNode{}, true, nil). + AnyTimes() + + // Seeded epoch anchor for epoch 0 (content not important for this test beyond existence). + err := f.keeper.SetEpochAnchor(f.ctx, types.EpochAnchor{ + EpochId: 0, + EpochStartHeight: 1, + EpochEndHeight: 400, + EpochLengthBlocks: types.DefaultEpochLengthBlocks, + Seed: make([]byte, 32), + ActiveSupernodeAccounts: []string{active}, + TargetSupernodeAccounts: []string{active}, + ParamsCommitment: []byte{1}, + ActiveSetCommitment: []byte{1}, + TargetsSetCommitment: []byte{1}, + }) + require.NoError(t, err) + + requiredPortsLen := len(types.DefaultRequiredOpenPorts) + require.Greater(t, requiredPortsLen, 0) + + // Empty inbound_port_states is allowed (unknown/unreported). + _, err = ms.SubmitAuditReport(f.ctx, &types.MsgSubmitAuditReport{ + SupernodeAccount: reporter, + EpochId: 0, + SelfReport: types.AuditSelfReport{}, + PeerObservations: nil, + }) + require.NoError(t, err) + + // Partial inbound_port_states is rejected. + _, err = ms.SubmitAuditReport(f.ctx, &types.MsgSubmitAuditReport{ + SupernodeAccount: reporter, + EpochId: 0, + SelfReport: types.AuditSelfReport{ + InboundPortStates: []types.PortState{types.PortState_PORT_STATE_OPEN}, + }, + PeerObservations: nil, + }) + require.Error(t, err) + + // Oversized inbound_port_states is rejected. + oversized := make([]types.PortState, requiredPortsLen+1) + _, err = ms.SubmitAuditReport(f.ctx, &types.MsgSubmitAuditReport{ + SupernodeAccount: reporter, + EpochId: 0, + SelfReport: types.AuditSelfReport{ + InboundPortStates: oversized, + }, + PeerObservations: nil, + }) + require.Error(t, err) +} + diff --git a/x/audit/v1/keeper/msg_update_params.go b/x/audit/v1/keeper/msg_update_params.go index 04c1711..5f35811 100644 --- a/x/audit/v1/keeper/msg_update_params.go +++ b/x/audit/v1/keeper/msg_update_params.go @@ -4,7 +4,6 @@ import ( "context" errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) @@ -14,8 +13,6 @@ func (m msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) return nil, errorsmod.Wrap(types.ErrInvalidSigner, "empty request") } - sdkCtx := sdk.UnwrapSDKContext(ctx) - authority, err := m.addressCodec.BytesToString(m.authority) if err != nil { return nil, err @@ -29,9 +26,17 @@ func (m msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) return nil, err } - // If reporting_window_blocks changes, schedule the new size to take effect at the next boundary. - if err := m.scheduleReportingWindowBlocksChangeAtNextBoundary(sdkCtx, m.GetParams(ctx).WithDefaults(), params.ReportingWindowBlocks); err != nil { - return nil, err + // Params are changed only by genesis or by this governance message. Epoch cadence is an + // especially sensitive invariant because it defines height->epoch mapping used throughout + // the module (anchoring, gating, enforcement, pruning). + // Epoch cadence is a global invariant. Do not allow epoch math changes via governance, + // since it would re-map heights->epoch_id and break deterministic off-chain behavior. + current := m.GetParams(ctx).WithDefaults() + if params.EpochLengthBlocks != current.EpochLengthBlocks { + return nil, errorsmod.Wrap(types.ErrInvalidSigner, "epoch_length_blocks is immutable after genesis") + } + if params.EpochZeroHeight != current.EpochZeroHeight { + return nil, errorsmod.Wrap(types.ErrInvalidSigner, "epoch_zero_height is immutable after genesis") } if err := m.SetParams(ctx, params); err != nil { diff --git a/x/audit/v1/keeper/params.go b/x/audit/v1/keeper/params.go index e05c97b..8d237f2 100644 --- a/x/audit/v1/keeper/params.go +++ b/x/audit/v1/keeper/params.go @@ -9,6 +9,9 @@ import ( ) func (k Keeper) GetParams(ctx context.Context) (params types.Params) { + // Params are stored as a single blob under `types.ParamsKey`. They are initially set at + // genesis (`keeper.InitGenesis`), and can later be updated via governance (`MsgUpdateParams`) + // subject to immutability constraints (epoch cadence). store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) bz := store.Get(types.ParamsKey) if bz == nil { @@ -20,6 +23,7 @@ func (k Keeper) GetParams(ctx context.Context) (params types.Params) { } func (k Keeper) SetParams(ctx context.Context, params types.Params) error { + // Always store params with defaults applied, so zero values in state never imply "unset". store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) params = params.WithDefaults() diff --git a/x/audit/v1/keeper/prune.go b/x/audit/v1/keeper/prune.go index 12431ed..5935fbe 100644 --- a/x/audit/v1/keeper/prune.go +++ b/x/audit/v1/keeper/prune.go @@ -9,49 +9,49 @@ import ( "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) -// PruneOldWindows bounds audit storage by window_id, keeping only the last params.keep_last_window_entries windows -// (including the provided currentWindowID). -func (k Keeper) PruneOldWindows(ctx sdk.Context, currentWindowID uint64, params types.Params) error { +// PruneOldEpochs bounds audit storage by epoch_id, keeping only the last params.keep_last_epoch_entries epochs +// (including the provided currentEpochID). +func (k Keeper) PruneOldEpochs(ctx sdk.Context, currentEpochID uint64, params types.Params) error { params = params.WithDefaults() - keepLastWindowEntries := params.KeepLastWindowEntries + keepLastEpochEntries := params.KeepLastEpochEntries - // Keep [minKeepWindowID .. currentWindowID]. - var minKeepWindowID uint64 - if currentWindowID+1 > keepLastWindowEntries { - minKeepWindowID = currentWindowID + 1 - keepLastWindowEntries + // Keep [minKeepEpochID .. currentEpochID]. + var minKeepEpochID uint64 + if currentEpochID+1 > keepLastEpochEntries { + minKeepEpochID = currentEpochID + 1 - keepLastEpochEntries } else { - minKeepWindowID = 0 + minKeepEpochID = 0 } store := k.kvStore(ctx) - // Snapshots: ws/ - if err := prunePrefixByWindowIDLeadingU64(store, []byte("ws/"), minKeepWindowID); err != nil { + // Epoch anchors: ea/ + if err := prunePrefixByWindowIDLeadingU64(store, types.EpochAnchorPrefix(), minKeepEpochID); err != nil { return err } - // Reports: r/ - if err := prunePrefixByWindowIDLeadingU64(store, []byte("r/"), minKeepWindowID); err != nil { + // Reports: r/ + if err := prunePrefixByWindowIDLeadingU64(store, []byte("r/"), minKeepEpochID); err != nil { return err } // Indices: - // - ri// - // - ss// - // - sr/// - pruneReporterTrailingWindowID(store, []byte("ri/"), minKeepWindowID) - pruneReporterTrailingWindowID(store, []byte("ss/"), minKeepWindowID) - pruneSupernodeWindowReporter(store, []byte("sr/"), minKeepWindowID) - - // Evidence window counts: evw//... - if err := prunePrefixByWindowIDLeadingU64(store, types.EvidenceWindowCountPrefix(), minKeepWindowID); err != nil { + // - ri// + // - ss// + // - sr/// + pruneReporterTrailingWindowID(store, []byte("ri/"), minKeepEpochID) + pruneReporterTrailingWindowID(store, []byte("ss/"), minKeepEpochID) + pruneSupernodeWindowReporter(store, []byte("sr/"), minKeepEpochID) + + // Evidence epoch counts: eve//... + if err := prunePrefixByWindowIDLeadingU64(store, types.EvidenceEpochCountPrefix(), minKeepEpochID); err != nil { return err } return nil } -func prunePrefixByWindowIDLeadingU64(store storetypes.KVStore, prefix []byte, minKeepWindowID uint64) error { +func prunePrefixByWindowIDLeadingU64(store storetypes.KVStore, prefix []byte, minKeepEpochID uint64) error { it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) defer it.Close() @@ -63,9 +63,9 @@ func prunePrefixByWindowIDLeadingU64(store storetypes.KVStore, prefix []byte, mi // Malformed; skip. continue } - windowID := binary.BigEndian.Uint64(key[len(prefix) : len(prefix)+8]) - if windowID >= minKeepWindowID { - // Keys are ordered by leading u64be(window_id); we can stop. + epochID := binary.BigEndian.Uint64(key[len(prefix) : len(prefix)+8]) + if epochID >= minKeepEpochID { + // Keys are ordered by leading u64be(epoch_id); we can stop. break } // Copy key before iterator advances. @@ -82,9 +82,9 @@ func prunePrefixByWindowIDLeadingU64(store storetypes.KVStore, prefix []byte, mi // pruneReporterTrailingWindowID prunes keys shaped like: // -// "/" +// "/" // -// by parsing the final 8 bytes as the window id. +// by parsing the final 8 bytes as the epoch id. func pruneReporterTrailingWindowID(store storetypes.KVStore, prefix []byte, minKeepWindowID uint64) { it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) defer it.Close() @@ -96,8 +96,8 @@ func pruneReporterTrailingWindowID(store storetypes.KVStore, prefix []byte, minK if len(key) < len(prefix)+1+8 { continue } - windowID := binary.BigEndian.Uint64(key[len(key)-8:]) - if windowID >= minKeepWindowID { + epochID := binary.BigEndian.Uint64(key[len(key)-8:]) + if epochID >= minKeepWindowID { continue } kc := make([]byte, len(key)) @@ -112,7 +112,7 @@ func pruneReporterTrailingWindowID(store storetypes.KVStore, prefix []byte, minK // pruneSupernodeWindowReporter prunes keys shaped like: // -// sr/"/""/" +// sr/"/""/" func pruneSupernodeWindowReporter(store storetypes.KVStore, prefix []byte, minKeepWindowID uint64) { it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) defer it.Close() @@ -132,10 +132,10 @@ func pruneSupernodeWindowReporter(store storetypes.KVStore, prefix []byte, minKe if len(rest) < sep+1+8+1 { continue } - windowIDStart := sep + 1 - windowIDEnd := windowIDStart + 8 - windowID := binary.BigEndian.Uint64(rest[windowIDStart:windowIDEnd]) - if windowID >= minKeepWindowID { + epochIDStart := sep + 1 + epochIDEnd := epochIDStart + 8 + epochID := binary.BigEndian.Uint64(rest[epochIDStart:epochIDEnd]) + if epochID >= minKeepWindowID { continue } kc := make([]byte, len(key)) diff --git a/x/audit/v1/keeper/query_assigned_targets.go b/x/audit/v1/keeper/query_assigned_targets.go index bfb66e7..c562a0f 100644 --- a/x/audit/v1/keeper/query_assigned_targets.go +++ b/x/audit/v1/keeper/query_assigned_targets.go @@ -31,32 +31,36 @@ func (q queryServer) AssignedTargets(ctx context.Context, req *types.QueryAssign params := q.k.GetParams(ctx).WithDefaults() - windowID := req.WindowId - if !req.FilterByWindowId { - ws, err := q.k.getCurrentWindowState(sdkCtx, params) + epochID := req.EpochId + var epochStart int64 + if !req.FilterByEpochId { + epoch, err := deriveEpochAtHeight(sdkCtx.BlockHeight(), params) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } - windowID = ws.WindowID + epochID = epoch.EpochID + epochStart = epoch.StartHeight + } else { + epoch, err := deriveEpochByID(epochID, params) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + epochStart = epoch.StartHeight } - snap, found := q.k.GetWindowSnapshot(sdkCtx, windowID) + anchor, found := q.k.GetEpochAnchor(sdkCtx, epochID) if !found { - return nil, status.Error(codes.NotFound, "window snapshot not found") + return nil, status.Error(codes.NotFound, "epoch anchor not found") } - var targets []string - for _, a := range snap.Assignments { - if a.ProberSupernodeAccount != req.SupernodeAccount { - continue - } - targets = append([]string(nil), a.TargetSupernodeAccounts...) - break + targets, _, err := computeAuditPeerTargetsForReporter(¶ms, anchor.ActiveSupernodeAccounts, anchor.TargetSupernodeAccounts, anchor.Seed, req.SupernodeAccount) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) } return &types.QueryAssignedTargetsResponse{ - WindowId: windowID, - WindowStartHeight: snap.WindowStartHeight, + EpochId: epochID, + EpochStartHeight: epochStart, RequiredOpenPorts: append([]uint32(nil), params.RequiredOpenPorts...), TargetSupernodeAccounts: targets, }, nil diff --git a/x/audit/v1/keeper/query_audit_report.go b/x/audit/v1/keeper/query_audit_report.go index 9ffb31b..42ba296 100644 --- a/x/audit/v1/keeper/query_audit_report.go +++ b/x/audit/v1/keeper/query_audit_report.go @@ -28,7 +28,7 @@ func (q queryServer) AuditReport(ctx context.Context, req *types.QueryAuditRepor return nil, status.Error(codes.NotFound, "supernode not found") } - r, found := q.k.GetReport(sdkCtx, req.WindowId, req.SupernodeAccount) + r, found := q.k.GetReport(sdkCtx, req.EpochId, req.SupernodeAccount) if !found { return nil, status.Error(codes.NotFound, "audit report not found") } diff --git a/x/audit/v1/keeper/query_audit_reports_by_reporter.go b/x/audit/v1/keeper/query_audit_reports_by_reporter.go index 14597e0..aa7d472 100644 --- a/x/audit/v1/keeper/query_audit_reports_by_reporter.go +++ b/x/audit/v1/keeper/query_audit_reports_by_reporter.go @@ -42,12 +42,20 @@ func (q queryServer) AuditReportsByReporter(ctx context.Context, req *types.Quer pagination = &query.PageRequest{Limit: 100} } + if req.FilterByEpochId { + r, found := q.k.GetReport(sdkCtx, req.EpochId, req.SupernodeAccount) + if !found { + return &types.QueryAuditReportsByReporterResponse{Reports: []types.AuditReport{}, Pagination: &query.PageResponse{}}, nil + } + return &types.QueryAuditReportsByReporterResponse{Reports: []types.AuditReport{r}, Pagination: &query.PageResponse{}}, nil + } + pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { if len(key) != 8 { return status.Error(codes.Internal, "invalid report index key") } - windowID := binary.BigEndian.Uint64(key) - r, found := q.k.GetReport(sdkCtx, windowID, req.SupernodeAccount) + epochID := binary.BigEndian.Uint64(key) + r, found := q.k.GetReport(sdkCtx, epochID, req.SupernodeAccount) if !found { return nil } diff --git a/x/audit/v1/keeper/query_current_epoch.go b/x/audit/v1/keeper/query_current_epoch.go new file mode 100644 index 0000000..d414046 --- /dev/null +++ b/x/audit/v1/keeper/query_current_epoch.go @@ -0,0 +1,31 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (q queryServer) CurrentEpoch(ctx context.Context, req *types.QueryCurrentEpochRequest) (*types.QueryCurrentEpochResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + params := q.k.GetParams(ctx).WithDefaults() + + epoch, err := deriveEpochAtHeight(sdkCtx.BlockHeight(), params) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryCurrentEpochResponse{ + EpochId: epoch.EpochID, + EpochStartHeight: epoch.StartHeight, + EpochEndHeight: epoch.EndHeight, + }, nil +} diff --git a/x/audit/v1/keeper/query_current_epoch_anchor.go b/x/audit/v1/keeper/query_current_epoch_anchor.go new file mode 100644 index 0000000..c38c2d6 --- /dev/null +++ b/x/audit/v1/keeper/query_current_epoch_anchor.go @@ -0,0 +1,31 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +func (q queryServer) CurrentEpochAnchor(ctx context.Context, req *types.QueryCurrentEpochAnchorRequest) (*types.QueryCurrentEpochAnchorResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + params := q.k.GetParams(ctx).WithDefaults() + epoch, err := deriveEpochAtHeight(sdkCtx.BlockHeight(), params) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + anchor, found := q.k.GetEpochAnchor(sdkCtx, epoch.EpochID) + if !found { + return nil, status.Error(codes.NotFound, "current epoch anchor not found") + } + + return &types.QueryCurrentEpochAnchorResponse{Anchor: anchor}, nil +} diff --git a/x/audit/v1/keeper/query_current_window.go b/x/audit/v1/keeper/query_current_window.go deleted file mode 100644 index b2d8304..0000000 --- a/x/audit/v1/keeper/query_current_window.go +++ /dev/null @@ -1,32 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/LumeraProtocol/lumera/x/audit/v1/types" -) - -func (q queryServer) CurrentWindow(ctx context.Context, req *types.QueryCurrentWindowRequest) (*types.QueryCurrentWindowResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - sdkCtx := sdk.UnwrapSDKContext(ctx) - ws, found, err := q.k.getWindowState(sdkCtx) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - if !found { - return nil, status.Error(codes.NotFound, "current window not initialized") - } - - return &types.QueryCurrentWindowResponse{ - WindowId: ws.WindowID, - WindowStartHeight: ws.StartHeight, - WindowEndHeight: ws.EndHeight, - }, nil -} diff --git a/x/audit/v1/keeper/query_window_snapshot.go b/x/audit/v1/keeper/query_epoch_anchor.go similarity index 50% rename from x/audit/v1/keeper/query_window_snapshot.go rename to x/audit/v1/keeper/query_epoch_anchor.go index 4d41a0f..d548895 100644 --- a/x/audit/v1/keeper/query_window_snapshot.go +++ b/x/audit/v1/keeper/query_epoch_anchor.go @@ -10,16 +10,16 @@ import ( "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) -func (q queryServer) WindowSnapshot(ctx context.Context, req *types.QueryWindowSnapshotRequest) (*types.QueryWindowSnapshotResponse, error) { +func (q queryServer) EpochAnchor(ctx context.Context, req *types.QueryEpochAnchorRequest) (*types.QueryEpochAnchorResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } sdkCtx := sdk.UnwrapSDKContext(ctx) - snap, found := q.k.GetWindowSnapshot(sdkCtx, req.WindowId) + anchor, found := q.k.GetEpochAnchor(sdkCtx, req.EpochId) if !found { - return nil, status.Error(codes.NotFound, "window snapshot not found") + return nil, status.Error(codes.NotFound, "epoch anchor not found") } - return &types.QueryWindowSnapshotResponse{Snapshot: snap}, nil + return &types.QueryEpochAnchorResponse{Anchor: anchor}, nil } diff --git a/x/audit/v1/keeper/query_evidence.go b/x/audit/v1/keeper/query_evidence.go index 2f66872..61b2ba1 100644 --- a/x/audit/v1/keeper/query_evidence.go +++ b/x/audit/v1/keeper/query_evidence.go @@ -64,7 +64,7 @@ func (q queryServer) EvidenceBySubject(ctx context.Context, req *types.QueryEvid } return &types.QueryEvidenceBySubjectResponse{ - Evidence: evidence, + Evidence: evidence, Pagination: pageRes, }, nil } @@ -103,8 +103,7 @@ func (q queryServer) EvidenceByAction(ctx context.Context, req *types.QueryEvide } return &types.QueryEvidenceByActionResponse{ - Evidence: evidence, + Evidence: evidence, Pagination: pageRes, }, nil } - diff --git a/x/audit/v1/keeper/query_self_reports.go b/x/audit/v1/keeper/query_self_reports.go index 45671f8..cb0b546 100644 --- a/x/audit/v1/keeper/query_self_reports.go +++ b/x/audit/v1/keeper/query_self_reports.go @@ -24,11 +24,11 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport sdkCtx := sdk.UnwrapSDKContext(ctx) storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) - useWindowFilter := req.FilterByWindowId || req.WindowId != 0 + useEpochFilter := req.FilterByEpochId || req.EpochId != 0 var store prefix.Store - if useWindowFilter { - store = prefix.NewStore(storeAdapter, types.SelfReportIndexKey(req.SupernodeAccount, req.WindowId)) + if useEpochFilter { + store = prefix.NewStore(storeAdapter, types.SelfReportIndexKey(req.SupernodeAccount, req.EpochId)) } else { store = prefix.NewStore(storeAdapter, types.SelfReportIndexPrefix(req.SupernodeAccount)) } @@ -41,22 +41,22 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport } pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { - var windowID uint64 - if useWindowFilter { - windowID = req.WindowId + var epochID uint64 + if useEpochFilter { + epochID = req.EpochId } else { if len(key) != 8 { return status.Error(codes.Internal, "invalid self report index key") } - windowID = binary.BigEndian.Uint64(key) + epochID = binary.BigEndian.Uint64(key) } - r, found := q.k.GetReport(sdkCtx, windowID, req.SupernodeAccount) + r, found := q.k.GetReport(sdkCtx, epochID, req.SupernodeAccount) if !found { return nil } reports = append(reports, types.SelfReport{ - WindowId: r.WindowId, + EpochId: r.EpochId, ReportHeight: r.ReportHeight, SelfReport: r.SelfReport, }) diff --git a/x/audit/v1/keeper/query_supernode_reports.go b/x/audit/v1/keeper/query_supernode_reports.go index c8eb34a..4be6f37 100644 --- a/x/audit/v1/keeper/query_supernode_reports.go +++ b/x/audit/v1/keeper/query_supernode_reports.go @@ -25,9 +25,9 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) var store prefix.Store - useWindowFilter := req.FilterByWindowId || req.WindowId != 0 - if useWindowFilter { - store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexWindowPrefix(req.SupernodeAccount, req.WindowId)) + useEpochFilter := req.FilterByEpochId || req.EpochId != 0 + if useEpochFilter { + store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexEpochPrefix(req.SupernodeAccount, req.EpochId)) } else { store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexPrefix(req.SupernodeAccount)) } @@ -41,18 +41,18 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { var ( - windowID uint64 + epochID uint64 reporter string ) - if useWindowFilter { - windowID = req.WindowId + if useEpochFilter { + epochID = req.EpochId reporter = string(key) } else { if len(key) < 9 || key[8] != '/' { return status.Error(codes.Internal, "invalid supernode report index key") } - windowID = binary.BigEndian.Uint64(key[:8]) + epochID = binary.BigEndian.Uint64(key[:8]) reporter = string(key[9:]) } @@ -60,13 +60,16 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper return nil } - r, found := q.k.GetReport(sdkCtx, windowID, reporter) + r, found := q.k.GetReport(sdkCtx, epochID, reporter) if !found { return nil } var portStates []types.PortState for _, obs := range r.PeerObservations { + if obs == nil { + continue + } if obs.TargetSupernodeAccount != req.SupernodeAccount { continue } @@ -81,7 +84,7 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper reports = append(reports, types.SupernodeReport{ ReporterSupernodeAccount: reporter, - WindowId: r.WindowId, + EpochId: r.EpochId, ReportHeight: r.ReportHeight, PortStates: portStates, }) diff --git a/x/audit/v1/keeper/state.go b/x/audit/v1/keeper/state.go index d3d8b5c..6ae5131 100644 --- a/x/audit/v1/keeper/state.go +++ b/x/audit/v1/keeper/state.go @@ -6,14 +6,14 @@ import ( "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) -func (k Keeper) HasReport(ctx sdk.Context, windowID uint64, reporterSupernodeAccount string) bool { +func (k Keeper) HasReport(ctx sdk.Context, epochID uint64, reporterSupernodeAccount string) bool { store := k.kvStore(ctx) - return store.Has(types.ReportKey(windowID, reporterSupernodeAccount)) + return store.Has(types.ReportKey(epochID, reporterSupernodeAccount)) } -func (k Keeper) GetReport(ctx sdk.Context, windowID uint64, reporterSupernodeAccount string) (types.AuditReport, bool) { +func (k Keeper) GetReport(ctx sdk.Context, epochID uint64, reporterSupernodeAccount string) (types.AuditReport, bool) { store := k.kvStore(ctx) - bz := store.Get(types.ReportKey(windowID, reporterSupernodeAccount)) + bz := store.Get(types.ReportKey(epochID, reporterSupernodeAccount)) if bz == nil { return types.AuditReport{}, false } @@ -28,21 +28,21 @@ func (k Keeper) SetReport(ctx sdk.Context, r types.AuditReport) error { if err != nil { return err } - store.Set(types.ReportKey(r.WindowId, r.SupernodeAccount), bz) + store.Set(types.ReportKey(r.EpochId, r.SupernodeAccount), bz) return nil } -func (k Keeper) SetReportIndex(ctx sdk.Context, windowID uint64, reporterSupernodeAccount string) { +func (k Keeper) SetReportIndex(ctx sdk.Context, epochID uint64, reporterSupernodeAccount string) { store := k.kvStore(ctx) - store.Set(types.ReportIndexKey(reporterSupernodeAccount, windowID), []byte{1}) + store.Set(types.ReportIndexKey(reporterSupernodeAccount, epochID), []byte{1}) } -func (k Keeper) SetSupernodeReportIndex(ctx sdk.Context, supernodeAccount string, windowID uint64, reporterSupernodeAccount string) { +func (k Keeper) SetSupernodeReportIndex(ctx sdk.Context, supernodeAccount string, epochID uint64, reporterSupernodeAccount string) { store := k.kvStore(ctx) - store.Set(types.SupernodeReportIndexKey(supernodeAccount, windowID, reporterSupernodeAccount), []byte{1}) + store.Set(types.SupernodeReportIndexKey(supernodeAccount, epochID, reporterSupernodeAccount), []byte{1}) } -func (k Keeper) SetSelfReportIndex(ctx sdk.Context, windowID uint64, reporterSupernodeAccount string) { +func (k Keeper) SetSelfReportIndex(ctx sdk.Context, epochID uint64, reporterSupernodeAccount string) { store := k.kvStore(ctx) - store.Set(types.SelfReportIndexKey(reporterSupernodeAccount, windowID), []byte{1}) + store.Set(types.SelfReportIndexKey(reporterSupernodeAccount, epochID), []byte{1}) } diff --git a/x/audit/v1/keeper/storage_challenge_deterministic.go b/x/audit/v1/keeper/storage_challenge_deterministic.go new file mode 100644 index 0000000..000dcb1 --- /dev/null +++ b/x/audit/v1/keeper/storage_challenge_deterministic.go @@ -0,0 +1,92 @@ +package keeper + +import ( + "bytes" + "encoding/hex" + "fmt" + "sort" + "strconv" + + "lukechampine.com/blake3" +) + +type xorCandidate struct { + id string + dist [32]byte +} + +func storageChallengeComparisonTarget(seed []byte, epochID uint64) string { + return "sc:challengers:" + hex.EncodeToString(seed) + ":" + strconv.FormatUint(epochID, 10) +} + +func storageChallengeChallengerCount(nActive int, requested uint32) int { + if nActive <= 0 { + return 0 + } + if requested == 0 { + // auto = ceil(N/3), minimum 1 + return maxInt(1, (nActive+2)/3) + } + if int(requested) > nActive { + return nActive + } + return int(requested) +} + +func selectTopByXORDistance(ids []string, target string, k int) []string { + if k <= 0 || len(ids) == 0 { + return nil + } + + targetHash := ensureHashedTargetBytes([]byte(target)) + + candidates := make([]xorCandidate, 0, len(ids)) + for _, id := range ids { + idHash := blake3.Sum256([]byte(id)) + var dist [32]byte + for i := 0; i < 32; i++ { + dist[i] = idHash[i] ^ targetHash[i] + } + candidates = append(candidates, xorCandidate{id: id, dist: dist}) + } + + sort.Slice(candidates, func(i, j int) bool { + cmp := bytes.Compare(candidates[i].dist[:], candidates[j].dist[:]) + if cmp != 0 { + return cmp < 0 + } + return candidates[i].id < candidates[j].id + }) + + if k > len(candidates) { + k = len(candidates) + } + out := make([]string, 0, k) + for i := 0; i < k; i++ { + out = append(out, candidates[i].id) + } + return out +} + +func ensureHashedTargetBytes(target []byte) [32]byte { + if len(target) == 32 { + var out [32]byte + copy(out[:], target) + return out + } + return blake3.Sum256(target) +} + +func maxInt(a, b int) int { + if a > b { + return a + } + return b +} + +func mustLowerHex32(b []byte) string { + if len(b) != 32 { + panic(fmt.Sprintf("expected 32 bytes, got %d", len(b))) + } + return hex.EncodeToString(b) +} diff --git a/x/audit/v1/keeper/storage_challenge_evidence_test.go b/x/audit/v1/keeper/storage_challenge_evidence_test.go new file mode 100644 index 0000000..b868610 --- /dev/null +++ b/x/audit/v1/keeper/storage_challenge_evidence_test.go @@ -0,0 +1,82 @@ +package keeper_test + +import ( + "bytes" + "encoding/json" + "testing" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" + "github.com/stretchr/testify/require" +) + +func TestCreateEvidence_StorageChallengeFailure_ChallengerPolicy(t *testing.T) { + f := initFixture(t) + + params := types.DefaultParams() + params.ScEnabled = true + params.ScEvidenceSubmitterMustBeChallenger = true + params.ScChallengersPerEpoch = 2 + require.NoError(t, f.keeper.SetParams(f.ctx, params)) + + challenger1, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x11}, 20)) + require.NoError(t, err) + challenger2, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x22}, 20)) + require.NoError(t, err) + subject, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x33}, 20)) + require.NoError(t, err) + outsider, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x44}, 20)) + require.NoError(t, err) + + anchor := types.EpochAnchor{ + EpochId: 0, + EpochStartHeight: 1, + EpochEndHeight: 400, + EpochLengthBlocks: params.EpochLengthBlocks, + Seed: bytes.Repeat([]byte{0x99}, 32), + ActiveSupernodeAccounts: []string{challenger1, challenger2}, + TargetSupernodeAccounts: []string{subject}, + } + require.NoError(t, f.keeper.SetEpochAnchor(f.ctx, anchor)) + + metaOK, err := json.Marshal(types.StorageChallengeFailureEvidenceMetadata{ + EpochId: 0, + ChallengerSupernodeAccount: challenger1, + ChallengedSupernodeAccount: subject, + ChallengeId: "deadbeef", + FileKey: "filekey", + FailureType: "RECIPIENT_UNREACHABLE", + TranscriptHash: "bead", + }) + require.NoError(t, err) + + _, err = f.keeper.CreateEvidence( + f.ctx, + challenger1, + subject, + "", + types.EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE, + string(metaOK), + ) + require.NoError(t, err) + + metaBad, err := json.Marshal(types.StorageChallengeFailureEvidenceMetadata{ + EpochId: 0, + ChallengerSupernodeAccount: outsider, + ChallengedSupernodeAccount: subject, + ChallengeId: "deadbeef", + FileKey: "filekey", + FailureType: "RECIPIENT_UNREACHABLE", + TranscriptHash: "bead", + }) + require.NoError(t, err) + + _, err = f.keeper.CreateEvidence( + f.ctx, + outsider, + subject, + "", + types.EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE, + string(metaBad), + ) + require.Error(t, err) +} diff --git a/x/audit/v1/keeper/supernode_metrics_staleness.go b/x/audit/v1/keeper/supernode_metrics_staleness.go deleted file mode 100644 index e595c8c..0000000 --- a/x/audit/v1/keeper/supernode_metrics_staleness.go +++ /dev/null @@ -1,84 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" -) - -// HandleSupernodeMetricsStaleness applies supernode metrics staleness rules at end-block: -// - compute an "overdue" threshold from MetricsUpdateIntervalBlocks + MetricsGracePeriodBlocks -// - only consider supernodes whose latest state is ACTIVE -// - if no metrics have ever been reported and the chain height passes the threshold, -// mark the supernode as POSTPONED with reason "no metrics reported" -// - if the last metrics height is older than the threshold, mark POSTPONED with -// reason "metrics overdue" -func (k Keeper) HandleSupernodeMetricsStaleness(ctx sdk.Context) error { - params := k.supernodeKeeper.GetParams(ctx) - overdueThreshold := int64(params.MetricsUpdateIntervalBlocks + params.MetricsGracePeriodBlocks) - - supernodes, err := k.supernodeKeeper.GetAllSuperNodes(ctx) - if err != nil { - return err - } - - for i := range supernodes { - sn := supernodes[i] - if len(sn.States) == 0 { - continue - } - lastState := sn.States[len(sn.States)-1].State - // Only perform staleness checks for ACTIVE supernodes. - if lastState != sntypes.SuperNodeStateActive { - continue - } - - valAddr, err := sdk.ValAddressFromBech32(sn.ValidatorAddress) - if err != nil { - continue - } - - lastHeight := int64(0) - if state, ok := k.supernodeKeeper.GetMetricsState(ctx, valAddr); ok { - lastHeight = state.Height - } - - // If no metrics have ever been reported, use the supernode's registration - // height as the baseline for staleness, so newly-registered supernodes - // are given a full update interval + grace period from registration. - if lastHeight == 0 { - var registrationHeight int64 - for _, st := range sn.States { - if st != nil { - registrationHeight = st.Height - break - } - } - if registrationHeight == 0 { - continue - } - if ctx.BlockHeight()-registrationHeight > overdueThreshold { - if err := k.supernodeKeeper.SetSuperNodePostponed(ctx, valAddr, "no metrics reported"); err != nil { - k.Logger().Error( - "failed to mark supernode postponed for missing metrics", - "validator", sn.ValidatorAddress, - "err", err, - ) - } - } - continue - } - - if ctx.BlockHeight()-lastHeight > overdueThreshold { - if err := k.supernodeKeeper.SetSuperNodePostponed(ctx, valAddr, "metrics overdue"); err != nil { - k.Logger().Error( - "failed to mark supernode postponed for overdue metrics", - "validator", sn.ValidatorAddress, - "err", err, - ) - } - } - } - - return nil -} diff --git a/x/audit/v1/keeper/supernode_metrics_staleness_test.go b/x/audit/v1/keeper/supernode_metrics_staleness_test.go deleted file mode 100644 index 05bb521..0000000 --- a/x/audit/v1/keeper/supernode_metrics_staleness_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package keeper_test - -import ( - "testing" - - sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "go.uber.org/mock/gomock" -) - -func TestHandleSupernodeMetricsStaleness_NoMetrics_Postpones(t *testing.T) { - f := initFixture(t) - - // Advance chain height far enough to trigger staleness. - f.ctx = f.ctx.WithBlockHeight(100) - - valAddr := sdk.ValAddress([]byte("validator_address_20")) - valAddrStr := valAddr.String() - - f.supernodeKeeper.EXPECT(). - GetParams(gomock.Any()). - Return(sntypes.Params{ - MetricsUpdateIntervalBlocks: 2, - MetricsGracePeriodBlocks: 3, - }) - - f.supernodeKeeper.EXPECT(). - GetAllSuperNodes(gomock.Any()). - Return([]sntypes.SuperNode{ - { - ValidatorAddress: valAddrStr, - States: []*sntypes.SuperNodeStateRecord{ - {State: sntypes.SuperNodeStateActive, Height: 90}, - }, - }, - }, nil) - - f.supernodeKeeper.EXPECT(). - GetMetricsState(gomock.Any(), gomock.Any()). - Return(sntypes.SupernodeMetricsState{}, false) - - f.supernodeKeeper.EXPECT(). - SetSuperNodePostponed(gomock.Any(), gomock.Any(), "no metrics reported"). - DoAndReturn(func(_ sdk.Context, got sdk.ValAddress, _ string) error { - require.Equal(t, valAddr, got) - return nil - }) - - require.NoError(t, f.keeper.HandleSupernodeMetricsStaleness(f.ctx)) -} diff --git a/x/audit/v1/keeper/window.go b/x/audit/v1/keeper/window.go deleted file mode 100644 index 9689344..0000000 --- a/x/audit/v1/keeper/window.go +++ /dev/null @@ -1,87 +0,0 @@ -package keeper - -import ( - "encoding/binary" - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/LumeraProtocol/lumera/x/audit/v1/keeper/assignment" - "github.com/LumeraProtocol/lumera/x/audit/v1/types" - sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" -) - -func (k Keeper) GetWindowSnapshot(ctx sdk.Context, windowID uint64) (types.WindowSnapshot, bool) { - store := k.kvStore(ctx) - bz := store.Get(types.WindowSnapshotKey(windowID)) - if bz == nil { - return types.WindowSnapshot{}, false - } - var snap types.WindowSnapshot - k.cdc.MustUnmarshal(bz, &snap) - return snap, true -} - -func (k Keeper) SetWindowSnapshot(ctx sdk.Context, snap types.WindowSnapshot) error { - store := k.kvStore(ctx) - bz, err := k.cdc.Marshal(&snap) - if err != nil { - return err - } - store.Set(types.WindowSnapshotKey(snap.WindowId), bz) - return nil -} - -func (k Keeper) CreateWindowSnapshotIfNeeded(ctx sdk.Context, windowID uint64, params types.Params) error { - if _, found := k.GetWindowSnapshot(ctx, windowID); found { - return nil - } - - active, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStateActive) - if err != nil { - return err - } - receiversSN, err := k.supernodeKeeper.GetAllSuperNodes(ctx, sntypes.SuperNodeStateActive, sntypes.SuperNodeStatePostponed) - if err != nil { - return err - } - - senders := make([]string, 0, len(active)) - for _, sn := range active { - if sn.SupernodeAccount == "" { - return fmt.Errorf("supernode %q has empty supernode_account", sn.ValidatorAddress) - } - senders = append(senders, sn.SupernodeAccount) - } - receivers := make([]string, 0, len(receiversSN)) - for _, sn := range receiversSN { - if sn.SupernodeAccount == "" { - return fmt.Errorf("supernode %q has empty supernode_account", sn.ValidatorAddress) - } - receivers = append(receivers, sn.SupernodeAccount) - } - - seedBytes := ctx.HeaderHash() - // In production (CometBFT), ctx.HeaderHash() should always be set and long enough. - // In simulation/benchmarks, the SDK often runs blocks with an empty header hash. - // Fall back to a deterministic 8-byte seed to keep simulation usable. - if len(seedBytes) == 0 { - seedBytes = make([]byte, 8) - binary.BigEndian.PutUint64(seedBytes, uint64(ctx.BlockHeight())) - } - if len(seedBytes) < 8 { - return fmt.Errorf("header hash must be at least 8 bytes") - } - assignments, err := assignment.ComputeSnapshotAssignments(params, senders, receivers, seedBytes) - if err != nil { - return err - } - - snap := types.WindowSnapshot{ - WindowId: windowID, - WindowStartHeight: ctx.BlockHeight(), - Assignments: assignments, - } - - return k.SetWindowSnapshot(ctx, snap) -} diff --git a/x/audit/v1/keeper/window_state.go b/x/audit/v1/keeper/window_state.go deleted file mode 100644 index d86b5b8..0000000 --- a/x/audit/v1/keeper/window_state.go +++ /dev/null @@ -1,183 +0,0 @@ -package keeper - -import ( - "encoding/binary" - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/LumeraProtocol/lumera/x/audit/v1/types" -) - -type windowState struct { - WindowID uint64 - StartHeight int64 - EndHeight int64 - WindowBlocks uint64 -} - -func (ws windowState) validate() error { - if ws.WindowBlocks == 0 { - return fmt.Errorf("window_blocks must be > 0") - } - if ws.StartHeight < 0 || ws.EndHeight < 0 { - return fmt.Errorf("window heights must be >= 0") - } - if ws.EndHeight < ws.StartHeight { - return fmt.Errorf("window_end_height must be >= window_start_height") - } - if ws.EndHeight-ws.StartHeight+1 != int64(ws.WindowBlocks) { - return fmt.Errorf("window length mismatch: blocks=%d start=%d end=%d", ws.WindowBlocks, ws.StartHeight, ws.EndHeight) - } - return nil -} - -func (k Keeper) getWindowState(ctx sdk.Context) (windowState, bool, error) { - store := k.kvStore(ctx) - bz := store.Get(types.CurrentWindowStateKey()) - if bz == nil { - return windowState{}, false, nil - } - if len(bz) != 32 { - return windowState{}, false, fmt.Errorf("invalid current window state length: %d", len(bz)) - } - - ws := windowState{ - WindowID: binary.BigEndian.Uint64(bz[0:8]), - StartHeight: int64(binary.BigEndian.Uint64(bz[8:16])), - EndHeight: int64(binary.BigEndian.Uint64(bz[16:24])), - WindowBlocks: binary.BigEndian.Uint64(bz[24:32]), - } - if err := ws.validate(); err != nil { - return windowState{}, false, err - } - return ws, true, nil -} - -func (k Keeper) setWindowState(ctx sdk.Context, ws windowState) error { - if err := ws.validate(); err != nil { - return err - } - - bz := make([]byte, 32) - binary.BigEndian.PutUint64(bz[0:8], ws.WindowID) - binary.BigEndian.PutUint64(bz[8:16], uint64(ws.StartHeight)) - binary.BigEndian.PutUint64(bz[16:24], uint64(ws.EndHeight)) - binary.BigEndian.PutUint64(bz[24:32], ws.WindowBlocks) - - store := k.kvStore(ctx) - store.Set(types.CurrentWindowStateKey(), bz) - return nil -} - -func (k Keeper) getNextWindowBlocks(ctx sdk.Context) (uint64, bool, error) { - store := k.kvStore(ctx) - bz := store.Get(types.NextWindowBlocksKey()) - if bz == nil { - return 0, false, nil - } - if len(bz) != 8 { - return 0, false, fmt.Errorf("invalid next window blocks length: %d", len(bz)) - } - v := binary.BigEndian.Uint64(bz) - if v == 0 { - return 0, false, fmt.Errorf("invalid next window blocks: 0") - } - return v, true, nil -} - -func (k Keeper) setNextWindowBlocks(ctx sdk.Context, windowBlocks uint64) error { - if windowBlocks == 0 { - return fmt.Errorf("window_blocks must be > 0") - } - bz := make([]byte, 8) - binary.BigEndian.PutUint64(bz, windowBlocks) - store := k.kvStore(ctx) - store.Set(types.NextWindowBlocksKey(), bz) - return nil -} - -func (k Keeper) clearNextWindowBlocks(ctx sdk.Context) { - store := k.kvStore(ctx) - store.Delete(types.NextWindowBlocksKey()) -} - -// initWindowStateIfNeeded writes initial window state once, using the current block height as the first window start. -func (k Keeper) initWindowStateIfNeeded(ctx sdk.Context, params types.Params) (windowState, error) { - if ws, found, err := k.getWindowState(ctx); err != nil { - return windowState{}, err - } else if found { - return ws, nil - } - - windowBlocks := params.ReportingWindowBlocks - if windowBlocks == 0 { - return windowState{}, fmt.Errorf("reporting_window_blocks must be > 0") - } - - start := ctx.BlockHeight() - ws := windowState{ - WindowID: 0, - StartHeight: start, - EndHeight: start + int64(windowBlocks) - 1, - WindowBlocks: windowBlocks, - } - return ws, k.setWindowState(ctx, ws) -} - -func (k Keeper) getCurrentWindowState(ctx sdk.Context, params types.Params) (windowState, error) { - ws, err := k.initWindowStateIfNeeded(ctx, params) - if err != nil { - return windowState{}, err - } - return k.advanceWindowIfNeeded(ctx, params, ws) -} - -func (k Keeper) advanceWindowIfNeeded(ctx sdk.Context, params types.Params, ws windowState) (windowState, error) { - for ctx.BlockHeight() > ws.EndHeight { - nextBlocks, hasNext, err := k.getNextWindowBlocks(ctx) - if err != nil { - return windowState{}, err - } - if hasNext { - k.clearNextWindowBlocks(ctx) - ws.WindowBlocks = nextBlocks - } - if ws.WindowBlocks == 0 { - ws.WindowBlocks = params.ReportingWindowBlocks - } - if ws.WindowBlocks == 0 { - return windowState{}, fmt.Errorf("reporting_window_blocks must be > 0") - } - - nextStart := ws.EndHeight + 1 - ws.WindowID++ - ws.StartHeight = nextStart - ws.EndHeight = nextStart + int64(ws.WindowBlocks) - 1 - - if err := k.setWindowState(ctx, ws); err != nil { - return windowState{}, err - } - } - return ws, nil -} - -// scheduleReportingWindowBlocksChangeAtNextBoundary stores a pending window size that will take effect -// at the next window boundary (end(current)+1). Multiple updates before the boundary overwrite the pending value. -func (k Keeper) scheduleReportingWindowBlocksChangeAtNextBoundary(ctx sdk.Context, params types.Params, newWindowBlocks uint64) error { - if newWindowBlocks == 0 { - return fmt.Errorf("reporting_window_blocks must be > 0") - } - - ws, err := k.getCurrentWindowState(ctx, params) - if err != nil { - return err - } - if ws.WindowBlocks == newWindowBlocks { - // No change needed. - k.clearNextWindowBlocks(ctx) - return nil - } - - return k.setNextWindowBlocks(ctx, newWindowBlocks) -} diff --git a/x/audit/v1/keeper/window_state_test.go b/x/audit/v1/keeper/window_state_test.go deleted file mode 100644 index c6325ae..0000000 --- a/x/audit/v1/keeper/window_state_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package keeper - -import ( - "testing" - - "cosmossdk.io/log" - "cosmossdk.io/store" - "cosmossdk.io/store/metrics" - storetypes "cosmossdk.io/store/types" - cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" - dbm "github.com/cosmos/cosmos-db" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/codec/address" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/runtime" - sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/stretchr/testify/require" - "go.uber.org/mock/gomock" - - "github.com/LumeraProtocol/lumera/x/audit/v1/types" - supernodemocks "github.com/LumeraProtocol/lumera/x/supernode/v1/mocks" -) - -func newAuditKeeperForWindowTests(t testing.TB) (Keeper, sdk.Context) { - t.Helper() - - storeKey := storetypes.NewKVStoreKey(types.StoreKey) - db := dbm.NewMemDB() - stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) - stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) - require.NoError(t, stateStore.LoadLatestVersion()) - - registry := codectypes.NewInterfaceRegistry() - cdc := codec.NewProtoCodec(registry) - storeService := runtime.NewKVStoreService(storeKey) - - ctrl := gomock.NewController(t) - t.Cleanup(ctrl.Finish) - - supernodeKeeper := supernodemocks.NewMockSupernodeKeeper(ctrl) - authority := authtypes.NewModuleAddress(govtypes.ModuleName) - addrCodec := address.NewBech32Codec("lumera") - - k := NewKeeper( - cdc, - addrCodec, - storeService, - log.NewNopLogger(), - authority, - supernodeKeeper, - ) - - ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) - return k, ctx -} - -func TestWindowState_AdvancesAndAppliesPendingWindowBlocks(t *testing.T) { - k, ctx := newAuditKeeperForWindowTests(t) - - params := types.DefaultParams() - params.ReportingWindowBlocks = 10 - - ctx = ctx.WithBlockHeight(100) - ws, err := k.getCurrentWindowState(ctx, params) - require.NoError(t, err) - require.Equal(t, uint64(0), ws.WindowID) - require.Equal(t, int64(100), ws.StartHeight) - require.Equal(t, int64(109), ws.EndHeight) - require.Equal(t, uint64(10), ws.WindowBlocks) - - // Schedule a change; it should not affect the current window. - ctx = ctx.WithBlockHeight(105) - require.NoError(t, k.scheduleReportingWindowBlocksChangeAtNextBoundary(ctx, params, 7)) - ws, err = k.getCurrentWindowState(ctx, params) - require.NoError(t, err) - require.Equal(t, uint64(0), ws.WindowID) - require.Equal(t, int64(100), ws.StartHeight) - require.Equal(t, int64(109), ws.EndHeight) - - // Crossing the boundary advances the window and applies the pending size. - ctx = ctx.WithBlockHeight(110) - ws, err = k.getCurrentWindowState(ctx, params) - require.NoError(t, err) - require.Equal(t, uint64(1), ws.WindowID) - require.Equal(t, int64(110), ws.StartHeight) - require.Equal(t, int64(116), ws.EndHeight) - require.Equal(t, uint64(7), ws.WindowBlocks) - - // Next boundary uses the current window size (no pending). - ctx = ctx.WithBlockHeight(117) - ws, err = k.getCurrentWindowState(ctx, params) - require.NoError(t, err) - require.Equal(t, uint64(2), ws.WindowID) - require.Equal(t, int64(117), ws.StartHeight) - require.Equal(t, int64(123), ws.EndHeight) - require.Equal(t, uint64(7), ws.WindowBlocks) -} - -func TestWindowState_PendingOverwrite(t *testing.T) { - k, ctx := newAuditKeeperForWindowTests(t) - - params := types.DefaultParams() - params.ReportingWindowBlocks = 10 - - ctx = ctx.WithBlockHeight(50) - _, err := k.getCurrentWindowState(ctx, params) - require.NoError(t, err) - - ctx = ctx.WithBlockHeight(55) - require.NoError(t, k.scheduleReportingWindowBlocksChangeAtNextBoundary(ctx, params, 9)) - require.NoError(t, k.scheduleReportingWindowBlocksChangeAtNextBoundary(ctx, params, 8)) - - ctx = ctx.WithBlockHeight(60) - ws, err := k.getCurrentWindowState(ctx, params) - require.NoError(t, err) - require.Equal(t, uint64(1), ws.WindowID) - require.Equal(t, uint64(8), ws.WindowBlocks) - require.Equal(t, int64(60), ws.StartHeight) - require.Equal(t, int64(67), ws.EndHeight) -} - diff --git a/x/audit/v1/module/autocli.go b/x/audit/v1/module/autocli.go index 94c1258..ccb7551 100644 --- a/x/audit/v1/module/autocli.go +++ b/x/audit/v1/module/autocli.go @@ -35,15 +35,15 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "action_id"}}, }, { - RpcMethod: "CurrentWindow", - Use: "current-window", - Short: "Query current audit reporting window boundaries", + RpcMethod: "CurrentEpoch", + Use: "current-epoch", + Short: "Query current audit epoch boundaries", }, { RpcMethod: "AuditReport", - Use: "audit-report [window-id] [supernode-account]", - Short: "Query an audit report by window and reporter", - PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "window_id"}, {ProtoField: "supernode_account"}}, + Use: "audit-report [epoch-id] [supernode-account]", + Short: "Query an audit report by epoch and reporter", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "epoch_id"}, {ProtoField: "supernode_account"}}, }, { RpcMethod: "AuditReportsByReporter", @@ -60,7 +60,7 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { { RpcMethod: "SelfReports", Use: "self-reports [supernode-account]", - Short: "List self-reports submitted by a supernode across windows", + Short: "List self-reports submitted by a supernode across epochs", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ {ProtoField: "supernode_account"}, }, @@ -78,9 +78,9 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { }, { RpcMethod: "SubmitAuditReport", - Use: "submit-audit-report [window-id] [self-report-json]", + Use: "submit-audit-report [epoch-id] [self-report-json]", Short: "Submit an audit report (peer observations encoded in JSON via flags)", - PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "window_id"}, {ProtoField: "self_report"}}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "epoch_id"}, {ProtoField: "self_report"}}, }, { RpcMethod: "SubmitEvidence", diff --git a/x/audit/v1/types/audit.pb.go b/x/audit/v1/types/audit.pb.go index c7016b0..052a1f5 100644 --- a/x/audit/v1/types/audit.pb.go +++ b/x/audit/v1/types/audit.pb.go @@ -132,7 +132,7 @@ func (m *AuditSelfReport) GetFailedActionsCount() uint32 { type AuditPeerObservation struct { TargetSupernodeAccount string `protobuf:"bytes,1,opt,name=target_supernode_account,json=targetSupernodeAccount,proto3" json:"target_supernode_account,omitempty"` - // port_states[i] refers to required_open_ports[i] for the window. + // port_states[i] refers to required_open_ports[i] for the epoch. PortStates []PortState `protobuf:"varint,2,rep,packed,name=port_states,json=portStates,proto3,enum=lumera.audit.v1.PortState" json:"port_states,omitempty"` } @@ -185,7 +185,7 @@ func (m *AuditPeerObservation) GetPortStates() []PortState { type AuditReport struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` ReportHeight int64 `protobuf:"varint,3,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` SelfReport AuditSelfReport `protobuf:"bytes,4,opt,name=self_report,json=selfReport,proto3" json:"self_report"` PeerObservations []*AuditPeerObservation `protobuf:"bytes,5,rep,name=peer_observations,json=peerObservations,proto3" json:"peer_observations,omitempty"` @@ -231,9 +231,9 @@ func (m *AuditReport) GetSupernodeAccount() string { return "" } -func (m *AuditReport) GetWindowId() uint64 { +func (m *AuditReport) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } @@ -259,175 +259,53 @@ func (m *AuditReport) GetPeerObservations() []*AuditPeerObservation { return nil } -// ProberTargets captures the deterministic prober -> targets mapping for a window. -type ProberTargets struct { - ProberSupernodeAccount string `protobuf:"bytes,1,opt,name=prober_supernode_account,json=proberSupernodeAccount,proto3" json:"prober_supernode_account,omitempty"` - TargetSupernodeAccounts []string `protobuf:"bytes,2,rep,name=target_supernode_accounts,json=targetSupernodeAccounts,proto3" json:"target_supernode_accounts,omitempty"` -} - -func (m *ProberTargets) Reset() { *m = ProberTargets{} } -func (m *ProberTargets) String() string { return proto.CompactTextString(m) } -func (*ProberTargets) ProtoMessage() {} -func (*ProberTargets) Descriptor() ([]byte, []int) { - return fileDescriptor_0613fff850c07858, []int{3} -} -func (m *ProberTargets) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ProberTargets) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ProberTargets.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 *ProberTargets) XXX_Merge(src proto.Message) { - xxx_messageInfo_ProberTargets.Merge(m, src) -} -func (m *ProberTargets) XXX_Size() int { - return m.Size() -} -func (m *ProberTargets) XXX_DiscardUnknown() { - xxx_messageInfo_ProberTargets.DiscardUnknown(m) -} - -var xxx_messageInfo_ProberTargets proto.InternalMessageInfo - -func (m *ProberTargets) GetProberSupernodeAccount() string { - if m != nil { - return m.ProberSupernodeAccount - } - return "" -} - -func (m *ProberTargets) GetTargetSupernodeAccounts() []string { - if m != nil { - return m.TargetSupernodeAccounts - } - return nil -} - -type WindowSnapshot struct { - WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` - WindowStartHeight int64 `protobuf:"varint,2,opt,name=window_start_height,json=windowStartHeight,proto3" json:"window_start_height,omitempty"` - // assignments is the minimal per-window source-of-truth for prober -> targets mapping. - Assignments []ProberTargets `protobuf:"bytes,3,rep,name=assignments,proto3" json:"assignments"` -} - -func (m *WindowSnapshot) Reset() { *m = WindowSnapshot{} } -func (m *WindowSnapshot) String() string { return proto.CompactTextString(m) } -func (*WindowSnapshot) ProtoMessage() {} -func (*WindowSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_0613fff850c07858, []int{4} -} -func (m *WindowSnapshot) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WindowSnapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_WindowSnapshot.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 *WindowSnapshot) XXX_Merge(src proto.Message) { - xxx_messageInfo_WindowSnapshot.Merge(m, src) -} -func (m *WindowSnapshot) XXX_Size() int { - return m.Size() -} -func (m *WindowSnapshot) XXX_DiscardUnknown() { - xxx_messageInfo_WindowSnapshot.DiscardUnknown(m) -} - -var xxx_messageInfo_WindowSnapshot proto.InternalMessageInfo - -func (m *WindowSnapshot) GetWindowId() uint64 { - if m != nil { - return m.WindowId - } - return 0 -} - -func (m *WindowSnapshot) GetWindowStartHeight() int64 { - if m != nil { - return m.WindowStartHeight - } - return 0 -} - -func (m *WindowSnapshot) GetAssignments() []ProberTargets { - if m != nil { - return m.Assignments - } - return nil -} - func init() { proto.RegisterEnum("lumera.audit.v1.PortState", PortState_name, PortState_value) proto.RegisterType((*AuditSelfReport)(nil), "lumera.audit.v1.AuditSelfReport") proto.RegisterType((*AuditPeerObservation)(nil), "lumera.audit.v1.AuditPeerObservation") proto.RegisterType((*AuditReport)(nil), "lumera.audit.v1.AuditReport") - proto.RegisterType((*ProberTargets)(nil), "lumera.audit.v1.ProberTargets") - proto.RegisterType((*WindowSnapshot)(nil), "lumera.audit.v1.WindowSnapshot") } func init() { proto.RegisterFile("lumera/audit/v1/audit.proto", fileDescriptor_0613fff850c07858) } var fileDescriptor_0613fff850c07858 = []byte{ - // 666 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x4e, 0xdb, 0x4c, - 0x14, 0xc5, 0xe3, 0x24, 0x7c, 0xfa, 0xb8, 0x29, 0x24, 0x36, 0x14, 0x02, 0x48, 0x6e, 0x94, 0xaa, - 0x52, 0x84, 0xda, 0xa4, 0xd0, 0x65, 0x57, 0x81, 0xd2, 0xd2, 0x3f, 0x4a, 0x22, 0x3b, 0x08, 0xa9, - 0x9b, 0xd1, 0xc4, 0x1e, 0x8c, 0xd5, 0xd8, 0x63, 0xcd, 0x8c, 0xa1, 0x7d, 0x8b, 0x6e, 0xfa, 0x08, - 0xdd, 0x74, 0x5d, 0x75, 0xdb, 0x2d, 0x4b, 0xd4, 0x55, 0x57, 0x55, 0x05, 0x2f, 0x52, 0xcd, 0x8c, - 0x4b, 0x82, 0xa1, 0x42, 0x62, 0x13, 0xd9, 0xe7, 0x9c, 0x3b, 0xb9, 0x73, 0x7f, 0x57, 0x86, 0xb5, - 0x71, 0x1a, 0x11, 0x86, 0x3b, 0x38, 0xf5, 0x43, 0xd1, 0x39, 0xda, 0xd0, 0x0f, 0xed, 0x84, 0x51, - 0x41, 0xad, 0xaa, 0x36, 0xdb, 0x5a, 0x3b, 0xda, 0x58, 0x35, 0x71, 0x14, 0xc6, 0xb4, 0xa3, 0x7e, - 0x75, 0x66, 0x75, 0xc5, 0xa3, 0x3c, 0xa2, 0x1c, 0xa9, 0xb7, 0x8e, 0x7e, 0xc9, 0xac, 0xc5, 0x80, - 0x06, 0x54, 0xeb, 0xf2, 0x49, 0xab, 0xcd, 0x4f, 0x45, 0xa8, 0x76, 0xe5, 0x81, 0x2e, 0x19, 0x1f, - 0x38, 0x24, 0xa1, 0x4c, 0x58, 0xeb, 0x60, 0x7a, 0x49, 0x8a, 0x52, 0x8e, 0x03, 0x82, 0x12, 0xc2, - 0x3c, 0x12, 0x8b, 0xba, 0xd1, 0x30, 0x5a, 0x86, 0x53, 0xf5, 0x92, 0x74, 0x4f, 0xea, 0x03, 0x2d, - 0xcb, 0x6c, 0x44, 0xa2, 0x5c, 0xb6, 0xa8, 0xb3, 0x11, 0x89, 0x2e, 0x65, 0x1f, 0x82, 0xe5, 0x87, - 0xfc, 0x5d, 0x2e, 0x5c, 0x52, 0xe1, 0x9a, 0x74, 0x2e, 0xa5, 0x5f, 0xc1, 0x42, 0x18, 0x8f, 0x68, - 0x1a, 0xfb, 0x48, 0x76, 0x85, 0xb8, 0xc0, 0x82, 0xf0, 0x7a, 0xb9, 0x51, 0x6a, 0xcd, 0x6f, 0xae, - 0xb6, 0x73, 0xc3, 0x68, 0x0f, 0x28, 0x13, 0xae, 0x8c, 0x38, 0x66, 0x56, 0x76, 0xa1, 0x70, 0xeb, - 0x31, 0x2c, 0x1e, 0xe0, 0x70, 0x4c, 0x7c, 0x84, 0x3d, 0x11, 0xd2, 0x98, 0x23, 0x8f, 0xa6, 0xb1, - 0xa8, 0xcf, 0x34, 0x8c, 0xd6, 0x9c, 0x63, 0x69, 0xaf, 0xab, 0xad, 0x6d, 0xe9, 0x34, 0xbf, 0x18, - 0xb0, 0xa8, 0xe6, 0x32, 0x20, 0x84, 0xf5, 0x47, 0x9c, 0xb0, 0x23, 0x2c, 0x6d, 0x6b, 0x0f, 0xea, - 0x02, 0xb3, 0x80, 0x08, 0xc4, 0xd3, 0x84, 0xb0, 0x98, 0xfa, 0x04, 0x61, 0x4f, 0x1f, 0x27, 0x67, - 0x34, 0xbb, 0xb5, 0xf6, 0xe3, 0xeb, 0xa3, 0xe5, 0x6c, 0xf4, 0x5d, 0xcf, 0xeb, 0xfa, 0x3e, 0x23, - 0x9c, 0xbb, 0x82, 0x85, 0x71, 0xe0, 0x2c, 0xe9, 0x62, 0xf7, 0x6f, 0x6d, 0x57, 0x97, 0x5a, 0x4f, - 0xa1, 0x32, 0x7d, 0xcb, 0xe2, 0x8d, 0xb7, 0x84, 0xe4, 0xe2, 0x7a, 0xcd, 0x6f, 0x45, 0xa8, 0xa8, - 0x66, 0x33, 0x80, 0xbb, 0x60, 0xde, 0xaa, 0xb9, 0x1a, 0xcf, 0xb7, 0xb5, 0x06, 0xb3, 0xc7, 0x61, - 0xec, 0xd3, 0x63, 0x14, 0xfa, 0x0a, 0x6b, 0xd9, 0xf9, 0x5f, 0x0b, 0x2f, 0x7d, 0xeb, 0x3e, 0xcc, - 0x31, 0xf5, 0x87, 0xe8, 0x90, 0x84, 0xc1, 0xa1, 0x46, 0x59, 0x72, 0xee, 0x68, 0x71, 0x57, 0x69, - 0xd6, 0x0b, 0xa8, 0x70, 0x32, 0x3e, 0x40, 0x5a, 0xac, 0x97, 0x1b, 0x46, 0xab, 0xb2, 0xd9, 0xb8, - 0x72, 0xb1, 0xdc, 0x0e, 0x6e, 0x95, 0x4f, 0x7e, 0xdd, 0x2b, 0x38, 0xc0, 0x27, 0x5b, 0xe9, 0x80, - 0x99, 0x10, 0xc2, 0x10, 0x9d, 0xc0, 0xe0, 0xf5, 0x99, 0x46, 0xa9, 0x55, 0xd9, 0x7c, 0x70, 0xfd, - 0x71, 0x39, 0x74, 0x4e, 0x2d, 0xb9, 0x2c, 0xf0, 0xe6, 0x77, 0x03, 0xe6, 0x06, 0x8c, 0x8e, 0x08, - 0x1b, 0x2a, 0x2c, 0x5c, 0xe2, 0x4d, 0x94, 0x70, 0x4b, 0xbc, 0xba, 0xf8, 0x0a, 0xde, 0x7d, 0x58, - 0xf9, 0xd7, 0xd6, 0x68, 0xd8, 0x37, 0x9c, 0xbb, 0x7c, 0xfd, 0xda, 0xf0, 0xe6, 0x67, 0x03, 0xe6, - 0xf7, 0x15, 0x10, 0x37, 0xc6, 0x09, 0x3f, 0xa4, 0x39, 0x66, 0x46, 0x8e, 0x59, 0x1b, 0x16, 0x32, - 0x93, 0x0b, 0x3c, 0x21, 0x57, 0x54, 0xe4, 0x4c, 0x6d, 0xb9, 0xd2, 0xc9, 0xf0, 0x3d, 0x87, 0x0a, - 0xe6, 0x3c, 0x0c, 0xe2, 0x88, 0xc8, 0x56, 0x4b, 0x6a, 0xde, 0xf6, 0xd5, 0xbd, 0x9c, 0x1e, 0x62, - 0x06, 0x6f, 0xba, 0x70, 0xbd, 0x0f, 0xb3, 0x17, 0xbb, 0x6b, 0x2d, 0x81, 0x35, 0xe8, 0x3b, 0x43, - 0xe4, 0x0e, 0xbb, 0xc3, 0x1d, 0xb4, 0xd7, 0x7b, 0xdd, 0xeb, 0xef, 0xf7, 0x6a, 0x05, 0x6b, 0x01, - 0xaa, 0x53, 0x7a, 0x7f, 0xb0, 0xd3, 0xab, 0x19, 0xd6, 0x5d, 0x30, 0xa7, 0xc4, 0xed, 0x37, 0x7d, - 0x77, 0xe7, 0x59, 0xad, 0xb8, 0xb5, 0x7e, 0x72, 0x66, 0x1b, 0xa7, 0x67, 0xb6, 0xf1, 0xfb, 0xcc, - 0x36, 0x3e, 0x9e, 0xdb, 0x85, 0xd3, 0x73, 0xbb, 0xf0, 0xf3, 0xdc, 0x2e, 0xbc, 0xad, 0xbd, 0x9f, - 0x7c, 0x3f, 0xc5, 0x87, 0x84, 0xf0, 0xd1, 0x7f, 0xea, 0x5b, 0xf7, 0xe4, 0x4f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x83, 0x4b, 0x2e, 0xcc, 0x5f, 0x05, 0x00, 0x00, + // 563 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x4d, 0x8f, 0xd2, 0x4e, + 0x1c, 0xc7, 0x29, 0xb0, 0xff, 0xbf, 0x3b, 0xb8, 0xd2, 0xce, 0xe2, 0xda, 0x65, 0x93, 0xda, 0x60, + 0x4c, 0x08, 0x51, 0x70, 0xf1, 0xe8, 0xa9, 0xac, 0xc4, 0xf5, 0x21, 0x94, 0xb4, 0x10, 0x13, 0x2f, + 0x93, 0xd2, 0x0e, 0xa5, 0x91, 0x76, 0x9a, 0x99, 0x29, 0xd1, 0x77, 0xe1, 0xc5, 0x37, 0xe1, 0x79, + 0x5f, 0xc4, 0x1e, 0x37, 0x9e, 0x3c, 0x19, 0x03, 0x6f, 0xc4, 0xb4, 0x83, 0x3c, 0x54, 0x13, 0x13, + 0x2f, 0xcd, 0xcc, 0xe7, 0xfb, 0xfd, 0x4d, 0x7f, 0x0f, 0x33, 0xe0, 0x6c, 0x9e, 0x84, 0x98, 0x3a, + 0x1d, 0x27, 0xf1, 0x02, 0xde, 0x59, 0x9c, 0x8b, 0x45, 0x3b, 0xa6, 0x84, 0x13, 0x58, 0x15, 0x62, + 0x5b, 0xb0, 0xc5, 0x79, 0x5d, 0x71, 0xc2, 0x20, 0x22, 0x9d, 0xec, 0x2b, 0x3c, 0xf5, 0x53, 0x97, + 0xb0, 0x90, 0x30, 0x94, 0xed, 0x3a, 0x62, 0xb3, 0x96, 0x6a, 0x3e, 0xf1, 0x89, 0xe0, 0xe9, 0x4a, + 0xd0, 0xc6, 0xe7, 0x22, 0xa8, 0x1a, 0xe9, 0x81, 0x36, 0x9e, 0x4f, 0x2d, 0x1c, 0x13, 0xca, 0x61, + 0x0b, 0x28, 0x6e, 0x9c, 0xa0, 0x84, 0x39, 0x3e, 0x46, 0x31, 0xa6, 0x2e, 0x8e, 0xb8, 0x2a, 0xe9, + 0x52, 0x53, 0xb2, 0xaa, 0x6e, 0x9c, 0x8c, 0x53, 0x3e, 0x14, 0x38, 0xf5, 0x86, 0x38, 0xcc, 0x79, + 0x8b, 0xc2, 0x1b, 0xe2, 0x70, 0xcf, 0xfb, 0x08, 0x40, 0x2f, 0x60, 0xef, 0x73, 0xe6, 0x52, 0x66, + 0x96, 0x53, 0x65, 0xcf, 0xfd, 0x0a, 0x1c, 0x07, 0xd1, 0x84, 0x24, 0x91, 0x87, 0xd2, 0xac, 0x10, + 0xe3, 0x0e, 0xc7, 0x4c, 0x2d, 0xeb, 0xa5, 0xe6, 0x9d, 0x6e, 0xbd, 0x9d, 0x6b, 0x46, 0x7b, 0x48, + 0x28, 0xb7, 0x53, 0x8b, 0xa5, 0xac, 0xc3, 0x36, 0x84, 0xc1, 0x27, 0xa0, 0x36, 0x75, 0x82, 0x39, + 0xf6, 0x90, 0xe3, 0xf2, 0x80, 0x44, 0x0c, 0xb9, 0x24, 0x89, 0xb8, 0x7a, 0xa0, 0x4b, 0xcd, 0x23, + 0x0b, 0x0a, 0xcd, 0x10, 0xd2, 0x45, 0xaa, 0x34, 0xbe, 0x48, 0xa0, 0x96, 0xf5, 0x65, 0x88, 0x31, + 0x35, 0x27, 0x0c, 0xd3, 0x85, 0x93, 0xca, 0x70, 0x0c, 0x54, 0xee, 0x50, 0x1f, 0x73, 0xc4, 0x92, + 0x18, 0xd3, 0x88, 0x78, 0x18, 0x39, 0xae, 0x38, 0x2e, 0xed, 0xd1, 0x61, 0xef, 0xec, 0xeb, 0xd5, + 0xe3, 0x7b, 0xeb, 0xd6, 0x1b, 0xae, 0x6b, 0x78, 0x1e, 0xc5, 0x8c, 0xd9, 0x9c, 0x06, 0x91, 0x6f, + 0x9d, 0x88, 0x60, 0xfb, 0x57, 0xac, 0x21, 0x42, 0xe1, 0x33, 0x50, 0xd9, 0xad, 0xb2, 0xf8, 0xd7, + 0x2a, 0x41, 0xbc, 0x29, 0xaf, 0x71, 0x55, 0x04, 0x95, 0x2c, 0xd9, 0xf5, 0x00, 0x2f, 0x81, 0xf2, + 0x4f, 0xc9, 0xc9, 0x2c, 0x9f, 0xd6, 0x29, 0xb8, 0x85, 0x63, 0xe2, 0xce, 0x50, 0xe0, 0x65, 0x53, + 0x2d, 0x5b, 0xff, 0x67, 0xfb, 0x97, 0x1e, 0x7c, 0x00, 0x8e, 0x68, 0xf6, 0x3b, 0x34, 0xc3, 0x81, + 0x3f, 0x13, 0x83, 0x2c, 0x59, 0xb7, 0x05, 0xbc, 0xcc, 0x18, 0x7c, 0x01, 0x2a, 0x0c, 0xcf, 0xa7, + 0x48, 0x40, 0xb5, 0xac, 0x4b, 0xcd, 0x4a, 0x57, 0xff, 0xad, 0xac, 0xdc, 0x0d, 0xec, 0x95, 0xaf, + 0xbf, 0xdf, 0x2f, 0x58, 0x80, 0x6d, 0xef, 0xa4, 0x05, 0x94, 0x18, 0x63, 0x8a, 0xc8, 0x76, 0x14, + 0x4c, 0x3d, 0xd0, 0x4b, 0xcd, 0x4a, 0xf7, 0xe1, 0x9f, 0x8f, 0xcb, 0x0d, 0xce, 0x92, 0xe3, 0x7d, + 0xc0, 0x5a, 0x26, 0x38, 0xdc, 0xf4, 0x13, 0x9e, 0x00, 0x38, 0x34, 0xad, 0x11, 0xb2, 0x47, 0xc6, + 0xa8, 0x8f, 0xc6, 0x83, 0xd7, 0x03, 0xf3, 0xed, 0x40, 0x2e, 0xc0, 0x63, 0x50, 0xdd, 0xe1, 0xe6, + 0xb0, 0x3f, 0x90, 0x25, 0x78, 0x17, 0x28, 0x3b, 0xf0, 0xe2, 0x8d, 0x69, 0xf7, 0x9f, 0xcb, 0xc5, + 0x5e, 0xeb, 0x7a, 0xa9, 0x49, 0x37, 0x4b, 0x4d, 0xfa, 0xb1, 0xd4, 0xa4, 0x4f, 0x2b, 0xad, 0x70, + 0xb3, 0xd2, 0x0a, 0xdf, 0x56, 0x5a, 0xe1, 0x9d, 0xfc, 0x61, 0xfb, 0xa6, 0xf9, 0xc7, 0x18, 0xb3, + 0xc9, 0x7f, 0xd9, 0xfb, 0x7b, 0xfa, 0x33, 0x00, 0x00, 0xff, 0xff, 0xa2, 0x5b, 0x6a, 0x87, 0xf3, + 0x03, 0x00, 0x00, } func (m *AuditSelfReport) Marshal() (dAtA []byte, err error) { @@ -591,8 +469,8 @@ func (m *AuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x18 } - if m.WindowId != 0 { - i = encodeVarintAudit(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintAudit(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x10 } @@ -606,92 +484,6 @@ func (m *AuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ProberTargets) 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 *ProberTargets) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ProberTargets) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TargetSupernodeAccounts) > 0 { - for iNdEx := len(m.TargetSupernodeAccounts) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.TargetSupernodeAccounts[iNdEx]) - copy(dAtA[i:], m.TargetSupernodeAccounts[iNdEx]) - i = encodeVarintAudit(dAtA, i, uint64(len(m.TargetSupernodeAccounts[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.ProberSupernodeAccount) > 0 { - i -= len(m.ProberSupernodeAccount) - copy(dAtA[i:], m.ProberSupernodeAccount) - i = encodeVarintAudit(dAtA, i, uint64(len(m.ProberSupernodeAccount))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *WindowSnapshot) 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 *WindowSnapshot) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *WindowSnapshot) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Assignments) > 0 { - for iNdEx := len(m.Assignments) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Assignments[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintAudit(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.WindowStartHeight != 0 { - i = encodeVarintAudit(dAtA, i, uint64(m.WindowStartHeight)) - i-- - dAtA[i] = 0x10 - } - if m.WindowId != 0 { - i = encodeVarintAudit(dAtA, i, uint64(m.WindowId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - func encodeVarintAudit(dAtA []byte, offset int, v uint64) int { offset -= sovAudit(v) base := offset @@ -761,8 +553,8 @@ func (m *AuditReport) Size() (n int) { if l > 0 { n += 1 + l + sovAudit(uint64(l)) } - if m.WindowId != 0 { - n += 1 + sovAudit(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovAudit(uint64(m.EpochId)) } if m.ReportHeight != 0 { n += 1 + sovAudit(uint64(m.ReportHeight)) @@ -778,46 +570,6 @@ func (m *AuditReport) Size() (n int) { return n } -func (m *ProberTargets) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ProberSupernodeAccount) - if l > 0 { - n += 1 + l + sovAudit(uint64(l)) - } - if len(m.TargetSupernodeAccounts) > 0 { - for _, s := range m.TargetSupernodeAccounts { - l = len(s) - n += 1 + l + sovAudit(uint64(l)) - } - } - return n -} - -func (m *WindowSnapshot) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.WindowId != 0 { - n += 1 + sovAudit(uint64(m.WindowId)) - } - if m.WindowStartHeight != 0 { - n += 1 + sovAudit(uint64(m.WindowStartHeight)) - } - if len(m.Assignments) > 0 { - for _, e := range m.Assignments { - l = e.Size() - n += 1 + l + sovAudit(uint64(l)) - } - } - return n -} - func sovAudit(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -1209,9 +961,9 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowAudit @@ -1221,7 +973,7 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1333,242 +1085,6 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { } return nil } -func (m *ProberTargets) 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 ErrIntOverflowAudit - } - 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: ProberTargets: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ProberTargets: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProberSupernodeAccount", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - 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 ErrInvalidLengthAudit - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAudit - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProberSupernodeAccount = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetSupernodeAccounts", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - 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 ErrInvalidLengthAudit - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAudit - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TargetSupernodeAccounts = append(m.TargetSupernodeAccounts, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAudit(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WindowSnapshot) 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 ErrIntOverflowAudit - } - 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: WindowSnapshot: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WindowSnapshot: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) - } - m.WindowId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowStartHeight", wireType) - } - m.WindowStartHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.WindowStartHeight |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Assignments", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAudit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAudit - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAudit - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Assignments = append(m.Assignments, ProberTargets{}) - if err := m.Assignments[len(m.Assignments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAudit(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func skipAudit(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/audit/v1/types/epoch.pb.go b/x/audit/v1/types/epoch.pb.go new file mode 100644 index 0000000..9846bdf --- /dev/null +++ b/x/audit/v1/types/epoch.pb.go @@ -0,0 +1,814 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lumera/audit/v1/epoch.proto + +package types + +import ( + bytes "bytes" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// EpochAnchor is a minimal per-epoch on-chain anchor that freezes the deterministic seed +// and the eligible supernode sets used for deterministic selection off-chain. +type EpochAnchor struct { + EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + EpochStartHeight int64 `protobuf:"varint,2,opt,name=epoch_start_height,json=epochStartHeight,proto3" json:"epoch_start_height,omitempty"` + EpochEndHeight int64 `protobuf:"varint,3,opt,name=epoch_end_height,json=epochEndHeight,proto3" json:"epoch_end_height,omitempty"` + EpochLengthBlocks uint64 `protobuf:"varint,4,opt,name=epoch_length_blocks,json=epochLengthBlocks,proto3" json:"epoch_length_blocks,omitempty"` + // seed is a fixed 32-byte value derived at epoch start (domain-separated). + Seed []byte `protobuf:"bytes,5,opt,name=seed,proto3" json:"seed,omitempty"` + // active_supernode_accounts is the sorted list of ACTIVE supernodes at epoch start. + ActiveSupernodeAccounts []string `protobuf:"bytes,6,rep,name=active_supernode_accounts,json=activeSupernodeAccounts,proto3" json:"active_supernode_accounts,omitempty"` + // target_supernode_accounts is the sorted list of eligible targets at epoch start: + // ACTIVE + POSTPONED supernodes. + TargetSupernodeAccounts []string `protobuf:"bytes,7,rep,name=target_supernode_accounts,json=targetSupernodeAccounts,proto3" json:"target_supernode_accounts,omitempty"` + // params_commitment is a hash commitment to Params (with defaults) at epoch start. + ParamsCommitment []byte `protobuf:"bytes,8,opt,name=params_commitment,json=paramsCommitment,proto3" json:"params_commitment,omitempty"` + ActiveSetCommitment []byte `protobuf:"bytes,9,opt,name=active_set_commitment,json=activeSetCommitment,proto3" json:"active_set_commitment,omitempty"` + TargetsSetCommitment []byte `protobuf:"bytes,10,opt,name=targets_set_commitment,json=targetsSetCommitment,proto3" json:"targets_set_commitment,omitempty"` +} + +func (m *EpochAnchor) Reset() { *m = EpochAnchor{} } +func (m *EpochAnchor) String() string { return proto.CompactTextString(m) } +func (*EpochAnchor) ProtoMessage() {} +func (*EpochAnchor) Descriptor() ([]byte, []int) { + return fileDescriptor_b89552b0d1ccb55f, []int{0} +} +func (m *EpochAnchor) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EpochAnchor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EpochAnchor.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 *EpochAnchor) XXX_Merge(src proto.Message) { + xxx_messageInfo_EpochAnchor.Merge(m, src) +} +func (m *EpochAnchor) XXX_Size() int { + return m.Size() +} +func (m *EpochAnchor) XXX_DiscardUnknown() { + xxx_messageInfo_EpochAnchor.DiscardUnknown(m) +} + +var xxx_messageInfo_EpochAnchor proto.InternalMessageInfo + +func (m *EpochAnchor) GetEpochId() uint64 { + if m != nil { + return m.EpochId + } + return 0 +} + +func (m *EpochAnchor) GetEpochStartHeight() int64 { + if m != nil { + return m.EpochStartHeight + } + return 0 +} + +func (m *EpochAnchor) GetEpochEndHeight() int64 { + if m != nil { + return m.EpochEndHeight + } + return 0 +} + +func (m *EpochAnchor) GetEpochLengthBlocks() uint64 { + if m != nil { + return m.EpochLengthBlocks + } + return 0 +} + +func (m *EpochAnchor) GetSeed() []byte { + if m != nil { + return m.Seed + } + return nil +} + +func (m *EpochAnchor) GetActiveSupernodeAccounts() []string { + if m != nil { + return m.ActiveSupernodeAccounts + } + return nil +} + +func (m *EpochAnchor) GetTargetSupernodeAccounts() []string { + if m != nil { + return m.TargetSupernodeAccounts + } + return nil +} + +func (m *EpochAnchor) GetParamsCommitment() []byte { + if m != nil { + return m.ParamsCommitment + } + return nil +} + +func (m *EpochAnchor) GetActiveSetCommitment() []byte { + if m != nil { + return m.ActiveSetCommitment + } + return nil +} + +func (m *EpochAnchor) GetTargetsSetCommitment() []byte { + if m != nil { + return m.TargetsSetCommitment + } + return nil +} + +func init() { + proto.RegisterType((*EpochAnchor)(nil), "lumera.audit.v1.EpochAnchor") +} + +func init() { proto.RegisterFile("lumera/audit/v1/epoch.proto", fileDescriptor_b89552b0d1ccb55f) } + +var fileDescriptor_b89552b0d1ccb55f = []byte{ + // 426 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcd, 0x8e, 0xd3, 0x30, + 0x10, 0xc7, 0x1b, 0x1a, 0xf6, 0xc3, 0x20, 0x68, 0xbd, 0x0b, 0x9b, 0xee, 0x4a, 0xa1, 0xe2, 0x14, + 0xf1, 0xd1, 0x68, 0x81, 0x13, 0xb7, 0x16, 0xad, 0x04, 0x12, 0xa7, 0xf6, 0x80, 0xc4, 0xc5, 0xf2, + 0xda, 0xa3, 0x24, 0xa2, 0xb1, 0x23, 0x7b, 0x5a, 0xc1, 0x5b, 0x20, 0xf1, 0x02, 0x3c, 0x04, 0x0f, + 0xc1, 0x71, 0xc5, 0x89, 0x23, 0x6a, 0x2f, 0x3c, 0x06, 0xea, 0x38, 0x85, 0xe5, 0xe3, 0xc0, 0x25, + 0xb2, 0xe7, 0xf7, 0xff, 0xcd, 0x64, 0x24, 0xb3, 0x93, 0xf9, 0xa2, 0x06, 0x27, 0x73, 0xb9, 0xd0, + 0x15, 0xe6, 0xcb, 0xd3, 0x1c, 0x1a, 0xab, 0xca, 0x51, 0xe3, 0x2c, 0x5a, 0x7e, 0x33, 0xc0, 0x11, + 0xc1, 0xd1, 0xf2, 0xf4, 0xb8, 0x2f, 0xeb, 0xca, 0xd8, 0x9c, 0xbe, 0x21, 0x73, 0x7c, 0x58, 0xd8, + 0xc2, 0xd2, 0x31, 0xdf, 0x9c, 0xda, 0xea, 0x40, 0x59, 0x5f, 0x5b, 0x2f, 0x02, 0x08, 0x97, 0x80, + 0xee, 0x7e, 0x88, 0xd9, 0xb5, 0xb3, 0xcd, 0x90, 0xb1, 0x51, 0xa5, 0x75, 0x7c, 0xc0, 0xf6, 0x68, + 0xa6, 0xa8, 0x74, 0x12, 0x0d, 0xa3, 0x2c, 0x9e, 0xee, 0xd2, 0xfd, 0x85, 0xe6, 0x0f, 0x18, 0x0f, + 0xc8, 0xa3, 0x74, 0x28, 0x4a, 0xa8, 0x8a, 0x12, 0x93, 0x2b, 0xc3, 0x28, 0xeb, 0x4e, 0x7b, 0x44, + 0x66, 0x1b, 0xf0, 0x9c, 0xea, 0x3c, 0x63, 0xa1, 0x26, 0xc0, 0xe8, 0x6d, 0xb6, 0x4b, 0xd9, 0x1b, + 0x54, 0x3f, 0x33, 0xba, 0x4d, 0x8e, 0xd8, 0x41, 0x48, 0xce, 0xc1, 0x14, 0x58, 0x8a, 0xf3, 0xb9, + 0x55, 0x6f, 0x7c, 0x12, 0xd3, 0xf4, 0x3e, 0xa1, 0x97, 0x44, 0x26, 0x04, 0x38, 0x67, 0xb1, 0x07, + 0xd0, 0xc9, 0xd5, 0x61, 0x94, 0x5d, 0x9f, 0xd2, 0x99, 0xbf, 0x62, 0x03, 0xa9, 0xb0, 0x5a, 0x82, + 0xf0, 0x8b, 0x06, 0x9c, 0xb1, 0x1a, 0x84, 0x54, 0xca, 0x2e, 0x0c, 0xfa, 0x64, 0x67, 0xd8, 0xcd, + 0xf6, 0x27, 0x27, 0x5f, 0x3e, 0x3d, 0x3c, 0x6a, 0x77, 0x1f, 0x2b, 0x35, 0xd6, 0xda, 0x81, 0xf7, + 0x33, 0x74, 0x95, 0x29, 0xa6, 0x47, 0xc1, 0x9e, 0x6d, 0xe5, 0x71, 0xeb, 0x6e, 0x1a, 0xa3, 0x74, + 0x05, 0xe0, 0xbf, 0x1a, 0xef, 0xfe, 0x47, 0xe3, 0x60, 0xff, 0xdd, 0xf8, 0x3e, 0xeb, 0x37, 0xd2, + 0xc9, 0xda, 0x0b, 0x65, 0xeb, 0xba, 0xc2, 0x1a, 0x0c, 0x26, 0x7b, 0xb4, 0x52, 0x2f, 0x80, 0x67, + 0x3f, 0xeb, 0xfc, 0x11, 0xbb, 0xb5, 0x5d, 0x0f, 0xf0, 0xb2, 0xb0, 0x4f, 0xc2, 0x41, 0xfb, 0xf7, + 0x80, 0x97, 0x9c, 0x27, 0xec, 0x76, 0x98, 0xed, 0xff, 0x94, 0x18, 0x49, 0x87, 0x2d, 0xfd, 0xcd, + 0x7a, 0x1a, 0x7f, 0xff, 0x78, 0x27, 0x9a, 0xdc, 0xfb, 0xbc, 0x4a, 0xa3, 0x8b, 0x55, 0x1a, 0x7d, + 0x5b, 0xa5, 0xd1, 0xfb, 0x75, 0xda, 0xb9, 0x58, 0xa7, 0x9d, 0xaf, 0xeb, 0xb4, 0xf3, 0xba, 0xf7, + 0xf6, 0xd7, 0xe3, 0xc4, 0x77, 0x0d, 0xf8, 0xf3, 0x1d, 0x7a, 0x48, 0x8f, 0x7f, 0x04, 0x00, 0x00, + 0xff, 0xff, 0xf3, 0x45, 0xb5, 0xc0, 0xbc, 0x02, 0x00, 0x00, +} + +func (this *EpochAnchor) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*EpochAnchor) + if !ok { + that2, ok := that.(EpochAnchor) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.EpochId != that1.EpochId { + return false + } + if this.EpochStartHeight != that1.EpochStartHeight { + return false + } + if this.EpochEndHeight != that1.EpochEndHeight { + return false + } + if this.EpochLengthBlocks != that1.EpochLengthBlocks { + return false + } + if !bytes.Equal(this.Seed, that1.Seed) { + return false + } + if len(this.ActiveSupernodeAccounts) != len(that1.ActiveSupernodeAccounts) { + return false + } + for i := range this.ActiveSupernodeAccounts { + if this.ActiveSupernodeAccounts[i] != that1.ActiveSupernodeAccounts[i] { + return false + } + } + if len(this.TargetSupernodeAccounts) != len(that1.TargetSupernodeAccounts) { + return false + } + for i := range this.TargetSupernodeAccounts { + if this.TargetSupernodeAccounts[i] != that1.TargetSupernodeAccounts[i] { + return false + } + } + if !bytes.Equal(this.ParamsCommitment, that1.ParamsCommitment) { + return false + } + if !bytes.Equal(this.ActiveSetCommitment, that1.ActiveSetCommitment) { + return false + } + if !bytes.Equal(this.TargetsSetCommitment, that1.TargetsSetCommitment) { + return false + } + return true +} +func (m *EpochAnchor) 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 *EpochAnchor) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EpochAnchor) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TargetsSetCommitment) > 0 { + i -= len(m.TargetsSetCommitment) + copy(dAtA[i:], m.TargetsSetCommitment) + i = encodeVarintEpoch(dAtA, i, uint64(len(m.TargetsSetCommitment))) + i-- + dAtA[i] = 0x52 + } + if len(m.ActiveSetCommitment) > 0 { + i -= len(m.ActiveSetCommitment) + copy(dAtA[i:], m.ActiveSetCommitment) + i = encodeVarintEpoch(dAtA, i, uint64(len(m.ActiveSetCommitment))) + i-- + dAtA[i] = 0x4a + } + if len(m.ParamsCommitment) > 0 { + i -= len(m.ParamsCommitment) + copy(dAtA[i:], m.ParamsCommitment) + i = encodeVarintEpoch(dAtA, i, uint64(len(m.ParamsCommitment))) + i-- + dAtA[i] = 0x42 + } + if len(m.TargetSupernodeAccounts) > 0 { + for iNdEx := len(m.TargetSupernodeAccounts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TargetSupernodeAccounts[iNdEx]) + copy(dAtA[i:], m.TargetSupernodeAccounts[iNdEx]) + i = encodeVarintEpoch(dAtA, i, uint64(len(m.TargetSupernodeAccounts[iNdEx]))) + i-- + dAtA[i] = 0x3a + } + } + if len(m.ActiveSupernodeAccounts) > 0 { + for iNdEx := len(m.ActiveSupernodeAccounts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ActiveSupernodeAccounts[iNdEx]) + copy(dAtA[i:], m.ActiveSupernodeAccounts[iNdEx]) + i = encodeVarintEpoch(dAtA, i, uint64(len(m.ActiveSupernodeAccounts[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } + if len(m.Seed) > 0 { + i -= len(m.Seed) + copy(dAtA[i:], m.Seed) + i = encodeVarintEpoch(dAtA, i, uint64(len(m.Seed))) + i-- + dAtA[i] = 0x2a + } + if m.EpochLengthBlocks != 0 { + i = encodeVarintEpoch(dAtA, i, uint64(m.EpochLengthBlocks)) + i-- + dAtA[i] = 0x20 + } + if m.EpochEndHeight != 0 { + i = encodeVarintEpoch(dAtA, i, uint64(m.EpochEndHeight)) + i-- + dAtA[i] = 0x18 + } + if m.EpochStartHeight != 0 { + i = encodeVarintEpoch(dAtA, i, uint64(m.EpochStartHeight)) + i-- + dAtA[i] = 0x10 + } + if m.EpochId != 0 { + i = encodeVarintEpoch(dAtA, i, uint64(m.EpochId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintEpoch(dAtA []byte, offset int, v uint64) int { + offset -= sovEpoch(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *EpochAnchor) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EpochId != 0 { + n += 1 + sovEpoch(uint64(m.EpochId)) + } + if m.EpochStartHeight != 0 { + n += 1 + sovEpoch(uint64(m.EpochStartHeight)) + } + if m.EpochEndHeight != 0 { + n += 1 + sovEpoch(uint64(m.EpochEndHeight)) + } + if m.EpochLengthBlocks != 0 { + n += 1 + sovEpoch(uint64(m.EpochLengthBlocks)) + } + l = len(m.Seed) + if l > 0 { + n += 1 + l + sovEpoch(uint64(l)) + } + if len(m.ActiveSupernodeAccounts) > 0 { + for _, s := range m.ActiveSupernodeAccounts { + l = len(s) + n += 1 + l + sovEpoch(uint64(l)) + } + } + if len(m.TargetSupernodeAccounts) > 0 { + for _, s := range m.TargetSupernodeAccounts { + l = len(s) + n += 1 + l + sovEpoch(uint64(l)) + } + } + l = len(m.ParamsCommitment) + if l > 0 { + n += 1 + l + sovEpoch(uint64(l)) + } + l = len(m.ActiveSetCommitment) + if l > 0 { + n += 1 + l + sovEpoch(uint64(l)) + } + l = len(m.TargetsSetCommitment) + if l > 0 { + n += 1 + l + sovEpoch(uint64(l)) + } + return n +} + +func sovEpoch(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozEpoch(x uint64) (n int) { + return sovEpoch(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *EpochAnchor) 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 ErrIntOverflowEpoch + } + 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: EpochAnchor: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EpochAnchor: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) + } + m.EpochId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochStartHeight", wireType) + } + m.EpochStartHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochStartHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochEndHeight", wireType) + } + m.EpochEndHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochEndHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochLengthBlocks", wireType) + } + m.EpochLengthBlocks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochLengthBlocks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Seed", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthEpoch + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthEpoch + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Seed = append(m.Seed[:0], dAtA[iNdEx:postIndex]...) + if m.Seed == nil { + m.Seed = []byte{} + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ActiveSupernodeAccounts", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + 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 ErrInvalidLengthEpoch + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEpoch + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ActiveSupernodeAccounts = append(m.ActiveSupernodeAccounts, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetSupernodeAccounts", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + 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 ErrInvalidLengthEpoch + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEpoch + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetSupernodeAccounts = append(m.TargetSupernodeAccounts, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ParamsCommitment", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthEpoch + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthEpoch + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ParamsCommitment = append(m.ParamsCommitment[:0], dAtA[iNdEx:postIndex]...) + if m.ParamsCommitment == nil { + m.ParamsCommitment = []byte{} + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ActiveSetCommitment", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthEpoch + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthEpoch + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ActiveSetCommitment = append(m.ActiveSetCommitment[:0], dAtA[iNdEx:postIndex]...) + if m.ActiveSetCommitment == nil { + m.ActiveSetCommitment = []byte{} + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetsSetCommitment", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpoch + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthEpoch + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthEpoch + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetsSetCommitment = append(m.TargetsSetCommitment[:0], dAtA[iNdEx:postIndex]...) + if m.TargetsSetCommitment == nil { + m.TargetsSetCommitment = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEpoch(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEpoch + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipEpoch(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEpoch + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEpoch + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEpoch + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthEpoch + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupEpoch + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthEpoch + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthEpoch = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowEpoch = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupEpoch = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/audit/v1/types/errors.go b/x/audit/v1/types/errors.go index 2fffe8f..c70624e 100644 --- a/x/audit/v1/types/errors.go +++ b/x/audit/v1/types/errors.go @@ -6,14 +6,12 @@ import ( var ( ErrInvalidSigner = errorsmod.Register(ModuleName, 1, "invalid signer") - ErrInvalidWindowID = errorsmod.Register(ModuleName, 2, "invalid window id") - ErrWindowSnapshotNotFound = errorsmod.Register(ModuleName, 3, "window snapshot not found") + ErrInvalidEpochID = errorsmod.Register(ModuleName, 2, "invalid epoch id") ErrDuplicateReport = errorsmod.Register(ModuleName, 4, "duplicate report") ErrInvalidPeerObservations = errorsmod.Register(ModuleName, 5, "invalid peer observations") ErrInvalidPortStatesLength = errorsmod.Register(ModuleName, 6, "invalid port states length") ErrReporterNotFound = errorsmod.Register(ModuleName, 7, "reporter supernode not found") ErrInvalidReporterState = errorsmod.Register(ModuleName, 8, "invalid reporter state") - ErrInvalidWindowSnapshot = errorsmod.Register(ModuleName, 9, "invalid window snapshot") ErrInvalidEvidenceType = errorsmod.Register(ModuleName, 1101, "invalid evidence type") ErrInvalidMetadata = errorsmod.Register(ModuleName, 1102, "invalid evidence metadata") diff --git a/x/audit/v1/types/evidence.pb.go b/x/audit/v1/types/evidence.pb.go index 893b39d..34afba8 100644 --- a/x/audit/v1/types/evidence.pb.go +++ b/x/audit/v1/types/evidence.pb.go @@ -32,6 +32,8 @@ const ( // action finalization rejected because the attempted finalizer is not in the top-10 supernodes. EvidenceType_EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10 EvidenceType = 2 EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED EvidenceType = 3 + // storage challenge failure evidence submitted by the deterministic challenger. + EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE EvidenceType = 4 ) var EvidenceType_name = map[int32]string{ @@ -39,6 +41,7 @@ var EvidenceType_name = map[int32]string{ 1: "EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE", 2: "EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10", 3: "EVIDENCE_TYPE_ACTION_EXPIRED", + 4: "EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE", } var EvidenceType_value = map[string]int32{ @@ -46,6 +49,7 @@ var EvidenceType_value = map[string]int32{ "EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE": 1, "EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10": 2, "EVIDENCE_TYPE_ACTION_EXPIRED": 3, + "EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE": 4, } func (x EvidenceType) String() string { @@ -165,34 +169,36 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/evidence.proto", fileDescriptor_449f638e48abdbaa) } var fileDescriptor_449f638e48abdbaa = []byte{ - // 427 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcd, 0x6e, 0xd3, 0x40, - 0x18, 0xf4, 0xa6, 0xa5, 0xa4, 0x4b, 0x48, 0xac, 0x15, 0x07, 0xb7, 0x50, 0x63, 0x71, 0xc1, 0xaa, - 0x84, 0x4d, 0xc8, 0x81, 0xb3, 0xe3, 0x6c, 0x60, 0xa5, 0xca, 0xb1, 0x36, 0x0e, 0x82, 0x5e, 0x56, - 0xae, 0x77, 0xd5, 0x1a, 0x91, 0xd8, 0xb2, 0x37, 0x11, 0x7d, 0x0b, 0x1e, 0x86, 0x2b, 0x77, 0x8e, - 0x11, 0x27, 0xb8, 0xa1, 0xe4, 0x45, 0x50, 0xfc, 0x13, 0x02, 0xaa, 0x94, 0xe3, 0xcc, 0xec, 0xcc, - 0x7e, 0xdf, 0xe8, 0x83, 0xfa, 0xa7, 0xf9, 0x54, 0x64, 0xa1, 0x1d, 0xce, 0x79, 0x2c, 0xed, 0x45, - 0xd7, 0x16, 0x8b, 0x98, 0x8b, 0x59, 0x24, 0xac, 0x34, 0x4b, 0x64, 0x82, 0x3a, 0xa5, 0x6e, 0x15, - 0xba, 0xb5, 0xe8, 0x9e, 0x9e, 0x44, 0x49, 0x3e, 0x4d, 0x72, 0x56, 0xc8, 0x76, 0x09, 0xca, 0xb7, - 0xcf, 0x7e, 0x35, 0x60, 0x13, 0x57, 0x76, 0xf4, 0x14, 0x3e, 0xa8, 0xa3, 0x58, 0xcc, 0x35, 0x60, - 0x00, 0xf3, 0x90, 0xc2, 0x9a, 0x22, 0x1c, 0x39, 0xb0, 0x93, 0xcf, 0xaf, 0x3e, 0x8a, 0x48, 0xb2, - 0x90, 0xf3, 0x4c, 0xe4, 0xb9, 0xd6, 0x30, 0x80, 0x79, 0xdc, 0xd7, 0x7e, 0x7c, 0x7d, 0xf1, 0xa8, - 0x0a, 0x76, 0x4a, 0x65, 0x2c, 0xb3, 0x78, 0x76, 0x4d, 0xdb, 0x95, 0xa1, 0x62, 0x91, 0x0b, 0xd5, - 0x4c, 0xa4, 0x49, 0x26, 0x45, 0xb6, 0xcd, 0x38, 0xd8, 0x93, 0xd1, 0xa9, 0x1d, 0x75, 0xc8, 0x63, - 0x78, 0x1c, 0x46, 0x32, 0x4e, 0x66, 0x9b, 0x31, 0x0f, 0x37, 0x6e, 0xda, 0x2c, 0x09, 0xc2, 0x51, - 0x1f, 0x3e, 0xdc, 0x6e, 0x21, 0x6f, 0x53, 0xa1, 0xdd, 0x33, 0x80, 0xd9, 0x7e, 0x75, 0x66, 0xfd, - 0x57, 0x8b, 0x55, 0xef, 0x1d, 0xdc, 0xa6, 0x82, 0xb6, 0xc4, 0x0e, 0x42, 0xa7, 0xb0, 0x39, 0x15, - 0x32, 0xe4, 0xa1, 0x0c, 0xb5, 0x23, 0x03, 0x98, 0x2d, 0xba, 0xc5, 0xe8, 0x39, 0xac, 0xe7, 0xe1, - 0xec, 0x46, 0xc4, 0xd7, 0x37, 0x52, 0xbb, 0x5f, 0x34, 0xd5, 0xae, 0xe9, 0xb7, 0x05, 0x7b, 0xfe, - 0x0d, 0xc0, 0xd6, 0xee, 0x1f, 0xe8, 0x0c, 0x9e, 0xe0, 0x77, 0x64, 0x80, 0x3d, 0x17, 0xb3, 0xe0, - 0x83, 0x8f, 0xd9, 0xc4, 0x1b, 0xfb, 0xd8, 0x25, 0x43, 0x82, 0x07, 0xaa, 0x82, 0x5e, 0xc3, 0xde, - 0xbf, 0xb2, 0xe3, 0x06, 0x64, 0xe4, 0xb1, 0x21, 0xf1, 0x9c, 0x0b, 0x72, 0xe9, 0x14, 0x60, 0x4c, - 0xde, 0x78, 0x4e, 0x30, 0xa1, 0x98, 0x0d, 0x1d, 0x72, 0x31, 0xa1, 0x58, 0x05, 0xa8, 0x07, 0xed, - 0xfd, 0x46, 0x6f, 0x14, 0x30, 0xe2, 0xb1, 0x60, 0xe4, 0xb3, 0xee, 0x4b, 0xb5, 0x81, 0x0c, 0xf8, - 0xe4, 0x4e, 0x13, 0x7e, 0xef, 0x13, 0x8a, 0x07, 0xea, 0x41, 0xff, 0xfc, 0xfb, 0x4a, 0x07, 0xcb, - 0x95, 0x0e, 0x7e, 0xaf, 0x74, 0xf0, 0x65, 0xad, 0x2b, 0xcb, 0xb5, 0xae, 0xfc, 0x5c, 0xeb, 0xca, - 0xa5, 0xfa, 0xf9, 0xef, 0xf1, 0x6d, 0x2a, 0xce, 0xaf, 0x8e, 0x8a, 0x73, 0xea, 0xfd, 0x09, 0x00, - 0x00, 0xff, 0xff, 0x44, 0x16, 0x0f, 0xea, 0x9c, 0x02, 0x00, 0x00, + // 450 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x41, 0x6f, 0x12, 0x41, + 0x14, 0x66, 0x28, 0x56, 0x3a, 0x22, 0x6c, 0x26, 0x1e, 0xb6, 0xd5, 0xae, 0x1b, 0x2f, 0x25, 0x35, + 0xee, 0x8a, 0x1c, 0x3c, 0x0f, 0xcb, 0x40, 0x27, 0x21, 0x03, 0x19, 0x16, 0xa3, 0xbd, 0x4c, 0xb6, + 0xcc, 0xa4, 0x5d, 0x23, 0x2c, 0xd9, 0x1d, 0x88, 0xfd, 0x17, 0xfe, 0x18, 0x7f, 0x84, 0xc7, 0xc6, + 0x93, 0xde, 0x0c, 0xdc, 0xfc, 0x15, 0x86, 0x5d, 0x96, 0xb6, 0xa6, 0x09, 0xc7, 0xef, 0xfb, 0xde, + 0xf7, 0xcd, 0x7b, 0x6f, 0x1e, 0xb4, 0xbe, 0xcc, 0x27, 0x2a, 0x0e, 0xdc, 0x60, 0x2e, 0x43, 0xed, + 0x2e, 0x1a, 0xae, 0x5a, 0x84, 0x52, 0x4d, 0xc7, 0xca, 0x99, 0xc5, 0x91, 0x8e, 0x50, 0x2d, 0xd3, + 0x9d, 0x54, 0x77, 0x16, 0x8d, 0xa3, 0xc3, 0x71, 0x94, 0x4c, 0xa2, 0x44, 0xa4, 0xb2, 0x9b, 0x81, + 0xac, 0xf6, 0xd5, 0xef, 0x22, 0x2c, 0x93, 0x8d, 0x1d, 0xbd, 0x84, 0x4f, 0xf2, 0x28, 0x11, 0x4a, + 0x13, 0xd8, 0xa0, 0x5e, 0xe2, 0x30, 0xa7, 0xa8, 0x44, 0x18, 0xd6, 0x92, 0xf9, 0xc5, 0x67, 0x35, + 0xd6, 0x22, 0x90, 0x32, 0x56, 0x49, 0x62, 0x16, 0x6d, 0x50, 0x3f, 0x68, 0x99, 0x3f, 0xbf, 0xbf, + 0x79, 0xb6, 0x09, 0xc6, 0x99, 0x32, 0xd4, 0x71, 0x38, 0xbd, 0xe4, 0xd5, 0x8d, 0x61, 0xc3, 0x22, + 0x0f, 0x1a, 0xb1, 0x9a, 0x45, 0xb1, 0x56, 0xf1, 0x36, 0x63, 0x6f, 0x47, 0x46, 0x2d, 0x77, 0xe4, + 0x21, 0xcf, 0xe1, 0x41, 0x30, 0xd6, 0x61, 0x34, 0x5d, 0xb7, 0x59, 0x5a, 0xbb, 0x79, 0x39, 0x23, + 0xa8, 0x44, 0x2d, 0xf8, 0x74, 0x3b, 0x85, 0xbe, 0x9e, 0x29, 0xf3, 0x91, 0x0d, 0xea, 0xd5, 0x77, + 0xc7, 0xce, 0x7f, 0x6b, 0x71, 0xf2, 0xb9, 0xfd, 0xeb, 0x99, 0xe2, 0x15, 0x75, 0x07, 0xa1, 0x23, + 0x58, 0x9e, 0x28, 0x1d, 0xc8, 0x40, 0x07, 0xe6, 0xbe, 0x0d, 0xea, 0x15, 0xbe, 0xc5, 0xe8, 0x04, + 0xe6, 0xfd, 0x48, 0x71, 0xa5, 0xc2, 0xcb, 0x2b, 0x6d, 0x3e, 0x4e, 0x37, 0x55, 0xcd, 0xe9, 0xb3, + 0x94, 0x3d, 0xfd, 0x0b, 0x60, 0xe5, 0xee, 0x1b, 0xe8, 0x18, 0x1e, 0x92, 0x0f, 0xb4, 0x4d, 0x98, + 0x47, 0x84, 0xff, 0x69, 0x40, 0xc4, 0x88, 0x0d, 0x07, 0xc4, 0xa3, 0x1d, 0x4a, 0xda, 0x46, 0x01, + 0xbd, 0x87, 0xcd, 0xfb, 0x32, 0xf6, 0x7c, 0xda, 0x67, 0xa2, 0x43, 0x19, 0xee, 0xd1, 0x73, 0x9c, + 0x82, 0x21, 0xed, 0x32, 0xec, 0x8f, 0x38, 0x11, 0x1d, 0x4c, 0x7b, 0x23, 0x4e, 0x0c, 0x80, 0x9a, + 0xd0, 0xdd, 0x6d, 0x64, 0x7d, 0x5f, 0x50, 0x26, 0xfc, 0xfe, 0x40, 0x34, 0xde, 0x1a, 0x45, 0x64, + 0xc3, 0x17, 0x0f, 0x9a, 0xc8, 0xc7, 0x01, 0xe5, 0xa4, 0x6d, 0xec, 0xa1, 0xd7, 0xf0, 0xe4, 0x7e, + 0xc5, 0xd0, 0xef, 0x73, 0xdc, 0x25, 0xc2, 0x3b, 0xc3, 0xbd, 0x1e, 0x61, 0xdd, 0xdb, 0x1e, 0x4a, + 0xad, 0xd3, 0x1f, 0x4b, 0x0b, 0xdc, 0x2c, 0x2d, 0xf0, 0x67, 0x69, 0x81, 0x6f, 0x2b, 0xab, 0x70, + 0xb3, 0xb2, 0x0a, 0xbf, 0x56, 0x56, 0xe1, 0xdc, 0xf8, 0x7a, 0x7b, 0xa9, 0xeb, 0xff, 0x48, 0x2e, + 0xf6, 0xd3, 0xdb, 0x6b, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x77, 0xc3, 0x17, 0x57, 0xc9, 0x02, + 0x00, 0x00, } func (m *Evidence) Marshal() (dAtA []byte, err error) { diff --git a/x/audit/v1/types/evidence_metadata.pb.go b/x/audit/v1/types/evidence_metadata.pb.go index cbbe6ea..afab9f6 100644 --- a/x/audit/v1/types/evidence_metadata.pb.go +++ b/x/audit/v1/types/evidence_metadata.pb.go @@ -170,10 +170,112 @@ func (m *ActionFinalizationNotInTop10EvidenceMetadata) GetTop_10ValidatorAddress return nil } +// StorageChallengeFailureEvidenceMetadata is metadata for a storage challenge failure submitted by a challenger. +type StorageChallengeFailureEvidenceMetadata struct { + EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + // challenger_supernode_account must be the tx signer for evidence submission. + ChallengerSupernodeAccount string `protobuf:"bytes,2,opt,name=challenger_supernode_account,json=challengerSupernodeAccount,proto3" json:"challenger_supernode_account,omitempty"` + // challenged_supernode_account should match Evidence.subject_address. + ChallengedSupernodeAccount string `protobuf:"bytes,3,opt,name=challenged_supernode_account,json=challengedSupernodeAccount,proto3" json:"challenged_supernode_account,omitempty"` + // challenge_id is the deterministic per-(epoch,challenger) identifier (hex-encoded blake3-256). + ChallengeId string `protobuf:"bytes,4,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + // file_key is the challenged file key (typically base58). + FileKey string `protobuf:"bytes,5,opt,name=file_key,json=fileKey,proto3" json:"file_key,omitempty"` + // failure_type is a short discriminator (e.g. TIMEOUT, INVALID_PROOF, MISSING_FILE). + FailureType string `protobuf:"bytes,6,opt,name=failure_type,json=failureType,proto3" json:"failure_type,omitempty"` + // transcript_hash is a hash commitment to the off-chain transcript (hex-encoded blake3-256). + TranscriptHash string `protobuf:"bytes,7,opt,name=transcript_hash,json=transcriptHash,proto3" json:"transcript_hash,omitempty"` +} + +func (m *StorageChallengeFailureEvidenceMetadata) Reset() { + *m = StorageChallengeFailureEvidenceMetadata{} +} +func (m *StorageChallengeFailureEvidenceMetadata) String() string { return proto.CompactTextString(m) } +func (*StorageChallengeFailureEvidenceMetadata) ProtoMessage() {} +func (*StorageChallengeFailureEvidenceMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_09b57e4c2349ab91, []int{3} +} +func (m *StorageChallengeFailureEvidenceMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StorageChallengeFailureEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_StorageChallengeFailureEvidenceMetadata.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 *StorageChallengeFailureEvidenceMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageChallengeFailureEvidenceMetadata.Merge(m, src) +} +func (m *StorageChallengeFailureEvidenceMetadata) XXX_Size() int { + return m.Size() +} +func (m *StorageChallengeFailureEvidenceMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_StorageChallengeFailureEvidenceMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_StorageChallengeFailureEvidenceMetadata proto.InternalMessageInfo + +func (m *StorageChallengeFailureEvidenceMetadata) GetEpochId() uint64 { + if m != nil { + return m.EpochId + } + return 0 +} + +func (m *StorageChallengeFailureEvidenceMetadata) GetChallengerSupernodeAccount() string { + if m != nil { + return m.ChallengerSupernodeAccount + } + return "" +} + +func (m *StorageChallengeFailureEvidenceMetadata) GetChallengedSupernodeAccount() string { + if m != nil { + return m.ChallengedSupernodeAccount + } + return "" +} + +func (m *StorageChallengeFailureEvidenceMetadata) GetChallengeId() string { + if m != nil { + return m.ChallengeId + } + return "" +} + +func (m *StorageChallengeFailureEvidenceMetadata) GetFileKey() string { + if m != nil { + return m.FileKey + } + return "" +} + +func (m *StorageChallengeFailureEvidenceMetadata) GetFailureType() string { + if m != nil { + return m.FailureType + } + return "" +} + +func (m *StorageChallengeFailureEvidenceMetadata) GetTranscriptHash() string { + if m != nil { + return m.TranscriptHash + } + return "" +} + func init() { proto.RegisterType((*ActionExpiredEvidenceMetadata)(nil), "lumera.audit.v1.ActionExpiredEvidenceMetadata") proto.RegisterType((*ActionFinalizationSignatureFailureEvidenceMetadata)(nil), "lumera.audit.v1.ActionFinalizationSignatureFailureEvidenceMetadata") proto.RegisterType((*ActionFinalizationNotInTop10EvidenceMetadata)(nil), "lumera.audit.v1.ActionFinalizationNotInTop10EvidenceMetadata") + proto.RegisterType((*StorageChallengeFailureEvidenceMetadata)(nil), "lumera.audit.v1.StorageChallengeFailureEvidenceMetadata") } func init() { @@ -181,25 +283,36 @@ func init() { } var fileDescriptor_09b57e4c2349ab91 = []byte{ - // 278 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x29, 0xcd, 0x4d, - 0x2d, 0x4a, 0xd4, 0x4f, 0x2c, 0x4d, 0xc9, 0x2c, 0xd1, 0x2f, 0x33, 0xd4, 0x4f, 0x2d, 0xcb, 0x4c, - 0x49, 0xcd, 0x4b, 0x4e, 0x8d, 0xcf, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, - 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x28, 0xd4, 0x03, 0x2b, 0xd4, 0x2b, 0x33, 0x94, 0x92, 0x4c, - 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0x8e, 0x07, 0x4b, 0xeb, 0x43, 0x38, 0x10, 0xb5, 0x4a, 0xf5, 0x5c, - 0xb2, 0x8e, 0xc9, 0x25, 0x99, 0xf9, 0x79, 0xae, 0x15, 0x05, 0x99, 0x45, 0xa9, 0x29, 0xae, 0x50, - 0x33, 0x7d, 0xa1, 0x46, 0x0a, 0xc5, 0x71, 0x49, 0x95, 0xe4, 0x17, 0xc4, 0x1b, 0x1a, 0xc4, 0x97, - 0x25, 0xe6, 0x64, 0xa6, 0x24, 0x96, 0xe4, 0x17, 0xc5, 0x27, 0xa6, 0xa4, 0x14, 0xa5, 0x16, 0x17, - 0xa7, 0x16, 0x4b, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x3a, 0x29, 0x5e, 0xda, 0xa2, 0x2b, 0x0b, 0x35, - 0x36, 0x0c, 0xa6, 0xca, 0x11, 0xa2, 0x28, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x48, 0xbc, 0x24, - 0xbf, 0xc0, 0xd0, 0x00, 0x5d, 0x32, 0xb5, 0x58, 0x69, 0x0a, 0x23, 0x97, 0x11, 0xc4, 0x05, 0x6e, - 0x99, 0x79, 0x89, 0x39, 0x99, 0x55, 0x89, 0x20, 0x76, 0x70, 0x66, 0x7a, 0x5e, 0x62, 0x49, 0x69, - 0x51, 0xaa, 0x5b, 0x62, 0x66, 0x4e, 0x69, 0x51, 0x2a, 0xdd, 0x9d, 0xd5, 0xc7, 0xc8, 0xa5, 0x83, - 0xe9, 0x2c, 0xbf, 0xfc, 0x12, 0xcf, 0xbc, 0x10, 0x90, 0x16, 0x7a, 0x3b, 0xc8, 0x49, 0xeb, 0xc4, - 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, - 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x04, 0x2a, 0x10, 0x49, 0xa2, 0xa4, 0xb2, - 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0xb7, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x8f, - 0xc7, 0xad, 0x32, 0x02, 0x00, 0x00, + // 455 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x93, 0xcd, 0x6e, 0x13, 0x31, + 0x14, 0x85, 0x63, 0x52, 0x1a, 0x6a, 0x10, 0x45, 0xd9, 0x74, 0x1a, 0xe8, 0x28, 0xed, 0x26, 0x11, + 0xa2, 0x49, 0x03, 0x4f, 0x90, 0xa0, 0x56, 0x44, 0x08, 0x16, 0x49, 0xc5, 0x02, 0x09, 0xac, 0x8b, + 0x7d, 0x9b, 0xb1, 0x98, 0xd8, 0x96, 0xed, 0x89, 0x3a, 0x6c, 0x78, 0x01, 0x84, 0x58, 0xf0, 0x28, + 0x7d, 0x08, 0x96, 0x55, 0x57, 0x2c, 0x51, 0xf2, 0x22, 0x68, 0x7e, 0xd2, 0xa8, 0x14, 0x16, 0x6c, + 0xba, 0x9b, 0x7b, 0xcf, 0x39, 0xdf, 0x1c, 0x5b, 0x32, 0x6d, 0xc5, 0xc9, 0x14, 0x2d, 0x74, 0x21, + 0x11, 0xd2, 0x77, 0x67, 0xbd, 0x2e, 0xce, 0xa4, 0x40, 0xc5, 0x91, 0x4d, 0xd1, 0x83, 0x00, 0x0f, + 0x1d, 0x63, 0xb5, 0xd7, 0xf5, 0xcd, 0xc2, 0xd8, 0xc9, 0x8d, 0x9d, 0x59, 0xaf, 0xb1, 0xcd, 0xb5, + 0x9b, 0x6a, 0xc7, 0x72, 0xb9, 0x5b, 0x0c, 0x85, 0x77, 0xef, 0x33, 0xdd, 0xe9, 0x73, 0x2f, 0xb5, + 0x3a, 0x3c, 0x35, 0xd2, 0xa2, 0x38, 0x2c, 0x99, 0xaf, 0x4a, 0x64, 0xfd, 0x3d, 0x6d, 0x78, 0x6d, + 0x58, 0xef, 0x80, 0xcd, 0x20, 0x96, 0x02, 0xbc, 0xb6, 0x0c, 0x84, 0xb0, 0xe8, 0x1c, 0xba, 0x80, + 0x34, 0xab, 0xed, 0x8d, 0xc1, 0xee, 0xc5, 0xd9, 0xfe, 0x4e, 0x89, 0x7d, 0xb3, 0x74, 0xf5, 0x0b, + 0xd3, 0xd8, 0x5b, 0xa9, 0x26, 0xa3, 0x2d, 0xaf, 0x4d, 0xef, 0xe0, 0x4f, 0x11, 0xdd, 0xde, 0x77, + 0x42, 0x9f, 0x16, 0x0d, 0x8e, 0xa4, 0x82, 0x58, 0x7e, 0x82, 0xec, 0x7b, 0x2c, 0x27, 0x0a, 0x7c, + 0x62, 0xf1, 0x08, 0x64, 0x9c, 0x58, 0xbc, 0xf1, 0x5a, 0x5f, 0x09, 0x7d, 0x72, 0xbd, 0xd6, 0x6b, + 0xed, 0x87, 0xea, 0x38, 0x8b, 0xdc, 0x78, 0xa1, 0x2f, 0x55, 0xda, 0x1a, 0x7b, 0x6d, 0x61, 0x82, + 0xcf, 0x23, 0x88, 0x63, 0x54, 0x93, 0x7f, 0x5e, 0xce, 0x36, 0xbd, 0x83, 0x46, 0xf3, 0x88, 0x49, + 0x11, 0x90, 0x26, 0x69, 0xaf, 0x8d, 0x6a, 0xf9, 0x3c, 0x14, 0xf5, 0x77, 0xf4, 0x11, 0x5f, 0xc6, + 0x2d, 0x73, 0x89, 0x41, 0xab, 0xb4, 0x40, 0x06, 0x9c, 0xeb, 0x44, 0xf9, 0xe0, 0x56, 0x93, 0xb4, + 0x37, 0x06, 0x0f, 0x2f, 0xce, 0xf6, 0xb7, 0xca, 0xa2, 0x7d, 0xce, 0xaf, 0x56, 0x6c, 0xac, 0x00, + 0xe3, 0x65, 0xbe, 0x5f, 0xc4, 0xaf, 0xe0, 0xc5, 0x5f, 0xf0, 0xd5, 0xff, 0xc1, 0x8b, 0x6b, 0xf8, + 0x5d, 0x7a, 0xef, 0x52, 0xcd, 0x0e, 0xb7, 0x96, 0xe1, 0x46, 0x77, 0x2f, 0x77, 0x43, 0x91, 0x9d, + 0xfd, 0x44, 0xc6, 0xc8, 0x3e, 0x62, 0x1a, 0xdc, 0xce, 0xe5, 0x5a, 0x36, 0xbf, 0xc4, 0x34, 0x4b, + 0x9f, 0x14, 0x37, 0xc6, 0x7c, 0x6a, 0x30, 0x58, 0x2f, 0xd2, 0xe5, 0xee, 0x38, 0x35, 0x58, 0x6f, + 0xd1, 0x4d, 0x6f, 0x41, 0x39, 0x6e, 0xa5, 0xf1, 0x2c, 0x02, 0x17, 0x05, 0xb5, 0xdc, 0x75, 0x7f, + 0xb5, 0x7e, 0x01, 0x2e, 0x1a, 0x3c, 0xfe, 0x31, 0x0f, 0xc9, 0xf9, 0x3c, 0x24, 0xbf, 0xe6, 0x21, + 0xf9, 0xb6, 0x08, 0x2b, 0xe7, 0x8b, 0xb0, 0xf2, 0x73, 0x11, 0x56, 0xde, 0x3e, 0x38, 0x5d, 0xbd, + 0xd0, 0xec, 0x37, 0xee, 0xc3, 0x7a, 0xfe, 0xd4, 0x9e, 0xfd, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xb3, + 0x76, 0x69, 0x56, 0xc1, 0x03, 0x00, 0x00, } func (m *ActionExpiredEvidenceMetadata) Marshal() (dAtA []byte, err error) { @@ -298,6 +411,76 @@ func (m *ActionFinalizationNotInTop10EvidenceMetadata) MarshalToSizedBuffer(dAtA return len(dAtA) - i, nil } +func (m *StorageChallengeFailureEvidenceMetadata) 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 *StorageChallengeFailureEvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StorageChallengeFailureEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TranscriptHash) > 0 { + i -= len(m.TranscriptHash) + copy(dAtA[i:], m.TranscriptHash) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.TranscriptHash))) + i-- + dAtA[i] = 0x3a + } + if len(m.FailureType) > 0 { + i -= len(m.FailureType) + copy(dAtA[i:], m.FailureType) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.FailureType))) + i-- + dAtA[i] = 0x32 + } + if len(m.FileKey) > 0 { + i -= len(m.FileKey) + copy(dAtA[i:], m.FileKey) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.FileKey))) + i-- + dAtA[i] = 0x2a + } + if len(m.ChallengeId) > 0 { + i -= len(m.ChallengeId) + copy(dAtA[i:], m.ChallengeId) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ChallengeId))) + i-- + dAtA[i] = 0x22 + } + if len(m.ChallengedSupernodeAccount) > 0 { + i -= len(m.ChallengedSupernodeAccount) + copy(dAtA[i:], m.ChallengedSupernodeAccount) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ChallengedSupernodeAccount))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChallengerSupernodeAccount) > 0 { + i -= len(m.ChallengerSupernodeAccount) + copy(dAtA[i:], m.ChallengerSupernodeAccount) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ChallengerSupernodeAccount))) + i-- + dAtA[i] = 0x12 + } + if m.EpochId != 0 { + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(m.EpochId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func encodeVarintEvidenceMetadata(dAtA []byte, offset int, v uint64) int { offset -= sovEvidenceMetadata(v) base := offset @@ -354,6 +537,42 @@ func (m *ActionFinalizationNotInTop10EvidenceMetadata) Size() (n int) { return n } +func (m *StorageChallengeFailureEvidenceMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EpochId != 0 { + n += 1 + sovEvidenceMetadata(uint64(m.EpochId)) + } + l = len(m.ChallengerSupernodeAccount) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.ChallengedSupernodeAccount) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.ChallengeId) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.FileKey) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.FailureType) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.TranscriptHash) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + return n +} + func sovEvidenceMetadata(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -606,6 +825,267 @@ func (m *ActionFinalizationNotInTop10EvidenceMetadata) Unmarshal(dAtA []byte) er } return nil } +func (m *StorageChallengeFailureEvidenceMetadata) 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 ErrIntOverflowEvidenceMetadata + } + 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: StorageChallengeFailureEvidenceMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StorageChallengeFailureEvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) + } + m.EpochId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChallengerSupernodeAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChallengerSupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChallengedSupernodeAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChallengedSupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChallengeId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChallengeId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FileKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FileKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailureType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FailureType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TranscriptHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TranscriptHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvidenceMetadata(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipEvidenceMetadata(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go index 97fef5e..c2e1088 100644 --- a/x/audit/v1/types/keys.go +++ b/x/audit/v1/types/keys.go @@ -14,49 +14,38 @@ var ( // Key layout notes // - // This module uses human-readable ASCII prefixes plus fixed-width binary window IDs. + // This module uses human-readable ASCII prefixes plus fixed-width binary epoch IDs. // - Prefixes are short and unambiguous when iterating by prefix. - // - window_id is encoded as 8-byte big-endian so lexicographic ordering matches numeric ordering. + // - epoch_id is encoded as 8-byte big-endian so lexicographic ordering matches numeric ordering. // - supernode accounts are stored as their bech32 string bytes. // - // Snapshotting: - // - Each window stores a WindowSnapshot under "ws/". - // - The snapshot is intended to be an immutable per-window source-of-truth for: - // - prober -> targets mapping (assignments) - // - // Window state: - // - Window math is derived from persisted "current window" state: - // - current window_id, start_height, end_height, window_blocks - // - When reporting_window_blocks is changed via governance, the new size is scheduled to take effect - // at the next window boundary (end(current)+1) by persisting a pending next_window_blocks value. + // Epoch anchors: + // - Each epoch stores an EpochAnchor under "ea/". + // - The anchor is intended to be an immutable per-epoch source-of-truth for: + // - deterministic seed + // - frozen eligible sets at epoch start // // Formats: - // - WindowSnapshotKey: "ws/" + u64be(window_id) - // - CurrentWindowStateKey: "win/current" -> 32 bytes: u64be(window_id) + u64be(start_height) + u64be(end_height) + u64be(window_blocks) - // - NextWindowBlocksKey: "win/next_blocks" -> 8 bytes (u64be(window_blocks)) - // - ReportKey: "r/" + u64be(window_id) + reporter_supernode_account - // - ReportIndexKey: "ri/" + reporter_supernode_account + "/" + u64be(window_id) - // - SupernodeReportIndexKey: "sr/" + supernode_account + "/" + u64be(window_id) + "/" + reporter_supernode_account - // - SelfReportIndexKey: "ss/" + reporter_supernode_account + "/" + u64be(window_id) + // - EpochAnchorKey: "ea/" + u64be(epoch_id) + // - ReportKey: "r/" + u64be(epoch_id) + reporter_supernode_account + // - ReportIndexKey: "ri/" + reporter_supernode_account + "/" + u64be(epoch_id) + // - SupernodeReportIndexKey: "sr/" + supernode_account + "/" + u64be(epoch_id) + "/" + reporter_supernode_account + // - SelfReportIndexKey: "ss/" + reporter_supernode_account + "/" + u64be(epoch_id) // // Examples (shown as pseudo strings; the u64be bytes will appear as non-printable in raw dumps): - // - WindowSnapshotKey(1) => "ws/" + u64be(1) - // - ReportKey(1, "") => "r/" + u64be(1) + "" - - currentWindowStateKey = []byte("win/current") - nextWindowBlocksKey = []byte("win/next_blocks") - - windowSnapshotPrefix = []byte("ws/") - reportPrefix = []byte("r/") + // - EpochAnchorKey(1) => "ea/" + u64be(1) + // - ReportKey(1, "") => "r/" + u64be(1) + "" + epochAnchorPrefix = []byte("ea/") + reportPrefix = []byte("r/") reportIndexPrefix = []byte("ri/") // supernodeReportIndexPrefix indexes reports that include an observation for a given supernode. - // Format: "sr/" + supernode_account + "/" + u64be(window_id) + "/" + reporter_supernode_account + // Format: "sr/" + supernode_account + "/" + u64be(epoch_id) + "/" + reporter_supernode_account supernodeReportIndexPrefix = []byte("sr/") - // selfReportIndexPrefix indexes all submitted reports (for listing self reports across reporters/windows). - // Format: "ss/" + reporter_supernode_account + "/" + u64be(window_id) + // selfReportIndexPrefix indexes all submitted reports (for listing self reports across reporters/epochs). + // Format: "ss/" + reporter_supernode_account + "/" + u64be(epoch_id) selfReportIndexPrefix = []byte("ss/") // Evidence: @@ -65,56 +54,50 @@ var ( // - EvidenceBySubjectIndexKey: "ev/s/" + subject_address + "/" + u64be(evidence_id) -> empty // - EvidenceByActionIndexKey: "ev/a/" + action_id + 0x00 + u64be(evidence_id) -> empty // - // Evidence window counts (window-scoped aggregates used for postponement/recovery): - // - EvidenceWindowCountKey: "evw/" + u64be(window_id) + "/" + subject_address + "/" + u32be(evidence_type) -> 8 bytes u64be(count) + // Evidence epoch counts (epoch-scoped aggregates used for postponement/recovery): + // - EvidenceEpochCountKey: "eve/" + u64be(epoch_id) + "/" + subject_address + "/" + u32be(evidence_type) -> 8 bytes u64be(count) // // Action finalization postponement state: - // - ActionFinalizationPostponementKey: "ap/af/" + supernode_account -> 8 bytes u64be(postponed_at_window_id) + // - ActionFinalizationPostponementKey: "ap/af/" + supernode_account -> 8 bytes u64be(postponed_at_epoch_id) nextEvidenceIDKey = []byte("ev/next_id") evidenceRecordPrefix = []byte("ev/r/") evidenceBySubjectPrefix = []byte("ev/s/") evidenceByActionIDPrefix = []byte("ev/a/") - evidenceWindowCountPrefix = []byte("evw/") + evidenceEpochCountPrefix = []byte("eve/") actionFinalizationPostponementPrefix = []byte("ap/af/") ) -// WindowSnapshotKey returns the store key for the WindowSnapshot identified by windowID. -func WindowSnapshotKey(windowID uint64) []byte { - key := make([]byte, 0, len(windowSnapshotPrefix)+8) // "ws/" + u64be(window_id) - key = append(key, windowSnapshotPrefix...) // "ws/" - key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) +// EpochAnchorKey returns the store key for the EpochAnchor identified by epochID. +func EpochAnchorKey(epochID uint64) []byte { + key := make([]byte, 0, len(epochAnchorPrefix)+8) // "ea/" + u64be(epoch_id) + key = append(key, epochAnchorPrefix...) + key = binary.BigEndian.AppendUint64(key, epochID) return key } -// CurrentWindowStateKey returns the store key for the persisted current-window state. -func CurrentWindowStateKey() []byte { - return currentWindowStateKey -} - -// NextWindowBlocksKey returns the store key for the persisted pending next-window size. -func NextWindowBlocksKey() []byte { - return nextWindowBlocksKey +func EpochAnchorPrefix() []byte { + return epochAnchorPrefix } -// ReportKey returns the store key for the AuditReport identified by (windowID, reporterSupernodeAccount). -func ReportKey(windowID uint64, reporterSupernodeAccount string) []byte { - key := make([]byte, 0, len(reportPrefix)+8+len(reporterSupernodeAccount)) // "r/" + u64be(window_id) + reporter +// ReportKey returns the store key for the AuditReport identified by (epochID, reporterSupernodeAccount). +func ReportKey(epochID uint64, reporterSupernodeAccount string) []byte { + key := make([]byte, 0, len(reportPrefix)+8+len(reporterSupernodeAccount)) // "r/" + u64be(epoch_id) + reporter key = append(key, reportPrefix...) // "r/" - key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) key = append(key, reporterSupernodeAccount...) // reporter (bech32) return key } -// ReportIndexKey returns the store key for the report index entry identified by (reporterSupernodeAccount, windowID). -// The value is empty; the key exists to allow querying all reports for a reporter without scanning all windows. -func ReportIndexKey(reporterSupernodeAccount string, windowID uint64) []byte { - key := make([]byte, 0, len(reportIndexPrefix)+len(reporterSupernodeAccount)+1+8) // "ri/" + reporter + "/" + u64be(window_id) +// ReportIndexKey returns the store key for the report index entry identified by (reporterSupernodeAccount, epochID). +// The value is empty; the key exists to allow querying all reports for a reporter without scanning all epochs. +func ReportIndexKey(reporterSupernodeAccount string, epochID uint64) []byte { + key := make([]byte, 0, len(reportIndexPrefix)+len(reporterSupernodeAccount)+1+8) // "ri/" + reporter + "/" + u64be(epoch_id) key = append(key, reportIndexPrefix...) // "ri/" key = append(key, reporterSupernodeAccount...) // reporter (bech32) key = append(key, '/') // separator - key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) return key } @@ -127,14 +110,14 @@ func ReportIndexPrefix(reporterSupernodeAccount string) []byte { return key } -// SupernodeReportIndexKey returns the store key for an index entry identified by (supernodeAccount, windowID, reporterSupernodeAccount). +// SupernodeReportIndexKey returns the store key for an index entry identified by (supernodeAccount, epochID, reporterSupernodeAccount). // The value is empty; the key exists to allow querying reports about a given supernode without scanning all reports. -func SupernodeReportIndexKey(supernodeAccount string, windowID uint64, reporterSupernodeAccount string) []byte { - key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1+8+1+len(reporterSupernodeAccount)) // "sr/" + supernode + "/" + u64be(window_id) + "/" + reporter +func SupernodeReportIndexKey(supernodeAccount string, epochID uint64, reporterSupernodeAccount string) []byte { + key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1+8+1+len(reporterSupernodeAccount)) // "sr/" + supernode + "/" + u64be(epoch_id) + "/" + reporter key = append(key, supernodeReportIndexPrefix...) // "sr/" key = append(key, supernodeAccount...) // supernode (bech32) key = append(key, '/') // separator - key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) key = append(key, '/') // separator key = append(key, reporterSupernodeAccount...) // reporter (bech32) return key @@ -149,25 +132,25 @@ func SupernodeReportIndexPrefix(supernodeAccount string) []byte { return key } -// SupernodeReportIndexWindowPrefix returns the prefix under which index keys are stored for a given (supernodeAccount, windowID). -func SupernodeReportIndexWindowPrefix(supernodeAccount string, windowID uint64) []byte { - key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1+8+1) // "sr/" + supernode + "/" + u64be(window_id) + "/" +// SupernodeReportIndexEpochPrefix returns the prefix under which index keys are stored for a given (supernodeAccount, epochID). +func SupernodeReportIndexEpochPrefix(supernodeAccount string, epochID uint64) []byte { + key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1+8+1) // "sr/" + supernode + "/" + u64be(epoch_id) + "/" key = append(key, supernodeReportIndexPrefix...) // "sr/" key = append(key, supernodeAccount...) // supernode (bech32) key = append(key, '/') // separator - key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) key = append(key, '/') // separator return key } -// SelfReportIndexKey returns the store key for an index entry identified by (reporterSupernodeAccount, windowID). -// The value is empty; the key exists to allow listing a supernode's self reports across windows without scanning all report keys. -func SelfReportIndexKey(reporterSupernodeAccount string, windowID uint64) []byte { - key := make([]byte, 0, len(selfReportIndexPrefix)+len(reporterSupernodeAccount)+1+8) // "ss/" + reporter + "/" + u64be(window_id) +// SelfReportIndexKey returns the store key for an index entry identified by (reporterSupernodeAccount, epochID). +// The value is empty; the key exists to allow listing a supernode's self reports across epochs without scanning all report keys. +func SelfReportIndexKey(reporterSupernodeAccount string, epochID uint64) []byte { + key := make([]byte, 0, len(selfReportIndexPrefix)+len(reporterSupernodeAccount)+1+8) // "ss/" + reporter + "/" + u64be(epoch_id) key = append(key, selfReportIndexPrefix...) // "ss/" key = append(key, reporterSupernodeAccount...) // reporter (bech32) key = append(key, '/') // separator - key = binary.BigEndian.AppendUint64(key, windowID) // u64be(window_id) + key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) return key } @@ -229,10 +212,10 @@ func EvidenceByActionIndexPrefix(actionID string) []byte { return key } -func EvidenceWindowCountKey(windowID uint64, subjectAddress string, evidenceType EvidenceType) []byte { - key := make([]byte, 0, len(evidenceWindowCountPrefix)+8+1+len(subjectAddress)+1+4) // "evw/" + u64be(window_id) + "/" + subject + "/" + u32be(evidence_type) - key = append(key, evidenceWindowCountPrefix...) - key = binary.BigEndian.AppendUint64(key, windowID) +func EvidenceEpochCountKey(epochID uint64, subjectAddress string, evidenceType EvidenceType) []byte { + key := make([]byte, 0, len(evidenceEpochCountPrefix)+8+1+len(subjectAddress)+1+4) // "eve/" + u64be(epoch_id) + "/" + subject + "/" + u32be(evidence_type) + key = append(key, evidenceEpochCountPrefix...) + key = binary.BigEndian.AppendUint64(key, epochID) key = append(key, '/') key = append(key, subjectAddress...) key = append(key, '/') @@ -240,8 +223,8 @@ func EvidenceWindowCountKey(windowID uint64, subjectAddress string, evidenceType return key } -func EvidenceWindowCountPrefix() []byte { - return evidenceWindowCountPrefix +func EvidenceEpochCountPrefix() []byte { + return evidenceEpochCountPrefix } func ActionFinalizationPostponementKey(supernodeAccount string) []byte { diff --git a/x/audit/v1/types/params.go b/x/audit/v1/types/params.go index 6d99599..cc102dd 100644 --- a/x/audit/v1/types/params.go +++ b/x/audit/v1/types/params.go @@ -10,206 +10,336 @@ import ( var _ paramtypes.ParamSet = (*Params)(nil) var ( - KeyReportingWindowBlocks = []byte("ReportingWindowBlocks") + KeyEpochLengthBlocks = []byte("EpochLengthBlocks") + KeyEpochZeroHeight = []byte("EpochZeroHeight") KeyPeerQuorumReports = []byte("PeerQuorumReports") - KeyMinProbeTargetsPerWindow = []byte("MinProbeTargetsPerWindow") - KeyMaxProbeTargetsPerWindow = []byte("MaxProbeTargetsPerWindow") + KeyMinProbeTargetsPerEpoch = []byte("MinProbeTargetsPerEpoch") + KeyMaxProbeTargetsPerEpoch = []byte("MaxProbeTargetsPerEpoch") KeyRequiredOpenPorts = []byte("RequiredOpenPorts") KeyMinCpuFreePercent = []byte("MinCpuFreePercent") KeyMinMemFreePercent = []byte("MinMemFreePercent") KeyMinDiskFreePercent = []byte("MinDiskFreePercent") - KeyConsecutiveWindowsToPostpone = []byte("ConsecutiveWindowsToPostpone") - KeyKeepLastWindowEntries = []byte("KeepLastWindowEntries") + KeyConsecutiveEpochsToPostpone = []byte("ConsecutiveEpochsToPostpone") + KeyKeepLastEpochEntries = []byte("KeepLastEpochEntries") KeyPeerPortPostponeThresholdPercent = []byte("PeerPortPostponeThresholdPercent") - KeyActionFinalizationSignatureFailureEvidencesPerWindow = []byte("ActionFinalizationSignatureFailureEvidencesPerWindow") - KeyActionFinalizationSignatureFailureConsecutiveWindows = []byte("ActionFinalizationSignatureFailureConsecutiveWindows") - KeyActionFinalizationNotInTop10EvidencesPerWindow = []byte("ActionFinalizationNotInTop10EvidencesPerWindow") - KeyActionFinalizationNotInTop10ConsecutiveWindows = []byte("ActionFinalizationNotInTop10ConsecutiveWindows") - KeyActionFinalizationRecoveryWindows = []byte("ActionFinalizationRecoveryWindows") - KeyActionFinalizationRecoveryMaxTotalBadEvidences = []byte("ActionFinalizationRecoveryMaxTotalBadEvidences") + KeyActionFinalizationSignatureFailureEvidencesPerEpoch = []byte("ActionFinalizationSignatureFailureEvidencesPerEpoch") + KeyActionFinalizationSignatureFailureConsecutiveEpochs = []byte("ActionFinalizationSignatureFailureConsecutiveEpochs") + KeyActionFinalizationNotInTop10EvidencesPerEpoch = []byte("ActionFinalizationNotInTop10EvidencesPerEpoch") + KeyActionFinalizationNotInTop10ConsecutiveEpochs = []byte("ActionFinalizationNotInTop10ConsecutiveEpochs") + KeyActionFinalizationRecoveryEpochs = []byte("ActionFinalizationRecoveryEpochs") + KeyActionFinalizationRecoveryMaxTotalBadEvidences = []byte("ActionFinalizationRecoveryMaxTotalBadEvidences") + + KeyScEnabled = []byte("ScEnabled") + KeyScChallengersPerEpoch = []byte("ScChallengersPerEpoch") + KeyScFilesPerChallenger = []byte("ScFilesPerChallenger") + KeyScReplicaCount = []byte("ScReplicaCount") + KeyScObserverThreshold = []byte("ScObserverThreshold") + KeyScMinSliceBytes = []byte("ScMinSliceBytes") + KeyScMaxSliceBytes = []byte("ScMaxSliceBytes") + KeyScResponseTimeoutMs = []byte("ScResponseTimeoutMs") + KeyScAffirmationTimeoutMs = []byte("ScAffirmationTimeoutMs") + KeyScEvidenceMaxBytes = []byte("ScEvidenceMaxBytes") + KeyScCandidateKeysLookbackEpochs = []byte("ScCandidateKeysLookbackEpochs") + KeyScStartJitterMs = []byte("ScStartJitterMs") + KeyScEvidenceSubmitterMustBeChallenger = []byte("ScEvidenceSubmitterMustBeChallenger") ) var ( - DefaultReportingWindowBlocks = uint64(400) + DefaultEpochLengthBlocks = uint64(400) + DefaultEpochZeroHeight = uint64(1) DefaultPeerQuorumReports = uint32(3) - DefaultMinProbeTargetsPerWindow = uint32(3) - DefaultMaxProbeTargetsPerWindow = uint32(5) + DefaultMinProbeTargetsPerEpoch = uint32(3) + DefaultMaxProbeTargetsPerEpoch = uint32(5) DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} DefaultMinCpuFreePercent = uint32(0) DefaultMinMemFreePercent = uint32(0) DefaultMinDiskFreePercent = uint32(0) - DefaultConsecutiveWindowsToPostpone = uint32(1) - DefaultKeepLastWindowEntries = uint64(200) + DefaultConsecutiveEpochsToPostpone = uint32(1) + DefaultKeepLastEpochEntries = uint64(200) DefaultPeerPortPostponeThresholdPercent = uint32(100) - DefaultActionFinalizationSignatureFailureEvidencesPerWindow = uint32(1) - DefaultActionFinalizationSignatureFailureConsecutiveWindows = uint32(1) - DefaultActionFinalizationNotInTop10EvidencesPerWindow = uint32(1) - DefaultActionFinalizationNotInTop10ConsecutiveWindows = uint32(1) - DefaultActionFinalizationRecoveryWindows = uint32(1) - DefaultActionFinalizationRecoveryMaxTotalBadEvidences = uint32(1) + DefaultActionFinalizationSignatureFailureEvidencesPerEpoch = uint32(1) + DefaultActionFinalizationSignatureFailureConsecutiveEpochs = uint32(1) + DefaultActionFinalizationNotInTop10EvidencesPerEpoch = uint32(1) + DefaultActionFinalizationNotInTop10ConsecutiveEpochs = uint32(1) + DefaultActionFinalizationRecoveryEpochs = uint32(1) + DefaultActionFinalizationRecoveryMaxTotalBadEvidences = uint32(1) + + DefaultScEnabled = true + DefaultScChallengersPerEpoch = uint32(0) // 0 means auto + DefaultScFilesPerChallenger = uint32(2) + DefaultScReplicaCount = uint32(5) + DefaultScObserverThreshold = uint32(2) + DefaultScMinSliceBytes = uint64(1024) + DefaultScMaxSliceBytes = uint64(65536) + DefaultScResponseTimeoutMs = uint64(30000) + DefaultScAffirmationTimeoutMs = uint64(30000) + DefaultScEvidenceMaxBytes = uint64(65536) + DefaultScCandidateKeysLookbackEpochs = uint32(1) + DefaultScStartJitterMs = uint64(60000) + DefaultScEvidenceSubmitterMustBeChallenger = true ) // Params notes // -// - reporting_window_blocks: defines the fixed-length reporting window size in blocks. -// - peer_quorum_reports: desired number of peer observations per receiver (drives k_window calculation). -// - min/max_probe_targets_per_window: clamps k_window to a safe range. -// - required_open_ports: ports every report must cover. +// Params are initialized from genesis and may later be updated by governance via +// `MsgUpdateParams` (with some fields immutable; see keeper/msg_update_params.go). +// +// - epoch_length_blocks: fixed-length epoch size in blocks (immutable after genesis). +// - epoch_zero_height: reference height at which epoch_id=0 starts (immutable after genesis). +// - peer_quorum_reports: desired number of peer observations per receiver (drives per-epoch target count). +// - min/max_probe_targets_per_epoch: clamps the computed target count to a safe range. +// - required_open_ports: ports every peer observation must cover (ordering matters; see keeper enforcement). // - min_*_free_percent: minimum required free capacity from self report (0 disables). -// - consecutive_windows_to_postpone: consecutive windows of peer port CLOSED meeting threshold needed to postpone. -// - peer_port_postpone_threshold_percent: percent of peers that must report CLOSED for port-based postponement (100 = unanimous). -// - keep_last_window_entries: how many windows of window-scoped state to keep (pruning at window end). -// - action_finalization_*: windowed postponement + recovery settings for action-finalization evidence types. +// - consecutive_epochs_to_postpone: lookback window for missing-report/peer-port postponement decisions. +// - peer_port_postpone_threshold_percent: percent of peers that must report CLOSED to treat a port as CLOSED. +// - keep_last_epoch_entries: how many epochs of epoch-scoped state to keep (pruning at epoch end). +// - action_finalization_*: postponement + recovery windows for action-finalization evidence types. func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) } func NewParams( - reportingWindowBlocks uint64, + epochLengthBlocks uint64, + epochZeroHeight uint64, peerQuorumReports uint32, - minProbeTargetsPerWindow uint32, - maxProbeTargetsPerWindow uint32, + minProbeTargetsPerEpoch uint32, + maxProbeTargetsPerEpoch uint32, requiredOpenPorts []uint32, minCpuFreePercent uint32, minMemFreePercent uint32, minDiskFreePercent uint32, - consecutiveWindowsToPostpone uint32, - keepLastWindowEntries uint64, + consecutiveEpochsToPostpone uint32, + keepLastEpochEntries uint64, peerPortPostponeThresholdPercent uint32, - actionFinalizationSignatureFailureEvidencesPerWindow uint32, - actionFinalizationSignatureFailureConsecutiveWindows uint32, - actionFinalizationNotInTop10EvidencesPerWindow uint32, - actionFinalizationNotInTop10ConsecutiveWindows uint32, - actionFinalizationRecoveryWindows uint32, + actionFinalizationSignatureFailureEvidencesPerEpoch uint32, + actionFinalizationSignatureFailureConsecutiveEpochs uint32, + actionFinalizationNotInTop10EvidencesPerEpoch uint32, + actionFinalizationNotInTop10ConsecutiveEpochs uint32, + actionFinalizationRecoveryEpochs uint32, actionFinalizationRecoveryMaxTotalBadEvidences uint32, + scEnabled bool, + scChallengersPerEpoch uint32, + scFilesPerChallenger uint32, + scReplicaCount uint32, + scObserverThreshold uint32, + scMinSliceBytes uint64, + scMaxSliceBytes uint64, + scResponseTimeoutMs uint64, + scAffirmationTimeoutMs uint64, + scEvidenceMaxBytes uint64, + scCandidateKeysLookbackEpochs uint32, + scStartJitterMs uint64, + scEvidenceSubmitterMustBeChallenger bool, ) Params { return Params{ - ReportingWindowBlocks: reportingWindowBlocks, + EpochLengthBlocks: epochLengthBlocks, + EpochZeroHeight: epochZeroHeight, PeerQuorumReports: peerQuorumReports, - MinProbeTargetsPerWindow: minProbeTargetsPerWindow, - MaxProbeTargetsPerWindow: maxProbeTargetsPerWindow, + MinProbeTargetsPerEpoch: minProbeTargetsPerEpoch, + MaxProbeTargetsPerEpoch: maxProbeTargetsPerEpoch, RequiredOpenPorts: requiredOpenPorts, MinCpuFreePercent: minCpuFreePercent, MinMemFreePercent: minMemFreePercent, MinDiskFreePercent: minDiskFreePercent, - ConsecutiveWindowsToPostpone: consecutiveWindowsToPostpone, - KeepLastWindowEntries: keepLastWindowEntries, + ConsecutiveEpochsToPostpone: consecutiveEpochsToPostpone, + KeepLastEpochEntries: keepLastEpochEntries, PeerPortPostponeThresholdPercent: peerPortPostponeThresholdPercent, - ActionFinalizationSignatureFailureEvidencesPerWindow: actionFinalizationSignatureFailureEvidencesPerWindow, - ActionFinalizationSignatureFailureConsecutiveWindows: actionFinalizationSignatureFailureConsecutiveWindows, - ActionFinalizationNotInTop10EvidencesPerWindow: actionFinalizationNotInTop10EvidencesPerWindow, - ActionFinalizationNotInTop10ConsecutiveWindows: actionFinalizationNotInTop10ConsecutiveWindows, - ActionFinalizationRecoveryWindows: actionFinalizationRecoveryWindows, - ActionFinalizationRecoveryMaxTotalBadEvidences: actionFinalizationRecoveryMaxTotalBadEvidences, + ActionFinalizationSignatureFailureEvidencesPerEpoch: actionFinalizationSignatureFailureEvidencesPerEpoch, + ActionFinalizationSignatureFailureConsecutiveEpochs: actionFinalizationSignatureFailureConsecutiveEpochs, + ActionFinalizationNotInTop10EvidencesPerEpoch: actionFinalizationNotInTop10EvidencesPerEpoch, + ActionFinalizationNotInTop10ConsecutiveEpochs: actionFinalizationNotInTop10ConsecutiveEpochs, + ActionFinalizationRecoveryEpochs: actionFinalizationRecoveryEpochs, + ActionFinalizationRecoveryMaxTotalBadEvidences: actionFinalizationRecoveryMaxTotalBadEvidences, + + ScEnabled: scEnabled, + ScChallengersPerEpoch: scChallengersPerEpoch, + ScFilesPerChallenger: scFilesPerChallenger, + ScReplicaCount: scReplicaCount, + ScObserverThreshold: scObserverThreshold, + ScMinSliceBytes: scMinSliceBytes, + ScMaxSliceBytes: scMaxSliceBytes, + ScResponseTimeoutMs: scResponseTimeoutMs, + ScAffirmationTimeoutMs: scAffirmationTimeoutMs, + ScEvidenceMaxBytes: scEvidenceMaxBytes, + ScCandidateKeysLookbackEpochs: scCandidateKeysLookbackEpochs, + ScStartJitterMs: scStartJitterMs, + ScEvidenceSubmitterMustBeChallenger: scEvidenceSubmitterMustBeChallenger, } } func DefaultParams() Params { return NewParams( - DefaultReportingWindowBlocks, + DefaultEpochLengthBlocks, + DefaultEpochZeroHeight, DefaultPeerQuorumReports, - DefaultMinProbeTargetsPerWindow, - DefaultMaxProbeTargetsPerWindow, + DefaultMinProbeTargetsPerEpoch, + DefaultMaxProbeTargetsPerEpoch, append([]uint32(nil), DefaultRequiredOpenPorts...), DefaultMinCpuFreePercent, DefaultMinMemFreePercent, DefaultMinDiskFreePercent, - DefaultConsecutiveWindowsToPostpone, - DefaultKeepLastWindowEntries, + DefaultConsecutiveEpochsToPostpone, + DefaultKeepLastEpochEntries, DefaultPeerPortPostponeThresholdPercent, - DefaultActionFinalizationSignatureFailureEvidencesPerWindow, - DefaultActionFinalizationSignatureFailureConsecutiveWindows, - DefaultActionFinalizationNotInTop10EvidencesPerWindow, - DefaultActionFinalizationNotInTop10ConsecutiveWindows, - DefaultActionFinalizationRecoveryWindows, + DefaultActionFinalizationSignatureFailureEvidencesPerEpoch, + DefaultActionFinalizationSignatureFailureConsecutiveEpochs, + DefaultActionFinalizationNotInTop10EvidencesPerEpoch, + DefaultActionFinalizationNotInTop10ConsecutiveEpochs, + DefaultActionFinalizationRecoveryEpochs, DefaultActionFinalizationRecoveryMaxTotalBadEvidences, + DefaultScEnabled, + DefaultScChallengersPerEpoch, + DefaultScFilesPerChallenger, + DefaultScReplicaCount, + DefaultScObserverThreshold, + DefaultScMinSliceBytes, + DefaultScMaxSliceBytes, + DefaultScResponseTimeoutMs, + DefaultScAffirmationTimeoutMs, + DefaultScEvidenceMaxBytes, + DefaultScCandidateKeysLookbackEpochs, + DefaultScStartJitterMs, + DefaultScEvidenceSubmitterMustBeChallenger, ) } func (p Params) WithDefaults() Params { - if p.ReportingWindowBlocks == 0 { - p.ReportingWindowBlocks = DefaultReportingWindowBlocks + if p.EpochLengthBlocks == 0 { + p.EpochLengthBlocks = DefaultEpochLengthBlocks + } + if p.EpochZeroHeight == 0 { + p.EpochZeroHeight = DefaultEpochZeroHeight } if p.PeerQuorumReports == 0 { p.PeerQuorumReports = DefaultPeerQuorumReports } - if p.MinProbeTargetsPerWindow == 0 { - p.MinProbeTargetsPerWindow = DefaultMinProbeTargetsPerWindow + if p.MinProbeTargetsPerEpoch == 0 { + p.MinProbeTargetsPerEpoch = DefaultMinProbeTargetsPerEpoch } - if p.MaxProbeTargetsPerWindow == 0 { - p.MaxProbeTargetsPerWindow = DefaultMaxProbeTargetsPerWindow + if p.MaxProbeTargetsPerEpoch == 0 { + p.MaxProbeTargetsPerEpoch = DefaultMaxProbeTargetsPerEpoch } if len(p.RequiredOpenPorts) == 0 { p.RequiredOpenPorts = append([]uint32(nil), DefaultRequiredOpenPorts...) } - if p.ConsecutiveWindowsToPostpone == 0 { - p.ConsecutiveWindowsToPostpone = DefaultConsecutiveWindowsToPostpone + if p.ConsecutiveEpochsToPostpone == 0 { + p.ConsecutiveEpochsToPostpone = DefaultConsecutiveEpochsToPostpone } - if p.KeepLastWindowEntries == 0 { - p.KeepLastWindowEntries = DefaultKeepLastWindowEntries + if p.KeepLastEpochEntries == 0 { + p.KeepLastEpochEntries = DefaultKeepLastEpochEntries } if p.PeerPortPostponeThresholdPercent == 0 { p.PeerPortPostponeThresholdPercent = DefaultPeerPortPostponeThresholdPercent } - if p.ActionFinalizationSignatureFailureEvidencesPerWindow == 0 { - p.ActionFinalizationSignatureFailureEvidencesPerWindow = DefaultActionFinalizationSignatureFailureEvidencesPerWindow + if p.ActionFinalizationSignatureFailureEvidencesPerEpoch == 0 { + p.ActionFinalizationSignatureFailureEvidencesPerEpoch = DefaultActionFinalizationSignatureFailureEvidencesPerEpoch } - if p.ActionFinalizationSignatureFailureConsecutiveWindows == 0 { - p.ActionFinalizationSignatureFailureConsecutiveWindows = DefaultActionFinalizationSignatureFailureConsecutiveWindows + if p.ActionFinalizationSignatureFailureConsecutiveEpochs == 0 { + p.ActionFinalizationSignatureFailureConsecutiveEpochs = DefaultActionFinalizationSignatureFailureConsecutiveEpochs } - if p.ActionFinalizationNotInTop10EvidencesPerWindow == 0 { - p.ActionFinalizationNotInTop10EvidencesPerWindow = DefaultActionFinalizationNotInTop10EvidencesPerWindow + if p.ActionFinalizationNotInTop10EvidencesPerEpoch == 0 { + p.ActionFinalizationNotInTop10EvidencesPerEpoch = DefaultActionFinalizationNotInTop10EvidencesPerEpoch } - if p.ActionFinalizationNotInTop10ConsecutiveWindows == 0 { - p.ActionFinalizationNotInTop10ConsecutiveWindows = DefaultActionFinalizationNotInTop10ConsecutiveWindows + if p.ActionFinalizationNotInTop10ConsecutiveEpochs == 0 { + p.ActionFinalizationNotInTop10ConsecutiveEpochs = DefaultActionFinalizationNotInTop10ConsecutiveEpochs } - if p.ActionFinalizationRecoveryWindows == 0 { - p.ActionFinalizationRecoveryWindows = DefaultActionFinalizationRecoveryWindows + if p.ActionFinalizationRecoveryEpochs == 0 { + p.ActionFinalizationRecoveryEpochs = DefaultActionFinalizationRecoveryEpochs } if p.ActionFinalizationRecoveryMaxTotalBadEvidences == 0 { p.ActionFinalizationRecoveryMaxTotalBadEvidences = DefaultActionFinalizationRecoveryMaxTotalBadEvidences } + + if p.ScFilesPerChallenger == 0 { + p.ScFilesPerChallenger = DefaultScFilesPerChallenger + } + if p.ScReplicaCount == 0 { + p.ScReplicaCount = DefaultScReplicaCount + } + if p.ScObserverThreshold == 0 { + p.ScObserverThreshold = DefaultScObserverThreshold + } + if p.ScMinSliceBytes == 0 { + p.ScMinSliceBytes = DefaultScMinSliceBytes + } + if p.ScMaxSliceBytes == 0 { + p.ScMaxSliceBytes = DefaultScMaxSliceBytes + } + if p.ScResponseTimeoutMs == 0 { + p.ScResponseTimeoutMs = DefaultScResponseTimeoutMs + } + if p.ScAffirmationTimeoutMs == 0 { + p.ScAffirmationTimeoutMs = DefaultScAffirmationTimeoutMs + } + if p.ScEvidenceMaxBytes == 0 { + p.ScEvidenceMaxBytes = DefaultScEvidenceMaxBytes + } + if p.ScCandidateKeysLookbackEpochs == 0 { + p.ScCandidateKeysLookbackEpochs = DefaultScCandidateKeysLookbackEpochs + } + if p.ScStartJitterMs == 0 { + p.ScStartJitterMs = DefaultScStartJitterMs + } + return p } func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(KeyReportingWindowBlocks, &p.ReportingWindowBlocks, validateUint64), + paramtypes.NewParamSetPair(KeyEpochLengthBlocks, &p.EpochLengthBlocks, validateUint64), + paramtypes.NewParamSetPair(KeyEpochZeroHeight, &p.EpochZeroHeight, validateUint64), paramtypes.NewParamSetPair(KeyPeerQuorumReports, &p.PeerQuorumReports, validateUint32), - paramtypes.NewParamSetPair(KeyMinProbeTargetsPerWindow, &p.MinProbeTargetsPerWindow, validateUint32), - paramtypes.NewParamSetPair(KeyMaxProbeTargetsPerWindow, &p.MaxProbeTargetsPerWindow, validateUint32), + paramtypes.NewParamSetPair(KeyMinProbeTargetsPerEpoch, &p.MinProbeTargetsPerEpoch, validateUint32), + paramtypes.NewParamSetPair(KeyMaxProbeTargetsPerEpoch, &p.MaxProbeTargetsPerEpoch, validateUint32), paramtypes.NewParamSetPair(KeyRequiredOpenPorts, &p.RequiredOpenPorts, validateUint32Slice), paramtypes.NewParamSetPair(KeyMinCpuFreePercent, &p.MinCpuFreePercent, validateUint32), paramtypes.NewParamSetPair(KeyMinMemFreePercent, &p.MinMemFreePercent, validateUint32), paramtypes.NewParamSetPair(KeyMinDiskFreePercent, &p.MinDiskFreePercent, validateUint32), - paramtypes.NewParamSetPair(KeyConsecutiveWindowsToPostpone, &p.ConsecutiveWindowsToPostpone, validateUint32), - paramtypes.NewParamSetPair(KeyKeepLastWindowEntries, &p.KeepLastWindowEntries, validateUint64), + paramtypes.NewParamSetPair(KeyConsecutiveEpochsToPostpone, &p.ConsecutiveEpochsToPostpone, validateUint32), + paramtypes.NewParamSetPair(KeyKeepLastEpochEntries, &p.KeepLastEpochEntries, validateUint64), paramtypes.NewParamSetPair(KeyPeerPortPostponeThresholdPercent, &p.PeerPortPostponeThresholdPercent, validateUint32), - paramtypes.NewParamSetPair(KeyActionFinalizationSignatureFailureEvidencesPerWindow, &p.ActionFinalizationSignatureFailureEvidencesPerWindow, validateUint32), - paramtypes.NewParamSetPair(KeyActionFinalizationSignatureFailureConsecutiveWindows, &p.ActionFinalizationSignatureFailureConsecutiveWindows, validateUint32), - paramtypes.NewParamSetPair(KeyActionFinalizationNotInTop10EvidencesPerWindow, &p.ActionFinalizationNotInTop10EvidencesPerWindow, validateUint32), - paramtypes.NewParamSetPair(KeyActionFinalizationNotInTop10ConsecutiveWindows, &p.ActionFinalizationNotInTop10ConsecutiveWindows, validateUint32), - paramtypes.NewParamSetPair(KeyActionFinalizationRecoveryWindows, &p.ActionFinalizationRecoveryWindows, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationSignatureFailureEvidencesPerEpoch, &p.ActionFinalizationSignatureFailureEvidencesPerEpoch, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationSignatureFailureConsecutiveEpochs, &p.ActionFinalizationSignatureFailureConsecutiveEpochs, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationNotInTop10EvidencesPerEpoch, &p.ActionFinalizationNotInTop10EvidencesPerEpoch, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationNotInTop10ConsecutiveEpochs, &p.ActionFinalizationNotInTop10ConsecutiveEpochs, validateUint32), + paramtypes.NewParamSetPair(KeyActionFinalizationRecoveryEpochs, &p.ActionFinalizationRecoveryEpochs, validateUint32), paramtypes.NewParamSetPair(KeyActionFinalizationRecoveryMaxTotalBadEvidences, &p.ActionFinalizationRecoveryMaxTotalBadEvidences, validateUint32), + + paramtypes.NewParamSetPair(KeyScEnabled, &p.ScEnabled, validateBool), + paramtypes.NewParamSetPair(KeyScChallengersPerEpoch, &p.ScChallengersPerEpoch, validateUint32), + paramtypes.NewParamSetPair(KeyScFilesPerChallenger, &p.ScFilesPerChallenger, validateUint32), + paramtypes.NewParamSetPair(KeyScReplicaCount, &p.ScReplicaCount, validateUint32), + paramtypes.NewParamSetPair(KeyScObserverThreshold, &p.ScObserverThreshold, validateUint32), + paramtypes.NewParamSetPair(KeyScMinSliceBytes, &p.ScMinSliceBytes, validateUint64), + paramtypes.NewParamSetPair(KeyScMaxSliceBytes, &p.ScMaxSliceBytes, validateUint64), + paramtypes.NewParamSetPair(KeyScResponseTimeoutMs, &p.ScResponseTimeoutMs, validateUint64), + paramtypes.NewParamSetPair(KeyScAffirmationTimeoutMs, &p.ScAffirmationTimeoutMs, validateUint64), + paramtypes.NewParamSetPair(KeyScEvidenceMaxBytes, &p.ScEvidenceMaxBytes, validateUint64), + paramtypes.NewParamSetPair(KeyScCandidateKeysLookbackEpochs, &p.ScCandidateKeysLookbackEpochs, validateUint32), + paramtypes.NewParamSetPair(KeyScStartJitterMs, &p.ScStartJitterMs, validateUint64), + paramtypes.NewParamSetPair(KeyScEvidenceSubmitterMustBeChallenger, &p.ScEvidenceSubmitterMustBeChallenger, validateBool), } } func (p Params) Validate() error { p = p.WithDefaults() - if p.ReportingWindowBlocks == 0 { - return fmt.Errorf("reporting_window_blocks must be > 0") + if p.EpochLengthBlocks == 0 { + return fmt.Errorf("epoch_length_blocks must be > 0") + } + if p.EpochZeroHeight == 0 { + return fmt.Errorf("epoch_zero_height must be > 0") } if p.PeerQuorumReports == 0 { return fmt.Errorf("peer_quorum_reports must be > 0") } - if p.MinProbeTargetsPerWindow > p.MaxProbeTargetsPerWindow { - return fmt.Errorf("min_probe_targets_per_window must be <= max_probe_targets_per_window") + if p.MinProbeTargetsPerEpoch > p.MaxProbeTargetsPerEpoch { + return fmt.Errorf("min_probe_targets_per_epoch must be <= max_probe_targets_per_epoch") } if len(p.RequiredOpenPorts) == 0 { return fmt.Errorf("required_open_ports must not be empty") @@ -223,34 +353,85 @@ func (p Params) Validate() error { if p.MinDiskFreePercent > 100 { return fmt.Errorf("min_disk_free_percent must be <= 100") } - if p.ConsecutiveWindowsToPostpone == 0 { - return fmt.Errorf("consecutive_windows_to_postpone must be > 0") + if p.ConsecutiveEpochsToPostpone == 0 { + return fmt.Errorf("consecutive_epochs_to_postpone must be > 0") } - if p.KeepLastWindowEntries == 0 { - return fmt.Errorf("keep_last_window_entries must be > 0") + if p.KeepLastEpochEntries == 0 { + return fmt.Errorf("keep_last_epoch_entries must be > 0") + } + // keep_last_epoch_entries must retain enough history to evaluate epoch-end rules that + // look back across multiple epochs. If history is pruned earlier than these lookbacks, + // enforcement becomes incorrect (false postponements or disabled postponements). + { + requiredHistory := uint64(p.ConsecutiveEpochsToPostpone) + if v := uint64(p.ActionFinalizationSignatureFailureConsecutiveEpochs); v > requiredHistory { + requiredHistory = v + } + if v := uint64(p.ActionFinalizationNotInTop10ConsecutiveEpochs); v > requiredHistory { + requiredHistory = v + } + if v := uint64(p.ActionFinalizationRecoveryEpochs); v > requiredHistory { + requiredHistory = v + } + if requiredHistory > 0 && p.KeepLastEpochEntries < requiredHistory { + return fmt.Errorf("keep_last_epoch_entries must be >= max epoch lookback windows (need >= %d)", requiredHistory) + } } if p.PeerPortPostponeThresholdPercent == 0 || p.PeerPortPostponeThresholdPercent > 100 { return fmt.Errorf("peer_port_postpone_threshold_percent must be within 1..100") } - if p.ActionFinalizationSignatureFailureEvidencesPerWindow == 0 { - return fmt.Errorf("action_finalization_signature_failure_evidences_per_window must be > 0") + if p.ActionFinalizationSignatureFailureEvidencesPerEpoch == 0 { + return fmt.Errorf("action_finalization_signature_failure_evidences_per_epoch must be > 0") } - if p.ActionFinalizationSignatureFailureConsecutiveWindows == 0 { - return fmt.Errorf("action_finalization_signature_failure_consecutive_windows must be > 0") + if p.ActionFinalizationSignatureFailureConsecutiveEpochs == 0 { + return fmt.Errorf("action_finalization_signature_failure_consecutive_epochs must be > 0") } - if p.ActionFinalizationNotInTop10EvidencesPerWindow == 0 { - return fmt.Errorf("action_finalization_not_in_top_10_evidences_per_window must be > 0") + if p.ActionFinalizationNotInTop10EvidencesPerEpoch == 0 { + return fmt.Errorf("action_finalization_not_in_top_10_evidences_per_epoch must be > 0") } - if p.ActionFinalizationNotInTop10ConsecutiveWindows == 0 { - return fmt.Errorf("action_finalization_not_in_top_10_consecutive_windows must be > 0") + if p.ActionFinalizationNotInTop10ConsecutiveEpochs == 0 { + return fmt.Errorf("action_finalization_not_in_top_10_consecutive_epochs must be > 0") } - if p.ActionFinalizationRecoveryWindows == 0 { - return fmt.Errorf("action_finalization_recovery_windows must be > 0") + if p.ActionFinalizationRecoveryEpochs == 0 { + return fmt.Errorf("action_finalization_recovery_epochs must be > 0") } if p.ActionFinalizationRecoveryMaxTotalBadEvidences == 0 { return fmt.Errorf("action_finalization_recovery_max_total_bad_evidences must be > 0") } + if p.ScEnabled { + if p.ScFilesPerChallenger == 0 { + return fmt.Errorf("sc_files_per_challenger must be > 0") + } + if p.ScReplicaCount == 0 { + return fmt.Errorf("sc_replica_count must be > 0") + } + if p.ScObserverThreshold == 0 { + return fmt.Errorf("sc_observer_threshold must be > 0") + } + if p.ScObserverThreshold > p.ScReplicaCount { + return fmt.Errorf("sc_observer_threshold must be <= sc_replica_count") + } + if p.ScMinSliceBytes == 0 || p.ScMaxSliceBytes == 0 { + return fmt.Errorf("sc_min_slice_bytes and sc_max_slice_bytes must be > 0") + } + if p.ScMinSliceBytes > p.ScMaxSliceBytes { + return fmt.Errorf("sc_min_slice_bytes must be <= sc_max_slice_bytes") + } + if p.ScResponseTimeoutMs == 0 { + return fmt.Errorf("sc_response_timeout_ms must be > 0") + } + if p.ScAffirmationTimeoutMs == 0 { + return fmt.Errorf("sc_affirmation_timeout_ms must be > 0") + } + if p.ScEvidenceMaxBytes == 0 { + return fmt.Errorf("sc_evidence_max_bytes must be > 0") + } + if p.ScCandidateKeysLookbackEpochs == 0 { + return fmt.Errorf("sc_candidate_keys_lookback_epochs must be > 0") + } + } + ports := append([]uint32(nil), p.RequiredOpenPorts...) sort.Slice(ports, func(i, j int) bool { return ports[i] < ports[j] }) for i := 1; i < len(ports); i++ { @@ -285,3 +466,11 @@ func validateUint32Slice(v interface{}) error { } return nil } + +func validateBool(v interface{}) error { + _, ok := v.(bool) + if !ok { + return fmt.Errorf("invalid parameter type: %T", v) + } + return nil +} diff --git a/x/audit/v1/types/params.pb.go b/x/audit/v1/types/params.pb.go index fe37742..75d0315 100644 --- a/x/audit/v1/types/params.pb.go +++ b/x/audit/v1/types/params.pb.go @@ -26,47 +26,64 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Params defines the parameters for the audit module. type Params struct { - ReportingWindowBlocks uint64 `protobuf:"varint,1,opt,name=reporting_window_blocks,json=reportingWindowBlocks,proto3" json:"reporting_window_blocks,omitempty"` - PeerQuorumReports uint32 `protobuf:"varint,3,opt,name=peer_quorum_reports,json=peerQuorumReports,proto3" json:"peer_quorum_reports,omitempty"` - MinProbeTargetsPerWindow uint32 `protobuf:"varint,4,opt,name=min_probe_targets_per_window,json=minProbeTargetsPerWindow,proto3" json:"min_probe_targets_per_window,omitempty"` - MaxProbeTargetsPerWindow uint32 `protobuf:"varint,5,opt,name=max_probe_targets_per_window,json=maxProbeTargetsPerWindow,proto3" json:"max_probe_targets_per_window,omitempty"` - RequiredOpenPorts []uint32 `protobuf:"varint,6,rep,packed,name=required_open_ports,json=requiredOpenPorts,proto3" json:"required_open_ports,omitempty"` + EpochLengthBlocks uint64 `protobuf:"varint,1,opt,name=epoch_length_blocks,json=epochLengthBlocks,proto3" json:"epoch_length_blocks,omitempty"` + // epoch_zero_height defines the reference chain height at which epoch_id = 0 starts. + // This makes epoch boundaries deterministic from genesis without needing to query state. + EpochZeroHeight uint64 `protobuf:"varint,2,opt,name=epoch_zero_height,json=epochZeroHeight,proto3" json:"epoch_zero_height,omitempty"` + PeerQuorumReports uint32 `protobuf:"varint,3,opt,name=peer_quorum_reports,json=peerQuorumReports,proto3" json:"peer_quorum_reports,omitempty"` + MinProbeTargetsPerEpoch uint32 `protobuf:"varint,4,opt,name=min_probe_targets_per_epoch,json=minProbeTargetsPerEpoch,proto3" json:"min_probe_targets_per_epoch,omitempty"` + MaxProbeTargetsPerEpoch uint32 `protobuf:"varint,5,opt,name=max_probe_targets_per_epoch,json=maxProbeTargetsPerEpoch,proto3" json:"max_probe_targets_per_epoch,omitempty"` + RequiredOpenPorts []uint32 `protobuf:"varint,6,rep,packed,name=required_open_ports,json=requiredOpenPorts,proto3" json:"required_open_ports,omitempty"` // Minimum required host free capacity (self reported). // free% = 100 - usage% // A usage% of 0 is treated as "unknown" (no action). MinCpuFreePercent uint32 `protobuf:"varint,7,opt,name=min_cpu_free_percent,json=minCpuFreePercent,proto3" json:"min_cpu_free_percent,omitempty"` MinMemFreePercent uint32 `protobuf:"varint,8,opt,name=min_mem_free_percent,json=minMemFreePercent,proto3" json:"min_mem_free_percent,omitempty"` MinDiskFreePercent uint32 `protobuf:"varint,9,opt,name=min_disk_free_percent,json=minDiskFreePercent,proto3" json:"min_disk_free_percent,omitempty"` - // Number of consecutive windows a required port must be reported CLOSED by peers + // Number of consecutive epochs a required port must be reported CLOSED by peers // at or above peer_port_postpone_threshold_percent before postponing the supernode. - ConsecutiveWindowsToPostpone uint32 `protobuf:"varint,10,opt,name=consecutive_windows_to_postpone,json=consecutiveWindowsToPostpone,proto3" json:"consecutive_windows_to_postpone,omitempty"` - // How many completed windows to keep in state for window-scoped data like WindowSnapshot, - // AuditReport, and related indices. Pruning runs at window end. - KeepLastWindowEntries uint64 `protobuf:"varint,11,opt,name=keep_last_window_entries,json=keepLastWindowEntries,proto3" json:"keep_last_window_entries,omitempty"` + ConsecutiveEpochsToPostpone uint32 `protobuf:"varint,10,opt,name=consecutive_epochs_to_postpone,json=consecutiveEpochsToPostpone,proto3" json:"consecutive_epochs_to_postpone,omitempty"` + // How many completed epochs to keep in state for epoch-scoped data like AuditReport + // and related indices. Pruning runs at epoch end. + KeepLastEpochEntries uint64 `protobuf:"varint,11,opt,name=keep_last_epoch_entries,json=keepLastEpochEntries,proto3" json:"keep_last_epoch_entries,omitempty"` // Minimum percent (1-100) of peer reports that must report a required port as CLOSED // for the port to be treated as CLOSED for postponement purposes. // // 100 means unanimous. // Example: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%). PeerPortPostponeThresholdPercent uint32 `protobuf:"varint,12,opt,name=peer_port_postpone_threshold_percent,json=peerPortPostponeThresholdPercent,proto3" json:"peer_port_postpone_threshold_percent,omitempty"` - // action_finalization_signature_failure_evidences_per_window is the per-window count threshold + // action_finalization_signature_failure_evidences_per_epoch is the per-epoch count threshold // for EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE. - ActionFinalizationSignatureFailureEvidencesPerWindow uint32 `protobuf:"varint,13,opt,name=action_finalization_signature_failure_evidences_per_window,json=actionFinalizationSignatureFailureEvidencesPerWindow,proto3" json:"action_finalization_signature_failure_evidences_per_window,omitempty"` - // action_finalization_signature_failure_consecutive_windows is the consecutive windows threshold + ActionFinalizationSignatureFailureEvidencesPerEpoch uint32 `protobuf:"varint,13,opt,name=action_finalization_signature_failure_evidences_per_epoch,json=actionFinalizationSignatureFailureEvidencesPerEpoch,proto3" json:"action_finalization_signature_failure_evidences_per_epoch,omitempty"` + // action_finalization_signature_failure_consecutive_epochs is the consecutive epochs threshold // for EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE. - ActionFinalizationSignatureFailureConsecutiveWindows uint32 `protobuf:"varint,14,opt,name=action_finalization_signature_failure_consecutive_windows,json=actionFinalizationSignatureFailureConsecutiveWindows,proto3" json:"action_finalization_signature_failure_consecutive_windows,omitempty"` - // action_finalization_not_in_top10_evidences_per_window is the per-window count threshold + ActionFinalizationSignatureFailureConsecutiveEpochs uint32 `protobuf:"varint,14,opt,name=action_finalization_signature_failure_consecutive_epochs,json=actionFinalizationSignatureFailureConsecutiveEpochs,proto3" json:"action_finalization_signature_failure_consecutive_epochs,omitempty"` + // action_finalization_not_in_top10_evidences_per_epoch is the per-epoch count threshold // for EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10. - ActionFinalizationNotInTop10EvidencesPerWindow uint32 `protobuf:"varint,15,opt,name=action_finalization_not_in_top10_evidences_per_window,json=actionFinalizationNotInTop10EvidencesPerWindow,proto3" json:"action_finalization_not_in_top10_evidences_per_window,omitempty"` - // action_finalization_not_in_top10_consecutive_windows is the consecutive windows threshold + ActionFinalizationNotInTop10EvidencesPerEpoch uint32 `protobuf:"varint,15,opt,name=action_finalization_not_in_top10_evidences_per_epoch,json=actionFinalizationNotInTop10EvidencesPerEpoch,proto3" json:"action_finalization_not_in_top10_evidences_per_epoch,omitempty"` + // action_finalization_not_in_top10_consecutive_epochs is the consecutive epochs threshold // for EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10. - ActionFinalizationNotInTop10ConsecutiveWindows uint32 `protobuf:"varint,16,opt,name=action_finalization_not_in_top10_consecutive_windows,json=actionFinalizationNotInTop10ConsecutiveWindows,proto3" json:"action_finalization_not_in_top10_consecutive_windows,omitempty"` - // action_finalization_recovery_windows is the number of windows to wait before considering recovery. - ActionFinalizationRecoveryWindows uint32 `protobuf:"varint,17,opt,name=action_finalization_recovery_windows,json=actionFinalizationRecoveryWindows,proto3" json:"action_finalization_recovery_windows,omitempty"` + ActionFinalizationNotInTop10ConsecutiveEpochs uint32 `protobuf:"varint,16,opt,name=action_finalization_not_in_top10_consecutive_epochs,json=actionFinalizationNotInTop10ConsecutiveEpochs,proto3" json:"action_finalization_not_in_top10_consecutive_epochs,omitempty"` + // action_finalization_recovery_epochs is the number of epochs to wait before considering recovery. + ActionFinalizationRecoveryEpochs uint32 `protobuf:"varint,17,opt,name=action_finalization_recovery_epochs,json=actionFinalizationRecoveryEpochs,proto3" json:"action_finalization_recovery_epochs,omitempty"` // action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad - // action-finalization evidences in the recovery window for auto-recovery to occur. + // action-finalization evidences in the recovery epoch-span for auto-recovery to occur. // Recovery happens ONLY IF total_bad < this value. ActionFinalizationRecoveryMaxTotalBadEvidences uint32 `protobuf:"varint,18,opt,name=action_finalization_recovery_max_total_bad_evidences,json=actionFinalizationRecoveryMaxTotalBadEvidences,proto3" json:"action_finalization_recovery_max_total_bad_evidences,omitempty"` + // Storage Challenge (SC) params. + ScEnabled bool `protobuf:"varint,19,opt,name=sc_enabled,json=scEnabled,proto3" json:"sc_enabled,omitempty"` + ScChallengersPerEpoch uint32 `protobuf:"varint,20,opt,name=sc_challengers_per_epoch,json=scChallengersPerEpoch,proto3" json:"sc_challengers_per_epoch,omitempty"` + ScFilesPerChallenger uint32 `protobuf:"varint,21,opt,name=sc_files_per_challenger,json=scFilesPerChallenger,proto3" json:"sc_files_per_challenger,omitempty"` + ScReplicaCount uint32 `protobuf:"varint,22,opt,name=sc_replica_count,json=scReplicaCount,proto3" json:"sc_replica_count,omitempty"` + ScObserverThreshold uint32 `protobuf:"varint,23,opt,name=sc_observer_threshold,json=scObserverThreshold,proto3" json:"sc_observer_threshold,omitempty"` + ScMinSliceBytes uint64 `protobuf:"varint,24,opt,name=sc_min_slice_bytes,json=scMinSliceBytes,proto3" json:"sc_min_slice_bytes,omitempty"` + ScMaxSliceBytes uint64 `protobuf:"varint,25,opt,name=sc_max_slice_bytes,json=scMaxSliceBytes,proto3" json:"sc_max_slice_bytes,omitempty"` + ScResponseTimeoutMs uint64 `protobuf:"varint,26,opt,name=sc_response_timeout_ms,json=scResponseTimeoutMs,proto3" json:"sc_response_timeout_ms,omitempty"` + ScAffirmationTimeoutMs uint64 `protobuf:"varint,27,opt,name=sc_affirmation_timeout_ms,json=scAffirmationTimeoutMs,proto3" json:"sc_affirmation_timeout_ms,omitempty"` + ScEvidenceMaxBytes uint64 `protobuf:"varint,28,opt,name=sc_evidence_max_bytes,json=scEvidenceMaxBytes,proto3" json:"sc_evidence_max_bytes,omitempty"` + ScCandidateKeysLookbackEpochs uint32 `protobuf:"varint,29,opt,name=sc_candidate_keys_lookback_epochs,json=scCandidateKeysLookbackEpochs,proto3" json:"sc_candidate_keys_lookback_epochs,omitempty"` + ScStartJitterMs uint64 `protobuf:"varint,30,opt,name=sc_start_jitter_ms,json=scStartJitterMs,proto3" json:"sc_start_jitter_ms,omitempty"` + ScEvidenceSubmitterMustBeChallenger bool `protobuf:"varint,31,opt,name=sc_evidence_submitter_must_be_challenger,json=scEvidenceSubmitterMustBeChallenger,proto3" json:"sc_evidence_submitter_must_be_challenger,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -102,9 +119,16 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo -func (m *Params) GetReportingWindowBlocks() uint64 { +func (m *Params) GetEpochLengthBlocks() uint64 { if m != nil { - return m.ReportingWindowBlocks + return m.EpochLengthBlocks + } + return 0 +} + +func (m *Params) GetEpochZeroHeight() uint64 { + if m != nil { + return m.EpochZeroHeight } return 0 } @@ -116,16 +140,16 @@ func (m *Params) GetPeerQuorumReports() uint32 { return 0 } -func (m *Params) GetMinProbeTargetsPerWindow() uint32 { +func (m *Params) GetMinProbeTargetsPerEpoch() uint32 { if m != nil { - return m.MinProbeTargetsPerWindow + return m.MinProbeTargetsPerEpoch } return 0 } -func (m *Params) GetMaxProbeTargetsPerWindow() uint32 { +func (m *Params) GetMaxProbeTargetsPerEpoch() uint32 { if m != nil { - return m.MaxProbeTargetsPerWindow + return m.MaxProbeTargetsPerEpoch } return 0 } @@ -158,16 +182,16 @@ func (m *Params) GetMinDiskFreePercent() uint32 { return 0 } -func (m *Params) GetConsecutiveWindowsToPostpone() uint32 { +func (m *Params) GetConsecutiveEpochsToPostpone() uint32 { if m != nil { - return m.ConsecutiveWindowsToPostpone + return m.ConsecutiveEpochsToPostpone } return 0 } -func (m *Params) GetKeepLastWindowEntries() uint64 { +func (m *Params) GetKeepLastEpochEntries() uint64 { if m != nil { - return m.KeepLastWindowEntries + return m.KeepLastEpochEntries } return 0 } @@ -179,37 +203,37 @@ func (m *Params) GetPeerPortPostponeThresholdPercent() uint32 { return 0 } -func (m *Params) GetActionFinalizationSignatureFailureEvidencesPerWindow() uint32 { +func (m *Params) GetActionFinalizationSignatureFailureEvidencesPerEpoch() uint32 { if m != nil { - return m.ActionFinalizationSignatureFailureEvidencesPerWindow + return m.ActionFinalizationSignatureFailureEvidencesPerEpoch } return 0 } -func (m *Params) GetActionFinalizationSignatureFailureConsecutiveWindows() uint32 { +func (m *Params) GetActionFinalizationSignatureFailureConsecutiveEpochs() uint32 { if m != nil { - return m.ActionFinalizationSignatureFailureConsecutiveWindows + return m.ActionFinalizationSignatureFailureConsecutiveEpochs } return 0 } -func (m *Params) GetActionFinalizationNotInTop10EvidencesPerWindow() uint32 { +func (m *Params) GetActionFinalizationNotInTop10EvidencesPerEpoch() uint32 { if m != nil { - return m.ActionFinalizationNotInTop10EvidencesPerWindow + return m.ActionFinalizationNotInTop10EvidencesPerEpoch } return 0 } -func (m *Params) GetActionFinalizationNotInTop10ConsecutiveWindows() uint32 { +func (m *Params) GetActionFinalizationNotInTop10ConsecutiveEpochs() uint32 { if m != nil { - return m.ActionFinalizationNotInTop10ConsecutiveWindows + return m.ActionFinalizationNotInTop10ConsecutiveEpochs } return 0 } -func (m *Params) GetActionFinalizationRecoveryWindows() uint32 { +func (m *Params) GetActionFinalizationRecoveryEpochs() uint32 { if m != nil { - return m.ActionFinalizationRecoveryWindows + return m.ActionFinalizationRecoveryEpochs } return 0 } @@ -221,6 +245,97 @@ func (m *Params) GetActionFinalizationRecoveryMaxTotalBadEvidences() uint32 { return 0 } +func (m *Params) GetScEnabled() bool { + if m != nil { + return m.ScEnabled + } + return false +} + +func (m *Params) GetScChallengersPerEpoch() uint32 { + if m != nil { + return m.ScChallengersPerEpoch + } + return 0 +} + +func (m *Params) GetScFilesPerChallenger() uint32 { + if m != nil { + return m.ScFilesPerChallenger + } + return 0 +} + +func (m *Params) GetScReplicaCount() uint32 { + if m != nil { + return m.ScReplicaCount + } + return 0 +} + +func (m *Params) GetScObserverThreshold() uint32 { + if m != nil { + return m.ScObserverThreshold + } + return 0 +} + +func (m *Params) GetScMinSliceBytes() uint64 { + if m != nil { + return m.ScMinSliceBytes + } + return 0 +} + +func (m *Params) GetScMaxSliceBytes() uint64 { + if m != nil { + return m.ScMaxSliceBytes + } + return 0 +} + +func (m *Params) GetScResponseTimeoutMs() uint64 { + if m != nil { + return m.ScResponseTimeoutMs + } + return 0 +} + +func (m *Params) GetScAffirmationTimeoutMs() uint64 { + if m != nil { + return m.ScAffirmationTimeoutMs + } + return 0 +} + +func (m *Params) GetScEvidenceMaxBytes() uint64 { + if m != nil { + return m.ScEvidenceMaxBytes + } + return 0 +} + +func (m *Params) GetScCandidateKeysLookbackEpochs() uint32 { + if m != nil { + return m.ScCandidateKeysLookbackEpochs + } + return 0 +} + +func (m *Params) GetScStartJitterMs() uint64 { + if m != nil { + return m.ScStartJitterMs + } + return 0 +} + +func (m *Params) GetScEvidenceSubmitterMustBeChallenger() bool { + if m != nil { + return m.ScEvidenceSubmitterMustBeChallenger + } + return false +} + func init() { proto.RegisterType((*Params)(nil), "lumera.audit.v1.Params") } @@ -228,48 +343,70 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/params.proto", fileDescriptor_3788ca0fc7eb9d86) } var fileDescriptor_3788ca0fc7eb9d86 = []byte{ - // 644 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x4f, 0x4f, 0x13, 0x41, - 0x18, 0xc6, 0xd9, 0x80, 0xa8, 0xa3, 0x08, 0x2c, 0x10, 0x37, 0x84, 0x94, 0x6a, 0x38, 0x10, 0x0f, - 0xad, 0x8d, 0xa8, 0x91, 0x83, 0x07, 0x10, 0x12, 0x13, 0x81, 0xb5, 0x36, 0x31, 0xf1, 0x32, 0x99, - 0xee, 0xbe, 0x94, 0x49, 0x77, 0xfe, 0x30, 0x33, 0x5b, 0x8a, 0x9f, 0xc2, 0xb3, 0x27, 0x3f, 0x8e, - 0x47, 0x8e, 0x1e, 0x0d, 0x5c, 0xfc, 0x18, 0x66, 0x66, 0xba, 0x4b, 0x09, 0x4b, 0xe0, 0xd2, 0x6e, - 0xfb, 0x3c, 0xbf, 0xf7, 0x79, 0xdf, 0x77, 0x36, 0x83, 0x56, 0xb2, 0x9c, 0x81, 0x22, 0x4d, 0x92, - 0xa7, 0xd4, 0x34, 0x07, 0xad, 0xa6, 0x24, 0x8a, 0x30, 0xdd, 0x90, 0x4a, 0x18, 0x11, 0xce, 0x7a, - 0xb5, 0xe1, 0xd4, 0xc6, 0xa0, 0xb5, 0x3c, 0x4f, 0x18, 0xe5, 0xa2, 0xe9, 0x3e, 0xbd, 0x67, 0x79, - 0xb1, 0x27, 0x7a, 0xc2, 0x3d, 0x36, 0xed, 0x93, 0xff, 0xf7, 0xf9, 0x4f, 0x84, 0xa6, 0x63, 0x57, - 0x2a, 0x7c, 0x83, 0x9e, 0x2a, 0x90, 0x42, 0x19, 0xca, 0x7b, 0xf8, 0x84, 0xf2, 0x54, 0x9c, 0xe0, - 0x6e, 0x26, 0x92, 0xbe, 0x8e, 0x82, 0x7a, 0xb0, 0x3e, 0xd5, 0x5e, 0x2a, 0xe5, 0xaf, 0x4e, 0xdd, - 0x72, 0x62, 0xd8, 0x40, 0x0b, 0x12, 0x40, 0xe1, 0xe3, 0x5c, 0xa8, 0x9c, 0x61, 0x6f, 0xd2, 0xd1, - 0x64, 0x3d, 0x58, 0x9f, 0x69, 0xcf, 0x5b, 0xe9, 0xb3, 0x53, 0xda, 0x5e, 0x08, 0xdf, 0xa3, 0x15, - 0x46, 0x39, 0x96, 0x4a, 0x74, 0x01, 0x1b, 0xa2, 0x7a, 0x60, 0x34, 0x96, 0xa0, 0x46, 0x99, 0xd1, - 0x94, 0x03, 0x23, 0x46, 0x79, 0x6c, 0x2d, 0x1d, 0xef, 0x88, 0x41, 0xf9, 0x54, 0xc7, 0x93, 0xe1, - 0xcd, 0xfc, 0xbd, 0x11, 0x4f, 0x86, 0xd5, 0x7c, 0x03, 0x2d, 0x28, 0x38, 0xce, 0xa9, 0x82, 0x14, - 0x0b, 0x09, 0x1c, 0xfb, 0x7e, 0xa7, 0xeb, 0x93, 0xb6, 0xdf, 0x42, 0x3a, 0x90, 0xc0, 0x63, 0xd7, - 0x6f, 0x13, 0x2d, 0xda, 0x7e, 0x13, 0x99, 0xe3, 0x43, 0x05, 0x60, 0xa3, 0x12, 0xe0, 0x26, 0xba, - 0xef, 0x07, 0x64, 0x94, 0x6f, 0xcb, 0x7c, 0x57, 0x01, 0xc4, 0x5e, 0x28, 0x00, 0x06, 0xec, 0x2a, - 0xf0, 0xa0, 0x04, 0xf6, 0x80, 0x8d, 0x03, 0x2d, 0xb4, 0x64, 0x81, 0x94, 0xea, 0xfe, 0x55, 0xe2, - 0xa1, 0x23, 0x42, 0x46, 0xf9, 0x07, 0xaa, 0xfb, 0xe3, 0xc8, 0x0e, 0x5a, 0x4d, 0x04, 0xd7, 0x90, - 0xe4, 0x86, 0x0e, 0x60, 0x34, 0xba, 0xc6, 0x46, 0x60, 0x29, 0xb4, 0x91, 0x82, 0x43, 0x84, 0x1c, - 0xbc, 0x32, 0x66, 0xf3, 0x0b, 0xd0, 0x1d, 0x11, 0x8f, 0x3c, 0xe1, 0x5b, 0x14, 0xf5, 0x01, 0x24, - 0xce, 0x88, 0x36, 0xc5, 0x99, 0x03, 0x37, 0x8a, 0x82, 0x8e, 0x1e, 0xf9, 0x43, 0xb7, 0xfa, 0x27, - 0xa2, 0x8d, 0x87, 0x77, 0xbc, 0x18, 0xee, 0xa3, 0x35, 0x77, 0xe8, 0x76, 0x77, 0x65, 0x24, 0x36, - 0x47, 0x0a, 0xf4, 0x91, 0xc8, 0xd2, 0x72, 0x82, 0xc7, 0xae, 0x89, 0xba, 0xf5, 0xda, 0x6d, 0x16, - 0xc1, 0x9d, 0xc2, 0x58, 0xcc, 0x33, 0x44, 0x9b, 0x24, 0x31, 0x54, 0x70, 0x7c, 0x48, 0x39, 0xc9, - 0xe8, 0x77, 0xe2, 0x7e, 0x68, 0xda, 0xe3, 0xc4, 0xe4, 0x0a, 0xf0, 0x21, 0xa1, 0x99, 0xfd, 0x86, - 0x01, 0x4d, 0x81, 0x27, 0x70, 0xe5, 0xc8, 0x67, 0x5c, 0xca, 0x86, 0xaf, 0xb0, 0x3b, 0x56, 0xe0, - 0x4b, 0xc1, 0xef, 0x7a, 0x7c, 0xa7, 0xa0, 0x2f, 0x5f, 0x87, 0x13, 0xf4, 0xee, 0x6e, 0xc9, 0x15, - 0xfb, 0x8e, 0x9e, 0xdc, 0x35, 0x78, 0xfb, 0xda, 0x29, 0x84, 0x0c, 0xbd, 0xae, 0x0a, 0xe6, 0xc2, - 0x60, 0xca, 0xb1, 0x11, 0xb2, 0xf5, 0xb2, 0x7a, 0xda, 0x59, 0x17, 0xda, 0xb8, 0x1e, 0xba, 0x2f, - 0xcc, 0x47, 0xde, 0xb1, 0x60, 0xc5, 0x9c, 0x19, 0xda, 0xb8, 0x35, 0xae, 0x6a, 0xc4, 0xb9, 0xdb, - 0xd3, 0x2a, 0x86, 0x3b, 0x40, 0x6b, 0x55, 0x69, 0x0a, 0x12, 0x31, 0x00, 0x75, 0x5a, 0x56, 0x9f, - 0x77, 0xd5, 0x9f, 0x5d, 0xaf, 0xde, 0x1e, 0x39, 0x8b, 0x82, 0x37, 0xb4, 0x5f, 0x16, 0xb4, 0x57, - 0x82, 0x11, 0x86, 0x64, 0xb8, 0x4b, 0xd2, 0xcb, 0xbd, 0x45, 0xe1, 0x4d, 0xed, 0x17, 0x01, 0x7b, - 0x64, 0xd8, 0xb1, 0xdc, 0x16, 0x49, 0xcb, 0xad, 0x6d, 0x4e, 0xfd, 0xfb, 0xb5, 0x1a, 0x6c, 0xbd, - 0xf8, 0x7d, 0x5e, 0x0b, 0xce, 0xce, 0x6b, 0xc1, 0xdf, 0xf3, 0x5a, 0xf0, 0xe3, 0xa2, 0x36, 0x71, - 0x76, 0x51, 0x9b, 0xf8, 0x73, 0x51, 0x9b, 0xf8, 0x36, 0x37, 0xbc, 0xbc, 0x89, 0xcd, 0xa9, 0x04, - 0xdd, 0x9d, 0x76, 0xf7, 0xe9, 0xab, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x98, 0xb5, 0x04, 0xce, - 0xa9, 0x05, 0x00, 0x00, + // 993 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xcd, 0x72, 0x1b, 0x45, + 0x10, 0xb6, 0x88, 0x31, 0xc9, 0x40, 0x62, 0x7b, 0xfd, 0xb7, 0xb1, 0x63, 0xc5, 0x10, 0x0e, 0xae, + 0x50, 0x48, 0x18, 0x93, 0x82, 0x50, 0x5c, 0xb0, 0xb0, 0x2b, 0x80, 0x95, 0x08, 0x59, 0x5c, 0x72, + 0x99, 0x1a, 0x8d, 0x5a, 0xd2, 0x44, 0xbb, 0x33, 0x9b, 0xe9, 0x59, 0x95, 0x9c, 0xa7, 0xe0, 0x11, + 0x78, 0x1c, 0x8e, 0x39, 0x72, 0xa4, 0x6c, 0x0e, 0x3c, 0x06, 0x35, 0x3d, 0x5a, 0x49, 0x8e, 0x95, + 0x4a, 0x2e, 0xf6, 0xaa, 0xbf, 0xef, 0xeb, 0xfe, 0xba, 0x7b, 0x76, 0x6a, 0xd9, 0xbd, 0x24, 0x4f, + 0xc1, 0x8a, 0xaa, 0xc8, 0x3b, 0xca, 0x55, 0x87, 0x07, 0xd5, 0x4c, 0x58, 0x91, 0x62, 0x25, 0xb3, + 0xc6, 0x99, 0x68, 0x39, 0xa0, 0x15, 0x42, 0x2b, 0xc3, 0x83, 0xed, 0x55, 0x91, 0x2a, 0x6d, 0xaa, + 0xf4, 0x37, 0x70, 0xb6, 0xd7, 0x7b, 0xa6, 0x67, 0xe8, 0xb1, 0xea, 0x9f, 0x42, 0xf4, 0xb3, 0x7f, + 0x97, 0xd9, 0x52, 0x83, 0x52, 0x45, 0x15, 0xb6, 0x06, 0x99, 0x91, 0x7d, 0x9e, 0x80, 0xee, 0xb9, + 0x3e, 0x6f, 0x27, 0x46, 0x0e, 0x30, 0x2e, 0xed, 0x95, 0xf6, 0x17, 0x9b, 0xab, 0x04, 0x9d, 0x12, + 0x72, 0x44, 0x40, 0xf4, 0x90, 0x85, 0x20, 0x7f, 0x05, 0xd6, 0xf0, 0x3e, 0xa8, 0x5e, 0xdf, 0xc5, + 0x1f, 0x10, 0x7b, 0x99, 0x80, 0xe7, 0x60, 0xcd, 0x13, 0x0a, 0xfb, 0xdc, 0x19, 0x80, 0xe5, 0x2f, + 0x73, 0x63, 0xf3, 0x94, 0x5b, 0xc8, 0x8c, 0x75, 0x18, 0xdf, 0xd8, 0x2b, 0xed, 0xdf, 0x6e, 0xae, + 0x7a, 0xe8, 0x37, 0x42, 0x9a, 0x01, 0x88, 0x7e, 0x60, 0x3b, 0xa9, 0xd2, 0x3c, 0xb3, 0xa6, 0x0d, + 0xdc, 0x09, 0xdb, 0x03, 0x87, 0x3c, 0x03, 0xcb, 0x29, 0x71, 0xbc, 0x48, 0xba, 0xad, 0x54, 0xe9, + 0x86, 0x67, 0xb4, 0x02, 0xa1, 0x01, 0xf6, 0xd8, 0xc3, 0xa4, 0x16, 0xa3, 0xb7, 0xaa, 0x3f, 0x1c, + 0xab, 0xc5, 0x68, 0xae, 0xba, 0xc2, 0xd6, 0x2c, 0xbc, 0xcc, 0x95, 0x85, 0x0e, 0x37, 0x19, 0x68, + 0x1e, 0xbc, 0x2e, 0xed, 0xdd, 0xf0, 0x5e, 0x0b, 0xe8, 0x59, 0x06, 0xba, 0x41, 0x5e, 0xab, 0x6c, + 0xdd, 0x7b, 0x95, 0x59, 0xce, 0xbb, 0x16, 0xc0, 0x17, 0x92, 0xa0, 0x5d, 0xfc, 0x51, 0x68, 0x2e, + 0x55, 0xba, 0x96, 0xe5, 0x27, 0x16, 0xa0, 0x11, 0x80, 0x42, 0x90, 0x42, 0x7a, 0x55, 0x70, 0x73, + 0x22, 0xa8, 0x43, 0x3a, 0x2b, 0x38, 0x60, 0x1b, 0x5e, 0xd0, 0x51, 0x38, 0xb8, 0xaa, 0xb8, 0x45, + 0x8a, 0x28, 0x55, 0xfa, 0x27, 0x85, 0x83, 0x59, 0x49, 0x8d, 0x95, 0xa5, 0xd1, 0x08, 0x32, 0x77, + 0x6a, 0x08, 0xa1, 0x71, 0xe4, 0xce, 0xf0, 0xcc, 0xa0, 0xcb, 0x8c, 0x86, 0x98, 0x91, 0x76, 0x67, + 0x86, 0x45, 0xed, 0x63, 0xcb, 0x34, 0xc6, 0x94, 0xe8, 0x11, 0xdb, 0x1a, 0x00, 0x64, 0x3c, 0x11, + 0xe8, 0x42, 0x0a, 0x0e, 0xda, 0x59, 0x05, 0x18, 0x7f, 0x4c, 0x7b, 0x5e, 0xf7, 0xf0, 0xa9, 0x40, + 0x47, 0xd2, 0xe3, 0x80, 0x45, 0x4f, 0xd9, 0xe7, 0xb4, 0x6c, 0x3f, 0xb7, 0x49, 0x3d, 0xee, 0xfa, + 0x16, 0xb0, 0x6f, 0x92, 0xce, 0xc4, 0xfd, 0x27, 0xe4, 0x60, 0xcf, 0x73, 0xfd, 0x24, 0x8b, 0xb2, + 0xad, 0x82, 0x58, 0xf4, 0x32, 0x64, 0x8f, 0x85, 0x74, 0xca, 0x68, 0xde, 0x55, 0x5a, 0x24, 0xea, + 0x95, 0xa0, 0x1f, 0xa8, 0x7a, 0x5a, 0xb8, 0xdc, 0x02, 0xef, 0x0a, 0x95, 0xf8, 0xff, 0x30, 0x54, + 0x1d, 0xd0, 0x12, 0x66, 0x97, 0x7d, 0x9b, 0x8a, 0x1c, 0x86, 0x04, 0x27, 0x33, 0xfa, 0xb3, 0x42, + 0x7e, 0x12, 0xd4, 0xc7, 0x85, 0x78, 0x72, 0x10, 0x72, 0xf6, 0xdd, 0xfb, 0xd5, 0xbd, 0x3e, 0xe9, + 0xf8, 0xce, 0xfb, 0x96, 0xad, 0xbd, 0x39, 0xff, 0x68, 0xc0, 0xbe, 0x99, 0x57, 0x56, 0x1b, 0xc7, + 0x95, 0xe6, 0xce, 0x64, 0x07, 0x5f, 0xcd, 0xed, 0x74, 0x99, 0x4a, 0x7e, 0x79, 0xbd, 0xe4, 0x53, + 0xe3, 0x7e, 0xd6, 0x2d, 0xaf, 0xbb, 0xde, 0xe3, 0x0b, 0x76, 0xf8, 0xce, 0x62, 0x73, 0xda, 0x5b, + 0x79, 0x77, 0xad, 0xeb, 0x8d, 0xd5, 0xd9, 0x83, 0x79, 0xb5, 0x2c, 0x48, 0x33, 0x04, 0x7b, 0x5e, + 0xe4, 0x5e, 0x0d, 0xc7, 0xe2, 0x7a, 0xee, 0xe6, 0x98, 0x38, 0x4e, 0x97, 0xcc, 0x9f, 0xd3, 0x24, + 0x9d, 0xbf, 0x02, 0x9c, 0x71, 0x22, 0xe1, 0x6d, 0xd1, 0x99, 0x4e, 0x2c, 0x8e, 0x28, 0x7f, 0xe5, + 0xed, 0xf9, 0xeb, 0x62, 0xd4, 0xf2, 0xba, 0x23, 0xd1, 0x99, 0x0c, 0x2c, 0xda, 0x65, 0x0c, 0x25, + 0x07, 0x2d, 0xda, 0x09, 0x74, 0xe2, 0xb5, 0xbd, 0xd2, 0xfe, 0xcd, 0xe6, 0x2d, 0x94, 0xc7, 0x21, + 0x10, 0x7d, 0xcb, 0x62, 0x94, 0x5c, 0xf6, 0x45, 0xe2, 0x6f, 0x4f, 0xb0, 0xb3, 0x8b, 0x59, 0xa7, + 0x82, 0x1b, 0x28, 0x6b, 0x53, 0x78, 0xb2, 0x80, 0x47, 0x6c, 0x0b, 0x25, 0xef, 0xaa, 0x64, 0xbc, + 0xcb, 0x69, 0x8a, 0x78, 0x83, 0x74, 0xeb, 0x28, 0x4f, 0x3c, 0xda, 0x00, 0x3b, 0xd5, 0x47, 0xfb, + 0x6c, 0x05, 0xa5, 0xbf, 0x47, 0x13, 0x25, 0x05, 0x97, 0x26, 0xd7, 0x2e, 0xde, 0x24, 0xfe, 0x1d, + 0x94, 0xcd, 0x10, 0xae, 0xf9, 0x68, 0xf4, 0x35, 0xdb, 0x40, 0xc9, 0x4d, 0x1b, 0xc1, 0x0e, 0xc1, + 0x4e, 0x5f, 0xc3, 0x78, 0x8b, 0xe8, 0x6b, 0x28, 0x9f, 0x8d, 0xb1, 0xc9, 0x8b, 0x17, 0x7d, 0xc1, + 0x22, 0x94, 0xdc, 0xdf, 0x39, 0x98, 0x28, 0x09, 0xbc, 0x7d, 0xee, 0x00, 0xe3, 0x38, 0xdc, 0xed, + 0x28, 0xeb, 0x4a, 0x9f, 0xf9, 0xf8, 0x91, 0x0f, 0x17, 0x64, 0x31, 0xba, 0x42, 0xbe, 0x3b, 0x21, + 0x8b, 0xd1, 0x0c, 0xf9, 0x90, 0x6d, 0x92, 0x6f, 0xcc, 0xfc, 0xf1, 0xe0, 0x4e, 0xa5, 0x60, 0x72, + 0xc7, 0x53, 0x8c, 0xb7, 0x49, 0xb0, 0xe6, 0xdd, 0x07, 0xb0, 0x15, 0xb0, 0x3a, 0x46, 0x8f, 0xd9, + 0x5d, 0x94, 0x5c, 0x74, 0xbb, 0xca, 0xa6, 0x61, 0xc9, 0x33, 0xba, 0x1d, 0xd2, 0x6d, 0xa2, 0xfc, + 0x71, 0x8a, 0x4f, 0xa5, 0x07, 0xd4, 0x7d, 0xb1, 0x7c, 0x72, 0x19, 0xfc, 0xdd, 0x23, 0x59, 0x84, + 0xb2, 0x58, 0x71, 0x5d, 0x8c, 0x82, 0xc5, 0x27, 0xec, 0x53, 0xbf, 0x4a, 0xa1, 0x3b, 0xaa, 0x23, + 0x1c, 0xf0, 0x01, 0x9c, 0x23, 0x4f, 0x8c, 0x19, 0xb4, 0x85, 0x1c, 0x14, 0x87, 0x74, 0x97, 0x86, + 0xb7, 0x8b, 0xb2, 0x56, 0xf0, 0x7e, 0x85, 0x73, 0x3c, 0x1d, 0xb3, 0xc6, 0x27, 0x34, 0x4c, 0x06, + 0x9d, 0xb0, 0x8e, 0xbf, 0x50, 0xce, 0x81, 0xf5, 0x86, 0xcb, 0xc5, 0x64, 0xce, 0x3c, 0xf0, 0x0b, + 0xc5, 0xeb, 0x18, 0xfd, 0xce, 0xf6, 0x67, 0x9d, 0x62, 0xde, 0x4e, 0xc7, 0x92, 0x1c, 0x1d, 0x6f, + 0xc3, 0xec, 0xc9, 0xb8, 0x4f, 0xc7, 0xef, 0xc1, 0xd4, 0xfc, 0x59, 0xc1, 0xae, 0xe7, 0xe8, 0x8e, + 0x60, 0x7a, 0x50, 0xbe, 0x5f, 0xfc, 0xef, 0xcf, 0xfb, 0xa5, 0xa3, 0x87, 0x7f, 0x5d, 0x94, 0x4b, + 0xaf, 0x2f, 0xca, 0xa5, 0x7f, 0x2e, 0xca, 0xa5, 0x3f, 0x2e, 0xcb, 0x0b, 0xaf, 0x2f, 0xcb, 0x0b, + 0x7f, 0x5f, 0x96, 0x17, 0x9e, 0xaf, 0x8c, 0xa6, 0xdf, 0x14, 0xee, 0x3c, 0x03, 0x6c, 0x2f, 0xd1, + 0x97, 0xc1, 0xe1, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x24, 0x0a, 0xa4, 0x48, 0x73, 0x08, 0x00, + 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -291,16 +428,19 @@ func (this *Params) Equal(that interface{}) bool { } else if this == nil { return false } - if this.ReportingWindowBlocks != that1.ReportingWindowBlocks { + if this.EpochLengthBlocks != that1.EpochLengthBlocks { + return false + } + if this.EpochZeroHeight != that1.EpochZeroHeight { return false } if this.PeerQuorumReports != that1.PeerQuorumReports { return false } - if this.MinProbeTargetsPerWindow != that1.MinProbeTargetsPerWindow { + if this.MinProbeTargetsPerEpoch != that1.MinProbeTargetsPerEpoch { return false } - if this.MaxProbeTargetsPerWindow != that1.MaxProbeTargetsPerWindow { + if this.MaxProbeTargetsPerEpoch != that1.MaxProbeTargetsPerEpoch { return false } if len(this.RequiredOpenPorts) != len(that1.RequiredOpenPorts) { @@ -320,33 +460,72 @@ func (this *Params) Equal(that interface{}) bool { if this.MinDiskFreePercent != that1.MinDiskFreePercent { return false } - if this.ConsecutiveWindowsToPostpone != that1.ConsecutiveWindowsToPostpone { + if this.ConsecutiveEpochsToPostpone != that1.ConsecutiveEpochsToPostpone { return false } - if this.KeepLastWindowEntries != that1.KeepLastWindowEntries { + if this.KeepLastEpochEntries != that1.KeepLastEpochEntries { return false } if this.PeerPortPostponeThresholdPercent != that1.PeerPortPostponeThresholdPercent { return false } - if this.ActionFinalizationSignatureFailureEvidencesPerWindow != that1.ActionFinalizationSignatureFailureEvidencesPerWindow { + if this.ActionFinalizationSignatureFailureEvidencesPerEpoch != that1.ActionFinalizationSignatureFailureEvidencesPerEpoch { return false } - if this.ActionFinalizationSignatureFailureConsecutiveWindows != that1.ActionFinalizationSignatureFailureConsecutiveWindows { + if this.ActionFinalizationSignatureFailureConsecutiveEpochs != that1.ActionFinalizationSignatureFailureConsecutiveEpochs { return false } - if this.ActionFinalizationNotInTop10EvidencesPerWindow != that1.ActionFinalizationNotInTop10EvidencesPerWindow { + if this.ActionFinalizationNotInTop10EvidencesPerEpoch != that1.ActionFinalizationNotInTop10EvidencesPerEpoch { return false } - if this.ActionFinalizationNotInTop10ConsecutiveWindows != that1.ActionFinalizationNotInTop10ConsecutiveWindows { + if this.ActionFinalizationNotInTop10ConsecutiveEpochs != that1.ActionFinalizationNotInTop10ConsecutiveEpochs { return false } - if this.ActionFinalizationRecoveryWindows != that1.ActionFinalizationRecoveryWindows { + if this.ActionFinalizationRecoveryEpochs != that1.ActionFinalizationRecoveryEpochs { return false } if this.ActionFinalizationRecoveryMaxTotalBadEvidences != that1.ActionFinalizationRecoveryMaxTotalBadEvidences { return false } + if this.ScEnabled != that1.ScEnabled { + return false + } + if this.ScChallengersPerEpoch != that1.ScChallengersPerEpoch { + return false + } + if this.ScFilesPerChallenger != that1.ScFilesPerChallenger { + return false + } + if this.ScReplicaCount != that1.ScReplicaCount { + return false + } + if this.ScObserverThreshold != that1.ScObserverThreshold { + return false + } + if this.ScMinSliceBytes != that1.ScMinSliceBytes { + return false + } + if this.ScMaxSliceBytes != that1.ScMaxSliceBytes { + return false + } + if this.ScResponseTimeoutMs != that1.ScResponseTimeoutMs { + return false + } + if this.ScAffirmationTimeoutMs != that1.ScAffirmationTimeoutMs { + return false + } + if this.ScEvidenceMaxBytes != that1.ScEvidenceMaxBytes { + return false + } + if this.ScCandidateKeysLookbackEpochs != that1.ScCandidateKeysLookbackEpochs { + return false + } + if this.ScStartJitterMs != that1.ScStartJitterMs { + return false + } + if this.ScEvidenceSubmitterMustBeChallenger != that1.ScEvidenceSubmitterMustBeChallenger { + return false + } return true } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -369,6 +548,107 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ScEvidenceSubmitterMustBeChallenger { + i-- + if m.ScEvidenceSubmitterMustBeChallenger { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf8 + } + if m.ScStartJitterMs != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScStartJitterMs)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf0 + } + if m.ScCandidateKeysLookbackEpochs != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScCandidateKeysLookbackEpochs)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xe8 + } + if m.ScEvidenceMaxBytes != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScEvidenceMaxBytes)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xe0 + } + if m.ScAffirmationTimeoutMs != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScAffirmationTimeoutMs)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd8 + } + if m.ScResponseTimeoutMs != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScResponseTimeoutMs)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd0 + } + if m.ScMaxSliceBytes != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScMaxSliceBytes)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc8 + } + if m.ScMinSliceBytes != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScMinSliceBytes)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc0 + } + if m.ScObserverThreshold != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScObserverThreshold)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb8 + } + if m.ScReplicaCount != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScReplicaCount)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb0 + } + if m.ScFilesPerChallenger != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScFilesPerChallenger)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa8 + } + if m.ScChallengersPerEpoch != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ScChallengersPerEpoch)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa0 + } + if m.ScEnabled { + i-- + if m.ScEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x98 + } if m.ActionFinalizationRecoveryMaxTotalBadEvidences != 0 { i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationRecoveryMaxTotalBadEvidences)) i-- @@ -376,32 +656,32 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x90 } - if m.ActionFinalizationRecoveryWindows != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationRecoveryWindows)) + if m.ActionFinalizationRecoveryEpochs != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationRecoveryEpochs)) i-- dAtA[i] = 0x1 i-- dAtA[i] = 0x88 } - if m.ActionFinalizationNotInTop10ConsecutiveWindows != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationNotInTop10ConsecutiveWindows)) + if m.ActionFinalizationNotInTop10ConsecutiveEpochs != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationNotInTop10ConsecutiveEpochs)) i-- dAtA[i] = 0x1 i-- dAtA[i] = 0x80 } - if m.ActionFinalizationNotInTop10EvidencesPerWindow != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationNotInTop10EvidencesPerWindow)) + if m.ActionFinalizationNotInTop10EvidencesPerEpoch != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationNotInTop10EvidencesPerEpoch)) i-- dAtA[i] = 0x78 } - if m.ActionFinalizationSignatureFailureConsecutiveWindows != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationSignatureFailureConsecutiveWindows)) + if m.ActionFinalizationSignatureFailureConsecutiveEpochs != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationSignatureFailureConsecutiveEpochs)) i-- dAtA[i] = 0x70 } - if m.ActionFinalizationSignatureFailureEvidencesPerWindow != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationSignatureFailureEvidencesPerWindow)) + if m.ActionFinalizationSignatureFailureEvidencesPerEpoch != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ActionFinalizationSignatureFailureEvidencesPerEpoch)) i-- dAtA[i] = 0x68 } @@ -410,13 +690,13 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x60 } - if m.KeepLastWindowEntries != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.KeepLastWindowEntries)) + if m.KeepLastEpochEntries != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.KeepLastEpochEntries)) i-- dAtA[i] = 0x58 } - if m.ConsecutiveWindowsToPostpone != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ConsecutiveWindowsToPostpone)) + if m.ConsecutiveEpochsToPostpone != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ConsecutiveEpochsToPostpone)) i-- dAtA[i] = 0x50 } @@ -453,13 +733,13 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - if m.MaxProbeTargetsPerWindow != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.MaxProbeTargetsPerWindow)) + if m.MaxProbeTargetsPerEpoch != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MaxProbeTargetsPerEpoch)) i-- dAtA[i] = 0x28 } - if m.MinProbeTargetsPerWindow != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.MinProbeTargetsPerWindow)) + if m.MinProbeTargetsPerEpoch != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MinProbeTargetsPerEpoch)) i-- dAtA[i] = 0x20 } @@ -468,8 +748,13 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x18 } - if m.ReportingWindowBlocks != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ReportingWindowBlocks)) + if m.EpochZeroHeight != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.EpochZeroHeight)) + i-- + dAtA[i] = 0x10 + } + if m.EpochLengthBlocks != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.EpochLengthBlocks)) i-- dAtA[i] = 0x8 } @@ -493,17 +778,20 @@ func (m *Params) Size() (n int) { } var l int _ = l - if m.ReportingWindowBlocks != 0 { - n += 1 + sovParams(uint64(m.ReportingWindowBlocks)) + if m.EpochLengthBlocks != 0 { + n += 1 + sovParams(uint64(m.EpochLengthBlocks)) + } + if m.EpochZeroHeight != 0 { + n += 1 + sovParams(uint64(m.EpochZeroHeight)) } if m.PeerQuorumReports != 0 { n += 1 + sovParams(uint64(m.PeerQuorumReports)) } - if m.MinProbeTargetsPerWindow != 0 { - n += 1 + sovParams(uint64(m.MinProbeTargetsPerWindow)) + if m.MinProbeTargetsPerEpoch != 0 { + n += 1 + sovParams(uint64(m.MinProbeTargetsPerEpoch)) } - if m.MaxProbeTargetsPerWindow != 0 { - n += 1 + sovParams(uint64(m.MaxProbeTargetsPerWindow)) + if m.MaxProbeTargetsPerEpoch != 0 { + n += 1 + sovParams(uint64(m.MaxProbeTargetsPerEpoch)) } if len(m.RequiredOpenPorts) > 0 { l = 0 @@ -521,33 +809,72 @@ func (m *Params) Size() (n int) { if m.MinDiskFreePercent != 0 { n += 1 + sovParams(uint64(m.MinDiskFreePercent)) } - if m.ConsecutiveWindowsToPostpone != 0 { - n += 1 + sovParams(uint64(m.ConsecutiveWindowsToPostpone)) + if m.ConsecutiveEpochsToPostpone != 0 { + n += 1 + sovParams(uint64(m.ConsecutiveEpochsToPostpone)) } - if m.KeepLastWindowEntries != 0 { - n += 1 + sovParams(uint64(m.KeepLastWindowEntries)) + if m.KeepLastEpochEntries != 0 { + n += 1 + sovParams(uint64(m.KeepLastEpochEntries)) } if m.PeerPortPostponeThresholdPercent != 0 { n += 1 + sovParams(uint64(m.PeerPortPostponeThresholdPercent)) } - if m.ActionFinalizationSignatureFailureEvidencesPerWindow != 0 { - n += 1 + sovParams(uint64(m.ActionFinalizationSignatureFailureEvidencesPerWindow)) + if m.ActionFinalizationSignatureFailureEvidencesPerEpoch != 0 { + n += 1 + sovParams(uint64(m.ActionFinalizationSignatureFailureEvidencesPerEpoch)) } - if m.ActionFinalizationSignatureFailureConsecutiveWindows != 0 { - n += 1 + sovParams(uint64(m.ActionFinalizationSignatureFailureConsecutiveWindows)) + if m.ActionFinalizationSignatureFailureConsecutiveEpochs != 0 { + n += 1 + sovParams(uint64(m.ActionFinalizationSignatureFailureConsecutiveEpochs)) } - if m.ActionFinalizationNotInTop10EvidencesPerWindow != 0 { - n += 1 + sovParams(uint64(m.ActionFinalizationNotInTop10EvidencesPerWindow)) + if m.ActionFinalizationNotInTop10EvidencesPerEpoch != 0 { + n += 1 + sovParams(uint64(m.ActionFinalizationNotInTop10EvidencesPerEpoch)) } - if m.ActionFinalizationNotInTop10ConsecutiveWindows != 0 { - n += 2 + sovParams(uint64(m.ActionFinalizationNotInTop10ConsecutiveWindows)) + if m.ActionFinalizationNotInTop10ConsecutiveEpochs != 0 { + n += 2 + sovParams(uint64(m.ActionFinalizationNotInTop10ConsecutiveEpochs)) } - if m.ActionFinalizationRecoveryWindows != 0 { - n += 2 + sovParams(uint64(m.ActionFinalizationRecoveryWindows)) + if m.ActionFinalizationRecoveryEpochs != 0 { + n += 2 + sovParams(uint64(m.ActionFinalizationRecoveryEpochs)) } if m.ActionFinalizationRecoveryMaxTotalBadEvidences != 0 { n += 2 + sovParams(uint64(m.ActionFinalizationRecoveryMaxTotalBadEvidences)) } + if m.ScEnabled { + n += 3 + } + if m.ScChallengersPerEpoch != 0 { + n += 2 + sovParams(uint64(m.ScChallengersPerEpoch)) + } + if m.ScFilesPerChallenger != 0 { + n += 2 + sovParams(uint64(m.ScFilesPerChallenger)) + } + if m.ScReplicaCount != 0 { + n += 2 + sovParams(uint64(m.ScReplicaCount)) + } + if m.ScObserverThreshold != 0 { + n += 2 + sovParams(uint64(m.ScObserverThreshold)) + } + if m.ScMinSliceBytes != 0 { + n += 2 + sovParams(uint64(m.ScMinSliceBytes)) + } + if m.ScMaxSliceBytes != 0 { + n += 2 + sovParams(uint64(m.ScMaxSliceBytes)) + } + if m.ScResponseTimeoutMs != 0 { + n += 2 + sovParams(uint64(m.ScResponseTimeoutMs)) + } + if m.ScAffirmationTimeoutMs != 0 { + n += 2 + sovParams(uint64(m.ScAffirmationTimeoutMs)) + } + if m.ScEvidenceMaxBytes != 0 { + n += 2 + sovParams(uint64(m.ScEvidenceMaxBytes)) + } + if m.ScCandidateKeysLookbackEpochs != 0 { + n += 2 + sovParams(uint64(m.ScCandidateKeysLookbackEpochs)) + } + if m.ScStartJitterMs != 0 { + n += 2 + sovParams(uint64(m.ScStartJitterMs)) + } + if m.ScEvidenceSubmitterMustBeChallenger { + n += 3 + } return n } @@ -588,9 +915,9 @@ func (m *Params) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReportingWindowBlocks", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochLengthBlocks", wireType) } - m.ReportingWindowBlocks = 0 + m.EpochLengthBlocks = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -600,7 +927,26 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ReportingWindowBlocks |= uint64(b&0x7F) << shift + m.EpochLengthBlocks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochZeroHeight", wireType) + } + m.EpochZeroHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochZeroHeight |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -626,9 +972,9 @@ func (m *Params) Unmarshal(dAtA []byte) error { } case 4: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MinProbeTargetsPerWindow", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MinProbeTargetsPerEpoch", wireType) } - m.MinProbeTargetsPerWindow = 0 + m.MinProbeTargetsPerEpoch = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -638,16 +984,16 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.MinProbeTargetsPerWindow |= uint32(b&0x7F) << shift + m.MinProbeTargetsPerEpoch |= uint32(b&0x7F) << shift if b < 0x80 { break } } case 5: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxProbeTargetsPerWindow", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MaxProbeTargetsPerEpoch", wireType) } - m.MaxProbeTargetsPerWindow = 0 + m.MaxProbeTargetsPerEpoch = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -657,7 +1003,7 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.MaxProbeTargetsPerWindow |= uint32(b&0x7F) << shift + m.MaxProbeTargetsPerEpoch |= uint32(b&0x7F) << shift if b < 0x80 { break } @@ -797,9 +1143,9 @@ func (m *Params) Unmarshal(dAtA []byte) error { } case 10: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsecutiveWindowsToPostpone", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConsecutiveEpochsToPostpone", wireType) } - m.ConsecutiveWindowsToPostpone = 0 + m.ConsecutiveEpochsToPostpone = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -809,16 +1155,16 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ConsecutiveWindowsToPostpone |= uint32(b&0x7F) << shift + m.ConsecutiveEpochsToPostpone |= uint32(b&0x7F) << shift if b < 0x80 { break } } case 11: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeepLastWindowEntries", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field KeepLastEpochEntries", wireType) } - m.KeepLastWindowEntries = 0 + m.KeepLastEpochEntries = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -828,7 +1174,7 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.KeepLastWindowEntries |= uint64(b&0x7F) << shift + m.KeepLastEpochEntries |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -854,9 +1200,9 @@ func (m *Params) Unmarshal(dAtA []byte) error { } case 13: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationSignatureFailureEvidencesPerWindow", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationSignatureFailureEvidencesPerEpoch", wireType) } - m.ActionFinalizationSignatureFailureEvidencesPerWindow = 0 + m.ActionFinalizationSignatureFailureEvidencesPerEpoch = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -866,16 +1212,16 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ActionFinalizationSignatureFailureEvidencesPerWindow |= uint32(b&0x7F) << shift + m.ActionFinalizationSignatureFailureEvidencesPerEpoch |= uint32(b&0x7F) << shift if b < 0x80 { break } } case 14: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationSignatureFailureConsecutiveWindows", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationSignatureFailureConsecutiveEpochs", wireType) } - m.ActionFinalizationSignatureFailureConsecutiveWindows = 0 + m.ActionFinalizationSignatureFailureConsecutiveEpochs = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -885,16 +1231,16 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ActionFinalizationSignatureFailureConsecutiveWindows |= uint32(b&0x7F) << shift + m.ActionFinalizationSignatureFailureConsecutiveEpochs |= uint32(b&0x7F) << shift if b < 0x80 { break } } case 15: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationNotInTop10EvidencesPerWindow", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationNotInTop10EvidencesPerEpoch", wireType) } - m.ActionFinalizationNotInTop10EvidencesPerWindow = 0 + m.ActionFinalizationNotInTop10EvidencesPerEpoch = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -904,16 +1250,16 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ActionFinalizationNotInTop10EvidencesPerWindow |= uint32(b&0x7F) << shift + m.ActionFinalizationNotInTop10EvidencesPerEpoch |= uint32(b&0x7F) << shift if b < 0x80 { break } } case 16: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationNotInTop10ConsecutiveWindows", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationNotInTop10ConsecutiveEpochs", wireType) } - m.ActionFinalizationNotInTop10ConsecutiveWindows = 0 + m.ActionFinalizationNotInTop10ConsecutiveEpochs = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -923,16 +1269,16 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ActionFinalizationNotInTop10ConsecutiveWindows |= uint32(b&0x7F) << shift + m.ActionFinalizationNotInTop10ConsecutiveEpochs |= uint32(b&0x7F) << shift if b < 0x80 { break } } case 17: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationRecoveryWindows", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ActionFinalizationRecoveryEpochs", wireType) } - m.ActionFinalizationRecoveryWindows = 0 + m.ActionFinalizationRecoveryEpochs = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -942,7 +1288,7 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ActionFinalizationRecoveryWindows |= uint32(b&0x7F) << shift + m.ActionFinalizationRecoveryEpochs |= uint32(b&0x7F) << shift if b < 0x80 { break } @@ -966,6 +1312,255 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } + case 19: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ScEnabled = bool(v != 0) + case 20: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScChallengersPerEpoch", wireType) + } + m.ScChallengersPerEpoch = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScChallengersPerEpoch |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 21: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScFilesPerChallenger", wireType) + } + m.ScFilesPerChallenger = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScFilesPerChallenger |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 22: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScReplicaCount", wireType) + } + m.ScReplicaCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScReplicaCount |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 23: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScObserverThreshold", wireType) + } + m.ScObserverThreshold = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScObserverThreshold |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 24: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScMinSliceBytes", wireType) + } + m.ScMinSliceBytes = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScMinSliceBytes |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 25: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScMaxSliceBytes", wireType) + } + m.ScMaxSliceBytes = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScMaxSliceBytes |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 26: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScResponseTimeoutMs", wireType) + } + m.ScResponseTimeoutMs = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScResponseTimeoutMs |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 27: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScAffirmationTimeoutMs", wireType) + } + m.ScAffirmationTimeoutMs = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScAffirmationTimeoutMs |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 28: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScEvidenceMaxBytes", wireType) + } + m.ScEvidenceMaxBytes = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScEvidenceMaxBytes |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 29: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScCandidateKeysLookbackEpochs", wireType) + } + m.ScCandidateKeysLookbackEpochs = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScCandidateKeysLookbackEpochs |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 30: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScStartJitterMs", wireType) + } + m.ScStartJitterMs = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ScStartJitterMs |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 31: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ScEvidenceSubmitterMustBeChallenger", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ScEvidenceSubmitterMustBeChallenger = bool(v != 0) default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) diff --git a/x/audit/v1/types/query.pb.go b/x/audit/v1/types/query.pb.go index c72980d..fc7e883 100644 --- a/x/audit/v1/types/query.pb.go +++ b/x/audit/v1/types/query.pb.go @@ -408,21 +408,21 @@ func (m *QueryEvidenceByActionResponse) GetPagination() *query.PageResponse { return nil } -type QueryCurrentWindowRequest struct { +type QueryCurrentEpochRequest struct { } -func (m *QueryCurrentWindowRequest) Reset() { *m = QueryCurrentWindowRequest{} } -func (m *QueryCurrentWindowRequest) String() string { return proto.CompactTextString(m) } -func (*QueryCurrentWindowRequest) ProtoMessage() {} -func (*QueryCurrentWindowRequest) Descriptor() ([]byte, []int) { +func (m *QueryCurrentEpochRequest) Reset() { *m = QueryCurrentEpochRequest{} } +func (m *QueryCurrentEpochRequest) String() string { return proto.CompactTextString(m) } +func (*QueryCurrentEpochRequest) ProtoMessage() {} +func (*QueryCurrentEpochRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{8} } -func (m *QueryCurrentWindowRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryCurrentEpochRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryCurrentWindowRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryCurrentEpochRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryCurrentWindowRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryCurrentEpochRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -432,36 +432,36 @@ func (m *QueryCurrentWindowRequest) XXX_Marshal(b []byte, deterministic bool) ([ return b[:n], nil } } -func (m *QueryCurrentWindowRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCurrentWindowRequest.Merge(m, src) +func (m *QueryCurrentEpochRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCurrentEpochRequest.Merge(m, src) } -func (m *QueryCurrentWindowRequest) XXX_Size() int { +func (m *QueryCurrentEpochRequest) XXX_Size() int { return m.Size() } -func (m *QueryCurrentWindowRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCurrentWindowRequest.DiscardUnknown(m) +func (m *QueryCurrentEpochRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCurrentEpochRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryCurrentWindowRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryCurrentEpochRequest proto.InternalMessageInfo -type QueryCurrentWindowResponse struct { - WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` - WindowStartHeight int64 `protobuf:"varint,2,opt,name=window_start_height,json=windowStartHeight,proto3" json:"window_start_height,omitempty"` - WindowEndHeight int64 `protobuf:"varint,3,opt,name=window_end_height,json=windowEndHeight,proto3" json:"window_end_height,omitempty"` +type QueryCurrentEpochResponse struct { + EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + EpochStartHeight int64 `protobuf:"varint,2,opt,name=epoch_start_height,json=epochStartHeight,proto3" json:"epoch_start_height,omitempty"` + EpochEndHeight int64 `protobuf:"varint,3,opt,name=epoch_end_height,json=epochEndHeight,proto3" json:"epoch_end_height,omitempty"` } -func (m *QueryCurrentWindowResponse) Reset() { *m = QueryCurrentWindowResponse{} } -func (m *QueryCurrentWindowResponse) String() string { return proto.CompactTextString(m) } -func (*QueryCurrentWindowResponse) ProtoMessage() {} -func (*QueryCurrentWindowResponse) Descriptor() ([]byte, []int) { +func (m *QueryCurrentEpochResponse) Reset() { *m = QueryCurrentEpochResponse{} } +func (m *QueryCurrentEpochResponse) String() string { return proto.CompactTextString(m) } +func (*QueryCurrentEpochResponse) ProtoMessage() {} +func (*QueryCurrentEpochResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{9} } -func (m *QueryCurrentWindowResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryCurrentEpochResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryCurrentWindowResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryCurrentEpochResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryCurrentWindowResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryCurrentEpochResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -471,55 +471,55 @@ func (m *QueryCurrentWindowResponse) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } -func (m *QueryCurrentWindowResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCurrentWindowResponse.Merge(m, src) +func (m *QueryCurrentEpochResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCurrentEpochResponse.Merge(m, src) } -func (m *QueryCurrentWindowResponse) XXX_Size() int { +func (m *QueryCurrentEpochResponse) XXX_Size() int { return m.Size() } -func (m *QueryCurrentWindowResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCurrentWindowResponse.DiscardUnknown(m) +func (m *QueryCurrentEpochResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCurrentEpochResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryCurrentWindowResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryCurrentEpochResponse proto.InternalMessageInfo -func (m *QueryCurrentWindowResponse) GetWindowId() uint64 { +func (m *QueryCurrentEpochResponse) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } -func (m *QueryCurrentWindowResponse) GetWindowStartHeight() int64 { +func (m *QueryCurrentEpochResponse) GetEpochStartHeight() int64 { if m != nil { - return m.WindowStartHeight + return m.EpochStartHeight } return 0 } -func (m *QueryCurrentWindowResponse) GetWindowEndHeight() int64 { +func (m *QueryCurrentEpochResponse) GetEpochEndHeight() int64 { if m != nil { - return m.WindowEndHeight + return m.EpochEndHeight } return 0 } -type QueryWindowSnapshotRequest struct { - WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` +type QueryEpochAnchorRequest struct { + EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` } -func (m *QueryWindowSnapshotRequest) Reset() { *m = QueryWindowSnapshotRequest{} } -func (m *QueryWindowSnapshotRequest) String() string { return proto.CompactTextString(m) } -func (*QueryWindowSnapshotRequest) ProtoMessage() {} -func (*QueryWindowSnapshotRequest) Descriptor() ([]byte, []int) { +func (m *QueryEpochAnchorRequest) Reset() { *m = QueryEpochAnchorRequest{} } +func (m *QueryEpochAnchorRequest) String() string { return proto.CompactTextString(m) } +func (*QueryEpochAnchorRequest) ProtoMessage() {} +func (*QueryEpochAnchorRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{10} } -func (m *QueryWindowSnapshotRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryEpochAnchorRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryWindowSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryEpochAnchorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryWindowSnapshotRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryEpochAnchorRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -529,41 +529,41 @@ func (m *QueryWindowSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } -func (m *QueryWindowSnapshotRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryWindowSnapshotRequest.Merge(m, src) +func (m *QueryEpochAnchorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEpochAnchorRequest.Merge(m, src) } -func (m *QueryWindowSnapshotRequest) XXX_Size() int { +func (m *QueryEpochAnchorRequest) XXX_Size() int { return m.Size() } -func (m *QueryWindowSnapshotRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryWindowSnapshotRequest.DiscardUnknown(m) +func (m *QueryEpochAnchorRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEpochAnchorRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryWindowSnapshotRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryEpochAnchorRequest proto.InternalMessageInfo -func (m *QueryWindowSnapshotRequest) GetWindowId() uint64 { +func (m *QueryEpochAnchorRequest) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } -type QueryWindowSnapshotResponse struct { - Snapshot WindowSnapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot"` +type QueryEpochAnchorResponse struct { + Anchor EpochAnchor `protobuf:"bytes,1,opt,name=anchor,proto3" json:"anchor"` } -func (m *QueryWindowSnapshotResponse) Reset() { *m = QueryWindowSnapshotResponse{} } -func (m *QueryWindowSnapshotResponse) String() string { return proto.CompactTextString(m) } -func (*QueryWindowSnapshotResponse) ProtoMessage() {} -func (*QueryWindowSnapshotResponse) Descriptor() ([]byte, []int) { +func (m *QueryEpochAnchorResponse) Reset() { *m = QueryEpochAnchorResponse{} } +func (m *QueryEpochAnchorResponse) String() string { return proto.CompactTextString(m) } +func (*QueryEpochAnchorResponse) ProtoMessage() {} +func (*QueryEpochAnchorResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{11} } -func (m *QueryWindowSnapshotResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryEpochAnchorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryWindowSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryEpochAnchorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryWindowSnapshotResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryEpochAnchorResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -573,36 +573,116 @@ func (m *QueryWindowSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryWindowSnapshotResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryWindowSnapshotResponse.Merge(m, src) +func (m *QueryEpochAnchorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEpochAnchorResponse.Merge(m, src) } -func (m *QueryWindowSnapshotResponse) XXX_Size() int { +func (m *QueryEpochAnchorResponse) XXX_Size() int { return m.Size() } -func (m *QueryWindowSnapshotResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryWindowSnapshotResponse.DiscardUnknown(m) +func (m *QueryEpochAnchorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEpochAnchorResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryWindowSnapshotResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryEpochAnchorResponse proto.InternalMessageInfo -func (m *QueryWindowSnapshotResponse) GetSnapshot() WindowSnapshot { +func (m *QueryEpochAnchorResponse) GetAnchor() EpochAnchor { if m != nil { - return m.Snapshot + return m.Anchor } - return WindowSnapshot{} + return EpochAnchor{} +} + +type QueryCurrentEpochAnchorRequest struct { +} + +func (m *QueryCurrentEpochAnchorRequest) Reset() { *m = QueryCurrentEpochAnchorRequest{} } +func (m *QueryCurrentEpochAnchorRequest) String() string { return proto.CompactTextString(m) } +func (*QueryCurrentEpochAnchorRequest) ProtoMessage() {} +func (*QueryCurrentEpochAnchorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{12} +} +func (m *QueryCurrentEpochAnchorRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCurrentEpochAnchorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCurrentEpochAnchorRequest.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 *QueryCurrentEpochAnchorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCurrentEpochAnchorRequest.Merge(m, src) +} +func (m *QueryCurrentEpochAnchorRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryCurrentEpochAnchorRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCurrentEpochAnchorRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCurrentEpochAnchorRequest proto.InternalMessageInfo + +type QueryCurrentEpochAnchorResponse struct { + Anchor EpochAnchor `protobuf:"bytes,1,opt,name=anchor,proto3" json:"anchor"` +} + +func (m *QueryCurrentEpochAnchorResponse) Reset() { *m = QueryCurrentEpochAnchorResponse{} } +func (m *QueryCurrentEpochAnchorResponse) String() string { return proto.CompactTextString(m) } +func (*QueryCurrentEpochAnchorResponse) ProtoMessage() {} +func (*QueryCurrentEpochAnchorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e98945621bbc9485, []int{13} +} +func (m *QueryCurrentEpochAnchorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCurrentEpochAnchorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCurrentEpochAnchorResponse.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 *QueryCurrentEpochAnchorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCurrentEpochAnchorResponse.Merge(m, src) +} +func (m *QueryCurrentEpochAnchorResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryCurrentEpochAnchorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCurrentEpochAnchorResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCurrentEpochAnchorResponse proto.InternalMessageInfo + +func (m *QueryCurrentEpochAnchorResponse) GetAnchor() EpochAnchor { + if m != nil { + return m.Anchor + } + return EpochAnchor{} } type QueryAssignedTargetsRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` - FilterByWindowId bool `protobuf:"varint,3,opt,name=filter_by_window_id,json=filterByWindowId,proto3" json:"filter_by_window_id,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + FilterByEpochId bool `protobuf:"varint,3,opt,name=filter_by_epoch_id,json=filterByEpochId,proto3" json:"filter_by_epoch_id,omitempty"` } func (m *QueryAssignedTargetsRequest) Reset() { *m = QueryAssignedTargetsRequest{} } func (m *QueryAssignedTargetsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAssignedTargetsRequest) ProtoMessage() {} func (*QueryAssignedTargetsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{12} + return fileDescriptor_e98945621bbc9485, []int{14} } func (m *QueryAssignedTargetsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -638,23 +718,23 @@ func (m *QueryAssignedTargetsRequest) GetSupernodeAccount() string { return "" } -func (m *QueryAssignedTargetsRequest) GetWindowId() uint64 { +func (m *QueryAssignedTargetsRequest) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } -func (m *QueryAssignedTargetsRequest) GetFilterByWindowId() bool { +func (m *QueryAssignedTargetsRequest) GetFilterByEpochId() bool { if m != nil { - return m.FilterByWindowId + return m.FilterByEpochId } return false } type QueryAssignedTargetsResponse struct { - WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` - WindowStartHeight int64 `protobuf:"varint,2,opt,name=window_start_height,json=windowStartHeight,proto3" json:"window_start_height,omitempty"` + EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + EpochStartHeight int64 `protobuf:"varint,2,opt,name=epoch_start_height,json=epochStartHeight,proto3" json:"epoch_start_height,omitempty"` RequiredOpenPorts []uint32 `protobuf:"varint,3,rep,packed,name=required_open_ports,json=requiredOpenPorts,proto3" json:"required_open_ports,omitempty"` TargetSupernodeAccounts []string `protobuf:"bytes,4,rep,name=target_supernode_accounts,json=targetSupernodeAccounts,proto3" json:"target_supernode_accounts,omitempty"` } @@ -663,7 +743,7 @@ func (m *QueryAssignedTargetsResponse) Reset() { *m = QueryAssignedTarge func (m *QueryAssignedTargetsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAssignedTargetsResponse) ProtoMessage() {} func (*QueryAssignedTargetsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{13} + return fileDescriptor_e98945621bbc9485, []int{15} } func (m *QueryAssignedTargetsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -692,16 +772,16 @@ func (m *QueryAssignedTargetsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAssignedTargetsResponse proto.InternalMessageInfo -func (m *QueryAssignedTargetsResponse) GetWindowId() uint64 { +func (m *QueryAssignedTargetsResponse) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } -func (m *QueryAssignedTargetsResponse) GetWindowStartHeight() int64 { +func (m *QueryAssignedTargetsResponse) GetEpochStartHeight() int64 { if m != nil { - return m.WindowStartHeight + return m.EpochStartHeight } return 0 } @@ -721,7 +801,7 @@ func (m *QueryAssignedTargetsResponse) GetTargetSupernodeAccounts() []string { } type QueryAuditReportRequest struct { - WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` SupernodeAccount string `protobuf:"bytes,2,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` } @@ -729,7 +809,7 @@ func (m *QueryAuditReportRequest) Reset() { *m = QueryAuditReportRequest func (m *QueryAuditReportRequest) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportRequest) ProtoMessage() {} func (*QueryAuditReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{14} + return fileDescriptor_e98945621bbc9485, []int{16} } func (m *QueryAuditReportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -758,9 +838,9 @@ func (m *QueryAuditReportRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAuditReportRequest proto.InternalMessageInfo -func (m *QueryAuditReportRequest) GetWindowId() uint64 { +func (m *QueryAuditReportRequest) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } @@ -780,7 +860,7 @@ func (m *QueryAuditReportResponse) Reset() { *m = QueryAuditReportRespon func (m *QueryAuditReportResponse) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportResponse) ProtoMessage() {} func (*QueryAuditReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{15} + return fileDescriptor_e98945621bbc9485, []int{17} } func (m *QueryAuditReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -818,14 +898,16 @@ func (m *QueryAuditReportResponse) GetReport() AuditReport { type QueryAuditReportsByReporterRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` + FilterByEpochId bool `protobuf:"varint,4,opt,name=filter_by_epoch_id,json=filterByEpochId,proto3" json:"filter_by_epoch_id,omitempty"` } func (m *QueryAuditReportsByReporterRequest) Reset() { *m = QueryAuditReportsByReporterRequest{} } func (m *QueryAuditReportsByReporterRequest) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportsByReporterRequest) ProtoMessage() {} func (*QueryAuditReportsByReporterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{16} + return fileDescriptor_e98945621bbc9485, []int{18} } func (m *QueryAuditReportsByReporterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -861,6 +943,13 @@ func (m *QueryAuditReportsByReporterRequest) GetSupernodeAccount() string { return "" } +func (m *QueryAuditReportsByReporterRequest) GetEpochId() uint64 { + if m != nil { + return m.EpochId + } + return 0 +} + func (m *QueryAuditReportsByReporterRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination @@ -868,6 +957,13 @@ func (m *QueryAuditReportsByReporterRequest) GetPagination() *query.PageRequest return nil } +func (m *QueryAuditReportsByReporterRequest) GetFilterByEpochId() bool { + if m != nil { + return m.FilterByEpochId + } + return false +} + type QueryAuditReportsByReporterResponse struct { Reports []AuditReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` @@ -877,7 +973,7 @@ func (m *QueryAuditReportsByReporterResponse) Reset() { *m = QueryAuditR func (m *QueryAuditReportsByReporterResponse) String() string { return proto.CompactTextString(m) } func (*QueryAuditReportsByReporterResponse) ProtoMessage() {} func (*QueryAuditReportsByReporterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{17} + return fileDescriptor_e98945621bbc9485, []int{19} } func (m *QueryAuditReportsByReporterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -922,16 +1018,16 @@ func (m *QueryAuditReportsByReporterResponse) GetPagination() *query.PageRespons type QuerySupernodeReportsRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` - FilterByWindowId bool `protobuf:"varint,4,opt,name=filter_by_window_id,json=filterByWindowId,proto3" json:"filter_by_window_id,omitempty"` + FilterByEpochId bool `protobuf:"varint,4,opt,name=filter_by_epoch_id,json=filterByEpochId,proto3" json:"filter_by_epoch_id,omitempty"` } func (m *QuerySupernodeReportsRequest) Reset() { *m = QuerySupernodeReportsRequest{} } func (m *QuerySupernodeReportsRequest) String() string { return proto.CompactTextString(m) } func (*QuerySupernodeReportsRequest) ProtoMessage() {} func (*QuerySupernodeReportsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{18} + return fileDescriptor_e98945621bbc9485, []int{20} } func (m *QuerySupernodeReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -967,9 +1063,9 @@ func (m *QuerySupernodeReportsRequest) GetSupernodeAccount() string { return "" } -func (m *QuerySupernodeReportsRequest) GetWindowId() uint64 { +func (m *QuerySupernodeReportsRequest) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } @@ -981,16 +1077,16 @@ func (m *QuerySupernodeReportsRequest) GetPagination() *query.PageRequest { return nil } -func (m *QuerySupernodeReportsRequest) GetFilterByWindowId() bool { +func (m *QuerySupernodeReportsRequest) GetFilterByEpochId() bool { if m != nil { - return m.FilterByWindowId + return m.FilterByEpochId } return false } type SupernodeReport struct { ReporterSupernodeAccount string `protobuf:"bytes,1,opt,name=reporter_supernode_account,json=reporterSupernodeAccount,proto3" json:"reporter_supernode_account,omitempty"` - WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` ReportHeight int64 `protobuf:"varint,3,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` PortStates []PortState `protobuf:"varint,4,rep,packed,name=port_states,json=portStates,proto3,enum=lumera.audit.v1.PortState" json:"port_states,omitempty"` } @@ -999,7 +1095,7 @@ func (m *SupernodeReport) Reset() { *m = SupernodeReport{} } func (m *SupernodeReport) String() string { return proto.CompactTextString(m) } func (*SupernodeReport) ProtoMessage() {} func (*SupernodeReport) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{19} + return fileDescriptor_e98945621bbc9485, []int{21} } func (m *SupernodeReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1035,9 +1131,9 @@ func (m *SupernodeReport) GetReporterSupernodeAccount() string { return "" } -func (m *SupernodeReport) GetWindowId() uint64 { +func (m *SupernodeReport) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } @@ -1065,7 +1161,7 @@ func (m *QuerySupernodeReportsResponse) Reset() { *m = QuerySupernodeRep func (m *QuerySupernodeReportsResponse) String() string { return proto.CompactTextString(m) } func (*QuerySupernodeReportsResponse) ProtoMessage() {} func (*QuerySupernodeReportsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{20} + return fileDescriptor_e98945621bbc9485, []int{22} } func (m *QuerySupernodeReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1110,16 +1206,16 @@ func (m *QuerySupernodeReportsResponse) GetPagination() *query.PageResponse { type QuerySelfReportsRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` - FilterByWindowId bool `protobuf:"varint,4,opt,name=filter_by_window_id,json=filterByWindowId,proto3" json:"filter_by_window_id,omitempty"` + FilterByEpochId bool `protobuf:"varint,4,opt,name=filter_by_epoch_id,json=filterByEpochId,proto3" json:"filter_by_epoch_id,omitempty"` } func (m *QuerySelfReportsRequest) Reset() { *m = QuerySelfReportsRequest{} } func (m *QuerySelfReportsRequest) String() string { return proto.CompactTextString(m) } func (*QuerySelfReportsRequest) ProtoMessage() {} func (*QuerySelfReportsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{21} + return fileDescriptor_e98945621bbc9485, []int{23} } func (m *QuerySelfReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1155,9 +1251,9 @@ func (m *QuerySelfReportsRequest) GetSupernodeAccount() string { return "" } -func (m *QuerySelfReportsRequest) GetWindowId() uint64 { +func (m *QuerySelfReportsRequest) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } @@ -1169,15 +1265,15 @@ func (m *QuerySelfReportsRequest) GetPagination() *query.PageRequest { return nil } -func (m *QuerySelfReportsRequest) GetFilterByWindowId() bool { +func (m *QuerySelfReportsRequest) GetFilterByEpochId() bool { if m != nil { - return m.FilterByWindowId + return m.FilterByEpochId } return false } type SelfReport struct { - WindowId uint64 `protobuf:"varint,1,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` ReportHeight int64 `protobuf:"varint,2,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` SelfReport AuditSelfReport `protobuf:"bytes,3,opt,name=self_report,json=selfReport,proto3" json:"self_report"` } @@ -1186,7 +1282,7 @@ func (m *SelfReport) Reset() { *m = SelfReport{} } func (m *SelfReport) String() string { return proto.CompactTextString(m) } func (*SelfReport) ProtoMessage() {} func (*SelfReport) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{22} + return fileDescriptor_e98945621bbc9485, []int{24} } func (m *SelfReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1215,9 +1311,9 @@ func (m *SelfReport) XXX_DiscardUnknown() { var xxx_messageInfo_SelfReport proto.InternalMessageInfo -func (m *SelfReport) GetWindowId() uint64 { +func (m *SelfReport) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } @@ -1245,7 +1341,7 @@ func (m *QuerySelfReportsResponse) Reset() { *m = QuerySelfReportsRespon func (m *QuerySelfReportsResponse) String() string { return proto.CompactTextString(m) } func (*QuerySelfReportsResponse) ProtoMessage() {} func (*QuerySelfReportsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e98945621bbc9485, []int{23} + return fileDescriptor_e98945621bbc9485, []int{25} } func (m *QuerySelfReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1297,10 +1393,12 @@ func init() { proto.RegisterType((*QueryEvidenceBySubjectResponse)(nil), "lumera.audit.v1.QueryEvidenceBySubjectResponse") proto.RegisterType((*QueryEvidenceByActionRequest)(nil), "lumera.audit.v1.QueryEvidenceByActionRequest") proto.RegisterType((*QueryEvidenceByActionResponse)(nil), "lumera.audit.v1.QueryEvidenceByActionResponse") - proto.RegisterType((*QueryCurrentWindowRequest)(nil), "lumera.audit.v1.QueryCurrentWindowRequest") - proto.RegisterType((*QueryCurrentWindowResponse)(nil), "lumera.audit.v1.QueryCurrentWindowResponse") - proto.RegisterType((*QueryWindowSnapshotRequest)(nil), "lumera.audit.v1.QueryWindowSnapshotRequest") - proto.RegisterType((*QueryWindowSnapshotResponse)(nil), "lumera.audit.v1.QueryWindowSnapshotResponse") + proto.RegisterType((*QueryCurrentEpochRequest)(nil), "lumera.audit.v1.QueryCurrentEpochRequest") + proto.RegisterType((*QueryCurrentEpochResponse)(nil), "lumera.audit.v1.QueryCurrentEpochResponse") + proto.RegisterType((*QueryEpochAnchorRequest)(nil), "lumera.audit.v1.QueryEpochAnchorRequest") + proto.RegisterType((*QueryEpochAnchorResponse)(nil), "lumera.audit.v1.QueryEpochAnchorResponse") + proto.RegisterType((*QueryCurrentEpochAnchorRequest)(nil), "lumera.audit.v1.QueryCurrentEpochAnchorRequest") + proto.RegisterType((*QueryCurrentEpochAnchorResponse)(nil), "lumera.audit.v1.QueryCurrentEpochAnchorResponse") proto.RegisterType((*QueryAssignedTargetsRequest)(nil), "lumera.audit.v1.QueryAssignedTargetsRequest") proto.RegisterType((*QueryAssignedTargetsResponse)(nil), "lumera.audit.v1.QueryAssignedTargetsResponse") proto.RegisterType((*QueryAuditReportRequest)(nil), "lumera.audit.v1.QueryAuditReportRequest") @@ -1318,98 +1416,101 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/query.proto", fileDescriptor_e98945621bbc9485) } var fileDescriptor_e98945621bbc9485 = []byte{ - // 1447 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xdf, 0x6b, 0x1c, 0xd5, - 0x17, 0xcf, 0xcd, 0xe6, 0xdb, 0x6f, 0x72, 0xd2, 0x36, 0xc9, 0x4d, 0x31, 0x9b, 0xd9, 0xba, 0x0d, - 0x53, 0xa9, 0x69, 0x34, 0x33, 0xa6, 0x95, 0xa2, 0x46, 0x4b, 0xb3, 0xb5, 0x3f, 0x02, 0xad, 0x4d, - 0x77, 0xab, 0x45, 0x41, 0xc6, 0xc9, 0xce, 0xed, 0x76, 0x24, 0x99, 0xd9, 0xce, 0x9d, 0x4d, 0x5d, - 0x42, 0x40, 0xec, 0x3f, 0x20, 0x88, 0xf8, 0xda, 0x97, 0x8a, 0x48, 0x1f, 0x0a, 0x16, 0x51, 0xf0, - 0x41, 0xf0, 0xa5, 0x8f, 0xa5, 0x82, 0x88, 0x0f, 0x22, 0xad, 0xe0, 0x83, 0xaf, 0x82, 0x2f, 0x3e, - 0xc8, 0xdc, 0x7b, 0x66, 0x77, 0xe7, 0x57, 0x76, 0x13, 0x52, 0x11, 0x7c, 0x09, 0xb3, 0xe7, 0xc7, - 0x3d, 0x9f, 0xf3, 0xe3, 0x9e, 0x7b, 0x4e, 0xa0, 0xb0, 0xd2, 0x58, 0x65, 0x9e, 0xa9, 0x9b, 0x0d, - 0xcb, 0xf6, 0xf5, 0xb5, 0x39, 0xfd, 0x5a, 0x83, 0x79, 0x4d, 0xad, 0xee, 0xb9, 0xbe, 0x4b, 0x47, - 0x24, 0x53, 0x13, 0x4c, 0x6d, 0x6d, 0x4e, 0x19, 0x33, 0x57, 0x6d, 0xc7, 0xd5, 0xc5, 0x5f, 0x29, - 0xa3, 0xec, 0xab, 0xb9, 0x35, 0x57, 0x7c, 0xea, 0xc1, 0x17, 0x52, 0xf7, 0xd7, 0x5c, 0xb7, 0xb6, - 0xc2, 0x74, 0xb3, 0x6e, 0xeb, 0xa6, 0xe3, 0xb8, 0xbe, 0xe9, 0xdb, 0xae, 0xc3, 0x91, 0x3b, 0x59, - 0x75, 0xf9, 0xaa, 0xcb, 0x0d, 0xa9, 0x26, 0x7f, 0x20, 0x6b, 0x46, 0xfe, 0xd2, 0x97, 0x4d, 0xce, - 0x24, 0x16, 0x7d, 0x6d, 0x6e, 0x99, 0xf9, 0xe6, 0x9c, 0x5e, 0x37, 0x6b, 0xb6, 0x23, 0xce, 0x09, - 0x8d, 0xc4, 0xb1, 0xd7, 0x4d, 0xcf, 0x5c, 0x0d, 0x4f, 0x4a, 0x78, 0x26, 0xbd, 0x90, 0xcc, 0x62, - 0x9c, 0xc9, 0xd6, 0x6c, 0x8b, 0x39, 0x55, 0x26, 0xf9, 0xea, 0x3e, 0xa0, 0x17, 0x03, 0xe3, 0x4b, - 0xe2, 0xc4, 0x32, 0xbb, 0xd6, 0x60, 0xdc, 0x57, 0x2f, 0xc2, 0x78, 0x84, 0xca, 0xeb, 0xae, 0xc3, - 0x19, 0x7d, 0x09, 0x76, 0x49, 0xcb, 0x79, 0x32, 0x45, 0xa6, 0x87, 0x8f, 0x4c, 0x68, 0xb1, 0xb8, - 0x69, 0x52, 0xa1, 0x34, 0x74, 0xef, 0xe7, 0x03, 0x7d, 0x9f, 0xfd, 0x76, 0x67, 0x86, 0x94, 0x51, - 0x43, 0x9d, 0x87, 0xbc, 0x38, 0xf2, 0x14, 0xda, 0x2f, 0x35, 0x17, 0x2d, 0x34, 0x47, 0x0f, 0xc0, - 0x70, 0x08, 0xcb, 0xb0, 0x2d, 0x71, 0xf8, 0x40, 0x19, 0x42, 0xd2, 0xa2, 0xa5, 0xbe, 0x0d, 0x93, - 0x29, 0xca, 0x88, 0xea, 0x04, 0x0c, 0x86, 0xa2, 0x88, 0x6b, 0x32, 0x81, 0xab, 0xa5, 0xd8, 0x81, - 0xac, 0xa5, 0xa5, 0x7e, 0x4e, 0xe0, 0xc9, 0xd8, 0xf9, 0x95, 0xc6, 0xf2, 0xbb, 0xac, 0xea, 0x87, - 0x08, 0x17, 0x60, 0x84, 0x4b, 0x8a, 0x61, 0x5a, 0x96, 0xc7, 0xb8, 0x0c, 0xc1, 0x50, 0x29, 0xff, - 0xe0, 0xee, 0xec, 0x3e, 0x4c, 0xec, 0x82, 0xe4, 0x54, 0x7c, 0xcf, 0x76, 0x6a, 0xe5, 0xbd, 0xa8, - 0x80, 0x54, 0x7a, 0x1a, 0xa0, 0x9d, 0xd8, 0x7c, 0xbf, 0x00, 0x7a, 0x48, 0x43, 0xd5, 0xa0, 0x0a, - 0x34, 0x59, 0x91, 0x58, 0x05, 0xda, 0x92, 0x59, 0x63, 0x68, 0xbe, 0xdc, 0xa1, 0xa9, 0x7e, 0x4a, - 0xa0, 0x98, 0x05, 0x16, 0x23, 0x32, 0x1f, 0x89, 0x48, 0x6e, 0xf3, 0x88, 0x0c, 0x04, 0x11, 0x69, - 0x07, 0x83, 0x9e, 0x49, 0xc1, 0xf9, 0x74, 0x57, 0x9c, 0xd2, 0x72, 0x04, 0xe8, 0x0d, 0x02, 0xfb, - 0x63, 0x40, 0x17, 0xaa, 0x01, 0x27, 0x0c, 0x6a, 0x01, 0x86, 0x4c, 0x41, 0x08, 0x93, 0x3e, 0x54, - 0x1e, 0x94, 0x84, 0x45, 0x6b, 0xc7, 0xc2, 0x75, 0x2b, 0x99, 0xdb, 0x10, 0xc5, 0xbf, 0x2a, 0x5a, - 0x05, 0x2c, 0xf1, 0x93, 0x0d, 0xcf, 0x63, 0x8e, 0x7f, 0xd9, 0x76, 0x2c, 0xf7, 0x7a, 0x78, 0x1f, - 0x3f, 0x26, 0xa0, 0xa4, 0x71, 0xd1, 0x83, 0x02, 0x0c, 0x5d, 0x17, 0x94, 0xf6, 0xed, 0x19, 0x94, - 0x84, 0x45, 0x8b, 0x6a, 0x30, 0x8e, 0x4c, 0xee, 0x9b, 0x9e, 0x6f, 0x5c, 0x65, 0x76, 0xed, 0xaa, - 0x2f, 0xa0, 0xe6, 0xca, 0x63, 0x92, 0x55, 0x09, 0x38, 0x67, 0x05, 0x83, 0xce, 0x00, 0x12, 0x0d, - 0xe6, 0x58, 0xa1, 0x74, 0x4e, 0x48, 0x8f, 0x48, 0xc6, 0x29, 0xc7, 0x92, 0xb2, 0xea, 0x8b, 0x08, - 0x4b, 0xe2, 0xa9, 0x38, 0x66, 0x9d, 0x5f, 0x75, 0xfd, 0x8e, 0xfc, 0x66, 0xc2, 0x52, 0xdf, 0x81, - 0x42, 0xaa, 0x2a, 0xba, 0xb4, 0x00, 0x83, 0x1c, 0x69, 0x78, 0xa9, 0x0f, 0x24, 0x92, 0x12, 0x55, - 0x0d, 0x53, 0x13, 0xaa, 0xa9, 0x5f, 0x10, 0x34, 0xb1, 0xc0, 0xb9, 0x5d, 0x73, 0x98, 0x75, 0xc9, - 0xf4, 0x6a, 0xcc, 0x0f, 0x9b, 0x1c, 0x3d, 0x0b, 0x63, 0xbc, 0x51, 0x67, 0x9e, 0xe3, 0x5a, 0xcc, - 0x30, 0xab, 0x55, 0xb7, 0xe1, 0xf8, 0x78, 0xab, 0x0b, 0x0f, 0xee, 0xce, 0x4e, 0x84, 0xb7, 0xba, - 0x5a, 0x8d, 0x5e, 0xec, 0xd1, 0x96, 0xd6, 0x82, 0x54, 0x8a, 0x3a, 0xda, 0x1f, 0x8b, 0xff, 0x2c, - 0x8c, 0x5f, 0xb1, 0x57, 0x7c, 0xe6, 0x19, 0xcb, 0x4d, 0xa3, 0x2d, 0x16, 0x44, 0x74, 0xb0, 0x3c, - 0x2a, 0x59, 0x25, 0x0c, 0xc3, 0xa2, 0xa5, 0xfe, 0x11, 0xde, 0x9a, 0x04, 0xea, 0xc7, 0x91, 0x6c, - 0x0d, 0xc6, 0x3d, 0x76, 0xad, 0x61, 0x7b, 0xcc, 0x32, 0xdc, 0x3a, 0x73, 0x8c, 0xba, 0xeb, 0xf9, - 0x3c, 0x9f, 0x9b, 0xca, 0x4d, 0xef, 0x29, 0x8f, 0x85, 0xac, 0x0b, 0x75, 0xe6, 0x2c, 0x05, 0x0c, - 0x7a, 0x19, 0x26, 0x7d, 0x81, 0xc7, 0x48, 0x84, 0x8e, 0xe7, 0x07, 0xa6, 0x72, 0xdd, 0x62, 0x37, - 0x21, 0xb5, 0x2b, 0xb1, 0x08, 0x72, 0xf5, 0x7d, 0x02, 0x13, 0xd2, 0xed, 0x20, 0xbb, 0x65, 0x16, - 0xe0, 0xe8, 0xa5, 0x8e, 0xd2, 0xb3, 0xd8, 0xbf, 0x8d, 0x2c, 0xaa, 0x6f, 0xe0, 0x0b, 0x15, 0x41, - 0xd0, 0x7e, 0xf9, 0x3c, 0x41, 0xc1, 0x62, 0xdc, 0x9f, 0x28, 0xc6, 0x0e, 0x2d, 0xac, 0x44, 0xd4, - 0x50, 0xbf, 0x24, 0xa0, 0xc6, 0x0f, 0xe6, 0xa5, 0xa6, 0xfc, 0x60, 0xde, 0xce, 0x97, 0xe3, 0x4e, - 0xb5, 0xce, 0xdb, 0x04, 0x0e, 0x6e, 0x0a, 0x1c, 0x83, 0xf3, 0x32, 0xfc, 0x5f, 0xba, 0xca, 0xb1, - 0x7f, 0xf6, 0x12, 0x9d, 0x50, 0x65, 0xe7, 0x3a, 0xe8, 0x5f, 0xe1, 0xcd, 0x69, 0x55, 0x17, 0x42, - 0xfe, 0x87, 0x2f, 0x7c, 0x34, 0xfc, 0xb9, 0xed, 0x86, 0x3f, 0xab, 0x71, 0x0c, 0x64, 0x34, 0x8e, - 0xdf, 0x09, 0x8c, 0xc4, 0x3c, 0xa7, 0x6f, 0x82, 0xe2, 0x61, 0xb6, 0x8c, 0x6d, 0xb9, 0x9e, 0x0f, - 0xd5, 0x2b, 0x5b, 0x0a, 0xc1, 0x41, 0xd8, 0x23, 0x15, 0xa3, 0xef, 0xc7, 0x6e, 0x49, 0xc4, 0xde, - 0x33, 0x0f, 0xc3, 0x42, 0x84, 0xfb, 0xa6, 0xcf, 0x64, 0xf7, 0xd8, 0x7b, 0x44, 0x49, 0x8e, 0x94, - 0xae, 0xe7, 0x57, 0x02, 0x91, 0x32, 0xd4, 0xc3, 0x4f, 0xde, 0x1e, 0xd9, 0x92, 0xc9, 0x6e, 0x8d, - 0x85, 0xb1, 0xaa, 0x9c, 0x4a, 0x1c, 0x1d, 0xd3, 0x7d, 0x6c, 0x95, 0xf9, 0x67, 0xd8, 0xdc, 0x2a, - 0x6c, 0xe5, 0xca, 0x7f, 0xaa, 0x28, 0x3f, 0x21, 0x00, 0x6d, 0xa7, 0x37, 0xef, 0xe4, 0x89, 0xa2, - 0xe9, 0x4f, 0x29, 0x9a, 0x33, 0x30, 0xcc, 0xd9, 0xca, 0x15, 0x03, 0xbb, 0xb1, 0x74, 0x64, 0x2a, - 0xbd, 0xdf, 0xb4, 0x0d, 0x63, 0x66, 0x81, 0xb7, 0x28, 0xea, 0x4d, 0x82, 0xed, 0x3e, 0x92, 0x93, - 0xd6, 0x48, 0x18, 0xab, 0x9d, 0x42, 0xb2, 0x76, 0xe2, 0x87, 0xef, 0x78, 0xd9, 0x1c, 0xf9, 0x61, - 0x04, 0xfe, 0x27, 0x20, 0xd2, 0x1b, 0x04, 0x76, 0xc9, 0xd5, 0x8a, 0x1e, 0x4c, 0x20, 0x49, 0xee, - 0x6f, 0xca, 0x53, 0x9b, 0x0b, 0x49, 0x5b, 0xaa, 0xf6, 0xc1, 0xf7, 0xbf, 0x7e, 0xd4, 0x3f, 0x4d, - 0x0f, 0xe9, 0xe7, 0x84, 0xf4, 0x52, 0xb0, 0x11, 0x56, 0xdd, 0x15, 0x3d, 0x7d, 0xdd, 0xa4, 0xb7, - 0x08, 0xec, 0xee, 0xdc, 0xc0, 0xe8, 0xe1, 0x74, 0x33, 0x29, 0x2b, 0x9e, 0x32, 0xd3, 0x8b, 0x28, - 0xe2, 0x3a, 0x2e, 0x70, 0xbd, 0x40, 0x8f, 0x75, 0xc3, 0x15, 0x4e, 0xe1, 0xfa, 0x7a, 0xc7, 0xfa, - 0xb8, 0x41, 0xbf, 0x23, 0x30, 0x96, 0x58, 0x8e, 0xa8, 0xd6, 0x0d, 0x41, 0x74, 0xe5, 0x53, 0xf4, - 0x9e, 0xe5, 0x11, 0xf6, 0x79, 0x01, 0xfb, 0x0c, 0x3d, 0xd5, 0x33, 0xec, 0xe5, 0xa6, 0x81, 0x4b, - 0xa2, 0xbe, 0x1e, 0x5b, 0x2f, 0x37, 0xe8, 0xd7, 0x04, 0x46, 0xe3, 0x3b, 0x0b, 0x9d, 0xed, 0x06, - 0x2a, 0xb2, 0x61, 0x29, 0x5a, 0xaf, 0xe2, 0xe8, 0xc2, 0x69, 0xe1, 0xc2, 0x09, 0x7a, 0x7c, 0x2b, - 0x2e, 0xc8, 0x95, 0x4d, 0x5f, 0x6f, 0xed, 0x72, 0x1b, 0xf4, 0x26, 0x81, 0x3d, 0x91, 0x55, 0x85, - 0x66, 0xe4, 0x3f, 0x6d, 0xdb, 0x51, 0x9e, 0xe9, 0x49, 0x16, 0x21, 0x1f, 0x13, 0x90, 0x9f, 0xa3, - 0x5a, 0x37, 0xc8, 0x55, 0xa9, 0x8e, 0x4d, 0x8b, 0xde, 0x21, 0xb0, 0x37, 0xba, 0x40, 0xd0, 0x0c, - 0xbb, 0xa9, 0xcb, 0x8d, 0xf2, 0x6c, 0x6f, 0xc2, 0x88, 0xf2, 0xa4, 0x40, 0xf9, 0x0a, 0x9d, 0xef, - 0x86, 0x32, 0x9c, 0xde, 0xf1, 0x00, 0x7d, 0xbd, 0xd5, 0x2f, 0x37, 0xe8, 0x37, 0x04, 0x46, 0x62, - 0x5b, 0x01, 0xcd, 0x80, 0x91, 0xbe, 0xf2, 0x28, 0xb3, 0x3d, 0x4a, 0x23, 0xea, 0x73, 0x02, 0xf5, - 0x69, 0xfa, 0x6a, 0x37, 0xd4, 0x26, 0x1e, 0x60, 0xc8, 0xf1, 0x9e, 0x07, 0xe5, 0x1c, 0x7b, 0xd3, - 0x36, 0xe8, 0x57, 0x04, 0x86, 0x3b, 0xe6, 0x40, 0x3a, 0x9d, 0x01, 0x26, 0xb1, 0x00, 0x28, 0x87, - 0x7b, 0x90, 0x44, 0xc8, 0x97, 0x04, 0xe4, 0xd7, 0xe8, 0xb9, 0xae, 0x90, 0x83, 0x0f, 0x7c, 0x46, - 0x3a, 0xa3, 0x9c, 0x0a, 0xfd, 0x27, 0x02, 0x4f, 0xa4, 0x0f, 0xc1, 0xf4, 0x68, 0x57, 0x6c, 0xc9, - 0x59, 0x5f, 0x79, 0x7e, 0x6b, 0x4a, 0xe8, 0xdb, 0xeb, 0xc2, 0xb7, 0x0b, 0xf4, 0xfc, 0x56, 0x7c, - 0xe3, 0xc1, 0x43, 0x1d, 0x4e, 0x71, 0xa9, 0xce, 0x7d, 0x4b, 0x60, 0x34, 0x3e, 0x45, 0x65, 0x35, - 0x9a, 0x8c, 0xd1, 0x3a, 0xab, 0xd1, 0x64, 0x0d, 0x67, 0xbd, 0xf7, 0xca, 0x36, 0x5e, 0x74, 0x27, - 0xd5, 0x85, 0xdb, 0x04, 0x86, 0x3b, 0xde, 0xf1, 0xac, 0xd2, 0x4a, 0x8e, 0x5f, 0x59, 0xa5, 0x95, - 0x32, 0x14, 0xa8, 0x67, 0x05, 0xe6, 0x12, 0x3d, 0xd1, 0x15, 0x73, 0x7b, 0x40, 0x49, 0x85, 0x5b, - 0x9a, 0xb9, 0xf7, 0xb0, 0x48, 0xee, 0x3f, 0x2c, 0x92, 0x5f, 0x1e, 0x16, 0xc9, 0x87, 0x8f, 0x8a, - 0x7d, 0xf7, 0x1f, 0x15, 0xfb, 0x7e, 0x7c, 0x54, 0xec, 0x7b, 0x6b, 0xf4, 0xbd, 0xf6, 0x31, 0x7e, - 0xb3, 0xce, 0xf8, 0xf2, 0x2e, 0xf1, 0x7f, 0xda, 0xa3, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x66, - 0x2c, 0x00, 0x3a, 0xc0, 0x16, 0x00, 0x00, + // 1489 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x5d, 0x68, 0x1c, 0xd5, + 0x17, 0xcf, 0xcd, 0xe6, 0xdf, 0x26, 0x67, 0xdb, 0x26, 0xb9, 0x2d, 0xff, 0x6c, 0x36, 0x75, 0x1b, + 0xa6, 0x52, 0xd3, 0xd8, 0xec, 0x98, 0xb6, 0xd6, 0x8f, 0x96, 0xda, 0x5d, 0x4d, 0xdb, 0x60, 0x4b, + 0xd3, 0x5d, 0x3f, 0x50, 0x28, 0xc3, 0x64, 0xe7, 0x76, 0x33, 0x92, 0xcc, 0x4c, 0xe7, 0xce, 0x06, + 0x43, 0x88, 0x0f, 0xf6, 0x5d, 0x04, 0xf1, 0xcd, 0x07, 0x41, 0x2a, 0x22, 0x05, 0x7d, 0xa8, 0x88, + 0xe0, 0x83, 0xe0, 0x4b, 0x1f, 0x4b, 0x7d, 0x11, 0x1f, 0x44, 0x5a, 0x41, 0x7c, 0x13, 0x7c, 0xf1, + 0x41, 0x44, 0xe6, 0x7e, 0xec, 0x7c, 0x67, 0x36, 0x25, 0x8a, 0xe8, 0x4b, 0x98, 0x3d, 0x1f, 0x77, + 0x7e, 0xe7, 0x9c, 0xdf, 0x3d, 0x73, 0x4e, 0x60, 0x62, 0xb9, 0xb3, 0x42, 0x5c, 0x5d, 0xd5, 0x3b, + 0x86, 0xe9, 0xa9, 0xab, 0xb3, 0xea, 0xb5, 0x0e, 0x71, 0xd7, 0xaa, 0x8e, 0x6b, 0x7b, 0x36, 0x1e, + 0xe6, 0xca, 0x2a, 0x53, 0x56, 0x57, 0x67, 0xcb, 0xa3, 0xfa, 0x8a, 0x69, 0xd9, 0x2a, 0xfb, 0xcb, + 0x6d, 0xca, 0xfb, 0xda, 0x76, 0xdb, 0x66, 0x8f, 0xaa, 0xff, 0x24, 0xa4, 0xfb, 0xdb, 0xb6, 0xdd, + 0x5e, 0x26, 0xaa, 0xee, 0x98, 0xaa, 0x6e, 0x59, 0xb6, 0xa7, 0x7b, 0xa6, 0x6d, 0x51, 0xa1, 0x1d, + 0x6f, 0xd9, 0x74, 0xc5, 0xa6, 0x1a, 0x77, 0xe3, 0x3f, 0x84, 0x6a, 0x9a, 0xff, 0x52, 0x17, 0x75, + 0x4a, 0x38, 0x16, 0x75, 0x75, 0x76, 0x91, 0x78, 0xfa, 0xac, 0xea, 0xe8, 0x6d, 0xd3, 0x62, 0xe7, + 0xc8, 0x97, 0xc4, 0xb1, 0x3b, 0xba, 0xab, 0xaf, 0xc8, 0x93, 0x12, 0x91, 0xf1, 0x28, 0xb8, 0xb2, + 0x12, 0x57, 0x92, 0x55, 0xd3, 0x20, 0x56, 0x8b, 0x64, 0x39, 0x13, 0xc7, 0x6e, 0x2d, 0x71, 0xa5, + 0xb2, 0x0f, 0xf0, 0x65, 0x1f, 0xd9, 0x02, 0x7b, 0x5d, 0x83, 0x5c, 0xeb, 0x10, 0xea, 0x29, 0x97, + 0x61, 0x6f, 0x44, 0x4a, 0x1d, 0xdb, 0xa2, 0x04, 0x3f, 0x0d, 0x3b, 0x38, 0xac, 0x12, 0x9a, 0x44, + 0x53, 0xc5, 0xa3, 0x63, 0xd5, 0x58, 0x52, 0xab, 0xdc, 0xa1, 0x3e, 0x74, 0xfb, 0xfb, 0x03, 0x7d, + 0x1f, 0xfd, 0xf4, 0xe9, 0x34, 0x6a, 0x08, 0x0f, 0xe5, 0x24, 0x94, 0xd8, 0x91, 0x73, 0x02, 0x5c, + 0x7d, 0x6d, 0xde, 0x10, 0xaf, 0xc3, 0x07, 0xa0, 0x28, 0x31, 0x6b, 0xa6, 0xc1, 0x0e, 0x1f, 0x68, + 0x80, 0x14, 0xcd, 0x1b, 0xca, 0x15, 0x18, 0x4f, 0x71, 0x16, 0xa8, 0xce, 0xc0, 0xa0, 0x34, 0x15, + 0xb8, 0xc6, 0x13, 0xb8, 0xba, 0x8e, 0x21, 0x64, 0x5d, 0x2f, 0xe5, 0x63, 0x04, 0x0f, 0xc5, 0xce, + 0x6f, 0x76, 0x16, 0x5f, 0x23, 0x2d, 0x4f, 0x22, 0xac, 0xc1, 0x30, 0xe5, 0x12, 0x4d, 0x37, 0x0c, + 0x97, 0x50, 0x9e, 0x82, 0xa1, 0x7a, 0xe9, 0xee, 0xad, 0x99, 0x7d, 0xa2, 0xea, 0x35, 0xae, 0x69, + 0x7a, 0xae, 0x69, 0xb5, 0x1b, 0x7b, 0x84, 0x83, 0x90, 0xe2, 0xb3, 0x00, 0x41, 0xd5, 0x4b, 0xfd, + 0x0c, 0xe8, 0xa1, 0xaa, 0x70, 0xf5, 0x29, 0x52, 0xe5, 0x74, 0x15, 0x14, 0xa9, 0x2e, 0xe8, 0x6d, + 0x22, 0x5e, 0xdf, 0x08, 0x79, 0x2a, 0x1f, 0x22, 0xa8, 0x64, 0x81, 0x15, 0x19, 0x39, 0x19, 0xc9, + 0x48, 0x61, 0xf3, 0x8c, 0x0c, 0xf8, 0x19, 0x09, 0x92, 0x81, 0xcf, 0xa5, 0xe0, 0x7c, 0x24, 0x17, + 0x27, 0x7f, 0x73, 0x04, 0xe8, 0x75, 0x04, 0xfb, 0x63, 0x40, 0x6b, 0x2d, 0x5f, 0x23, 0x93, 0x3a, + 0x01, 0x43, 0x3a, 0x13, 0xc8, 0xa2, 0x0f, 0x35, 0x06, 0xb9, 0x60, 0xde, 0xd8, 0xb6, 0x74, 0xdd, + 0x48, 0xd6, 0x56, 0xa2, 0xf8, 0x47, 0x65, 0xab, 0x2c, 0xee, 0xc7, 0xb3, 0x1d, 0xd7, 0x25, 0x96, + 0x37, 0xe7, 0xdf, 0x51, 0x79, 0x1d, 0xdf, 0x42, 0x82, 0xff, 0x51, 0xa5, 0xc0, 0x3f, 0x0e, 0x83, + 0xec, 0x46, 0x07, 0x57, 0x67, 0x27, 0xfb, 0x3d, 0x6f, 0xe0, 0x23, 0x80, 0xb9, 0x8a, 0x7a, 0xba, + 0xeb, 0x69, 0x4b, 0xc4, 0x6c, 0x2f, 0x79, 0x0c, 0x65, 0xa1, 0x31, 0xc2, 0x34, 0x4d, 0x5f, 0x71, + 0x9e, 0xc9, 0xf1, 0x14, 0x70, 0x99, 0x46, 0x2c, 0x43, 0xda, 0x16, 0x98, 0xed, 0x1e, 0x26, 0x9f, + 0xb3, 0x0c, 0x6e, 0xa9, 0x1c, 0x87, 0x31, 0x9e, 0x53, 0x5f, 0x5c, 0xb3, 0x5a, 0x4b, 0xb6, 0x2b, + 0x8b, 0x9a, 0x8d, 0x46, 0x79, 0x49, 0xb6, 0x80, 0xb0, 0x57, 0xd0, 0x5a, 0x74, 0x26, 0x11, 0x57, + 0x78, 0x7f, 0xb2, 0x04, 0x81, 0x97, 0xa8, 0x82, 0xf0, 0x50, 0x26, 0xc5, 0x85, 0x08, 0x67, 0x27, + 0x02, 0x4a, 0xb9, 0x02, 0x07, 0x32, 0x2d, 0xb6, 0x01, 0xc0, 0x27, 0x08, 0x26, 0xd8, 0xf9, 0x35, + 0x4a, 0xcd, 0xb6, 0x45, 0x8c, 0x17, 0x74, 0xb7, 0x4d, 0x3c, 0xd9, 0x4e, 0xf1, 0x79, 0x18, 0xa5, + 0x1d, 0x87, 0xb8, 0x96, 0x6d, 0x10, 0x4d, 0x6f, 0xb5, 0xec, 0x8e, 0xe5, 0x89, 0xfe, 0x31, 0x71, + 0xf7, 0xd6, 0xcc, 0x98, 0xec, 0x1f, 0xad, 0x56, 0xb4, 0x85, 0x8c, 0x74, 0xbd, 0x6a, 0xdc, 0x29, + 0x92, 0xdd, 0xfe, 0x68, 0xad, 0x1f, 0x05, 0x7c, 0xd5, 0x5c, 0xf6, 0x88, 0xab, 0x2d, 0xae, 0x69, + 0x5d, 0x23, 0xbf, 0x7e, 0x83, 0x8d, 0x61, 0xae, 0xa9, 0xf3, 0xd4, 0xcf, 0x1b, 0xca, 0x2f, 0xf2, + 0x6e, 0x26, 0x10, 0x6f, 0x37, 0xa9, 0xaa, 0xb0, 0xd7, 0x25, 0xd7, 0x3a, 0xa6, 0x4b, 0x0c, 0xcd, + 0x76, 0x88, 0xa5, 0x39, 0xb6, 0xeb, 0xd1, 0x52, 0x61, 0xb2, 0x30, 0xb5, 0xbb, 0x31, 0x2a, 0x55, + 0x97, 0x1c, 0x62, 0x2d, 0xf8, 0x0a, 0xfc, 0x32, 0x8c, 0x7b, 0x0c, 0x8b, 0x96, 0x48, 0x19, 0x2d, + 0x0d, 0x4c, 0x16, 0xf2, 0x72, 0x36, 0xc6, 0xbd, 0x9b, 0xb1, 0xcc, 0x51, 0xe5, 0x0d, 0xc1, 0xd9, + 0x9a, 0x5f, 0xcf, 0x06, 0xf1, 0x61, 0xe4, 0x73, 0x36, 0xbd, 0x74, 0xfd, 0x0f, 0x50, 0xba, 0x2e, + 0xfb, 0x23, 0xef, 0x0f, 0xc8, 0xe7, 0x32, 0x49, 0x26, 0xf9, 0x42, 0x5e, 0x92, 0x7c, 0xdc, 0x43, + 0xf9, 0x03, 0x81, 0x12, 0x3f, 0x98, 0xd6, 0xd7, 0xf8, 0x03, 0x71, 0xff, 0x56, 0x0e, 0x46, 0x9b, + 0x76, 0xe1, 0x41, 0x9b, 0x76, 0x06, 0x97, 0x07, 0xd2, 0xb9, 0x7c, 0x13, 0xc1, 0xc1, 0x4d, 0x13, + 0x20, 0x92, 0x7c, 0x0a, 0x76, 0xf2, 0x94, 0x51, 0xd1, 0xe6, 0x7b, 0xc9, 0xb2, 0x74, 0xd9, 0xbe, + 0x46, 0xff, 0x9b, 0xbc, 0x7a, 0x5d, 0x8a, 0x0a, 0xc8, 0xff, 0xfe, 0x4a, 0xfd, 0x8c, 0x60, 0x38, + 0x16, 0x35, 0x7e, 0x05, 0xca, 0xae, 0xa8, 0x94, 0xf6, 0x40, 0x61, 0x97, 0xa4, 0x7b, 0x73, 0x0b, + 0xe1, 0x1f, 0x84, 0xdd, 0xdc, 0x2d, 0xfa, 0x9d, 0xdb, 0xc5, 0x85, 0xa2, 0x75, 0x9d, 0x84, 0x22, + 0x33, 0xa1, 0x9e, 0xee, 0x11, 0xde, 0x7c, 0xf6, 0x1c, 0x2d, 0x27, 0x67, 0x5e, 0xdb, 0xf5, 0x9a, + 0xbe, 0x49, 0x03, 0x1c, 0xf9, 0x48, 0x83, 0x99, 0x32, 0x59, 0xe6, 0xee, 0xdc, 0x1a, 0xe3, 0xe3, + 0x64, 0xe2, 0xe8, 0x98, 0xef, 0x5f, 0xc6, 0xc9, 0x5f, 0x91, 0x68, 0x8e, 0x4d, 0xb2, 0x7c, 0xf5, + 0x3f, 0x43, 0xc7, 0x77, 0x11, 0x40, 0x10, 0xf0, 0x66, 0x5f, 0x81, 0x04, 0x5d, 0xfa, 0x53, 0xe8, + 0x72, 0x0e, 0x8a, 0x94, 0x2c, 0x5f, 0xd5, 0x44, 0x27, 0xe7, 0x41, 0x4c, 0xa6, 0xf7, 0x98, 0xe0, + 0xb5, 0xa2, 0xa6, 0x40, 0xbb, 0x12, 0xe5, 0x7d, 0x24, 0x3e, 0x15, 0x91, 0x6a, 0x74, 0xa7, 0xd5, + 0x18, 0x6b, 0x26, 0x92, 0xac, 0x89, 0x1f, 0xbe, 0xed, 0x84, 0x39, 0xfa, 0xfb, 0x08, 0xfc, 0x8f, + 0x41, 0xc4, 0xd7, 0x11, 0xec, 0xe0, 0x5b, 0x1f, 0x3e, 0x98, 0x40, 0x92, 0x5c, 0x2d, 0xcb, 0x0f, + 0x6f, 0x6e, 0xc4, 0xdf, 0xa5, 0x54, 0xdf, 0xfc, 0xe6, 0xc7, 0x77, 0xfa, 0xa7, 0xf0, 0x21, 0xf5, + 0x02, 0xb3, 0x5e, 0xf0, 0x97, 0xd5, 0x96, 0xbd, 0xac, 0xa6, 0xaf, 0xc9, 0xf8, 0x06, 0x82, 0x5d, + 0xe1, 0xe5, 0x10, 0x1f, 0x4e, 0x7f, 0x4d, 0xca, 0xf6, 0x59, 0x9e, 0xee, 0xc5, 0x54, 0xe0, 0x3a, + 0xcd, 0x70, 0x3d, 0x89, 0x4f, 0xe4, 0xe1, 0x92, 0x0b, 0x82, 0xba, 0x1e, 0xda, 0x6c, 0x37, 0xf0, + 0xd7, 0x08, 0x46, 0x13, 0x7b, 0x1b, 0xae, 0xe6, 0x21, 0x88, 0x6e, 0xa3, 0x65, 0xb5, 0x67, 0x7b, + 0x01, 0xfb, 0x22, 0x83, 0x7d, 0x0e, 0xcf, 0xf5, 0x0c, 0x7b, 0x71, 0x4d, 0x13, 0xfb, 0xab, 0xba, + 0x1e, 0xdb, 0x7c, 0x37, 0xf0, 0x17, 0x08, 0x46, 0xe2, 0xeb, 0x14, 0x9e, 0xc9, 0x03, 0x15, 0x59, + 0xfe, 0xca, 0xd5, 0x5e, 0xcd, 0x45, 0x08, 0x67, 0x59, 0x08, 0x67, 0xf0, 0xe9, 0xad, 0x84, 0xc0, + 0xb7, 0x49, 0x75, 0xbd, 0xbb, 0x66, 0x6e, 0xe0, 0xf7, 0x10, 0xec, 0x0a, 0xaf, 0x01, 0x59, 0x4c, + 0x49, 0xd9, 0xc3, 0xb2, 0x98, 0x92, 0xb6, 0x95, 0x29, 0x8f, 0x33, 0xbc, 0x2a, 0x9e, 0xc9, 0xc3, + 0xdb, 0xe2, 0xde, 0xbc, 0x5b, 0xe1, 0x0f, 0x10, 0x14, 0x43, 0x8b, 0x06, 0x9e, 0xca, 0x48, 0x53, + 0x62, 0xc7, 0x29, 0x1f, 0xee, 0xc1, 0x52, 0x60, 0x7b, 0x86, 0x61, 0x7b, 0x0a, 0x3f, 0x91, 0x9b, + 0x4b, 0xd6, 0x0f, 0xf9, 0x96, 0xa3, 0xae, 0xcb, 0xee, 0xb8, 0x81, 0x3f, 0x43, 0x80, 0x93, 0xbb, + 0x14, 0x56, 0xf3, 0xf3, 0x13, 0xc5, 0xfc, 0x58, 0xef, 0x0e, 0x02, 0xfa, 0x29, 0x06, 0xfd, 0x04, + 0x3e, 0xbe, 0xa5, 0xb4, 0x8a, 0x10, 0xf0, 0x97, 0x08, 0x86, 0x63, 0x1b, 0x0f, 0x3e, 0x92, 0x8e, + 0x21, 0x7d, 0x95, 0x2b, 0xcf, 0xf4, 0x68, 0x2d, 0xe0, 0x5e, 0x60, 0x70, 0xcf, 0xe2, 0xe7, 0xf2, + 0xe0, 0xea, 0xe2, 0x00, 0x8d, 0xaf, 0x2f, 0xd4, 0xbf, 0x75, 0xb1, 0x8f, 0xee, 0x06, 0xfe, 0x1c, + 0x41, 0x31, 0x34, 0xa2, 0x66, 0x91, 0x23, 0xb9, 0xe1, 0x64, 0x91, 0x23, 0x65, 0x17, 0x51, 0x9a, + 0x0c, 0xf2, 0x45, 0xfc, 0x7c, 0x2e, 0x64, 0xff, 0x41, 0x7c, 0xed, 0x42, 0xe4, 0x48, 0x45, 0xfe, + 0x1d, 0x82, 0xff, 0xa7, 0x8f, 0xe7, 0xf8, 0x58, 0x2e, 0xb4, 0xe4, 0x36, 0x53, 0x3e, 0xbe, 0x35, + 0x27, 0x11, 0xda, 0x8b, 0x2c, 0xb4, 0x4b, 0xf8, 0xe2, 0x56, 0x42, 0xa3, 0xfe, 0x28, 0x21, 0x67, + 0xcc, 0xd4, 0xe0, 0xbe, 0x42, 0x30, 0x12, 0x9f, 0xf2, 0xb2, 0xda, 0x61, 0xc6, 0xd0, 0x9f, 0xd5, + 0x0e, 0xb3, 0x86, 0xc7, 0xde, 0x3b, 0x7a, 0x80, 0x57, 0x84, 0x93, 0x1a, 0xc2, 0x4d, 0x04, 0xc5, + 0xd0, 0xb4, 0x91, 0xc5, 0xac, 0xe4, 0x78, 0x98, 0xc5, 0xac, 0x94, 0xd1, 0x45, 0x39, 0xcf, 0x30, + 0xd7, 0xf1, 0x99, 0x5c, 0xcc, 0xc1, 0x18, 0x95, 0x0a, 0xb7, 0x3e, 0x7d, 0xfb, 0x5e, 0x05, 0xdd, + 0xb9, 0x57, 0x41, 0x3f, 0xdc, 0xab, 0xa0, 0xb7, 0xef, 0x57, 0xfa, 0xee, 0xdc, 0xaf, 0xf4, 0x7d, + 0x7b, 0xbf, 0xd2, 0xf7, 0xea, 0xc8, 0xeb, 0xc1, 0x31, 0xde, 0x9a, 0x43, 0xe8, 0xe2, 0x0e, 0xf6, + 0x8f, 0xee, 0x63, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x34, 0xd0, 0xc3, 0x1e, 0x18, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1432,18 +1533,20 @@ type QueryClient interface { EvidenceBySubject(ctx context.Context, in *QueryEvidenceBySubjectRequest, opts ...grpc.CallOption) (*QueryEvidenceBySubjectResponse, error) // EvidenceByAction queries evidence records by action id. EvidenceByAction(ctx context.Context, in *QueryEvidenceByActionRequest, opts ...grpc.CallOption) (*QueryEvidenceByActionResponse, error) - // CurrentWindow returns the current derived window boundaries at the current chain height. - CurrentWindow(ctx context.Context, in *QueryCurrentWindowRequest, opts ...grpc.CallOption) (*QueryCurrentWindowResponse, error) - // WindowSnapshot returns the persisted window snapshot for the given window_id. - WindowSnapshot(ctx context.Context, in *QueryWindowSnapshotRequest, opts ...grpc.CallOption) (*QueryWindowSnapshotResponse, error) + // CurrentEpoch returns the current derived epoch boundaries at the current chain height. + CurrentEpoch(ctx context.Context, in *QueryCurrentEpochRequest, opts ...grpc.CallOption) (*QueryCurrentEpochResponse, error) + // EpochAnchor returns the persisted epoch anchor for the given epoch_id. + EpochAnchor(ctx context.Context, in *QueryEpochAnchorRequest, opts ...grpc.CallOption) (*QueryEpochAnchorResponse, error) + // CurrentEpochAnchor returns the persisted epoch anchor for the current epoch. + CurrentEpochAnchor(ctx context.Context, in *QueryCurrentEpochAnchorRequest, opts ...grpc.CallOption) (*QueryCurrentEpochAnchorResponse, error) // AssignedTargets returns the prober -> targets assignment for a given supernode_account. - // If filter_by_window_id is false, it returns the assignments for the current window. + // If filter_by_epoch_id is false, it returns the assignments for the current epoch. AssignedTargets(ctx context.Context, in *QueryAssignedTargetsRequest, opts ...grpc.CallOption) (*QueryAssignedTargetsResponse, error) AuditReport(ctx context.Context, in *QueryAuditReportRequest, opts ...grpc.CallOption) (*QueryAuditReportResponse, error) AuditReportsByReporter(ctx context.Context, in *QueryAuditReportsByReporterRequest, opts ...grpc.CallOption) (*QueryAuditReportsByReporterResponse, error) // SupernodeReports returns all reports that include observations about the given supernode_account. SupernodeReports(ctx context.Context, in *QuerySupernodeReportsRequest, opts ...grpc.CallOption) (*QuerySupernodeReportsResponse, error) - // SelfReports returns self-reports submitted by the given supernode_account across windows. + // SelfReports returns self-reports submitted by the given supernode_account across epochs. SelfReports(ctx context.Context, in *QuerySelfReportsRequest, opts ...grpc.CallOption) (*QuerySelfReportsResponse, error) } @@ -1491,18 +1594,27 @@ func (c *queryClient) EvidenceByAction(ctx context.Context, in *QueryEvidenceByA return out, nil } -func (c *queryClient) CurrentWindow(ctx context.Context, in *QueryCurrentWindowRequest, opts ...grpc.CallOption) (*QueryCurrentWindowResponse, error) { - out := new(QueryCurrentWindowResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/CurrentWindow", in, out, opts...) +func (c *queryClient) CurrentEpoch(ctx context.Context, in *QueryCurrentEpochRequest, opts ...grpc.CallOption) (*QueryCurrentEpochResponse, error) { + out := new(QueryCurrentEpochResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/CurrentEpoch", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) EpochAnchor(ctx context.Context, in *QueryEpochAnchorRequest, opts ...grpc.CallOption) (*QueryEpochAnchorResponse, error) { + out := new(QueryEpochAnchorResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/EpochAnchor", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) WindowSnapshot(ctx context.Context, in *QueryWindowSnapshotRequest, opts ...grpc.CallOption) (*QueryWindowSnapshotResponse, error) { - out := new(QueryWindowSnapshotResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/WindowSnapshot", in, out, opts...) +func (c *queryClient) CurrentEpochAnchor(ctx context.Context, in *QueryCurrentEpochAnchorRequest, opts ...grpc.CallOption) (*QueryCurrentEpochAnchorResponse, error) { + out := new(QueryCurrentEpochAnchorResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/CurrentEpochAnchor", in, out, opts...) if err != nil { return nil, err } @@ -1564,18 +1676,20 @@ type QueryServer interface { EvidenceBySubject(context.Context, *QueryEvidenceBySubjectRequest) (*QueryEvidenceBySubjectResponse, error) // EvidenceByAction queries evidence records by action id. EvidenceByAction(context.Context, *QueryEvidenceByActionRequest) (*QueryEvidenceByActionResponse, error) - // CurrentWindow returns the current derived window boundaries at the current chain height. - CurrentWindow(context.Context, *QueryCurrentWindowRequest) (*QueryCurrentWindowResponse, error) - // WindowSnapshot returns the persisted window snapshot for the given window_id. - WindowSnapshot(context.Context, *QueryWindowSnapshotRequest) (*QueryWindowSnapshotResponse, error) + // CurrentEpoch returns the current derived epoch boundaries at the current chain height. + CurrentEpoch(context.Context, *QueryCurrentEpochRequest) (*QueryCurrentEpochResponse, error) + // EpochAnchor returns the persisted epoch anchor for the given epoch_id. + EpochAnchor(context.Context, *QueryEpochAnchorRequest) (*QueryEpochAnchorResponse, error) + // CurrentEpochAnchor returns the persisted epoch anchor for the current epoch. + CurrentEpochAnchor(context.Context, *QueryCurrentEpochAnchorRequest) (*QueryCurrentEpochAnchorResponse, error) // AssignedTargets returns the prober -> targets assignment for a given supernode_account. - // If filter_by_window_id is false, it returns the assignments for the current window. + // If filter_by_epoch_id is false, it returns the assignments for the current epoch. AssignedTargets(context.Context, *QueryAssignedTargetsRequest) (*QueryAssignedTargetsResponse, error) AuditReport(context.Context, *QueryAuditReportRequest) (*QueryAuditReportResponse, error) AuditReportsByReporter(context.Context, *QueryAuditReportsByReporterRequest) (*QueryAuditReportsByReporterResponse, error) // SupernodeReports returns all reports that include observations about the given supernode_account. SupernodeReports(context.Context, *QuerySupernodeReportsRequest) (*QuerySupernodeReportsResponse, error) - // SelfReports returns self-reports submitted by the given supernode_account across windows. + // SelfReports returns self-reports submitted by the given supernode_account across epochs. SelfReports(context.Context, *QuerySelfReportsRequest) (*QuerySelfReportsResponse, error) } @@ -1595,11 +1709,14 @@ func (*UnimplementedQueryServer) EvidenceBySubject(ctx context.Context, req *Que func (*UnimplementedQueryServer) EvidenceByAction(ctx context.Context, req *QueryEvidenceByActionRequest) (*QueryEvidenceByActionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EvidenceByAction not implemented") } -func (*UnimplementedQueryServer) CurrentWindow(ctx context.Context, req *QueryCurrentWindowRequest) (*QueryCurrentWindowResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CurrentWindow not implemented") +func (*UnimplementedQueryServer) CurrentEpoch(ctx context.Context, req *QueryCurrentEpochRequest) (*QueryCurrentEpochResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CurrentEpoch not implemented") +} +func (*UnimplementedQueryServer) EpochAnchor(ctx context.Context, req *QueryEpochAnchorRequest) (*QueryEpochAnchorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EpochAnchor not implemented") } -func (*UnimplementedQueryServer) WindowSnapshot(ctx context.Context, req *QueryWindowSnapshotRequest) (*QueryWindowSnapshotResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method WindowSnapshot not implemented") +func (*UnimplementedQueryServer) CurrentEpochAnchor(ctx context.Context, req *QueryCurrentEpochAnchorRequest) (*QueryCurrentEpochAnchorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CurrentEpochAnchor not implemented") } func (*UnimplementedQueryServer) AssignedTargets(ctx context.Context, req *QueryAssignedTargetsRequest) (*QueryAssignedTargetsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AssignedTargets not implemented") @@ -1693,38 +1810,56 @@ func _Query_EvidenceByAction_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } -func _Query_CurrentWindow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryCurrentWindowRequest) +func _Query_CurrentEpoch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCurrentEpochRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CurrentEpoch(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lumera.audit.v1.Query/CurrentEpoch", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CurrentEpoch(ctx, req.(*QueryCurrentEpochRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_EpochAnchor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEpochAnchorRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).CurrentWindow(ctx, in) + return srv.(QueryServer).EpochAnchor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/CurrentWindow", + FullMethod: "/lumera.audit.v1.Query/EpochAnchor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CurrentWindow(ctx, req.(*QueryCurrentWindowRequest)) + return srv.(QueryServer).EpochAnchor(ctx, req.(*QueryEpochAnchorRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_WindowSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryWindowSnapshotRequest) +func _Query_CurrentEpochAnchor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCurrentEpochAnchorRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).WindowSnapshot(ctx, in) + return srv.(QueryServer).CurrentEpochAnchor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/WindowSnapshot", + FullMethod: "/lumera.audit.v1.Query/CurrentEpochAnchor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).WindowSnapshot(ctx, req.(*QueryWindowSnapshotRequest)) + return srv.(QueryServer).CurrentEpochAnchor(ctx, req.(*QueryCurrentEpochAnchorRequest)) } return interceptor(ctx, in, info, handler) } @@ -1841,12 +1976,16 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_EvidenceByAction_Handler, }, { - MethodName: "CurrentWindow", - Handler: _Query_CurrentWindow_Handler, + MethodName: "CurrentEpoch", + Handler: _Query_CurrentEpoch_Handler, + }, + { + MethodName: "EpochAnchor", + Handler: _Query_EpochAnchor_Handler, }, { - MethodName: "WindowSnapshot", - Handler: _Query_WindowSnapshot_Handler, + MethodName: "CurrentEpochAnchor", + Handler: _Query_CurrentEpochAnchor_Handler, }, { MethodName: "AssignedTargets", @@ -2172,7 +2311,7 @@ func (m *QueryEvidenceByActionResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryCurrentWindowRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryCurrentEpochRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2182,12 +2321,12 @@ func (m *QueryCurrentWindowRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryCurrentWindowRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryCurrentEpochRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryCurrentWindowRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryCurrentEpochRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2195,7 +2334,7 @@ func (m *QueryCurrentWindowRequest) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } -func (m *QueryCurrentWindowResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryCurrentEpochResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2205,35 +2344,35 @@ func (m *QueryCurrentWindowResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryCurrentWindowResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryCurrentEpochResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryCurrentWindowResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryCurrentEpochResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.WindowEndHeight != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowEndHeight)) + if m.EpochEndHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochEndHeight)) i-- dAtA[i] = 0x18 } - if m.WindowStartHeight != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowStartHeight)) + if m.EpochStartHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochStartHeight)) i-- dAtA[i] = 0x10 } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryWindowSnapshotRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryEpochAnchorRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2243,25 +2382,58 @@ func (m *QueryWindowSnapshotRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryWindowSnapshotRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEpochAnchorRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryWindowSnapshotRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEpochAnchorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryWindowSnapshotResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryEpochAnchorResponse) 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 *QueryEpochAnchorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryEpochAnchorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Anchor.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 *QueryCurrentEpochAnchorRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2271,18 +2443,41 @@ func (m *QueryWindowSnapshotResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryWindowSnapshotResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryCurrentEpochAnchorRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryWindowSnapshotResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryCurrentEpochAnchorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryCurrentEpochAnchorResponse) 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 *QueryCurrentEpochAnchorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCurrentEpochAnchorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Snapshot.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Anchor.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2314,9 +2509,9 @@ func (m *QueryAssignedTargetsRequest) MarshalToSizedBuffer(dAtA []byte) (int, er _ = i var l int _ = l - if m.FilterByWindowId { + if m.FilterByEpochId { i-- - if m.FilterByWindowId { + if m.FilterByEpochId { dAtA[i] = 1 } else { dAtA[i] = 0 @@ -2324,8 +2519,8 @@ func (m *QueryAssignedTargetsRequest) MarshalToSizedBuffer(dAtA []byte) (int, er i-- dAtA[i] = 0x18 } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x10 } @@ -2369,30 +2564,30 @@ func (m *QueryAssignedTargetsResponse) MarshalToSizedBuffer(dAtA []byte) (int, e } } if len(m.RequiredOpenPorts) > 0 { - dAtA9 := make([]byte, len(m.RequiredOpenPorts)*10) - var j8 int + dAtA10 := make([]byte, len(m.RequiredOpenPorts)*10) + var j9 int for _, num := range m.RequiredOpenPorts { for num >= 1<<7 { - dAtA9[j8] = uint8(uint64(num)&0x7f | 0x80) + dAtA10[j9] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j8++ + j9++ } - dAtA9[j8] = uint8(num) - j8++ + dAtA10[j9] = uint8(num) + j9++ } - i -= j8 - copy(dAtA[i:], dAtA9[:j8]) - i = encodeVarintQuery(dAtA, i, uint64(j8)) + i -= j9 + copy(dAtA[i:], dAtA10[:j9]) + i = encodeVarintQuery(dAtA, i, uint64(j9)) i-- dAtA[i] = 0x1a } - if m.WindowStartHeight != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowStartHeight)) + if m.EpochStartHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochStartHeight)) i-- dAtA[i] = 0x10 } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x8 } @@ -2426,8 +2621,8 @@ func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x12 } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x8 } @@ -2487,6 +2682,16 @@ func (m *QueryAuditReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) ( _ = i var l int _ = l + if m.FilterByEpochId { + i-- + if m.FilterByEpochId { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } if m.Pagination != nil { { size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) @@ -2497,7 +2702,12 @@ func (m *QueryAuditReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) ( i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a + } + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) + i-- + dAtA[i] = 0x10 } if len(m.SupernodeAccount) > 0 { i -= len(m.SupernodeAccount) @@ -2578,9 +2788,9 @@ func (m *QuerySupernodeReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, e _ = i var l int _ = l - if m.FilterByWindowId { + if m.FilterByEpochId { i-- - if m.FilterByWindowId { + if m.FilterByEpochId { dAtA[i] = 1 } else { dAtA[i] = 0 @@ -2600,8 +2810,8 @@ func (m *QuerySupernodeReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, e i-- dAtA[i] = 0x1a } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x10 } @@ -2636,20 +2846,20 @@ func (m *SupernodeReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if len(m.PortStates) > 0 { - dAtA15 := make([]byte, len(m.PortStates)*10) - var j14 int + dAtA16 := make([]byte, len(m.PortStates)*10) + var j15 int for _, num := range m.PortStates { for num >= 1<<7 { - dAtA15[j14] = uint8(uint64(num)&0x7f | 0x80) + dAtA16[j15] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j14++ + j15++ } - dAtA15[j14] = uint8(num) - j14++ + dAtA16[j15] = uint8(num) + j15++ } - i -= j14 - copy(dAtA[i:], dAtA15[:j14]) - i = encodeVarintQuery(dAtA, i, uint64(j14)) + i -= j15 + copy(dAtA[i:], dAtA16[:j15]) + i = encodeVarintQuery(dAtA, i, uint64(j15)) i-- dAtA[i] = 0x22 } @@ -2658,8 +2868,8 @@ func (m *SupernodeReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x18 } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x10 } @@ -2742,9 +2952,9 @@ func (m *QuerySelfReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - if m.FilterByWindowId { + if m.FilterByEpochId { i-- - if m.FilterByWindowId { + if m.FilterByEpochId { dAtA[i] = 1 } else { dAtA[i] = 0 @@ -2764,8 +2974,8 @@ func (m *QuerySelfReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x1a } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x10 } @@ -2814,8 +3024,8 @@ func (m *SelfReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x10 } - if m.WindowId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x8 } @@ -2997,7 +3207,7 @@ func (m *QueryEvidenceByActionResponse) Size() (n int) { return n } -func (m *QueryCurrentWindowRequest) Size() (n int) { +func (m *QueryCurrentEpochRequest) Size() (n int) { if m == nil { return 0 } @@ -3006,43 +3216,63 @@ func (m *QueryCurrentWindowRequest) Size() (n int) { return n } -func (m *QueryCurrentWindowResponse) Size() (n int) { +func (m *QueryCurrentEpochResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) + } + if m.EpochStartHeight != 0 { + n += 1 + sovQuery(uint64(m.EpochStartHeight)) + } + if m.EpochEndHeight != 0 { + n += 1 + sovQuery(uint64(m.EpochEndHeight)) } - if m.WindowStartHeight != 0 { - n += 1 + sovQuery(uint64(m.WindowStartHeight)) + return n +} + +func (m *QueryEpochAnchorRequest) Size() (n int) { + if m == nil { + return 0 } - if m.WindowEndHeight != 0 { - n += 1 + sovQuery(uint64(m.WindowEndHeight)) + var l int + _ = l + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) } return n } -func (m *QueryWindowSnapshotRequest) Size() (n int) { +func (m *QueryEpochAnchorResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + l = m.Anchor.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryCurrentEpochAnchorRequest) Size() (n int) { + if m == nil { + return 0 } + var l int + _ = l return n } -func (m *QueryWindowSnapshotResponse) Size() (n int) { +func (m *QueryCurrentEpochAnchorResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.Snapshot.Size() + l = m.Anchor.Size() n += 1 + l + sovQuery(uint64(l)) return n } @@ -3057,10 +3287,10 @@ func (m *QueryAssignedTargetsRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) } - if m.FilterByWindowId { + if m.FilterByEpochId { n += 2 } return n @@ -3072,11 +3302,11 @@ func (m *QueryAssignedTargetsResponse) Size() (n int) { } var l int _ = l - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) } - if m.WindowStartHeight != 0 { - n += 1 + sovQuery(uint64(m.WindowStartHeight)) + if m.EpochStartHeight != 0 { + n += 1 + sovQuery(uint64(m.EpochStartHeight)) } if len(m.RequiredOpenPorts) > 0 { l = 0 @@ -3100,8 +3330,8 @@ func (m *QueryAuditReportRequest) Size() (n int) { } var l int _ = l - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) } l = len(m.SupernodeAccount) if l > 0 { @@ -3131,10 +3361,16 @@ func (m *QueryAuditReportsByReporterRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) + } if m.Pagination != nil { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) } + if m.FilterByEpochId { + n += 2 + } return n } @@ -3167,14 +3403,14 @@ func (m *QuerySupernodeReportsRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) } if m.Pagination != nil { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) } - if m.FilterByWindowId { + if m.FilterByEpochId { n += 2 } return n @@ -3190,8 +3426,8 @@ func (m *SupernodeReport) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) } if m.ReportHeight != 0 { n += 1 + sovQuery(uint64(m.ReportHeight)) @@ -3235,14 +3471,14 @@ func (m *QuerySelfReportsRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) } if m.Pagination != nil { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) } - if m.FilterByWindowId { + if m.FilterByEpochId { n += 2 } return n @@ -3254,8 +3490,8 @@ func (m *SelfReport) Size() (n int) { } var l int _ = l - if m.WindowId != 0 { - n += 1 + sovQuery(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovQuery(uint64(m.EpochId)) } if m.ReportHeight != 0 { n += 1 + sovQuery(uint64(m.ReportHeight)) @@ -4051,7 +4287,7 @@ func (m *QueryEvidenceByActionResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryCurrentWindowRequest) Unmarshal(dAtA []byte) error { +func (m *QueryCurrentEpochRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4074,10 +4310,10 @@ func (m *QueryCurrentWindowRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryCurrentWindowRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryCurrentEpochRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCurrentWindowRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryCurrentEpochRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -4101,7 +4337,7 @@ func (m *QueryCurrentWindowRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { +func (m *QueryCurrentEpochResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4124,17 +4360,17 @@ func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryCurrentWindowResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryCurrentEpochResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCurrentWindowResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryCurrentEpochResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4144,16 +4380,16 @@ func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } } case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowStartHeight", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochStartHeight", wireType) } - m.WindowStartHeight = 0 + m.EpochStartHeight = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4163,16 +4399,16 @@ func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowStartHeight |= int64(b&0x7F) << shift + m.EpochStartHeight |= int64(b&0x7F) << shift if b < 0x80 { break } } case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowEndHeight", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochEndHeight", wireType) } - m.WindowEndHeight = 0 + m.EpochEndHeight = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4182,7 +4418,7 @@ func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowEndHeight |= int64(b&0x7F) << shift + m.EpochEndHeight |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -4208,7 +4444,7 @@ func (m *QueryCurrentWindowResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryWindowSnapshotRequest) Unmarshal(dAtA []byte) error { +func (m *QueryEpochAnchorRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4231,17 +4467,86 @@ func (m *QueryWindowSnapshotRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryWindowSnapshotRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEpochAnchorRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryWindowSnapshotRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEpochAnchorRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) + } + m.EpochId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *QueryEpochAnchorResponse) 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 } - m.WindowId = 0 + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryEpochAnchorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEpochAnchorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Anchor", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4251,11 +4556,75 @@ func (m *QueryWindowSnapshotRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Anchor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *QueryCurrentEpochAnchorRequest) 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: QueryCurrentEpochAnchorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCurrentEpochAnchorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -4277,7 +4646,7 @@ func (m *QueryWindowSnapshotRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryWindowSnapshotResponse) Unmarshal(dAtA []byte) error { +func (m *QueryCurrentEpochAnchorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4300,15 +4669,15 @@ func (m *QueryWindowSnapshotResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryWindowSnapshotResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryCurrentEpochAnchorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryWindowSnapshotResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryCurrentEpochAnchorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Snapshot", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Anchor", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4335,7 +4704,7 @@ func (m *QueryWindowSnapshotResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Snapshot.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Anchor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4423,9 +4792,9 @@ func (m *QueryAssignedTargetsRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4435,14 +4804,14 @@ func (m *QueryAssignedTargetsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } } case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FilterByWindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FilterByEpochId", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -4459,7 +4828,7 @@ func (m *QueryAssignedTargetsRequest) Unmarshal(dAtA []byte) error { break } } - m.FilterByWindowId = bool(v != 0) + m.FilterByEpochId = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -4512,9 +4881,9 @@ func (m *QueryAssignedTargetsResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4524,16 +4893,16 @@ func (m *QueryAssignedTargetsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } } case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowStartHeight", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochStartHeight", wireType) } - m.WindowStartHeight = 0 + m.EpochStartHeight = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4543,7 +4912,7 @@ func (m *QueryAssignedTargetsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowStartHeight |= int64(b&0x7F) << shift + m.EpochStartHeight |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -4708,9 +5077,9 @@ func (m *QueryAuditReportRequest) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4720,7 +5089,7 @@ func (m *QueryAuditReportRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4923,6 +5292,25 @@ func (m *QueryAuditReportsByReporterRequest) Unmarshal(dAtA []byte) error { m.SupernodeAccount = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) + } + m.EpochId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } @@ -4958,6 +5346,26 @@ func (m *QueryAuditReportsByReporterRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FilterByEpochId", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FilterByEpochId = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -5162,9 +5570,9 @@ func (m *QuerySupernodeReportsRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5174,7 +5582,7 @@ func (m *QuerySupernodeReportsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5217,7 +5625,7 @@ func (m *QuerySupernodeReportsRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 4: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FilterByWindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FilterByEpochId", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -5234,7 +5642,7 @@ func (m *QuerySupernodeReportsRequest) Unmarshal(dAtA []byte) error { break } } - m.FilterByWindowId = bool(v != 0) + m.FilterByEpochId = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -5319,9 +5727,9 @@ func (m *SupernodeReport) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5331,7 +5739,7 @@ func (m *SupernodeReport) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5628,9 +6036,9 @@ func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5640,7 +6048,7 @@ func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5683,7 +6091,7 @@ func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 4: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FilterByWindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FilterByEpochId", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -5700,7 +6108,7 @@ func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { break } } - m.FilterByWindowId = bool(v != 0) + m.FilterByEpochId = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -5753,9 +6161,9 @@ func (m *SelfReport) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5765,7 +6173,7 @@ func (m *SelfReport) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } diff --git a/x/audit/v1/types/query.pb.gw.go b/x/audit/v1/types/query.pb.gw.go index ad0f5fe..92607ef 100644 --- a/x/audit/v1/types/query.pb.gw.go +++ b/x/audit/v1/types/query.pb.gw.go @@ -249,26 +249,26 @@ func local_request_Query_EvidenceByAction_0(ctx context.Context, marshaler runti } -func request_Query_CurrentWindow_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryCurrentWindowRequest +func request_Query_CurrentEpoch_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCurrentEpochRequest var metadata runtime.ServerMetadata - msg, err := client.CurrentWindow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.CurrentEpoch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_CurrentWindow_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryCurrentWindowRequest +func local_request_Query_CurrentEpoch_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCurrentEpochRequest var metadata runtime.ServerMetadata - msg, err := server.CurrentWindow(ctx, &protoReq) + msg, err := server.CurrentEpoch(ctx, &protoReq) return msg, metadata, err } -func request_Query_WindowSnapshot_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryWindowSnapshotRequest +func request_Query_EpochAnchor_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEpochAnchorRequest var metadata runtime.ServerMetadata var ( @@ -278,24 +278,24 @@ func request_Query_WindowSnapshot_0(ctx context.Context, marshaler runtime.Marsh _ = err ) - val, ok = pathParams["window_id"] + val, ok = pathParams["epoch_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "window_id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "epoch_id") } - protoReq.WindowId, err = runtime.Uint64(val) + protoReq.EpochId, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "window_id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "epoch_id", err) } - msg, err := client.WindowSnapshot(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.EpochAnchor(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_WindowSnapshot_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryWindowSnapshotRequest +func local_request_Query_EpochAnchor_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEpochAnchorRequest var metadata runtime.ServerMetadata var ( @@ -305,18 +305,36 @@ func local_request_Query_WindowSnapshot_0(ctx context.Context, marshaler runtime _ = err ) - val, ok = pathParams["window_id"] + val, ok = pathParams["epoch_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "window_id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "epoch_id") } - protoReq.WindowId, err = runtime.Uint64(val) + protoReq.EpochId, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "window_id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "epoch_id", err) } - msg, err := server.WindowSnapshot(ctx, &protoReq) + msg, err := server.EpochAnchor(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_CurrentEpochAnchor_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCurrentEpochAnchorRequest + var metadata runtime.ServerMetadata + + msg, err := client.CurrentEpochAnchor(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_CurrentEpochAnchor_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCurrentEpochAnchorRequest + var metadata runtime.ServerMetadata + + msg, err := server.CurrentEpochAnchor(ctx, &protoReq) return msg, metadata, err } @@ -404,15 +422,15 @@ func request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Marshale _ = err ) - val, ok = pathParams["window_id"] + val, ok = pathParams["epoch_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "window_id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "epoch_id") } - protoReq.WindowId, err = runtime.Uint64(val) + protoReq.EpochId, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "window_id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "epoch_id", err) } val, ok = pathParams["supernode_account"] @@ -442,15 +460,15 @@ func local_request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Ma _ = err ) - val, ok = pathParams["window_id"] + val, ok = pathParams["epoch_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "window_id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "epoch_id") } - protoReq.WindowId, err = runtime.Uint64(val) + protoReq.EpochId, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "window_id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "epoch_id", err) } val, ok = pathParams["supernode_account"] @@ -783,7 +801,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_CurrentWindow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_CurrentEpoch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -794,7 +812,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_CurrentWindow_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_CurrentEpoch_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 { @@ -802,11 +820,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_CurrentWindow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_CurrentEpoch_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_WindowSnapshot_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_EpochAnchor_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -817,7 +835,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_WindowSnapshot_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_EpochAnchor_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 { @@ -825,7 +843,30 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_WindowSnapshot_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_EpochAnchor_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_CurrentEpochAnchor_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_CurrentEpochAnchor_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_CurrentEpochAnchor_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1065,7 +1106,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_CurrentWindow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_CurrentEpoch_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) @@ -1074,18 +1115,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_CurrentWindow_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_CurrentEpoch_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_CurrentWindow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_CurrentEpoch_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_WindowSnapshot_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_EpochAnchor_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) @@ -1094,14 +1135,34 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_WindowSnapshot_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_EpochAnchor_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_WindowSnapshot_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_EpochAnchor_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_CurrentEpochAnchor_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_CurrentEpochAnchor_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_CurrentEpochAnchor_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1217,13 +1278,15 @@ var ( pattern_Query_EvidenceByAction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "evidence", "by_action", "action_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_CurrentWindow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "current_window"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_CurrentEpoch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "current_epoch"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EpochAnchor_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "epoch_anchor", "epoch_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_WindowSnapshot_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "window_snapshot", "window_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_CurrentEpochAnchor_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"LumeraProtocol", "lumera", "audit", "v1", "current_epoch_anchor"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_AssignedTargets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "assigned_targets", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AuditReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_report", "window_id", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AuditReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_report", "epoch_id", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_AuditReportsByReporter_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_reports_by_reporter", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) @@ -1241,9 +1304,11 @@ var ( forward_Query_EvidenceByAction_0 = runtime.ForwardResponseMessage - forward_Query_CurrentWindow_0 = runtime.ForwardResponseMessage + forward_Query_CurrentEpoch_0 = runtime.ForwardResponseMessage + + forward_Query_EpochAnchor_0 = runtime.ForwardResponseMessage - forward_Query_WindowSnapshot_0 = runtime.ForwardResponseMessage + forward_Query_CurrentEpochAnchor_0 = runtime.ForwardResponseMessage forward_Query_AssignedTargets_0 = runtime.ForwardResponseMessage diff --git a/x/audit/v1/types/tx.pb.go b/x/audit/v1/types/tx.pb.go index ae2ee61..db5c4c1 100644 --- a/x/audit/v1/types/tx.pb.go +++ b/x/audit/v1/types/tx.pb.go @@ -121,7 +121,7 @@ var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo type MsgSubmitAuditReport struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - WindowId uint64 `protobuf:"varint,2,opt,name=window_id,json=windowId,proto3" json:"window_id,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` SelfReport AuditSelfReport `protobuf:"bytes,3,opt,name=self_report,json=selfReport,proto3" json:"self_report"` PeerObservations []*AuditPeerObservation `protobuf:"bytes,4,rep,name=peer_observations,json=peerObservations,proto3" json:"peer_observations,omitempty"` } @@ -166,9 +166,9 @@ func (m *MsgSubmitAuditReport) GetSupernodeAccount() string { return "" } -func (m *MsgSubmitAuditReport) GetWindowId() uint64 { +func (m *MsgSubmitAuditReport) GetEpochId() uint64 { if m != nil { - return m.WindowId + return m.EpochId } return 0 } @@ -357,50 +357,50 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/tx.proto", fileDescriptor_4b5ba410ad359f63) } var fileDescriptor_4b5ba410ad359f63 = []byte{ - // 679 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x31, 0x4f, 0xdb, 0x40, - 0x14, 0x8e, 0x43, 0xa0, 0xe4, 0x42, 0x81, 0x9c, 0x50, 0x63, 0x0c, 0x35, 0x69, 0x24, 0xa4, 0x28, - 0x12, 0x89, 0x48, 0xab, 0x0e, 0x51, 0x97, 0x44, 0xaa, 0x5a, 0x06, 0x54, 0x64, 0xda, 0x85, 0xc5, - 0xbd, 0xf8, 0x0e, 0xd7, 0x15, 0xf6, 0x59, 0x77, 0xe7, 0x00, 0x5b, 0xd5, 0xb1, 0x53, 0x97, 0xfe, - 0x87, 0x8e, 0xa8, 0xa2, 0x53, 0xff, 0x00, 0x23, 0x62, 0xea, 0x54, 0x55, 0x30, 0xf0, 0x37, 0x2a, - 0xfb, 0x6c, 0x07, 0x6c, 0xda, 0x74, 0xb1, 0x7c, 0xef, 0xfb, 0xde, 0x7b, 0xdf, 0xfb, 0xfc, 0x7c, - 0x40, 0x3d, 0x08, 0x5c, 0xc2, 0x50, 0x07, 0x05, 0xd8, 0x11, 0x9d, 0xd1, 0x66, 0x47, 0x1c, 0xb5, - 0x7d, 0x46, 0x05, 0x85, 0x0b, 0x12, 0x69, 0x47, 0x48, 0x7b, 0xb4, 0xa9, 0x55, 0x91, 0xeb, 0x78, - 0xb4, 0x13, 0x3d, 0x25, 0x47, 0x5b, 0xb2, 0xa9, 0x4d, 0xa3, 0xd7, 0x4e, 0xf8, 0x16, 0x47, 0x6b, - 0x16, 0xe5, 0x2e, 0xe5, 0x1d, 0x97, 0xdb, 0x61, 0x45, 0x97, 0xdb, 0x31, 0xb0, 0x2c, 0x01, 0x53, - 0x66, 0xc8, 0x43, 0x0c, 0xad, 0x64, 0x75, 0xc8, 0xb6, 0x12, 0x5c, 0xcd, 0x82, 0x3e, 0x62, 0xc8, - 0x4d, 0x52, 0xf5, 0x2c, 0x4a, 0x46, 0x0e, 0x26, 0x9e, 0x45, 0x24, 0xde, 0xf8, 0xa1, 0x80, 0x85, - 0x6d, 0x6e, 0xbf, 0xf1, 0x31, 0x12, 0x64, 0x27, 0xca, 0x84, 0x4f, 0x41, 0x19, 0x05, 0xe2, 0x1d, - 0x65, 0x8e, 0x38, 0x56, 0x95, 0xba, 0xd2, 0x2c, 0x0f, 0xd4, 0x8b, 0xd3, 0x8d, 0xa5, 0x58, 0x53, - 0x1f, 0x63, 0x46, 0x38, 0xdf, 0x15, 0xcc, 0xf1, 0x6c, 0x63, 0x4c, 0x85, 0x3d, 0x30, 0x23, 0x7b, - 0xab, 0xc5, 0xba, 0xd2, 0xac, 0x74, 0x6b, 0xed, 0x8c, 0x4b, 0x6d, 0xd9, 0x60, 0x50, 0x3e, 0xfb, - 0xb5, 0x56, 0xf8, 0x7a, 0x7d, 0xd2, 0x52, 0x8c, 0x38, 0xa3, 0xf7, 0xe4, 0xe3, 0xf5, 0x49, 0x6b, - 0x5c, 0xeb, 0xd3, 0xf5, 0x49, 0xeb, 0x51, 0x2c, 0xfd, 0x68, 0x2c, 0x3e, 0xa3, 0xb4, 0xb1, 0x0c, - 0x6a, 0x99, 0x90, 0x41, 0xb8, 0x4f, 0x3d, 0x4e, 0x1a, 0xdf, 0x8a, 0x60, 0x69, 0x9b, 0xdb, 0xbb, - 0xc1, 0xd0, 0x75, 0x44, 0x3f, 0x2c, 0x60, 0x10, 0x9f, 0x32, 0x01, 0x5f, 0x82, 0x2a, 0x0f, 0x7c, - 0xc2, 0x3c, 0x8a, 0x89, 0x89, 0x2c, 0x8b, 0x06, 0x9e, 0x88, 0xa7, 0x5c, 0xb9, 0x38, 0xdd, 0xa8, - 0x25, 0x53, 0x5a, 0xd6, 0xed, 0x41, 0x17, 0xd3, 0xac, 0xbe, 0x4c, 0x82, 0x2b, 0xa0, 0x7c, 0xe8, - 0x78, 0x98, 0x1e, 0x9a, 0x0e, 0x8e, 0x46, 0x2e, 0x19, 0xb3, 0x32, 0xb0, 0x85, 0xe1, 0x0b, 0x50, - 0xe1, 0xe4, 0x60, 0xdf, 0x64, 0x51, 0x57, 0x75, 0x2a, 0x72, 0xa4, 0x9e, 0x73, 0x24, 0x52, 0xb6, - 0x4b, 0x0e, 0xf6, 0xa5, 0xba, 0x41, 0x29, 0xb4, 0xc6, 0x00, 0x3c, 0x8d, 0x40, 0x03, 0x54, 0x7d, - 0x42, 0x98, 0x49, 0x87, 0x9c, 0xb0, 0x11, 0x12, 0x0e, 0xf5, 0xb8, 0x5a, 0xaa, 0x4f, 0x35, 0x2b, - 0xdd, 0xf5, 0xbb, 0xcb, 0xed, 0x10, 0xc2, 0x5e, 0x8d, 0xd9, 0xc6, 0xa2, 0x7f, 0x3b, 0xc0, 0x7b, - 0x0f, 0x42, 0xb7, 0xf3, 0x36, 0x34, 0x74, 0xb0, 0x7a, 0x97, 0x67, 0xa9, 0xa9, 0x5f, 0x8a, 0xa0, - 0x9a, 0x12, 0x9e, 0xc7, 0x9b, 0x04, 0xbb, 0xe0, 0x9e, 0xc5, 0x08, 0x12, 0x94, 0x4d, 0xdc, 0x96, - 0x84, 0x08, 0xfb, 0x60, 0x81, 0x07, 0xc3, 0xf7, 0xc4, 0x12, 0x26, 0x92, 0x8c, 0xc8, 0xc1, 0x7f, - 0xe5, 0xce, 0xc7, 0x09, 0x71, 0x14, 0x0e, 0xc0, 0xfd, 0x64, 0x99, 0x4d, 0x71, 0xec, 0x93, 0xc8, - 0xe3, 0xf9, 0xee, 0xc3, 0x9c, 0x29, 0x89, 0xd0, 0xd7, 0xc7, 0x3e, 0x31, 0xe6, 0xc8, 0x8d, 0x53, - 0xf8, 0x09, 0x91, 0x15, 0x7a, 0x12, 0x7e, 0xc2, 0x52, 0x28, 0xc0, 0x98, 0x95, 0x81, 0x2d, 0x0c, - 0x35, 0x30, 0xeb, 0x12, 0x81, 0x30, 0x12, 0x48, 0x9d, 0x96, 0x58, 0x72, 0xee, 0xcd, 0x85, 0x0e, - 0x26, 0xd3, 0x34, 0x9e, 0x81, 0xe5, 0x9c, 0x2d, 0x89, 0x69, 0x70, 0x0d, 0x54, 0x52, 0x9d, 0x0e, - 0x8e, 0x2c, 0x2a, 0x19, 0x20, 0x09, 0x6d, 0xe1, 0xee, 0xf7, 0x22, 0x98, 0xda, 0xe6, 0x36, 0xdc, - 0x03, 0x73, 0xb7, 0xfe, 0xc3, 0xfc, 0xb6, 0x64, 0x96, 0x5d, 0x6b, 0x4e, 0x62, 0xa4, 0x22, 0x1c, - 0x50, 0xcd, 0xff, 0x0a, 0xeb, 0x77, 0xa5, 0xe7, 0x68, 0xda, 0xc6, 0x7f, 0xd1, 0xd2, 0x56, 0x6f, - 0xc1, 0x7c, 0x66, 0x41, 0x1a, 0x7f, 0x2f, 0x90, 0x70, 0xb4, 0xd6, 0x64, 0x4e, 0xd2, 0x41, 0x9b, - 0xfe, 0x10, 0xde, 0x1d, 0x83, 0xd6, 0xd9, 0xa5, 0xae, 0x9c, 0x5f, 0xea, 0xca, 0xef, 0x4b, 0x5d, - 0xf9, 0x7c, 0xa5, 0x17, 0xce, 0xaf, 0xf4, 0xc2, 0xcf, 0x2b, 0xbd, 0xb0, 0xb7, 0x78, 0xe3, 0xce, - 0x08, 0x57, 0x83, 0x0f, 0x67, 0xa2, 0xeb, 0xee, 0xf1, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3d, - 0xc0, 0x74, 0xac, 0xd3, 0x05, 0x00, 0x00, + // 680 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x3f, 0x4f, 0xdb, 0x4e, + 0x18, 0x8e, 0x43, 0xf8, 0x93, 0x0b, 0x3f, 0x20, 0x27, 0xf4, 0x8b, 0x63, 0xa8, 0x49, 0x23, 0x21, + 0x45, 0x91, 0x48, 0x44, 0x5a, 0x75, 0x88, 0xba, 0x24, 0x52, 0xd5, 0x32, 0xa0, 0x22, 0xd3, 0x2e, + 0x2c, 0xee, 0xc5, 0x3e, 0x8c, 0x2b, 0xec, 0xb3, 0xee, 0xce, 0x11, 0x6c, 0x55, 0xc7, 0x4e, 0x5d, + 0xfa, 0x1d, 0x3a, 0x66, 0xa0, 0x53, 0xbf, 0x00, 0x23, 0x62, 0xea, 0x54, 0x55, 0x30, 0xf0, 0x35, + 0x2a, 0xdf, 0xd9, 0x0e, 0xd8, 0xb4, 0x74, 0x89, 0x7c, 0xef, 0xf3, 0xbc, 0xef, 0xfb, 0xbc, 0x4f, + 0xde, 0x3b, 0xa0, 0x1e, 0x87, 0x1e, 0xa6, 0xa8, 0x8b, 0x42, 0xdb, 0xe5, 0xdd, 0xf1, 0x76, 0x97, + 0x9f, 0x74, 0x02, 0x4a, 0x38, 0x81, 0xcb, 0x12, 0xe9, 0x08, 0xa4, 0x33, 0xde, 0xd6, 0xaa, 0xc8, + 0x73, 0x7d, 0xd2, 0x15, 0xbf, 0x92, 0xa3, 0xad, 0x3a, 0xc4, 0x21, 0xe2, 0xb3, 0x1b, 0x7d, 0xc5, + 0xd1, 0x9a, 0x45, 0x98, 0x47, 0x58, 0xd7, 0x63, 0x4e, 0x54, 0xd1, 0x63, 0x4e, 0x0c, 0xd4, 0x25, + 0x60, 0xca, 0x0c, 0x79, 0x88, 0xa1, 0xb5, 0xac, 0x0e, 0xd9, 0x56, 0x82, 0xeb, 0x59, 0x30, 0x40, + 0x14, 0x79, 0x49, 0xaa, 0x9e, 0x45, 0xf1, 0xd8, 0xb5, 0xb1, 0x6f, 0x61, 0x89, 0x37, 0xbf, 0x2b, + 0x60, 0x79, 0x97, 0x39, 0x6f, 0x03, 0x1b, 0x71, 0xbc, 0x27, 0x32, 0xe1, 0x33, 0x50, 0x46, 0x21, + 0x3f, 0x22, 0xd4, 0xe5, 0xa7, 0xaa, 0xd2, 0x50, 0x5a, 0xe5, 0xa1, 0x7a, 0x79, 0xb6, 0xb5, 0x1a, + 0x6b, 0x1a, 0xd8, 0x36, 0xc5, 0x8c, 0xed, 0x73, 0xea, 0xfa, 0x8e, 0x31, 0xa5, 0xc2, 0x3e, 0x98, + 0x93, 0xbd, 0xd5, 0x62, 0x43, 0x69, 0x55, 0x7a, 0xb5, 0x4e, 0xc6, 0xa5, 0x8e, 0x6c, 0x30, 0x2c, + 0x9f, 0xff, 0xdc, 0x28, 0x7c, 0xbd, 0x99, 0xb4, 0x15, 0x23, 0xce, 0xe8, 0x3f, 0xfd, 0x78, 0x33, + 0x69, 0x4f, 0x6b, 0x7d, 0xba, 0x99, 0xb4, 0x1f, 0xc7, 0xd2, 0x4f, 0xa6, 0xe2, 0x33, 0x4a, 0x9b, + 0x75, 0x50, 0xcb, 0x84, 0x0c, 0xcc, 0x02, 0xe2, 0x33, 0xdc, 0x9c, 0x14, 0xc1, 0xea, 0x2e, 0x73, + 0xf6, 0xc3, 0x91, 0xe7, 0xf2, 0x41, 0x54, 0xc0, 0xc0, 0x01, 0xa1, 0x1c, 0xbe, 0x02, 0x55, 0x16, + 0x06, 0x98, 0xfa, 0xc4, 0xc6, 0x26, 0xb2, 0x2c, 0x12, 0xfa, 0x3c, 0x9e, 0x72, 0xed, 0xf2, 0x6c, + 0xab, 0x96, 0x4c, 0x69, 0x59, 0x77, 0x07, 0x5d, 0x49, 0xb3, 0x06, 0x32, 0x09, 0xd6, 0xc1, 0x02, + 0x0e, 0x88, 0x75, 0x64, 0xba, 0xb6, 0x98, 0xb8, 0x64, 0xcc, 0x8b, 0xf3, 0x8e, 0x0d, 0x5f, 0x82, + 0x0a, 0xc3, 0xc7, 0x87, 0x26, 0x15, 0x3d, 0xd5, 0x19, 0xe1, 0x47, 0x23, 0xe7, 0x87, 0xd0, 0xb5, + 0x8f, 0x8f, 0x0f, 0xa5, 0xb6, 0x61, 0x29, 0x32, 0xc6, 0x00, 0x2c, 0x8d, 0x40, 0x03, 0x54, 0x03, + 0x8c, 0xa9, 0x49, 0x46, 0x0c, 0xd3, 0x31, 0xe2, 0x2e, 0xf1, 0x99, 0x5a, 0x6a, 0xcc, 0xb4, 0x2a, + 0xbd, 0xcd, 0xfb, 0xcb, 0xed, 0x61, 0x4c, 0x5f, 0x4f, 0xd9, 0xc6, 0x4a, 0x70, 0x37, 0xc0, 0xfa, + 0xff, 0x47, 0x5e, 0xe7, 0x4d, 0x68, 0xea, 0x60, 0xfd, 0x3e, 0xc7, 0x52, 0x4b, 0xbf, 0x14, 0x41, + 0x35, 0x25, 0xbc, 0x88, 0xf7, 0x08, 0xf6, 0xc0, 0xbc, 0x45, 0x31, 0xe2, 0x84, 0x3e, 0xb8, 0x2b, + 0x09, 0x11, 0x0e, 0xc0, 0x32, 0x0b, 0x47, 0xef, 0xb1, 0xc5, 0x4d, 0x24, 0x19, 0xc2, 0xc0, 0xbf, + 0xe5, 0x2e, 0xc5, 0x09, 0x71, 0x14, 0x0e, 0xc1, 0x7f, 0xc9, 0x2a, 0x9b, 0xfc, 0x34, 0xc0, 0xc2, + 0xe3, 0xa5, 0xde, 0xa3, 0x9c, 0x29, 0x89, 0xd0, 0x37, 0xa7, 0x01, 0x36, 0x16, 0xf1, 0xad, 0x13, + 0x5c, 0x03, 0x65, 0x64, 0x45, 0x9e, 0x44, 0xff, 0x60, 0x29, 0x12, 0x60, 0x2c, 0xc8, 0xc0, 0x8e, + 0x0d, 0x35, 0xb0, 0xe0, 0x61, 0x8e, 0x6c, 0xc4, 0x91, 0x3a, 0x2b, 0xb1, 0xe4, 0xdc, 0x5f, 0x8c, + 0x1c, 0x4c, 0xa6, 0x69, 0x3e, 0x07, 0xf5, 0x9c, 0x2d, 0x89, 0x69, 0x70, 0x03, 0x54, 0x52, 0x9d, + 0xae, 0x2d, 0x2c, 0x2a, 0x19, 0x20, 0x09, 0xed, 0xd8, 0xbd, 0x6f, 0x45, 0x30, 0xb3, 0xcb, 0x1c, + 0x78, 0x00, 0x16, 0xef, 0xdc, 0xc2, 0xfc, 0xb6, 0x64, 0x56, 0x5d, 0x6b, 0x3d, 0xc4, 0x48, 0x45, + 0xb8, 0xa0, 0x9a, 0xbf, 0x08, 0x9b, 0xf7, 0xa5, 0xe7, 0x68, 0xda, 0xd6, 0x3f, 0xd1, 0xd2, 0x56, + 0xef, 0xc0, 0x52, 0x66, 0x41, 0x9a, 0x7f, 0x2e, 0x90, 0x70, 0xb4, 0xf6, 0xc3, 0x9c, 0xa4, 0x83, + 0x36, 0xfb, 0x21, 0x7a, 0x39, 0x86, 0xed, 0xf3, 0x2b, 0x5d, 0xb9, 0xb8, 0xd2, 0x95, 0x5f, 0x57, + 0xba, 0xf2, 0xf9, 0x5a, 0x2f, 0x5c, 0x5c, 0xeb, 0x85, 0x1f, 0xd7, 0x7a, 0xe1, 0x60, 0xe5, 0xd6, + 0x8b, 0x11, 0xad, 0x06, 0x1b, 0xcd, 0x89, 0xc7, 0xee, 0xc9, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xc9, 0x60, 0xac, 0x15, 0xd1, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -669,8 +669,8 @@ func (m *MsgSubmitAuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x1a - if m.WindowId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.WindowId)) + if m.EpochId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.EpochId)) i-- dAtA[i] = 0x10 } @@ -836,8 +836,8 @@ func (m *MsgSubmitAuditReport) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - if m.WindowId != 0 { - n += 1 + sovTx(uint64(m.WindowId)) + if m.EpochId != 0 { + n += 1 + sovTx(uint64(m.EpochId)) } l = m.SelfReport.Size() n += 1 + l + sovTx(uint64(l)) @@ -1133,9 +1133,9 @@ func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WindowId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochId", wireType) } - m.WindowId = 0 + m.EpochId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -1145,7 +1145,7 @@ func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WindowId |= uint64(b&0x7F) << shift + m.EpochId |= uint64(b&0x7F) << shift if b < 0x80 { break } From 0750c95a0ec2e5ee808c528dd6929897328e1c89 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Mon, 9 Feb 2026 20:34:40 +0500 Subject: [PATCH 14/18] audit : Rename Msgs for clarity, & tweaks --- AuditSpec.md | 392 -------- app/app.go | 1 + app/upgrades/params/params.go | 2 + app/upgrades/upgrades.go | 8 + app/upgrades/upgrades_test.go | 7 +- app/upgrades/v1_11_0/upgrade.go | 92 ++ docs/static/openapi.yml | 2 +- proto/lumera/audit/v1/audit.proto | 13 +- proto/lumera/audit/v1/evidence_metadata.proto | 3 +- proto/lumera/audit/v1/params.proto | 13 +- proto/lumera/audit/v1/query.proto | 52 +- proto/lumera/audit/v1/tx.proto | 15 +- .../audit_host_requirements_bypass_test.go | 34 +- ...udit_host_requirements_enforcement_test.go | 36 +- .../audit_missing_report_enforcement_test.go | 38 +- ...udit_peer_observation_completeness_test.go | 22 +- .../audit_peer_ports_enforcement_test.go | 68 +- ...audit_postponed_reporter_self_only_test.go | 56 +- .../audit_recovery_enforcement_test.go | 70 +- .../audit_submit_and_query_test.go | 40 +- tests/systemtests/audit_test_helpers_test.go | 93 +- tests/systemtests/supernode_utils.go | 2 +- x/audit/v1/POSTPONEMENT_RULES.md | 20 +- x/audit/v1/README.md | 62 +- x/audit/v1/keeper/enforcement.go | 34 +- x/audit/v1/keeper/enforcement_test.go | 12 +- x/audit/v1/keeper/evidence.go | 67 +- x/audit/v1/keeper/genesis.go | 12 +- ...t_report.go => msg_submit_epoch_report.go} | 64 +- ...est.go => msg_submit_epoch_report_test.go} | 33 +- x/audit/v1/keeper/prune.go | 14 +- ..._audit_report.go => query_epoch_report.go} | 6 +- ....go => query_epoch_reports_by_reporter.go} | 10 +- ..._self_reports.go => query_host_reports.go} | 16 +- ....go => query_storage_challenge_reports.go} | 14 +- x/audit/v1/keeper/state.go | 16 +- .../keeper/storage_challenge_deterministic.go | 8 - .../keeper/storage_challenge_evidence_test.go | 1 - x/audit/v1/module/autocli.go | 32 +- x/audit/v1/types/audit.pb.go | 273 +++--- x/audit/v1/types/codec.go | 2 +- x/audit/v1/types/evidence_metadata.pb.go | 3 +- x/audit/v1/types/keys.go | 110 ++- x/audit/v1/types/params.go | 211 ++--- x/audit/v1/types/params.pb.go | 562 +----------- x/audit/v1/types/query.pb.go | 846 +++++++++--------- x/audit/v1/types/query.pb.gw.go | 130 +-- x/audit/v1/types/tx.pb.go | 269 +++--- 48 files changed, 1526 insertions(+), 2360 deletions(-) delete mode 100644 AuditSpec.md create mode 100644 app/upgrades/v1_11_0/upgrade.go rename x/audit/v1/keeper/{msg_submit_audit_report.go => msg_submit_epoch_report.go} (67%) rename x/audit/v1/keeper/{msg_submit_audit_report_test.go => msg_submit_epoch_report_test.go} (75%) rename x/audit/v1/keeper/{query_audit_report.go => query_epoch_report.go} (77%) rename x/audit/v1/keeper/{query_audit_reports_by_reporter.go => query_epoch_reports_by_reporter.go} (77%) rename x/audit/v1/keeper/{query_self_reports.go => query_host_reports.go} (75%) rename x/audit/v1/keeper/{query_supernode_reports.go => query_storage_challenge_reports.go} (77%) diff --git a/AuditSpec.md b/AuditSpec.md deleted file mode 100644 index b702a77..0000000 --- a/AuditSpec.md +++ /dev/null @@ -1,392 +0,0 @@ -# Audit Module Specification (audit/v1) - -This document specifies the `audit/v1` on-chain contract: protobuf shapes, windowing, snapshots, report storage/query surfaces, and postpone/recovery behavior. - -## Contents -1. Abstract -2. Overview -3. Reporting Windows -4. Parameters -5. Data Types (audit/v1) -6. Messages (tx) -7. Queries -8. On-Chain State -9. Postponement and Recovery -10. Out of Scope -11. Events - - - -## 1. Abstract -The Audit module (`x/audit/v1`) provides deterministic, window-based reporting for supernodes: -- ACTIVE supernodes submit one audit report per window, containing a self report and (when they are a prober for the window) peer reachability observations for all assigned targets. -- At the start of each window, the module persists a `WindowSnapshot` that serves as the minimal source-of-truth for the prober → targets mapping for that window. - -## 2. Overview -### 2.1 Roles -- **Probers**: ACTIVE supernodes at the window start height. -- **Targets**: ACTIVE + POSTPONED supernodes at the window start height. -- Reports are submitted by the registered **supernode account** (`supernode_account`) for a supernode, and the module resolves the corresponding supernode record via `x/supernode` when needed for validation. -- All audit state is scoped to a single supernode account (and to a window where applicable); there is no chain-global “single audit status”. - -Assumption: -- `supernode_account` is treated as the stable identifier for audit storage and queries. - -### 2.2 High-level flow (per window) -1) The module maintains a persisted “current window” state derived from block height. -2) At `window_start_height`, the module stores a `WindowSnapshot` containing the per-window prober → targets mapping (`assignments`). -3) Each reporter submits `MsgSubmitAuditReport` for a specific `window_id` during the acceptance period. -4) The module stores the report. - -### Summary -- Time is divided into **reporting windows**. The module persists the current window boundaries and advances them deterministically as height increases. -- At the **first block of each window**, the chain writes a **window snapshot** that freezes, for that window: - - the **prober → targets mapping** (`assignments`) -- Each supernode can submit **at most one report per window**. A report is signed by the supernode account and stored under `supernode_account`. -- A report contains self metrics plus peer observations. Peer observations include port states aligned by index to `required_open_ports` (position `i` refers to the `i`th configured port). - - If the reporter is a prober for the window (i.e. appears in `WindowSnapshot.assignments`), peer observations must cover **all** assigned targets for that prober. - - If the reporter is not a prober for the window (e.g. `POSTPONED`), peer observations must be empty (self-report only). -- A report is **accepted** only if: - - the report targets the **current window_id** at the current height (window start through window end) - - the reporter has not already submitted a report for that window -- When accepted, the chain stores the report as-is. -- Economic penalties and aggregation are intentionally out-of-scope for the current implementation. - -## 3. Reporting Windows -Window sizing is block-based and deterministic. The module persists the current window boundaries and advances them as the chain height increases. - -### 3.1 Window state -The module persists a “current window” record containing: -- `window_id` -- `window_start_height` -- `window_end_height` -- `window_blocks` (effective window size for the current window) - -Initialization: -- On first run (e.g., at the first `BeginBlock` after module activation), the module writes the initial window: - - `window_id = 0` - - `window_start_height = H_init` (the current block height at initialization) - - `window_blocks = reporting_window_blocks` (from params at initialization) - - `window_end_height = window_start_height + window_blocks - 1` - -Advancement: -- If `H > window_end_height`, the module advances windows until `H` is within the current window. -- Each advance increments `window_id` by 1 and sets: - - `next_start = previous_end + 1` - - `window_start_height = next_start` - - `window_end_height = next_start + window_blocks - 1` (using the effective window size for that new window) - -### 3.2 Report acceptance period -A report is accepted only when: -- `window_id` equals the module’s current `window_id` at the current height, and -- the current height is within `[window_start_height, window_end_height]` of that current window. - -Otherwise, `MsgSubmitAuditReport` is rejected. - -### 3.3 Window size changes (`reporting_window_blocks`) -`reporting_window_blocks` may be updated by governance. To preserve stable window boundaries, the change is applied **at the next window boundary**: -- the current window’s `start_height`/`end_height` do not change mid-window -- the new `reporting_window_blocks` value takes effect starting at `previous_end_height + 1` - -## 4. Parameters -Parameters are represented by the `Params` message. - -Default values: -- `reporting_window_blocks` (uint64): `400` -- `peer_quorum_reports` (uint32): `3` -- `min_probe_targets_per_window` (uint32): `3` -- `max_probe_targets_per_window` (uint32): `5` -- `required_open_ports` (repeated uint32): `[4444, 4445, 8002]` -- `min_cpu_free_percent` (uint32): `0` (disabled) -- `min_mem_free_percent` (uint32): `0` (disabled) -- `min_disk_free_percent` (uint32): `0` (disabled) -- `consecutive_windows_to_postpone` (uint32): `1` -- `keep_last_window_entries` (uint64): `200` - -## 5. Data Types (audit/v1) -The module defines its reachability types under `audit/v1`. - -### 5.1 PortState -```protobuf -enum PortState { - PORT_STATE_UNKNOWN = 0; - PORT_STATE_OPEN = 1; - PORT_STATE_CLOSED = 2; -} -``` - -### 5.2 AuditSelfReport -Self metrics are self-attested and stored as provided by the reporter. - -```protobuf -message AuditSelfReport { - double cpu_usage_percent = 1; - double mem_usage_percent = 2; - double disk_usage_percent = 3; - - // inbound_port_states[i] refers to required_open_ports[i] for the window. - repeated PortState inbound_port_states = 4; - - uint32 failed_actions_count = 5; -} -``` - -Note: the current implementation does not validate `inbound_port_states` length; it is stored as provided by the reporter. - -### 5.3 AuditPeerObservation -Peer port states are index-aligned: `port_states[i]` refers to `required_open_ports[i]` for the window. - -```protobuf -message AuditPeerObservation { - string target_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - repeated PortState port_states = 2; // port_states[i] refers to required_open_ports[i] for the window -} -``` - -### 5.4 AuditReport -Reports are stored per `(window_id, supernode_account)` and are immutable once accepted. - -```protobuf -message AuditReport { - // Primary identity for audit storage and queries. - string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; - int64 report_height = 3; - - AuditSelfReport self_report = 4 [(gogoproto.nullable) = false]; - repeated AuditPeerObservation peer_observations = 5; -} -``` - -### 5.8 WindowSnapshot -`WindowSnapshot` stores the minimal per-window source-of-truth for the prober → targets mapping. - -```protobuf -message ProberTargets { - string prober_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - repeated string target_supernode_accounts = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; -} - -message WindowSnapshot { - uint64 window_id = 1; - int64 window_start_height = 2; - repeated ProberTargets assignments = 3; -} -``` - -## 6. Messages (tx) -### 6.1 Msg service -```protobuf -service Msg { - rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); - rpc SubmitAuditReport(MsgSubmitAuditReport) returns (MsgSubmitAuditReportResponse); -} -``` - -### 6.2 MsgUpdateParams -Parameters are updated by the module authority (governance by default). - -```protobuf -message MsgUpdateParams { - option (cosmos.msg.v1.signer) = "authority"; - - string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - Params params = 2 [(gogoproto.nullable) = false]; -} -``` - -### 6.3 MsgSubmitAuditReport -Reports are signed by `supernode_account` and applied to the supernode identified by that account. - -```protobuf -message MsgSubmitAuditReport { - option (cosmos.msg.v1.signer) = "supernode_account"; - - string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; - - AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; - repeated AuditPeerObservation peer_observations = 4; -} -``` - -### 6.4 Message validation rules -On `MsgSubmitAuditReport`: -1) Reject if current height is outside the acceptance period for `window_id` (section 3.2). -2) Resolve reporter supernode from `supernode_account` via `x/supernode`; reject if not found. -3) If the reporter is a prober for the window (per `WindowSnapshot.assignments`), require peer observations for **all** assigned targets. -4) Reject duplicates: at most one report per `(window_id, supernode_account)`. - -## 7. Queries -```protobuf -service Query { - rpc Params(QueryParamsRequest) returns (QueryParamsResponse); - rpc CurrentWindow(QueryCurrentWindowRequest) returns (QueryCurrentWindowResponse); - - rpc WindowSnapshot(QueryWindowSnapshotRequest) returns (QueryWindowSnapshotResponse); - rpc AssignedTargets(QueryAssignedTargetsRequest) returns (QueryAssignedTargetsResponse); - - rpc AuditReport(QueryAuditReportRequest) returns (QueryAuditReportResponse); - rpc AuditReportsByReporter(QueryAuditReportsByReporterRequest) returns (QueryAuditReportsByReporterResponse); - - rpc SupernodeReports(QuerySupernodeReportsRequest) returns (QuerySupernodeReportsResponse); - rpc SelfReports(QuerySelfReportsRequest) returns (QuerySelfReportsResponse); -} - -message QueryParamsRequest {} -message QueryParamsResponse { Params params = 1 [(gogoproto.nullable) = false]; } - -message QueryCurrentWindowRequest {} -message QueryCurrentWindowResponse { - uint64 window_id = 1; - int64 window_start_height = 2; - int64 window_end_height = 3; -} - -message QueryWindowSnapshotRequest { uint64 window_id = 1; } -message QueryWindowSnapshotResponse { WindowSnapshot snapshot = 1; } - -message QueryAssignedTargetsRequest { - string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; - bool filter_by_window_id = 3; -} -message QueryAssignedTargetsResponse { - uint64 window_id = 1; - int64 window_start_height = 2; - repeated uint32 required_open_ports = 3; - repeated string target_supernode_accounts = 4 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; -} - -message QueryAuditReportRequest { - uint64 window_id = 1; - string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; -} -message QueryAuditReportResponse { AuditReport report = 1 [(gogoproto.nullable) = false]; } - -message QueryAuditReportsByReporterRequest { - string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} -message QueryAuditReportsByReporterResponse { - repeated AuditReport reports = 1; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QuerySupernodeReportsRequest { - string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; - cosmos.base.query.v1beta1.PageRequest pagination = 3; - bool filter_by_window_id = 4; -} - -message SupernodeReport { - string reporter_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; - int64 report_height = 3; - repeated PortState port_states = 4; -} - -message QuerySupernodeReportsResponse { - repeated SupernodeReport reports = 1; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QuerySelfReportsRequest { - string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; - uint64 window_id = 2; - cosmos.base.query.v1beta1.PageRequest pagination = 3; - bool filter_by_window_id = 4; -} - -message SelfReport { - uint64 window_id = 1; - int64 report_height = 2; - AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; -} - -message QuerySelfReportsResponse { - repeated SelfReport reports = 1; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} -``` - -## 8. On-Chain State -This section describes the minimum state persisted by the module: -- Current window state (window_id, start/end, effective window size). -- Pending next window size (optional; applied at the next boundary when present). -- `WindowSnapshot` stored per `window_id`. -- `AuditReport` stored per `(window_id, supernode_account)`. - -State growth considerations: -- State must remain bounded. The module MAY prune per-window state (`WindowSnapshot`, `AuditReport`) for any `window_id` once the acceptance period for that window has ended (section 3.2). -- Current implementation note: pruning is implemented at window end and keeps the last `keep_last_window_entries` windows of window-scoped state. - - Operational note: `keep_last_window_entries` should be >= `consecutive_windows_to_postpone` so missing-report and peer-port rules always have enough history available. - -## 9. Postponement and Recovery - -This section defines the rules used to set a supernode to `POSTPONED` (and recover to `ACTIVE`) based on audit reports. - -Important note: -- Peer-observation assignment/gating is enforced **when `MsgSubmitAuditReport` is accepted**. Enforcement later assumes only gated observations are stored. - -### 9.1 Self-report based postponement (host requirements) - -Inputs: -- `AuditSelfReport.cpu_usage_percent`, `mem_usage_percent`, `disk_usage_percent` - -Params: -- `min_cpu_free_percent` -- `min_mem_free_percent` -- `min_disk_free_percent` - -Compute free%: -- `cpu_free_percent = 100 - cpu_usage_percent` -- `mem_free_percent = 100 - mem_usage_percent` -- `disk_free_percent = 100 - disk_usage_percent` - -Unknown special case: -- If a usage% is `0`, treat that metric as unknown and do not postpone based on it. - -Rule: -- If any known free% is below its minimum, set the supernode to `POSTPONED`. - -Non-rules: -- Ignore `failed_actions_count`. -- Ignore `inbound_port_states` (self inbound traffic is not reachability). - -### 9.2 Peer-report based postponement (ports) - -Inputs: -- Peer observations for required ports (index-aligned to `required_open_ports`). - -Param: -- `consecutive_windows_to_postpone` (default `1`) - -Per window `W` and required port index `i`, “port i is closed for target T in window W” is true only if: -- there is at least **1** peer reporter about `T` in `W`, and -- **all** those peer reporters report `PORT_STATE_CLOSED` for port index `i` for `T`. - -Rule: -- If any required port index `i` is closed for `consecutive_windows_to_postpone` consecutive windows, set `T` to `POSTPONED`. - -### 9.3 Missing report based postponement - -Param: -- `consecutive_windows_to_postpone` (default `1`) - -Rule: -- If a supernode in state `ACTIVE` fails to submit any `MsgSubmitAuditReport` for `consecutive_windows_to_postpone` consecutive windows, set it to `POSTPONED`. - -### 9.4 Recovery (POSTPONED -> ACTIVE) - -Rule: -- A `POSTPONED` supernode becomes `ACTIVE` after, in a single window: - - one compliant self report (meets host requirements; treating 0 values as unknown), and - - at least **1** peer report about the target in that window where all required ports are `PORT_STATE_OPEN`. - -## 10. Out of Scope -This specification does not define economic penalties (e.g. slashing, jailing, rewards) for audit reports in its current scope. - -## 11. Events -The current implementation does not emit audit-specific events. diff --git a/app/app.go b/app/app.go index 9fce9bc..230c731 100644 --- a/app/app.go +++ b/app/app.go @@ -331,6 +331,7 @@ func (app *App) setupUpgrades() { SupernodeKeeper: app.SupernodeKeeper, ParamsKeeper: &app.ParamsKeeper, ConsensusParamsKeeper: &app.ConsensusParamsKeeper, + AuditKeeper: &app.AuditKeeper, } allUpgrades := upgrades.AllUpgrades(params) diff --git a/app/upgrades/params/params.go b/app/upgrades/params/params.go index 5c48e40..33439e9 100644 --- a/app/upgrades/params/params.go +++ b/app/upgrades/params/params.go @@ -7,6 +7,7 @@ import ( paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" actionmodulekeeper "github.com/LumeraProtocol/lumera/x/action/v1/keeper" + auditmodulekeeper "github.com/LumeraProtocol/lumera/x/audit/v1/keeper" sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" ) @@ -24,4 +25,5 @@ type AppUpgradeParams struct { SupernodeKeeper sntypes.SupernodeKeeper ParamsKeeper *paramskeeper.Keeper ConsensusParamsKeeper *consensuskeeper.Keeper + AuditKeeper *auditmodulekeeper.Keeper } diff --git a/app/upgrades/upgrades.go b/app/upgrades/upgrades.go index c95cb26..97302ed 100644 --- a/app/upgrades/upgrades.go +++ b/app/upgrades/upgrades.go @@ -13,6 +13,7 @@ import ( appParams "github.com/LumeraProtocol/lumera/app/upgrades/params" upgrade_v1_10_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_10_0" upgrade_v1_10_1 "github.com/LumeraProtocol/lumera/app/upgrades/v1_10_1" + upgrade_v1_11_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_11_0" upgrade_v1_6_1 "github.com/LumeraProtocol/lumera/app/upgrades/v1_6_1" upgrade_v1_8_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_8_0" upgrade_v1_8_4 "github.com/LumeraProtocol/lumera/app/upgrades/v1_8_4" @@ -33,6 +34,7 @@ import ( // | v1.9.1 | standard | none | Migrations only // | v1.10.0 | custom | drop crisis | Migrate consensus params from x/params to x/consensus; remove x/crisis // | v1.10.1 | custom | drop crisis (if not already) | Ensure consensus params are present in x/consensus +// | v1.11.0 | custom | add audit store | Initializes audit params with dynamic epoch_zero_height // ================================================================================================================================= type UpgradeConfig struct { @@ -60,6 +62,7 @@ var upgradeNames = []string{ upgradeNameV191, upgrade_v1_10_0.UpgradeName, upgrade_v1_10_1.UpgradeName, + upgrade_v1_11_0.UpgradeName, } var NoUpgradeConfig = UpgradeConfig{ @@ -124,6 +127,11 @@ func SetupUpgrades(upgradeName string, params appParams.AppUpgradeParams) (Upgra StoreUpgrade: &upgrade_v1_10_1.StoreUpgrades, Handler: upgrade_v1_10_1.CreateUpgradeHandler(params), }, true + case upgrade_v1_11_0.UpgradeName: + return UpgradeConfig{ + StoreUpgrade: &upgrade_v1_11_0.StoreUpgrades, + Handler: upgrade_v1_11_0.CreateUpgradeHandler(params), + }, true // add future upgrades here default: diff --git a/app/upgrades/upgrades_test.go b/app/upgrades/upgrades_test.go index 81235a2..22940fb 100644 --- a/app/upgrades/upgrades_test.go +++ b/app/upgrades/upgrades_test.go @@ -13,6 +13,7 @@ import ( appParams "github.com/LumeraProtocol/lumera/app/upgrades/params" upgrade_v1_10_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_10_0" upgrade_v1_10_1 "github.com/LumeraProtocol/lumera/app/upgrades/v1_10_1" + upgrade_v1_11_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_11_0" upgrade_v1_6_1 "github.com/LumeraProtocol/lumera/app/upgrades/v1_6_1" upgrade_v1_8_0 "github.com/LumeraProtocol/lumera/app/upgrades/v1_8_0" upgrade_v1_8_4 "github.com/LumeraProtocol/lumera/app/upgrades/v1_8_4" @@ -33,6 +34,7 @@ func TestUpgradeNamesOrder(t *testing.T) { upgradeNameV191, upgrade_v1_10_0.UpgradeName, upgrade_v1_10_1.UpgradeName, + upgrade_v1_11_0.UpgradeName, } require.Equal(t, expected, upgradeNames, "upgradeNames should stay in ascending order") } @@ -76,9 +78,9 @@ func TestSetupUpgradesAndHandlers(t *testing.T) { continue } - // v1.9.0 requires full keeper wiring; exercising it here would require + // v1.9.0 and v1.11.0 require full keeper wiring; exercising them here would require // a full app harness. This test only verifies registration and gating. - if upgradeName == upgrade_v1_9_0.UpgradeName || upgradeName == upgrade_v1_10_0.UpgradeName || upgradeName == upgrade_v1_10_1.UpgradeName { + if upgradeName == upgrade_v1_9_0.UpgradeName || upgradeName == upgrade_v1_10_0.UpgradeName || upgradeName == upgrade_v1_10_1.UpgradeName || upgradeName == upgrade_v1_11_0.UpgradeName { continue } @@ -124,6 +126,7 @@ func expectStoreUpgrade(upgradeName, chainID string) bool { case upgrade_v1_10_0.UpgradeName: return true case upgrade_v1_10_1.UpgradeName: + case upgrade_v1_11_0.UpgradeName: return true default: return false diff --git a/app/upgrades/v1_11_0/upgrade.go b/app/upgrades/v1_11_0/upgrade.go new file mode 100644 index 0000000..f7472d1 --- /dev/null +++ b/app/upgrades/v1_11_0/upgrade.go @@ -0,0 +1,92 @@ +package v1_11_0 + +import ( + "context" + "fmt" + + storetypes "cosmossdk.io/store/types" + upgradetypes "cosmossdk.io/x/upgrade/types" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + appParams "github.com/LumeraProtocol/lumera/app/upgrades/params" + audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +// Storage challenge feature toggle at activation time. +// +// This is set exactly once during the upgrade; thereafter, params are governed by MsgUpdateParams. +// All other parameter defaults are owned by the audit module (types.DefaultParams()). +const auditScEnabled = true + +// UpgradeName is the on-chain name used for this upgrade. +const UpgradeName = "v1.11.0" + +// StoreUpgrades declares store additions/deletions for this upgrade. +// +// Audit is introduced for the first time on-chain, so its KV store must be added. +var StoreUpgrades = storetypes.StoreUpgrades{ + Added: []string{ + audittypes.StoreKey, // "audit" + }, +} + +// CreateUpgradeHandler creates an upgrade handler for v1.11.0. +// +// This upgrade introduces the audit module and initializes its params in a way +// that requires no hard-coded epoch_zero_height for existing networks: +// - epoch_zero_height is set to the upgrade block height (the first block the +// new binary processes). +// - epoch_length_blocks remains its default unless governance later changes it +// (epoch cadence fields are immutable after initialization). +func CreateUpgradeHandler(p appParams.AppUpgradeParams) upgradetypes.UpgradeHandler { + return func(goCtx context.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + p.Logger.Info(fmt.Sprintf("Starting upgrade %s...", UpgradeName)) + + ctx := sdk.UnwrapSDKContext(goCtx) + + p.Logger.Info("Running module migrations...") + newVM, err := p.ModuleManager.RunMigrations(ctx, p.Configurator, fromVM) + if err != nil { + p.Logger.Error("Failed to run migrations", "error", err) + return nil, fmt.Errorf("failed to run migrations: %w", err) + } + p.Logger.Info("Module migrations completed.") + + if p.AuditKeeper == nil { + return nil, fmt.Errorf("%s upgrade requires audit keeper to be wired", UpgradeName) + } + + // Initialize audit genesis state with an automatically chosen epoch_zero_height. + // Using the current block height ensures that the audit BeginBlocker will create + // the epoch-0 anchor immediately at the epoch start height. + gs := audittypes.DefaultGenesis() + params := gs.Params.WithDefaults() + + // For an already-running chain, epoch zero must be chosen dynamically at the upgrade height. + // This is set exactly once here; thereafter it is immutable. + params.EpochZeroHeight = uint64(ctx.BlockHeight()) + + // Feature gate for SC evidence validation/acceptance. + params.ScEnabled = auditScEnabled + + gs.Params = params + + if err := p.AuditKeeper.InitGenesis(ctx, *gs); err != nil { + return nil, fmt.Errorf("init audit module: %w", err) + } + + // Create epoch-0 anchor immediately, so audit reporting can begin in the same upgrade block + // without depending on BeginBlock ordering assumptions. + epochID := uint64(0) + epochStart := ctx.BlockHeight() + epochEnd := epochStart + int64(params.EpochLengthBlocks) - 1 + if err := p.AuditKeeper.CreateEpochAnchorIfNeeded(ctx, epochID, epochStart, epochEnd, params); err != nil { + return nil, fmt.Errorf("create audit epoch anchor: %w", err) + } + + p.Logger.Info(fmt.Sprintf("Successfully completed upgrade %s", UpgradeName)) + return newVM, nil + } +} diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index 3d1df14..6d45f50 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1 +1 @@ -{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}":{"get":{"tags":["Query"],"summary":"AssignedTargets returns the prober -\u003e targets assignment for a given supernode_account.\nIf filter_by_epoch_id is false, it returns the assignments for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_AssignedTargets","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAssignedTargetsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_report/{epoch_id}/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReport","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"operationId":"GithubComLumeraProtocollumeraQuery_AuditReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAuditReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch":{"get":{"tags":["Query"],"summary":"CurrentEpoch returns the current derived epoch boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpoch","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch_anchor":{"get":{"tags":["Query"],"summary":"CurrentEpochAnchor returns the persisted epoch anchor for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpochAnchor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_anchor/{epoch_id}":{"get":{"tags":["Query"],"summary":"EpochAnchor returns the persisted epoch anchor for the given epoch_id.","operationId":"GithubComLumeraProtocollumeraQuery_EpochAnchor","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_action/{action_id}":{"get":{"tags":["Query"],"summary":"EvidenceByAction queries evidence records by action id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceByAction","parameters":[{"type":"string","name":"action_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_subject/{subject_address}":{"get":{"tags":["Query"],"summary":"EvidenceBySubject queries evidence records by subject address.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceBySubject","parameters":[{"type":"string","name":"subject_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceBySubjectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/{evidence_id}":{"get":{"tags":["Query"],"summary":"EvidenceById queries a single evidence record by id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceById","parameters":[{"type":"string","format":"uint64","name":"evidence_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByIdResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin14","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SelfReports returns self-reports submitted by the given supernode_account across epochs.","operationId":"GithubComLumeraProtocollumeraQuery_SelfReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySelfReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"SupernodeReports returns all reports that include observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_SupernodeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QuerySupernodeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin19","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin24","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin32","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the x/auth module\nparameters. The authority defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","operationId":"UpgradeMsg_Exec","parameters":[{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Grant":{"post":{"tags":["Msg"],"summary":"Grant grants the provided authorization to the grantee on the granter's\naccount with the provided expiration time. If there is already a grant\nfor the given (granter, grantee, Authorization) triple, then the grant\nwill be overwritten.","operationId":"UpgradeMsg_Grant","parameters":[{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Revoke":{"post":{"tags":["Msg"],"summary":"Revoke revokes any authorization corresponding to the provided method name on the\ngranter's account that has been granted to the grantee.","operationId":"UpgradeMsg_Revoke","parameters":[{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.autocli.v1.Query/AppOptions":{"post":{"tags":["Query"],"summary":"AppOptions returns the autocli options for all of the modules in an app.","operationId":"UpgradeQuery_AppOptions","parameters":[{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/MultiSend":{"post":{"tags":["Msg"],"summary":"MultiSend defines a method for sending coins from some accounts to other accounts.","operationId":"UpgradeMsg_MultiSend","parameters":[{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method for sending coins from one account to another account.","operationId":"UpgradeMsg_Send","parameters":[{"description":"MsgSend represents a message to send coins from one account to another.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/SetSendEnabled":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"SetSendEnabled is a governance operation for setting the SendEnabled flag\non any number of Denoms. Only the entries to add or update should be\nincluded. Entries that already exist in the store, but that aren't\nincluded in this message, will be left unchanged.","operationId":"UpgradeMsg_SetSendEnabled","parameters":[{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabled"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin53","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/AuthorizeCircuitBreaker":{"post":{"tags":["Msg"],"summary":"AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another\naccount's circuit breaker permissions.","operationId":"UpgradeMsg_AuthorizeCircuitBreaker","parameters":[{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/ResetCircuitBreaker":{"post":{"tags":["Msg"],"summary":"ResetCircuitBreaker resumes processing of Msg's in the state machine that\nhave been been paused using TripCircuitBreaker.","operationId":"UpgradeMsg_ResetCircuitBreaker","parameters":[{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/TripCircuitBreaker":{"post":{"tags":["Msg"],"summary":"TripCircuitBreaker pauses processing of Msg's in the state machine.","operationId":"UpgradeMsg_TripCircuitBreaker","parameters":[{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.consensus.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin66","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin68","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/VerifyInvariant":{"post":{"tags":["Msg"],"summary":"VerifyInvariant defines a method to verify a particular invariant.","operationId":"UpgradeMsg_VerifyInvariant","parameters":[{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/distribution module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"UpgradeMsg_CommunityPoolSpend","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/DepositValidatorRewardsPool":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"UpgradeMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"UpgradeMsg_FundCommunityPool","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress":{"post":{"tags":["Msg"],"summary":"SetWithdrawAddress defines a method to change the withdraw address\nfor a delegator (or validator self-delegation).","operationId":"UpgradeMsg_SetWithdrawAddress","parameters":[{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin79","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward":{"post":{"tags":["Msg"],"summary":"WithdrawDelegatorReward defines a method to withdraw rewards of delegator\nfrom a single validator.","operationId":"UpgradeMsg_WithdrawDelegatorReward","parameters":[{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission":{"post":{"tags":["Msg"],"summary":"WithdrawValidatorCommission defines a method to withdraw the\nfull commission to the validator address.","operationId":"UpgradeMsg_WithdrawValidatorCommission","parameters":[{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evidence.v1beta1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or\ncounterfactual signing.","operationId":"UpgradeMsg_SubmitEvidence","parameters":[{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/GrantAllowance":{"post":{"tags":["Msg"],"summary":"GrantAllowance grants fee allowance to the grantee on the granter's\naccount with the provided expiration time.","operationId":"UpgradeMsg_GrantAllowance","parameters":[{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/PruneAllowances":{"post":{"description":"Since cosmos-sdk 0.50","tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"UpgradeMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowances"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/RevokeAllowance":{"post":{"tags":["Msg"],"summary":"RevokeAllowance revokes any fee allowance of granter's account that\nhas been granted to the grantee.","operationId":"UpgradeMsg_RevokeAllowance","parameters":[{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/CancelProposal":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"UpgradeMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"UpgradeMsg_Deposit","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/ExecLegacyContent":{"post":{"tags":["Msg"],"summary":"ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal\nto execute a legacy content-based proposal.","operationId":"UpgradeMsg_ExecLegacyContent","parameters":[{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContent"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given the messages.","operationId":"UpgradeMsg_SubmitProposal","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin92","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"UpgradeMsg_Vote","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"UpgradeMsg_VoteWeighted","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"UpgradeMsg_DepositMixin96","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given a content.","operationId":"UpgradeMsg_SubmitProposalMixin96","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"UpgradeMsg_VoteMixin96","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/VoteWeighted":{"post":{"description":"Since: cosmos-sdk 0.43","tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"UpgradeMsg_VoteWeightedMixin96","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroup":{"post":{"tags":["Msg"],"summary":"CreateGroup creates a new group with an admin account address, a list of members and some optional metadata.","operationId":"UpgradeMsg_CreateGroup","parameters":[{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupPolicy creates a new group policy using given DecisionPolicy.","operationId":"UpgradeMsg_CreateGroupPolicy","parameters":[{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupWithPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupWithPolicy creates a new group with policy.","operationId":"UpgradeMsg_CreateGroupWithPolicy","parameters":[{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec executes a proposal.","operationId":"UpgradeMsg_ExecMixin100","parameters":[{"description":"MsgExec is the Msg/Exec request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/LeaveGroup":{"post":{"tags":["Msg"],"summary":"LeaveGroup allows a group member to leave the group.","operationId":"UpgradeMsg_LeaveGroup","parameters":[{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal submits a new proposal.","operationId":"UpgradeMsg_SubmitProposalMixin100","parameters":[{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupAdmin updates the group admin with given group id and previous admin address.","operationId":"UpgradeMsg_UpdateGroupAdmin","parameters":[{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMembers":{"post":{"tags":["Msg"],"summary":"UpdateGroupMembers updates the group members with given group id and admin address.","operationId":"UpgradeMsg_UpdateGroupMembers","parameters":[{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembers"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupMetadata updates the group metadata with given group id and admin address.","operationId":"UpgradeMsg_UpdateGroupMetadata","parameters":[{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyAdmin updates a group policy admin.","operationId":"UpgradeMsg_UpdateGroupPolicyAdmin","parameters":[{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyDecisionPolicy":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated.","operationId":"UpgradeMsg_UpdateGroupPolicyDecisionPolicy","parameters":[{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyMetadata updates a group policy metadata.","operationId":"UpgradeMsg_UpdateGroupPolicyMetadata","parameters":[{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote allows a voter to vote on a proposal.","operationId":"UpgradeMsg_VoteMixin100","parameters":[{"description":"MsgVote is the Msg/Vote request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/WithdrawProposal":{"post":{"tags":["Msg"],"summary":"WithdrawProposal withdraws a proposal.","operationId":"UpgradeMsg_WithdrawProposal","parameters":[{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.mint.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/mint module\nparameters. The authority is defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParamsMixin105","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.nft.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method to send a nft from one account to another account.","operationId":"UpgradeMsg_SendMixin111","parameters":[{"description":"MsgSend represents a message to send a nft from one account to another account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/Unjail":{"post":{"tags":["Msg"],"summary":"Unjail defines a method for unjailing a jailed validator, thus returning\nthem into the bonded validator set, so they can begin receiving provisions\nand rewards again.","operationId":"UpgradeMsg_Unjail","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjail"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjailResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/slashing module\nparameters. The authority defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParamsMixin118","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/BeginRedelegate":{"post":{"tags":["Msg"],"summary":"BeginRedelegate defines a method for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","operationId":"UpgradeMsg_BeginRedelegate","parameters":[{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"UpgradeMsg_CancelUnbondingDelegation","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegation"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CreateValidator":{"post":{"tags":["Msg"],"summary":"CreateValidator defines a method for creating a new validator.","operationId":"UpgradeMsg_CreateValidator","parameters":[{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Delegate":{"post":{"tags":["Msg"],"summary":"Delegate defines a method for performing a delegation of coins\nfrom a delegator to a validator.","operationId":"UpgradeMsg_Delegate","parameters":[{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/EditValidator":{"post":{"tags":["Msg"],"summary":"EditValidator defines a method for editing an existing validator.","operationId":"UpgradeMsg_EditValidator","parameters":[{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Undelegate":{"post":{"tags":["Msg"],"summary":"Undelegate defines a method for performing an undelegation from a\ndelegate and a validator.","operationId":"UpgradeMsg_Undelegate","parameters":[{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines an operation for updating the x/staking module\nparameters.\nSince: cosmos-sdk 0.47","operationId":"UpgradeMsg_UpdateParamsMixin123","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenCommit":{"post":{"tags":["ABCIListenerService"],"summary":"ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit","operationId":"UpgradeABCIListenerService_ListenCommit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenFinalizeBlock":{"post":{"tags":["ABCIListenerService"],"summary":"ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock","operationId":"UpgradeABCIListenerService_ListenFinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/CancelUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"UpgradeMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"UpgradeMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"UpgradeMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"UpgradeMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreateVestingAccount":{"post":{"tags":["Msg"],"summary":"CreateVestingAccount defines a method that enables creating a vesting\naccount.","operationId":"UpgradeMsg_CreateVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/account_info/{address}":{"get":{"description":"Since: cosmos-sdk 0.47","tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"UpgradeQuery_AccountInfo","parameters":[{"type":"string","description":"address is the account address string.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.43","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"UpgradeQuery_Accounts","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account details based on address.","operationId":"UpgradeQuery_Account","parameters":[{"type":"string","description":"address defines the address to query for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/address_by_id/{id}":{"get":{"description":"Since: cosmos-sdk 0.46.2","tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"UpgradeQuery_AccountAddressByID","parameters":[{"type":"string","format":"int64","description":"Deprecated, use account_id instead\n\nid is the account number of the address to be queried. This field\nshould have been an uint64 (like all account numbers), and will be\nupdated to uint64 in a future version of the auth query.","name":"id","in":"path","required":true},{"type":"string","format":"uint64","description":"account_id is the account number of the address to be queried.\n\nSince: cosmos-sdk 0.47","name":"account_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountAddressByIDResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"UpgradeQuery_Bech32Prefix","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.Bech32PrefixResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_bytes}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"UpgradeQuery_AddressBytesToString","parameters":[{"type":"string","format":"byte","name":"address_bytes","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressBytesToStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_string}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"UpgradeQuery_AddressStringToBytes","parameters":[{"type":"string","name":"address_string","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressStringToBytesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"UpgradeQuery_ModuleAccounts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts/{name}":{"get":{"tags":["Query"],"summary":"ModuleAccountByName returns the module account info by module name","operationId":"UpgradeQuery_ModuleAccountByName","parameters":[{"type":"string","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountByNameResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters.","operationId":"UpgradeQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants":{"get":{"tags":["Query"],"summary":"Returns list of `Authorization`, granted to the grantee by the granter.","operationId":"UpgradeQuery_Grants","parameters":[{"type":"string","name":"granter","in":"query"},{"type":"string","name":"grantee","in":"query"},{"type":"string","description":"Optional, msg_type_url, when set, will query only grants matching given msg type.","name":"msg_type_url","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/grantee/{grantee}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"UpgradeQuery_GranteeGrants","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranteeGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/granter/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"UpgradeQuery_GranterGrants","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranterGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"AllBalances queries the balance of all coins for a single account.","operationId":"UpgradeQuery_AllBalances","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"boolean","description":"resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.\n\nSince: cosmos-sdk 0.50","name":"resolve_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryAllBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}/by_denom":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a single coin for a single account.","operationId":"UpgradeQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners/{denom}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"UpgradeQuery_DenomOwners","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners_by_query":{"get":{"description":"Since: cosmos-sdk 0.50.3","tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"UpgradeQuery_DenomOwnersByQuery","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata":{"get":{"tags":["Query"],"summary":"DenomsMetadata queries the client metadata for all registered coin\ndenominations.","operationId":"UpgradeQuery_DenomsMetadata","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomsMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata/{denom}":{"get":{"tags":["Query"],"summary":"DenomMetadata queries the client metadata of a given coin denomination.","operationId":"UpgradeQuery_DenomMetadata","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata_by_query_string":{"get":{"tags":["Query"],"summary":"DenomMetadataByQueryString queries the client metadata of a given coin denomination.","operationId":"UpgradeQuery_DenomMetadataByQueryString","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/bank module.","operationId":"UpgradeQuery_ParamsMixin52","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/send_enabled":{"get":{"description":"This query only returns denominations that have specific SendEnabled settings.\nAny denomination that does not have a specific setting will use the default\nparams.default_send_enabled, and will not be returned by this query.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"UpgradeQuery_SendEnabled","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"denoms is the specific denoms you want look up. Leave empty to get all entries.","name":"denoms","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"UpgradeQuery_SpendableBalances","parameters":[{"type":"string","description":"address is the address to query spendable balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"UpgradeQuery_SpendableBalanceByDenom","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"TotalSupply queries the total supply of all coins.","operationId":"UpgradeQuery_TotalSupply","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryTotalSupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SupplyOf queries the supply of a single coin.","operationId":"UpgradeQuery_SupplyOf","parameters":[{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySupplyOfResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/config":{"get":{"tags":["Service"],"summary":"Config queries for the operator configuration.","operationId":"UpgradeService_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.ConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/status":{"get":{"tags":["Service"],"summary":"Status queries for the node status.","operationId":"UpgradeService_Status","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.StatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/authn":{"get":{"tags":["ReflectionService"],"summary":"GetAuthnDescriptor returns information on how to authenticate transactions in the application\nNOTE: this RPC is still experimental and might be subject to breaking changes or removal in\nfuture releases of the cosmos-sdk.","operationId":"UpgradeReflectionService_GetAuthnDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/chain":{"get":{"tags":["ReflectionService"],"summary":"GetChainDescriptor returns the description of the chain","operationId":"UpgradeReflectionService_GetChainDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/codec":{"get":{"tags":["ReflectionService"],"summary":"GetCodecDescriptor returns the descriptor of the codec of the application","operationId":"UpgradeReflectionService_GetCodecDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/configuration":{"get":{"tags":["ReflectionService"],"summary":"GetConfigurationDescriptor returns the descriptor for the sdk.Config of the application","operationId":"UpgradeReflectionService_GetConfigurationDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/query_services":{"get":{"tags":["ReflectionService"],"summary":"GetQueryServicesDescriptor returns the available gRPC queryable services of the application","operationId":"UpgradeReflectionService_GetQueryServicesDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/tx_descriptor":{"get":{"tags":["ReflectionService"],"summary":"GetTxDescriptor returns information on the used transaction object and available msgs that can be used","operationId":"UpgradeReflectionService_GetTxDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces":{"get":{"tags":["ReflectionService"],"summary":"ListAllInterfaces lists all the interfaces registered in the interface\nregistry.","operationId":"UpgradeReflectionService_ListAllInterfaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListAllInterfacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces/{interface_name}/implementations":{"get":{"tags":["ReflectionService"],"summary":"ListImplementations list all the concrete types that implement a given\ninterface.","operationId":"UpgradeReflectionService_ListImplementations","parameters":[{"type":"string","description":"interface_name defines the interface to query the implementations for.","name":"interface_name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListImplementationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/abci_query":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Service"],"summary":"ABCIQuery defines a query handler that supports ABCI queries directly to the\napplication, bypassing Tendermint completely. The ABCI query must contain\na valid and supported path, including app, custom, p2p, and store.","operationId":"UpgradeService_ABCIQuery","parameters":[{"type":"string","format":"byte","name":"data","in":"query"},{"type":"string","name":"path","in":"query"},{"type":"string","format":"int64","name":"height","in":"query"},{"type":"boolean","name":"prove","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ABCIQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/latest":{"get":{"tags":["Service"],"summary":"GetLatestBlock returns the latest block.","operationId":"UpgradeService_GetLatestBlock","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/{height}":{"get":{"tags":["Service"],"summary":"GetBlockByHeight queries block for given height.","operationId":"UpgradeService_GetBlockByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/node_info":{"get":{"tags":["Service"],"summary":"GetNodeInfo queries the current node info.","operationId":"UpgradeService_GetNodeInfo","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetNodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/syncing":{"get":{"tags":["Service"],"summary":"GetSyncing queries node syncing.","operationId":"UpgradeService_GetSyncing","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetSyncingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/latest":{"get":{"tags":["Service"],"summary":"GetLatestValidatorSet queries latest validator-set.","operationId":"UpgradeService_GetLatestValidatorSet","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/{height}":{"get":{"tags":["Service"],"summary":"GetValidatorSetByHeight queries validator-set at a given height.","operationId":"UpgradeService_GetValidatorSetByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"UpgradeQuery_AccountsMixin62","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"UpgradeQuery_AccountMixin62","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/disable_list":{"get":{"tags":["Query"],"summary":"DisabledList returns a list of disabled message urls","operationId":"UpgradeQuery_DisabledList","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.DisabledListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/consensus/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/consensus module.","operationId":"UpgradeQuery_ParamsMixin65","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"UpgradeQuery_CommunityPool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards":{"get":{"tags":["Query"],"summary":"DelegationTotalRewards queries the total rewards accrued by each\nvalidator.","operationId":"UpgradeQuery_DelegationTotalRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}":{"get":{"tags":["Query"],"summary":"DelegationRewards queries the total rewards accrued by a delegation.","operationId":"UpgradeQuery_DelegationRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true},{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators":{"get":{"tags":["Query"],"summary":"DelegatorValidators queries the validators of a delegator.","operationId":"UpgradeQuery_DelegatorValidators","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address":{"get":{"tags":["Query"],"summary":"DelegatorWithdrawAddress queries withdraw address of a delegator.","operationId":"UpgradeQuery_DelegatorWithdrawAddress","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries params of the distribution module.","operationId":"UpgradeQuery_ParamsMixin78","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}":{"get":{"tags":["Query"],"summary":"ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator","operationId":"UpgradeQuery_ValidatorDistributionInfo","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/commission":{"get":{"tags":["Query"],"summary":"ValidatorCommission queries accumulated commission for a validator.","operationId":"UpgradeQuery_ValidatorCommission","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards":{"get":{"tags":["Query"],"summary":"ValidatorOutstandingRewards queries rewards of a validator address.","operationId":"UpgradeQuery_ValidatorOutstandingRewards","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes":{"get":{"tags":["Query"],"summary":"ValidatorSlashes queries slash events of a validator.","operationId":"UpgradeQuery_ValidatorSlashes","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true},{"type":"string","format":"uint64","description":"starting_height defines the optional starting height to query the slashes.","name":"starting_height","in":"query"},{"type":"string","format":"uint64","description":"starting_height defines the optional ending height to query the slashes.","name":"ending_height","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorSlashesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence":{"get":{"tags":["Query"],"summary":"AllEvidence queries all evidence.","operationId":"UpgradeQuery_AllEvidence","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryAllEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence/{hash}":{"get":{"tags":["Query"],"summary":"Evidence queries evidence based on evidence hash.","operationId":"UpgradeQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.\n\nSince: cosmos-sdk 0.47","name":"hash","in":"path","required":true},{"type":"string","format":"byte","description":"evidence_hash defines the hash of the requested evidence.\nDeprecated: Use hash, a HEX encoded string, instead.","name":"evidence_hash","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}":{"get":{"tags":["Query"],"summary":"Allowance returns granted allwance to the grantee by the granter.","operationId":"UpgradeQuery_Allowance","parameters":[{"type":"string","description":"granter is the address of the user granting an allowance of their funds.","name":"granter","in":"path","required":true},{"type":"string","description":"grantee is the address of the user being granted an allowance of another user's funds.","name":"grantee","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowances/{grantee}":{"get":{"tags":["Query"],"summary":"Allowances returns all the grants for the given grantee address.","operationId":"UpgradeQuery_Allowances","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/issued/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"UpgradeQuery_AllowancesByGranter","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/constitution":{"get":{"tags":["Query"],"summary":"Constitution queries the chain's constitution.","operationId":"UpgradeQuery_Constitution","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryConstitutionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"UpgradeQuery_ParamsMixin91","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"UpgradeQuery_Proposals","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"UpgradeQuery_Proposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"UpgradeQuery_Deposits","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositAddr.","operationId":"UpgradeQuery_Deposit","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"UpgradeQuery_TallyResult","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"UpgradeQuery_Votes","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"UpgradeQuery_Vote","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"UpgradeQuery_ParamsMixin95","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"UpgradeQuery_ProposalsMixin95","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"UpgradeQuery_ProposalMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"UpgradeQuery_DepositsMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositor address.","operationId":"UpgradeQuery_DepositMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"UpgradeQuery_TallyResultMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"UpgradeQuery_VotesMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"UpgradeQuery_VoteMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_info/{group_id}":{"get":{"tags":["Query"],"summary":"GroupInfo queries group info based on group id.","operationId":"UpgradeQuery_GroupInfo","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_members/{group_id}":{"get":{"tags":["Query"],"summary":"GroupMembers queries members of a group by group id.","operationId":"UpgradeQuery_GroupMembers","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByAdmin queries group policies by admin address.","operationId":"UpgradeQuery_GroupPoliciesByAdmin","parameters":[{"type":"string","description":"admin is the admin address of the group policy.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_group/{group_id}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByGroup queries group policies by group id.","operationId":"UpgradeQuery_GroupPoliciesByGroup","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group policy's group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policy_info/{address}":{"get":{"tags":["Query"],"summary":"GroupPolicyInfo queries group policy info based on account address of group policy.","operationId":"UpgradeQuery_GroupPolicyInfo","parameters":[{"type":"string","description":"address is the account address of the group policy.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPolicyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups":{"get":{"description":"Since: cosmos-sdk 0.47.1","tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"UpgradeQuery_Groups","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupsByAdmin queries groups by admin address.","operationId":"UpgradeQuery_GroupsByAdmin","parameters":[{"type":"string","description":"admin is the account address of a group's admin.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_member/{address}":{"get":{"tags":["Query"],"summary":"GroupsByMember queries groups by member address.","operationId":"UpgradeQuery_GroupsByMember","parameters":[{"type":"string","description":"address is the group member address.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByMemberResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries a proposal based on proposal id.","operationId":"UpgradeQuery_ProposalMixin99","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult returns the tally result of a proposal. If the proposal is\nstill in voting period, then this query computes the current tally state,\nwhich might not be final. On the other hand, if the proposal is final,\nthen it simply returns the `final_tally_result` state stored in the\nproposal itself.","operationId":"UpgradeQuery_TallyResultMixin99","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique id of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals_by_group_policy/{address}":{"get":{"tags":["Query"],"summary":"ProposalsByGroupPolicy queries proposals based on account address of group policy.","operationId":"UpgradeQuery_ProposalsByGroupPolicy","parameters":[{"type":"string","description":"address is the account address of the group policy related to proposals.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalsByGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}":{"get":{"tags":["Query"],"summary":"VoteByProposalVoter queries a vote by proposal id and voter.","operationId":"UpgradeQuery_VoteByProposalVoter","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVoteByProposalVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"VotesByProposal queries a vote by proposal id.","operationId":"UpgradeQuery_VotesByProposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_voter/{voter}":{"get":{"tags":["Query"],"summary":"VotesByVoter queries a vote by voter.","operationId":"UpgradeQuery_VotesByVoter","parameters":[{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/annual_provisions":{"get":{"tags":["Query"],"summary":"AnnualProvisions current minting annual provisions value.","operationId":"UpgradeQuery_AnnualProvisions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryAnnualProvisionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/inflation":{"get":{"tags":["Query"],"summary":"Inflation returns the current minting inflation value.","operationId":"UpgradeQuery_Inflation","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryInflationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of minting parameters.","operationId":"UpgradeQuery_ParamsMixin104","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/balance/{owner}/{class_id}":{"get":{"tags":["Query"],"summary":"Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721","operationId":"UpgradeQuery_BalanceMixin110","parameters":[{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"path","required":true},{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes":{"get":{"tags":["Query"],"summary":"Classes queries all NFT classes","operationId":"UpgradeQuery_Classes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes/{class_id}":{"get":{"tags":["Query"],"summary":"Class queries an NFT class based on its id","operationId":"UpgradeQuery_Class","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts":{"get":{"tags":["Query"],"summary":"NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in\nERC721Enumerable","operationId":"UpgradeQuery_NFTs","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"query"},{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"NFT queries an NFT based on its class and id.","operationId":"UpgradeQuery_NFT","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/owner/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721","operationId":"UpgradeQuery_Owner","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryOwnerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/supply/{class_id}":{"get":{"tags":["Query"],"summary":"Supply queries the number of NFTs from the given class, same as totalSupply of ERC721.","operationId":"UpgradeQuery_Supply","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QuerySupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries a specific parameter of a module, given its subspace and\nkey.","operationId":"UpgradeQuery_ParamsMixin113","parameters":[{"type":"string","description":"subspace defines the module to query the parameter for.","name":"subspace","in":"query"},{"type":"string","description":"key defines the key of the parameter in the subspace.","name":"key","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/subspaces":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"UpgradeQuery_Subspaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QuerySubspacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of slashing module","operationId":"UpgradeQuery_ParamsMixin116","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos":{"get":{"tags":["Query"],"summary":"SigningInfos queries signing info of all validators","operationId":"UpgradeQuery_SigningInfos","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos/{cons_address}":{"get":{"tags":["Query"],"summary":"SigningInfo queries the signing info of given cons address","operationId":"UpgradeQuery_SigningInfo","parameters":[{"type":"string","description":"cons_address is the address to query signing info of","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegations/{delegator_addr}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorDelegations queries all delegations of a given delegator address.","operationId":"UpgradeQuery_DelegatorDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Redelegations queries redelegations of given address.","operationId":"UpgradeQuery_Redelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"src_validator_addr defines the validator address to redelegate from.","name":"src_validator_addr","in":"query"},{"type":"string","description":"dst_validator_addr defines the validator address to redelegate to.","name":"dst_validator_addr","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryRedelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorUnbondingDelegations queries all unbonding delegations of a given\ndelegator address.","operationId":"UpgradeQuery_DelegatorUnbondingDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorValidators queries all validators info for given delegator\naddress.","operationId":"UpgradeQuery_DelegatorValidatorsMixin121","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"DelegatorValidator queries validator info for given delegator validator\npair.","operationId":"UpgradeQuery_DelegatorValidator","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/historical_info/{height}":{"get":{"tags":["Query"],"summary":"HistoricalInfo queries the historical info for given height.","operationId":"UpgradeQuery_HistoricalInfo","parameters":[{"type":"string","format":"int64","description":"height defines at which height to query the historical info.","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryHistoricalInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the staking parameters.","operationId":"UpgradeQuery_ParamsMixin121","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/pool":{"get":{"tags":["Query"],"summary":"Pool queries the pool info.","operationId":"UpgradeQuery_Pool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Validators queries all validators that match the given status.","operationId":"UpgradeQuery_Validators","parameters":[{"type":"string","description":"status enables to query for validators matching a given status.","name":"status","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"Validator queries validator info for given validator address.","operationId":"UpgradeQuery_Validator","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorDelegations queries delegate info for given validator.","operationId":"UpgradeQuery_ValidatorDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}":{"get":{"tags":["Query"],"summary":"Delegation queries delegate info for given validator delegator pair.","operationId":"UpgradeQuery_Delegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation":{"get":{"tags":["Query"],"summary":"UnbondingDelegation queries unbonding info for given validator delegator\npair.","operationId":"UpgradeQuery_UnbondingDelegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorUnbondingDelegations queries unbonding delegations of a validator.","operationId":"UpgradeQuery_ValidatorUnbondingDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"UpgradeService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"UpgradeService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"UpgradeService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"UpgradeService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/simulate":{"post":{"tags":["Service"],"summary":"Simulate simulates executing a transaction for estimating gas usage.","operationId":"UpgradeService_Simulate","parameters":[{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs":{"get":{"tags":["Service"],"summary":"GetTxsEvent fetches txs by event.","operationId":"UpgradeService_GetTxsEvent","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"events is the list of transaction event type.\nDeprecated post v0.47.x: use query instead, which should contain a valid\nevents query.","name":"events","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"],"type":"string","default":"ORDER_BY_UNSPECIFIED","description":" - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","name":"order_by","in":"query"},{"type":"string","format":"uint64","description":"page is the page number to query, starts at 1. If not provided, will\ndefault to first page.","name":"page","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"limit","in":"query"},{"type":"string","description":"query defines the transaction event query that is proxied to Tendermint's\nTxSearch RPC method. The query must be valid.\n\nSince cosmos-sdk 0.50","name":"query","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}},"post":{"tags":["Service"],"summary":"BroadcastTx broadcast transaction.","operationId":"UpgradeService_BroadcastTx","parameters":[{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/block/{height}":{"get":{"description":"Since: cosmos-sdk 0.45.2","tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"UpgradeService_GetBlockWithTxs","parameters":[{"type":"string","format":"int64","description":"height is the height of the block to query.","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetBlockWithTxsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/{hash}":{"get":{"tags":["Service"],"summary":"GetTx fetches a tx by hash.","operationId":"UpgradeService_GetTx","parameters":[{"type":"string","description":"hash is the tx hash to query, encoded as a hex string.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/applied_plan/{name}":{"get":{"tags":["Query"],"summary":"AppliedPlan queries a previously applied upgrade plan by its name.","operationId":"UpgradeQuery_AppliedPlan","parameters":[{"type":"string","description":"name is the name of the applied plan to query for.","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAppliedPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/authority":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"UpgradeQuery_Authority","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAuthorityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/current_plan":{"get":{"tags":["Query"],"summary":"CurrentPlan queries the current upgrade plan.","operationId":"UpgradeQuery_CurrentPlan","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryCurrentPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/module_versions":{"get":{"description":"Since: cosmos-sdk 0.43","tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"UpgradeQuery_ModuleVersions","parameters":[{"type":"string","description":"module_name is a field to query a specific module\nconsensus version from state. Leaving this empty will\nfetch the full list of module versions from state","name":"module_name","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryModuleVersionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries the consensus state that will serve\nas a trusted kernel for the next version of this chain. It will only be\nstored at the last height of this chain.\nUpgradedConsensusState RPC not supported with legacy querier\nThis rpc is deprecated now that IBC has its own replacement\n(https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)","operationId":"UpgradeQuery_UpgradedConsensusState","parameters":[{"type":"string","format":"int64","description":"last height of the current chain must be sent in request\nas this is the height under which next consensus state is stored","name":"last_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/AddCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"AddCodeUploadParamsAddresses defines a governance operation for\nadding addresses to code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_AddCodeUploadParamsAddresses","parameters":[{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ClearAdmin":{"post":{"tags":["Msg"],"summary":"ClearAdmin removes any admin stored for a smart contract","operationId":"WasmMsg_ClearAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ExecuteContract":{"post":{"tags":["Msg"],"summary":"Execute submits the given message data to a smart contract","operationId":"WasmMsg_ExecuteContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract":{"post":{"tags":["Msg"],"summary":"InstantiateContract creates a new smart contract instance for the given\n code id.","operationId":"WasmMsg_InstantiateContract","parameters":[{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract2":{"post":{"tags":["Msg"],"summary":"InstantiateContract2 creates a new smart contract instance for the given\n code id with a predictable address","operationId":"WasmMsg_InstantiateContract2","parameters":[{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"Migrate runs a code upgrade/ downgrade for a smart contract","operationId":"WasmMsg_MigrateContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/PinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"PinCodes defines a governance operation for pinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_PinCodes","parameters":[{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/RemoveCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"RemoveCodeUploadParamsAddresses defines a governance operation for\nremoving addresses from code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_RemoveCodeUploadParamsAddresses","parameters":[{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndInstantiateContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"StoreAndInstantiateContract defines a governance operation for storing\nand instantiating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndInstantiateContract","parameters":[{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndMigrateContract":{"post":{"description":"Since: 0.42","tags":["Msg"],"summary":"StoreAndMigrateContract defines a governance operation for storing\nand migrating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndMigrateContract","parameters":[{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode to submit Wasm code to the system","operationId":"WasmMsg_StoreCode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/SudoContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"SudoContract defines a governance operation for calling sudo\non a contract. The authority is defined in the keeper.","operationId":"WasmMsg_SudoContract","parameters":[{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UnpinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UnpinCodes defines a governance operation for unpinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_UnpinCodes","parameters":[{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateAdmin":{"post":{"tags":["Msg"],"summary":"UpdateAdmin sets a new admin for a smart contract","operationId":"WasmMsg_UpdateAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateContractLabel":{"post":{"description":"Since: 0.43","tags":["Msg"],"summary":"UpdateContractLabel sets a new label for a smart contract","operationId":"WasmMsg_UpdateContractLabel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateInstantiateConfig":{"post":{"tags":["Msg"],"summary":"UpdateInstantiateConfig updates instantiate config for a smart contract","operationId":"WasmMsg_UpdateInstantiateConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateParams":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/wasm\nmodule parameters. The authority is defined in the keeper.","operationId":"WasmMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code":{"get":{"tags":["Query"],"summary":"Codes gets the metadata for all stored wasm codes","operationId":"WasmQuery_Codes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code-info/{code_id}":{"get":{"tags":["Query"],"summary":"CodeInfo gets the metadata for a single wasm code","operationId":"WasmQuery_CodeInfo","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}":{"get":{"tags":["Query"],"summary":"Code gets the binary code and metadata for a single wasm code","operationId":"WasmQuery_Code","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}/contracts":{"get":{"tags":["Query"],"summary":"ContractsByCode lists all smart contracts for a code id","operationId":"WasmQuery_ContractsByCode","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/params":{"get":{"tags":["Query"],"summary":"Params gets the module params","operationId":"WasmQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/pinned":{"get":{"tags":["Query"],"summary":"PinnedCodes gets the pinned code ids","operationId":"WasmQuery_PinnedCodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryPinnedCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/build_address":{"get":{"tags":["Query"],"summary":"BuildAddress builds a contract address","operationId":"WasmQuery_BuildAddress","parameters":[{"type":"string","description":"CodeHash is the hash of the code","name":"code_hash","in":"query"},{"type":"string","description":"CreatorAddress is the address of the contract instantiator","name":"creator_address","in":"query"},{"type":"string","description":"Salt is a hex encoded salt","name":"salt","in":"query"},{"type":"string","format":"byte","description":"InitArgs are optional json encoded init args to be used in contract address\nbuilding if provided","name":"init_args","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryBuildAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}":{"get":{"tags":["Query"],"summary":"ContractInfo gets the contract meta data","operationId":"WasmQuery_ContractInfo","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/history":{"get":{"tags":["Query"],"summary":"ContractHistory gets the contract code history","operationId":"WasmQuery_ContractHistory","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractHistoryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}":{"get":{"tags":["Query"],"summary":"RawContractState gets single key from the raw store data of a contract","operationId":"WasmQuery_RawContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryRawContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}":{"get":{"tags":["Query"],"summary":"SmartContractState get smart query result from the contract","operationId":"WasmQuery_SmartContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"QueryData contains the query data passed to the contract","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QuerySmartContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/state":{"get":{"tags":["Query"],"summary":"AllContractState gets all raw store data for a single contract","operationId":"WasmQuery_AllContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryAllContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contracts/creator/{creator_address}":{"get":{"tags":["Query"],"summary":"ContractsByCreator gets the contracts by creator","operationId":"WasmQuery_ContractsByCreator","parameters":[{"type":"string","description":"CreatorAddress is the address of contract creator","name":"creator_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/wasm-limits-config":{"get":{"tags":["Query"],"summary":"WasmLimitsConfig gets the configured limits for static validation of Wasm\nfiles, encoded in JSON.","operationId":"WasmQuery_WasmLimitsConfig","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/RegisterInterchainAccount":{"post":{"tags":["Msg"],"summary":"RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount.","operationId":"ControllerMsg_RegisterInterchainAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/SendTx":{"post":{"tags":["Msg"],"summary":"SendTx defines a rpc handler for MsgSendTx.","operationId":"ControllerMsg_SendTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/ModuleQuerySafe":{"post":{"tags":["Msg"],"summary":"ModuleQuerySafe defines a rpc handler for MsgModuleQuerySafe.","operationId":"ControllerMsg_ModuleQuerySafe","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin160","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/Transfer":{"post":{"tags":["Msg"],"summary":"Transfer defines a rpc handler method for MsgTransfer.","operationId":"ControllerMsg_Transfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin171","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_Acknowledgement","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseConfirm":{"post":{"tags":["Msg"],"summary":"ChannelCloseConfirm defines a rpc handler method for\nMsgChannelCloseConfirm.","operationId":"ControllerMsg_ChannelCloseConfirm","parameters":[{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseInit":{"post":{"tags":["Msg"],"summary":"ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit.","operationId":"ControllerMsg_ChannelCloseInit","parameters":[{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenAck":{"post":{"tags":["Msg"],"summary":"ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck.","operationId":"ControllerMsg_ChannelOpenAck","parameters":[{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenConfirm":{"post":{"tags":["Msg"],"summary":"ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm.","operationId":"ControllerMsg_ChannelOpenConfirm","parameters":[{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenInit":{"post":{"tags":["Msg"],"summary":"ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit.","operationId":"ControllerMsg_ChannelOpenInit","parameters":[{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenTry":{"post":{"tags":["Msg"],"summary":"ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry.","operationId":"ControllerMsg_ChannelOpenTry","parameters":[{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacket","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_Timeout","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/TimeoutOnClose":{"post":{"tags":["Msg"],"summary":"TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose.","operationId":"ControllerMsg_TimeoutOnClose","parameters":[{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnCloseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_AcknowledgementMixin179","parameters":[{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacketMixin179","parameters":[{"description":"MsgRecvPacket receives an incoming IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/SendPacket":{"post":{"tags":["Msg"],"summary":"SendPacket defines a rpc handler method for MsgSendPacket.","operationId":"ControllerMsg_SendPacket","parameters":[{"description":"MsgSendPacket sends an outgoing IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_TimeoutMixin179","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/CreateClient":{"post":{"tags":["Msg"],"summary":"CreateClient defines a rpc handler method for MsgCreateClient.","operationId":"ControllerMsg_CreateClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/DeleteClientCreator":{"post":{"tags":["Msg"],"summary":"DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator.","operationId":"ControllerMsg_DeleteClientCreator","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/IBCSoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade.","operationId":"ControllerMsg_IBCSoftwareUpgrade","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/RecoverClient":{"post":{"tags":["Msg"],"summary":"RecoverClient defines a rpc handler method for MsgRecoverClient.","operationId":"ControllerMsg_RecoverClient","parameters":[{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/SubmitMisbehaviour":{"post":{"tags":["Msg"],"summary":"SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.","operationId":"ControllerMsg_SubmitMisbehaviour","parameters":[{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviour"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviourResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClient":{"post":{"tags":["Msg"],"summary":"UpdateClient defines a rpc handler method for MsgUpdateClient.","operationId":"ControllerMsg_UpdateClient","parameters":[{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClientParams":{"post":{"tags":["Msg"],"summary":"UpdateClientParams defines a rpc handler method for MsgUpdateParams.","operationId":"ControllerMsg_UpdateClientParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpgradeClient":{"post":{"tags":["Msg"],"summary":"UpgradeClient defines a rpc handler method for MsgUpgradeClient.","operationId":"ControllerMsg_UpgradeClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/RegisterCounterparty":{"post":{"tags":["Msg"],"summary":"RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty.","operationId":"ControllerMsg_RegisterCounterparty","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterparty"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterpartyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/UpdateClientConfig":{"post":{"tags":["Msg"],"summary":"UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig.","operationId":"ControllerMsg_UpdateClientConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenAck":{"post":{"tags":["Msg"],"summary":"ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck.","operationId":"ControllerMsg_ConnectionOpenAck","parameters":[{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenConfirm":{"post":{"tags":["Msg"],"summary":"ConnectionOpenConfirm defines a rpc handler method for\nMsgConnectionOpenConfirm.","operationId":"ControllerMsg_ConnectionOpenConfirm","parameters":[{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenInit":{"post":{"tags":["Msg"],"summary":"ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit.","operationId":"ControllerMsg_ConnectionOpenInit","parameters":[{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenTry":{"post":{"tags":["Msg"],"summary":"ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry.","operationId":"ControllerMsg_ConnectionOpenTry","parameters":[{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/UpdateConnectionParams":{"post":{"tags":["Msg"],"summary":"UpdateConnectionParams defines a rpc handler method for\nMsgUpdateParams.","operationId":"ControllerMsg_UpdateConnectionParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"MigrateContract defines a rpc handler method for MsgMigrateContract.","operationId":"ControllerMsg_MigrateContract","parameters":[{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/RemoveChecksum":{"post":{"tags":["Msg"],"summary":"RemoveChecksum defines a rpc handler method for MsgRemoveChecksum.","operationId":"ControllerMsg_RemoveChecksum","parameters":[{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode defines a rpc handler method for MsgStoreCode.","operationId":"ControllerMsg_StoreCode","parameters":[{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"InterchainAccount returns the interchain account address for a given owner address on a given connection","operationId":"ControllerQuery_InterchainAccount","parameters":[{"type":"string","name":"owner","in":"path","required":true},{"type":"string","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA controller submodule.","operationId":"ControllerQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/host/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA host submodule.","operationId":"ControllerQuery_ParamsMixin159","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address":{"get":{"tags":["Query"],"summary":"EscrowAddress returns the escrow address for a particular port and channel id.","operationId":"ControllerQuery_EscrowAddress","parameters":[{"type":"string","description":"unique channel identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"unique port identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryEscrowAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denom_hashes/{trace}":{"get":{"tags":["Query"],"summary":"DenomHash queries a denomination hash information.","operationId":"ControllerQuery_DenomHash","parameters":[{"pattern":".+","type":"string","description":"The denomination trace ([port_id]/[channel_id])+/[denom]","name":"trace","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomHashResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms":{"get":{"tags":["Query"],"summary":"Denoms queries all denominations","operationId":"ControllerQuery_Denoms","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms/{hash}":{"get":{"tags":["Query"],"summary":"Denom queries a denomination","operationId":"ControllerQuery_Denom","parameters":[{"pattern":".+","type":"string","description":"hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ibc-transfer module.","operationId":"ControllerQuery_ParamsMixin168","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/total_escrow/{denom}":{"get":{"tags":["Query"],"summary":"TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.","operationId":"ControllerQuery_TotalEscrowForDenom","parameters":[{"pattern":".+","type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels":{"get":{"tags":["Query"],"summary":"Channels queries all the IBC channels of a chain.","operationId":"ControllerQuery_Channels","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}":{"get":{"tags":["Query"],"summary":"Channel queries an IBC Channel.","operationId":"ControllerQuery_Channel","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state":{"get":{"tags":["Query"],"summary":"ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.","operationId":"ControllerQuery_ChannelClientState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ChannelConsensusState queries for the consensus state for the channel\nassociated with the provided channel identifiers.","operationId":"ControllerQuery_ChannelConsensusState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"revision number of the consensus state","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"revision height of the consensus state","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence":{"get":{"tags":["Query"],"summary":"NextSequenceReceive returns the next receive sequence for a given channel.","operationId":"ControllerQuery_NextSequenceReceive","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceReceiveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSend","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all the packet acknowledgements associated\nwith a channel.","operationId":"ControllerQuery_PacketAcknowledgements","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored packet acknowledgement hash.","operationId":"ControllerQuery_PacketAcknowledgement","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments returns all the packet commitments hashes associated\nwith a channel.","operationId":"ControllerQuery_PacketCommitments","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated\nwith a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcks","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a\nchannel and sequences.","operationId":"ControllerQuery_UnreceivedPackets","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"packet_commitment_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitment","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries if a given packet sequence has been received on the\nqueried chain","operationId":"ControllerQuery_PacketReceipt","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/connections/{connection}/channels":{"get":{"tags":["Query"],"summary":"ConnectionChannels queries all the channels associated with a connection\nend.","operationId":"ControllerQuery_ConnectionChannels","parameters":[{"type":"string","description":"connection unique identifier","name":"connection","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryConnectionChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSendMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all packet acknowledgements associated with a channel.","operationId":"ControllerQuery_PacketAcknowledgementsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored acknowledgement commitment hash.","operationId":"ControllerQuery_PacketAcknowledgementMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcksMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedPacketsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries a stored packet receipt.","operationId":"ControllerQuery_PacketReceiptMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_creator/{client_id}":{"get":{"tags":["Query"],"summary":"ClientCreator queries the creator of a given client.","operationId":"ControllerQuery_ClientCreator","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states":{"get":{"tags":["Query"],"summary":"ClientStates queries all the IBC light clients of a chain.","operationId":"ControllerQuery_ClientStates","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states/{client_id}":{"get":{"tags":["Query"],"summary":"ClientState queries an IBC light client.","operationId":"ControllerQuery_ClientState","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_status/{client_id}":{"get":{"tags":["Query"],"summary":"Status queries the status of an IBC client.","operationId":"ControllerQuery_ClientStatus","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}":{"get":{"tags":["Query"],"summary":"ConsensusStates queries all the consensus state associated with a given\nclient.","operationId":"ControllerQuery_ConsensusStates","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/heights":{"get":{"tags":["Query"],"summary":"ConsensusStateHeights queries the height of every consensus states associated with a given client.","operationId":"ControllerQuery_ConsensusStateHeights","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateHeightsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConsensusState queries a consensus state associated with a client state at\na given height.","operationId":"ControllerQuery_ConsensusState","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision number","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision height","name":"revision_height","in":"path","required":true},{"type":"boolean","description":"latest_height overrides the height field and queries the latest stored\nConsensusState","name":"latest_height","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/params":{"get":{"tags":["Query"],"summary":"ClientParams queries all parameters of the ibc client submodule.","operationId":"ControllerQuery_ClientParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_client_states":{"get":{"tags":["Query"],"summary":"UpgradedClientState queries an Upgraded IBC light client.","operationId":"ControllerQuery_UpgradedClientState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_consensus_states":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries an Upgraded IBC consensus state.","operationId":"ControllerQuery_UpgradedConsensusState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/verify_membership":{"post":{"tags":["Query"],"summary":"VerifyMembership queries an IBC light client for proof verification of a value at a given key path.","operationId":"ControllerQuery_VerifyMembership","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/config/{client_id}":{"get":{"tags":["Query"],"summary":"Config queries the IBC client v2 configuration for a given client.","operationId":"ControllerQuery_Config","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/counterparty_info/{client_id}":{"get":{"tags":["Query"],"summary":"CounterpartyInfo queries an IBC light counter party info.","operationId":"ControllerQuery_CounterpartyInfo","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryCounterpartyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/client_connections/{client_id}":{"get":{"tags":["Query"],"summary":"ClientConnections queries the connection paths associated with a client\nstate.","operationId":"ControllerQuery_ClientConnections","parameters":[{"type":"string","description":"client identifier associated with a connection","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryClientConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections":{"get":{"tags":["Query"],"summary":"Connections queries all the IBC connections of a chain.","operationId":"ControllerQuery_Connections","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"Connection queries an IBC connection end.","operationId":"ControllerQuery_Connection","parameters":[{"type":"string","description":"connection unique identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/client_state":{"get":{"tags":["Query"],"summary":"ConnectionClientState queries the client state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionClientState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConnectionConsensusState queries the consensus state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionConsensusState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/params":{"get":{"tags":["Query"],"summary":"ConnectionParams queries all parameters of the ibc connection submodule.","operationId":"ControllerQuery_ConnectionParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums":{"get":{"tags":["Query"],"summary":"Get all Wasm checksums","operationId":"ControllerQuery_Checksums","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryChecksumsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums/{checksum}/code":{"get":{"tags":["Query"],"summary":"Get Wasm code for given checksum","operationId":"ControllerQuery_Code","parameters":[{"type":"string","description":"checksum is a hex encoded string of the code stored.","name":"checksum","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitAuditReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitAuditReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitAuditReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence defines the SubmitEvidence RPC.","operationId":"GithubComLumeraProtocollumeraMsg_SubmitEvidence","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin15","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin20","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin25","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin36","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ApplySnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestApplySnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/CheckTx":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_CheckTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCheckTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCheckTx"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Commit":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Commit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCommit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Echo":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Echo","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestEcho"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseEcho"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ExtendVote":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ExtendVote","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestExtendVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseExtendVote"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/FinalizeBlock":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_FinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Flush":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Flush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFlush"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFlush"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Info":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Info","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInfo"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInfo"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/InitChain":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_InitChain","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInitChain"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInitChain"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ListSnapshots":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ListSnapshots","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestListSnapshots"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseListSnapshots"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/LoadSnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_LoadSnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestLoadSnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseLoadSnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/OfferSnapshot":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_OfferSnapshot","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestOfferSnapshot"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/PrepareProposal":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_PrepareProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestPrepareProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponsePrepareProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ProcessProposal":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ProcessProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestProcessProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Query":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Query","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestQuery"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseQuery"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/VerifyVoteExtension":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_VerifyVoteExtension","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestVerifyVoteExtension"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.auth.v1beta1.AddressBytesToStringResponse":{"description":"AddressBytesToStringResponse is the response type for AddressString rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_bytes":{"type":"string","format":"byte"}}},"cosmos.auth.v1beta1.BaseAccount":{"description":"BaseAccount defines a base account type. It contains all the necessary fields\nfor basic account functionality. Any custom account type should extend this\ntype for additional functionality (e.g. vesting).","type":"object","properties":{"account_number":{"type":"string","format":"uint64"},"address":{"type":"string"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"sequence":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.Bech32PrefixResponse":{"description":"Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/auth parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.auth.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.auth.v1beta1.Params":{"description":"Params defines the parameters for the auth module.","type":"object","properties":{"max_memo_characters":{"type":"string","format":"uint64"},"sig_verify_cost_ed25519":{"type":"string","format":"uint64"},"sig_verify_cost_secp256k1":{"type":"string","format":"uint64"},"tx_sig_limit":{"type":"string","format":"uint64"},"tx_size_cost_per_byte":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.QueryAccountAddressByIDResponse":{"description":"Since: cosmos-sdk 0.46.2","type":"object","title":"QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method","properties":{"account_address":{"type":"string"}}},"cosmos.auth.v1beta1.QueryAccountInfoResponse":{"description":"QueryAccountInfoResponse is the Query/AccountInfo response type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"info":{"description":"info is the account info which is represented by BaseAccount.","$ref":"#/definitions/cosmos.auth.v1beta1.BaseAccount"}}},"cosmos.auth.v1beta1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"account":{"description":"account defines the account of the corresponding address.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryAccountsResponse":{"description":"QueryAccountsResponse is the response type for the Query/Accounts RPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"accounts":{"type":"array","title":"accounts are the existing accounts","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.auth.v1beta1.QueryModuleAccountByNameResponse":{"description":"QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method.","type":"object","properties":{"account":{"$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryModuleAccountsResponse":{"description":"QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.auth.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.authz.v1beta1.Grant":{"description":"Grant gives permissions to execute\nthe provide method with expiration time.","type":"object","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time","title":"time when the grant will expire and will be pruned. If null, then the grant\ndoesn't have a time expiration (other conditions in `authorization`\nmay apply to invalidate the grant)"}}},"cosmos.authz.v1beta1.GrantAuthorization":{"type":"object","title":"GrantAuthorization extends a grant with both the addresses of the grantee and granter.\nIt is used in genesis.proto and query.proto","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgExec":{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","type":"object","properties":{"grantee":{"type":"string"},"msgs":{"description":"Execute Msg.\nThe x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg))\ntriple and validate it.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.authz.v1beta1.MsgExecResponse":{"description":"MsgExecResponse defines the Msg/MsgExecResponse response type.","type":"object","properties":{"results":{"type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.authz.v1beta1.MsgGrant":{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","type":"object","properties":{"grant":{"$ref":"#/definitions/cosmos.authz.v1beta1.Grant"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgGrantResponse":{"description":"MsgGrantResponse defines the Msg/MsgGrant response type.","type":"object"},"cosmos.authz.v1beta1.MsgRevoke":{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","type":"object","properties":{"grantee":{"type":"string"},"granter":{"type":"string"},"msg_type_url":{"type":"string"}}},"cosmos.authz.v1beta1.MsgRevokeResponse":{"description":"MsgRevokeResponse defines the Msg/MsgRevokeResponse response type.","type":"object"},"cosmos.authz.v1beta1.QueryGranteeGrantsResponse":{"description":"QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted to the grantee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGranterGrantsResponse":{"description":"QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGrantsResponse":{"description":"QueryGrantsResponse is the response type for the Query/Authorizations RPC method.","type":"object","properties":{"grants":{"description":"authorizations is a list of grants granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.autocli.v1.AppOptionsRequest":{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","type":"object"},"cosmos.autocli.v1.AppOptionsResponse":{"description":"AppOptionsResponse is the RemoteInfoService/AppOptions response type.","type":"object","properties":{"module_options":{"description":"module_options is a map of module name to autocli module options.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ModuleOptions"}}}},"cosmos.autocli.v1.FlagOptions":{"description":"FlagOptions are options for flags generated from rpc request fields.\nBy default, all request fields are configured as flags based on the\nkebab-case name of the field. Fields can be turned into positional arguments\ninstead by using RpcCommandOptions.positional_args.","type":"object","properties":{"default_value":{"description":"default_value is the default value as text.","type":"string"},"deprecated":{"description":"deprecated is the usage text to show if this flag is deprecated.","type":"string"},"hidden":{"type":"boolean","title":"hidden hides the flag from help/usage text"},"name":{"description":"name is an alternate name to use for the field flag.","type":"string"},"shorthand":{"description":"shorthand is a one-letter abbreviated flag.","type":"string"},"shorthand_deprecated":{"description":"shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated.","type":"string"},"usage":{"description":"usage is the help message.","type":"string"}}},"cosmos.autocli.v1.ModuleOptions":{"description":"ModuleOptions describes the CLI options for a Cosmos SDK module.","type":"object","properties":{"query":{"description":"query describes the queries commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"},"tx":{"description":"tx describes the tx commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}},"cosmos.autocli.v1.PositionalArgDescriptor":{"description":"PositionalArgDescriptor describes a positional argument.","type":"object","properties":{"proto_field":{"description":"proto_field specifies the proto field to use as the positional arg. Any\nfields used as positional args will not have a flag generated.","type":"string"},"varargs":{"description":"varargs makes a positional parameter a varargs parameter. This can only be\napplied to last positional parameter and the proto_field must a repeated\nfield.","type":"boolean"}}},"cosmos.autocli.v1.RpcCommandOptions":{"description":"RpcCommandOptions specifies options for commands generated from protobuf\nrpc methods.","type":"object","properties":{"alias":{"description":"alias is an array of aliases that can be used instead of the first word in Use.","type":"array","items":{"type":"string"}},"deprecated":{"description":"deprecated defines, if this command is deprecated and should print this string when used.","type":"string"},"example":{"description":"example is examples of how to use the command.","type":"string"},"flag_options":{"description":"flag_options are options for flags generated from rpc request fields.\nBy default all request fields are configured as flags. They can\nalso be configured as positional args instead using positional_args.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.FlagOptions"}},"long":{"description":"long is the long message shown in the 'help \u003cthis-command\u003e' output.","type":"string"},"positional_args":{"description":"positional_args specifies positional arguments for the command.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.PositionalArgDescriptor"}},"rpc_method":{"description":"rpc_method is short name of the protobuf rpc method that this command is\ngenerated from.","type":"string"},"short":{"description":"short is the short description shown in the 'help' output.","type":"string"},"skip":{"description":"skip specifies whether to skip this rpc method when generating commands.","type":"boolean"},"suggest_for":{"description":"suggest_for is an array of command names for which this command will be suggested -\nsimilar to aliases but only suggests.","type":"array","items":{"type":"string"}},"use":{"description":"use is the one-line usage method. It also allows specifying an alternate\nname for the command as the first word of the usage text.\n\nBy default the name of an rpc command is the kebab-case short name of the\nrpc method.","type":"string"},"version":{"description":"version defines the version for this command. If this value is non-empty and the command does not\ndefine a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\nwill print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\ncommand does not define one.","type":"string"}}},"cosmos.autocli.v1.ServiceCommandDescriptor":{"description":"ServiceCommandDescriptor describes a CLI command based on a protobuf service.","type":"object","properties":{"rpc_command_options":{"description":"rpc_command_options are options for commands generated from rpc methods.\nIf no options are specified for a given rpc method on the service, a\ncommand will be generated for that method with the default options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.RpcCommandOptions"}},"service":{"description":"service is the fully qualified name of the protobuf service to build\nthe command from. It can be left empty if sub_commands are used instead\nwhich may be the case if a module provides multiple tx and/or query services.","type":"string"},"sub_commands":{"description":"sub_commands is a map of optional sub-commands for this command based on\ndifferent protobuf services. The map key is used as the name of the\nsub-command.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}}},"cosmos.bank.v1beta1.DenomOwner":{"description":"DenomOwner defines structure representing an account that owns or holds a\nparticular denominated token. It contains the account address and account\nbalance of the denominated token.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address":{"description":"address defines the address that owns a particular denomination.","type":"string"},"balance":{"description":"balance is the balance of the denominated coin for an account.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.DenomUnit":{"description":"DenomUnit represents a struct that describes a given\ndenomination unit of the basic token.","type":"object","properties":{"aliases":{"type":"array","title":"aliases is a list of string aliases for the given denom","items":{"type":"string"}},"denom":{"description":"denom represents the string name of the given denom unit (e.g uatom).","type":"string"},"exponent":{"description":"exponent represents power of 10 exponent that one must\nraise the base_denom to in order to equal the given DenomUnit's denom\n1 denom = 10^exponent base_denom\n(e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\nexponent = 6, thus: 1 atom = 10^6 uatom).","type":"integer","format":"int64"}}},"cosmos.bank.v1beta1.Input":{"description":"Input models transaction input.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Metadata":{"description":"Metadata represents a struct that describes\na basic token.","type":"object","properties":{"base":{"description":"base represents the base denom (should be the DenomUnit with exponent = 0).","type":"string"},"denom_units":{"type":"array","title":"denom_units represents the list of DenomUnit's for a given coin","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomUnit"}},"description":{"type":"string"},"display":{"description":"display indicates the suggested denom that should be\ndisplayed in clients.","type":"string"},"name":{"description":"Since: cosmos-sdk 0.43","type":"string","title":"name defines the name of the token (eg: Cosmos Atom)"},"symbol":{"description":"symbol is the token symbol usually shown on exchanges (eg: ATOM). This can\nbe the same as the display.\n\nSince: cosmos-sdk 0.43","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"},"uri_hash":{"description":"URIHash is a sha256 hash of a document pointed by URI. It's used to verify that\nthe document didn't change. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"}}},"cosmos.bank.v1beta1.MsgMultiSend":{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","type":"object","properties":{"inputs":{"description":"Inputs, despite being `repeated`, only allows one sender input. This is\nchecked in MsgMultiSend's ValidateBasic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Input"}},"outputs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Output"}}}},"cosmos.bank.v1beta1.MsgMultiSendResponse":{"description":"MsgMultiSendResponse defines the Msg/MultiSend response type.","type":"object"},"cosmos.bank.v1beta1.MsgSend":{"description":"MsgSend represents a message to send coins from one account to another.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.bank.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.bank.v1beta1.MsgSetSendEnabled":{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module.","type":"string"},"send_enabled":{"description":"send_enabled is the list of entries to add or update.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}},"use_default_for":{"description":"use_default_for is a list of denoms that should use the params.default_send_enabled value.\nDenoms listed here will have their SendEnabled entries deleted.\nIf a denom is included that doesn't have a SendEnabled entry,\nit will be ignored.","type":"array","items":{"type":"string"}}}},"cosmos.bank.v1beta1.MsgSetSendEnabledResponse":{"description":"MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/bank parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.Output":{"description":"Output models transaction outputs.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Params":{"description":"Params defines the parameters for the bank module.","type":"object","properties":{"default_send_enabled":{"type":"boolean"},"send_enabled":{"description":"Deprecated: Use of SendEnabled in params is deprecated.\nFor genesis, use the newly added send_enabled field in the genesis object.\nStorage, lookup, and manipulation of this information is now in the keeper.\n\nAs of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QueryAllBalancesResponse":{"description":"QueryAllBalancesResponse is the response type for the Query/AllBalances RPC\nmethod.","type":"object","properties":{"balances":{"description":"balances is the balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse":{"description":"QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC\nmethod. Identical with QueryDenomMetadataResponse but receives denom as query string in request.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomMetadataResponse":{"description":"QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC\nmethod.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse":{"description":"QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query.\n\nSince: cosmos-sdk 0.50.3","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomOwnersResponse":{"description":"QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomsMetadataResponse":{"description":"QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC\nmethod.","type":"object","properties":{"metadatas":{"description":"metadata provides the client information for all the registered tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/bank parameters.","type":"object","properties":{"params":{"description":"params provides the parameters of the bank module.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.QuerySendEnabledResponse":{"description":"QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response. This field is only\npopulated if the denoms field in the request is empty.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"send_enabled":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse":{"description":"QuerySpendableBalanceByDenomResponse defines the gRPC response structure for\nquerying an account's spendable balance for a specific denom.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QuerySpendableBalancesResponse":{"description":"QuerySpendableBalancesResponse defines the gRPC response structure for querying\nan account's spendable balances.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"balances":{"description":"balances is the spendable balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QuerySupplyOfResponse":{"description":"QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method.","type":"object","properties":{"amount":{"description":"amount is the supply of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryTotalSupplyResponse":{"type":"object","title":"QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC\nmethod","properties":{"pagination":{"description":"pagination defines the pagination in the response.\n\nSince: cosmos-sdk 0.43","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supply":{"type":"array","title":"supply is the supply of the coins","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.SendEnabled":{"description":"SendEnabled maps coin denom to a send_enabled status (whether a denom is\nsendable).","type":"object","properties":{"denom":{"type":"string"},"enabled":{"type":"boolean"}}},"cosmos.base.abci.v1beta1.ABCIMessageLog":{"description":"ABCIMessageLog defines a structure containing an indexed tx ABCI message log.","type":"object","properties":{"events":{"description":"Events contains a slice of Event objects that were emitted during some\nexecution.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.StringEvent"}},"log":{"type":"string"},"msg_index":{"type":"integer","format":"int64"}}},"cosmos.base.abci.v1beta1.Attribute":{"description":"Attribute defines an attribute wrapper where the key and value are\nstrings instead of raw bytes.","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"cosmos.base.abci.v1beta1.GasInfo":{"description":"GasInfo defines tx execution gas context.","type":"object","properties":{"gas_used":{"description":"GasUsed is the amount of gas actually consumed.","type":"string","format":"uint64"},"gas_wanted":{"description":"GasWanted is the maximum units of work we allow this tx to perform.","type":"string","format":"uint64"}}},"cosmos.base.abci.v1beta1.Result":{"description":"Result is the union of ResponseFormat and ResponseCheckTx.","type":"object","properties":{"data":{"description":"Data is any data returned from message or handler execution. It MUST be\nlength prefixed in order to separate data from multiple message executions.\nDeprecated. This field is still populated, but prefer msg_response instead\nbecause it also contains the Msg response typeURL.","type":"string","format":"byte"},"events":{"description":"Events contains a slice of Event objects that were emitted during message\nor handler execution.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"log":{"description":"Log contains the log information from message or handler execution.","type":"string"},"msg_responses":{"description":"msg_responses contains the Msg handler responses type packed in Anys.\n\nSince: cosmos-sdk 0.46","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.base.abci.v1beta1.StringEvent":{"description":"StringEvent defines en Event object wrapper where all the attributes\ncontain key/value pairs that are strings instead of raw bytes.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.Attribute"}},"type":{"type":"string"}}},"cosmos.base.abci.v1beta1.TxResponse":{"description":"TxResponse defines a structure containing relevant tx data and metadata. The\ntags are stringified and the log is JSON decoded.","type":"object","properties":{"code":{"description":"Response code.","type":"integer","format":"int64"},"codespace":{"type":"string","title":"Namespace for the Code"},"data":{"description":"Result bytes, if any.","type":"string"},"events":{"description":"Events defines all the events emitted by processing a transaction. Note,\nthese events include those emitted by processing all the messages and those\nemitted from the ante. Whereas Logs contains the events, with\nadditional metadata, emitted only by processing the messages.\n\nSince: cosmos-sdk 0.42.11, 0.44.5, 0.45","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"description":"Amount of gas consumed by transaction.","type":"string","format":"int64"},"gas_wanted":{"description":"Amount of gas requested for transaction.","type":"string","format":"int64"},"height":{"type":"string","format":"int64","title":"The block height"},"info":{"description":"Additional information. May be non-deterministic.","type":"string"},"logs":{"description":"The output of the application's logger (typed). May be non-deterministic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.ABCIMessageLog"}},"raw_log":{"description":"The output of the application's logger (raw string). May be\nnon-deterministic.","type":"string"},"timestamp":{"description":"Time of the previous block. For heights \u003e 1, it's the weighted median of\nthe timestamps of the valid votes in the block.LastCommit. For height == 1,\nit's genesis time.","type":"string"},"tx":{"description":"The request transaction bytes.","$ref":"#/definitions/google.protobuf.Any"},"txhash":{"description":"The transaction hash.","type":"string"}}},"cosmos.base.node.v1beta1.ConfigResponse":{"description":"ConfigResponse defines the response structure for the Config gRPC query.","type":"object","properties":{"halt_height":{"type":"string","format":"uint64"},"minimum_gas_price":{"type":"string"},"pruning_interval":{"type":"string"},"pruning_keep_recent":{"type":"string"}}},"cosmos.base.node.v1beta1.StatusResponse":{"description":"StateResponse defines the response structure for the status of a node.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"app hash of the current block"},"earliest_store_height":{"type":"string","format":"uint64","title":"earliest block height available in the store"},"height":{"type":"string","format":"uint64","title":"current block height"},"timestamp":{"type":"string","format":"date-time","title":"block height timestamp"},"validator_hash":{"type":"string","format":"byte","title":"validator hash provided by the consensus header"}}},"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.reflection.v1beta1.ListAllInterfacesResponse":{"description":"ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC.","type":"object","properties":{"interface_names":{"description":"interface_names is an array of all the registered interfaces.","type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v1beta1.ListImplementationsResponse":{"description":"ListImplementationsResponse is the response type of the ListImplementations\nRPC.","type":"object","properties":{"implementation_message_names":{"type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v2alpha1.AuthnDescriptor":{"type":"object","title":"AuthnDescriptor provides information on how to sign transactions without relying\non the online RPCs GetTxMetadata and CombineUnsignedTxAndSignatures","properties":{"sign_modes":{"type":"array","title":"sign_modes defines the supported signature algorithm","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.SigningModeDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ChainDescriptor":{"type":"object","title":"ChainDescriptor describes chain information of the application","properties":{"id":{"type":"string","title":"id is the chain id"}}},"cosmos.base.reflection.v2alpha1.CodecDescriptor":{"type":"object","title":"CodecDescriptor describes the registered interfaces and provides metadata information on the types","properties":{"interfaces":{"type":"array","title":"interfaces is a list of the registerted interfaces descriptors","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ConfigurationDescriptor":{"type":"object","title":"ConfigurationDescriptor contains metadata information on the sdk.Config","properties":{"bech32_account_address_prefix":{"type":"string","title":"bech32_account_address_prefix is the account address prefix"}}},"cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse":{"type":"object","title":"GetAuthnDescriptorResponse is the response returned by the GetAuthnDescriptor RPC","properties":{"authn":{"title":"authn describes how to authenticate to the application when sending transactions","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.AuthnDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse":{"type":"object","title":"GetChainDescriptorResponse is the response returned by the GetChainDescriptor RPC","properties":{"chain":{"title":"chain describes application chain information","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ChainDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse":{"type":"object","title":"GetCodecDescriptorResponse is the response returned by the GetCodecDescriptor RPC","properties":{"codec":{"title":"codec describes the application codec such as registered interfaces and implementations","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.CodecDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse":{"type":"object","title":"GetConfigurationDescriptorResponse is the response returned by the GetConfigurationDescriptor RPC","properties":{"config":{"title":"config describes the application's sdk.Config","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ConfigurationDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse":{"type":"object","title":"GetQueryServicesDescriptorResponse is the response returned by the GetQueryServicesDescriptor RPC","properties":{"queries":{"title":"queries provides information on the available queryable services","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServicesDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse":{"type":"object","title":"GetTxDescriptorResponse is the response returned by the GetTxDescriptor RPC","properties":{"tx":{"title":"tx provides information on msgs that can be forwarded to the application\nalongside the accepted transaction protobuf type","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.TxDescriptor"}}},"cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor":{"type":"object","title":"InterfaceAcceptingMessageDescriptor describes a protobuf message which contains\nan interface represented as a google.protobuf.Any","properties":{"field_descriptor_names":{"type":"array","title":"field_descriptor_names is a list of the protobuf name (not fullname) of the field\nwhich contains the interface as google.protobuf.Any (the interface is the same, but\nit can be in multiple fields of the same proto message)","items":{"type":"string"}},"fullname":{"type":"string","title":"fullname is the protobuf fullname of the type containing the interface"}}},"cosmos.base.reflection.v2alpha1.InterfaceDescriptor":{"type":"object","title":"InterfaceDescriptor describes the implementation of an interface","properties":{"fullname":{"type":"string","title":"fullname is the name of the interface"},"interface_accepting_messages":{"type":"array","title":"interface_accepting_messages contains information regarding the proto messages which contain the interface as\ngoogle.protobuf.Any field","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor"}},"interface_implementers":{"type":"array","title":"interface_implementers is a list of the descriptors of the interface implementers","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor"}}}},"cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor":{"type":"object","title":"InterfaceImplementerDescriptor describes an interface implementer","properties":{"fullname":{"type":"string","title":"fullname is the protobuf queryable name of the interface implementer"},"type_url":{"type":"string","title":"type_url defines the type URL used when marshalling the type as any\nthis is required so we can provide type safe google.protobuf.Any marshalling and\nunmarshalling, making sure that we don't accept just 'any' type\nin our interface fields"}}},"cosmos.base.reflection.v2alpha1.MsgDescriptor":{"type":"object","title":"MsgDescriptor describes a cosmos-sdk message that can be delivered with a transaction","properties":{"msg_type_url":{"description":"msg_type_url contains the TypeURL of a sdk.Msg.","type":"string"}}},"cosmos.base.reflection.v2alpha1.QueryMethodDescriptor":{"type":"object","title":"QueryMethodDescriptor describes a queryable method of a query service\nno other info is provided beside method name and tendermint queryable path\nbecause it would be redundant with the grpc reflection service","properties":{"full_query_path":{"type":"string","title":"full_query_path is the path that can be used to query\nthis method via tendermint abci.Query"},"name":{"type":"string","title":"name is the protobuf name (not fullname) of the method"}}},"cosmos.base.reflection.v2alpha1.QueryServiceDescriptor":{"type":"object","title":"QueryServiceDescriptor describes a cosmos-sdk queryable service","properties":{"fullname":{"type":"string","title":"fullname is the protobuf fullname of the service descriptor"},"is_module":{"type":"boolean","title":"is_module describes if this service is actually exposed by an application's module"},"methods":{"type":"array","title":"methods provides a list of query service methods","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryMethodDescriptor"}}}},"cosmos.base.reflection.v2alpha1.QueryServicesDescriptor":{"type":"object","title":"QueryServicesDescriptor contains the list of cosmos-sdk queriable services","properties":{"query_services":{"type":"array","title":"query_services is a list of cosmos-sdk QueryServiceDescriptor","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServiceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.SigningModeDescriptor":{"type":"object","title":"SigningModeDescriptor provides information on a signing flow of the application\nNOTE(fdymylja): here we could go as far as providing an entire flow on how\nto sign a message given a SigningModeDescriptor, but it's better to think about\nthis another time","properties":{"authn_info_provider_method_fullname":{"type":"string","title":"authn_info_provider_method_fullname defines the fullname of the method to call to get\nthe metadata required to authenticate using the provided sign_modes"},"name":{"type":"string","title":"name defines the unique name of the signing mode"},"number":{"type":"integer","format":"int32","title":"number is the unique int32 identifier for the sign_mode enum"}}},"cosmos.base.reflection.v2alpha1.TxDescriptor":{"type":"object","title":"TxDescriptor describes the accepted transaction type","properties":{"fullname":{"description":"fullname is the protobuf fullname of the raw transaction type (for instance the tx.Tx type)\nit is not meant to support polymorphism of transaction types, it is supposed to be used by\nreflection clients to understand if they can handle a specific transaction type in an application.","type":"string"},"msgs":{"type":"array","title":"msgs lists the accepted application messages (sdk.Msg)","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.MsgDescriptor"}}}},"cosmos.base.tendermint.v1beta1.ABCIQueryResponse":{"description":"ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query.\n\nNote: This type is a duplicate of the ResponseQuery proto type defined in\nTendermint.","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"type":"string","title":"nondeterministic"},"proof_ops":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOps"},"value":{"type":"string","format":"byte"}}},"cosmos.base.tendermint.v1beta1.Block":{"description":"Block is tendermint type Block, with the Header proposer address\nfield converted to bech32 string.","type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse":{"description":"GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestBlockResponse":{"description":"GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse":{"description":"GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.GetNodeInfoResponse":{"description":"GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method.","type":"object","properties":{"application_version":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.VersionInfo"},"default_node_info":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfo"}}},"cosmos.base.tendermint.v1beta1.GetSyncingResponse":{"description":"GetSyncingResponse is the response type for the Query/GetSyncing RPC method.","type":"object","properties":{"syncing":{"type":"boolean"}}},"cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse":{"description":"GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.Header":{"description":"Header defines the structure of a Tendermint block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"description":"proposer_address is the original block proposer address, formatted as a Bech32 string.\nIn Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\nfor better UX.\n\noriginal proposer of the block","type":"string"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"cosmos.base.tendermint.v1beta1.Module":{"type":"object","title":"Module is the type for VersionInfo","properties":{"path":{"type":"string","title":"module path"},"sum":{"type":"string","title":"checksum"},"version":{"type":"string","title":"module version"}}},"cosmos.base.tendermint.v1beta1.ProofOp":{"description":"ProofOp defines an operation used for calculating Merkle root. The data could\nbe arbitrary format, providing necessary data for example neighbouring node\nhash.\n\nNote: This type is a duplicate of the ProofOp proto type defined in Tendermint.","type":"object","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"cosmos.base.tendermint.v1beta1.ProofOps":{"description":"ProofOps is Merkle proof defined by the list of ProofOps.\n\nNote: This type is a duplicate of the ProofOps proto type defined in Tendermint.","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOp"}}}},"cosmos.base.tendermint.v1beta1.Validator":{"description":"Validator is the type for the validator-set.","type":"object","properties":{"address":{"type":"string"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"voting_power":{"type":"string","format":"int64"}}},"cosmos.base.tendermint.v1beta1.VersionInfo":{"description":"VersionInfo is the type for the GetNodeInfoResponse message.","type":"object","properties":{"app_name":{"type":"string"},"build_deps":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Module"}},"build_tags":{"type":"string"},"cosmos_sdk_version":{"type":"string","title":"Since: cosmos-sdk 0.43"},"git_commit":{"type":"string"},"go_version":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.base.v1beta1.DecCoin":{"description":"DecCoin defines a token with a denomination and a decimal amount.\n\nNOTE: The amount field is an Dec which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.circuit.v1.AccountResponse":{"description":"AccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"permission":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.AccountsResponse":{"description":"AccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.circuit.v1.GenesisAccountPermissions"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.circuit.v1.DisabledListResponse":{"description":"DisabledListResponse is the response type for the Query/DisabledList RPC method.","type":"object","properties":{"disabled_list":{"type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.GenesisAccountPermissions":{"type":"object","title":"GenesisAccountPermissions is the account permissions for the circuit breaker in genesis","properties":{"address":{"type":"string"},"permissions":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreaker":{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","type":"object","properties":{"grantee":{"description":"grantee is the account authorized with the provided permissions.","type":"string"},"granter":{"description":"granter is the granter of the circuit breaker permissions and must have\nLEVEL_SUPER_ADMIN.","type":"string"},"permissions":{"description":"permissions are the circuit breaker permissions that the grantee receives.\nThese will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can\nbe specified to revoke all permissions.","$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse":{"description":"MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgResetCircuitBreaker":{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip or reset the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of Msg type URLs to resume processing. If\nit is left empty all Msg processing for type URLs that the account is\nauthorized to trip will resume.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgResetCircuitBreakerResponse":{"description":"MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgTripCircuitBreaker":{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of type URLs to immediately stop processing.\nIF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY.\nThis value is validated against the authority's permissions and if the\nauthority does not have permissions to trip the specified msg type URLs\n(or all URLs), the operation will fail.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgTripCircuitBreakerResponse":{"description":"MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.Permissions":{"description":"Permissions are the permissions that an account has to trip\nor reset the circuit breaker.","type":"object","properties":{"level":{"description":"level is the level of permissions granted to this account.","$ref":"#/definitions/cosmos.circuit.v1.Permissions.Level"},"limit_type_urls":{"description":"limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type\nURLs that the account can trip. It is an error to use limit_type_urls with\na level other than LEVEL_SOME_MSGS.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.Permissions.Level":{"description":"Level is the permission level.\n\n - LEVEL_NONE_UNSPECIFIED: LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit\nbreaker permissions.\n - LEVEL_SOME_MSGS: LEVEL_SOME_MSGS indicates that the account will have permission to\ntrip or reset the circuit breaker for some Msg type URLs. If this level\nis chosen, a non-empty list of Msg type URLs must be provided in\nlimit_type_urls.\n - LEVEL_ALL_MSGS: LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit\nbreaker for Msg's of all type URLs.\n - LEVEL_SUPER_ADMIN: LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker\nactions and can grant permissions to other accounts.","type":"string","default":"LEVEL_NONE_UNSPECIFIED","enum":["LEVEL_NONE_UNSPECIFIED","LEVEL_SOME_MSGS","LEVEL_ALL_MSGS","LEVEL_SUPER_ADMIN"]},"cosmos.consensus.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"abci":{"title":"Since: cosmos-sdk 0.50","$ref":"#/definitions/tendermint.types.ABCIParams"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"block":{"description":"params defines the x/consensus parameters to update.\nVersionsParams is not included in this Msg because it is tracked\nsepararately in x/upgrade.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"}}},"cosmos.consensus.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.consensus.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/consensus parameters.","type":"object","properties":{"params":{"description":"params are the tendermint consensus params stored in the consensus module.\nPlease note that `params.version` is not populated in this response, it is\ntracked separately in the x/upgrade module.","$ref":"#/definitions/tendermint.types.ConsensusParams"}}},"cosmos.crisis.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"constant_fee":{"description":"constant_fee defines the x/crisis parameter.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.crisis.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.crisis.v1beta1.MsgVerifyInvariant":{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","type":"object","properties":{"invariant_module_name":{"description":"name of the invariant module.","type":"string"},"invariant_route":{"description":"invariant_route is the msg's invariant route.","type":"string"},"sender":{"description":"sender is the account address of private key to send coins to fee collector account.","type":"string"}}},"cosmos.crisis.v1beta1.MsgVerifyInvariantResponse":{"description":"MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type.","type":"object"},"cosmos.crypto.multisig.v1beta1.CompactBitArray":{"description":"CompactBitArray is an implementation of a space efficient bit array.\nThis is used to ensure that the encoded data takes up a minimal amount of\nspace after proto encoding.\nThis is not thread safe, and is not intended for concurrent usage.","type":"object","properties":{"elems":{"type":"string","format":"byte"},"extra_bits_stored":{"type":"integer","format":"int64"}}},"cosmos.distribution.v1beta1.DelegationDelegatorReward":{"description":"DelegationDelegatorReward represents the properties\nof a delegator's delegation reward.","type":"object","properties":{"reward":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse":{"description":"MsgDepositValidatorRewardsPoolResponse defines the response to executing a\nMsgDepositValidatorRewardsPool message.\n\nSince: cosmos-sdk 0.50","type":"object"},"cosmos.distribution.v1beta1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.distribution.v1beta1.MsgSetWithdrawAddress":{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","type":"object","properties":{"delegator_address":{"type":"string"},"withdraw_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse":{"description":"MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response\ntype.","type":"object"},"cosmos.distribution.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/distribution parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward":{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse":{"description":"MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward\nresponse type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission":{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","type":"object","properties":{"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse":{"description":"MsgWithdrawValidatorCommissionResponse defines the\nMsg/WithdrawValidatorCommission response type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.Params":{"description":"Params defines the set of params for the distribution module.","type":"object","properties":{"base_proposer_reward":{"description":"Deprecated: The base_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"bonus_proposer_reward":{"description":"Deprecated: The bonus_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"community_tax":{"type":"string"},"withdraw_addr_enabled":{"type":"boolean"}}},"cosmos.distribution.v1beta1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationRewardsResponse":{"description":"QueryDelegationRewardsResponse is the response type for the\nQuery/DelegationRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines the rewards accrued by a delegation.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse":{"description":"QueryDelegationTotalRewardsResponse is the response type for the\nQuery/DelegationTotalRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines all the rewards accrued by a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.DelegationDelegatorReward"}},"total":{"description":"total defines the sum of all the rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is the response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"validators":{"description":"validators defines the validators a delegator is delegating for.","type":"array","items":{"type":"string"}}}},"cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse":{"description":"QueryDelegatorWithdrawAddressResponse is the response type for the\nQuery/DelegatorWithdrawAddress RPC method.","type":"object","properties":{"withdraw_address":{"description":"withdraw_address defines the delegator address to query for.","type":"string"}}},"cosmos.distribution.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.QueryValidatorCommissionResponse":{"type":"object","title":"QueryValidatorCommissionResponse is the response type for the\nQuery/ValidatorCommission RPC method","properties":{"commission":{"description":"commission defines the commission the validator received.","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorAccumulatedCommission"}}},"cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse":{"description":"QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method.","type":"object","properties":{"commission":{"description":"commission defines the commission the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"operator_address":{"description":"operator_address defines the validator operator address.","type":"string"},"self_bond_rewards":{"description":"self_bond_rewards defines the self delegations rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse":{"description":"QueryValidatorOutstandingRewardsResponse is the response type for the\nQuery/ValidatorOutstandingRewards RPC method.","type":"object","properties":{"rewards":{"$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorOutstandingRewards"}}},"cosmos.distribution.v1beta1.QueryValidatorSlashesResponse":{"description":"QueryValidatorSlashesResponse is the response type for the\nQuery/ValidatorSlashes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"slashes":{"description":"slashes defines the slashes the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorSlashEvent"}}}},"cosmos.distribution.v1beta1.ValidatorAccumulatedCommission":{"description":"ValidatorAccumulatedCommission represents accumulated commission\nfor a validator kept as a running counter, can be withdrawn at any time.","type":"object","properties":{"commission":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorOutstandingRewards":{"description":"ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\nfor a validator inexpensive to track, allows simple sanity checks.","type":"object","properties":{"rewards":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorSlashEvent":{"description":"ValidatorSlashEvent represents a validator slash event.\nHeight is implicit within the store key.\nThis is needed to calculate appropriate amount of staking tokens\nfor delegations which are withdrawn after a slash has occurred.","type":"object","properties":{"fraction":{"type":"string"},"validator_period":{"type":"string","format":"uint64"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidence":{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","type":"object","properties":{"evidence":{"description":"evidence defines the evidence of misbehavior.","$ref":"#/definitions/google.protobuf.Any"},"submitter":{"description":"submitter is the signer account address of evidence.","type":"string"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse":{"description":"MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.","type":"object","properties":{"hash":{"description":"hash defines the hash of the evidence.","type":"string","format":"byte"}}},"cosmos.evidence.v1beta1.QueryAllEvidenceResponse":{"description":"QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC\nmethod.","type":"object","properties":{"evidence":{"description":"evidence returns all evidences.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.evidence.v1beta1.QueryEvidenceResponse":{"description":"QueryEvidenceResponse is the response type for the Query/Evidence RPC method.","type":"object","properties":{"evidence":{"description":"evidence returns the requested evidence.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.feegrant.v1beta1.Grant":{"type":"object","title":"Grant is stored in the KVStore to record a grant with full context","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowance":{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","type":"object","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse":{"description":"MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgPruneAllowances":{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","type":"object","properties":{"pruner":{"description":"pruner is the address of the user pruning expired allowances.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse":{"description":"MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type.\n\nSince cosmos-sdk 0.50","type":"object"},"cosmos.feegrant.v1beta1.MsgRevokeAllowance":{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","type":"object","properties":{"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse":{"description":"MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.QueryAllowanceResponse":{"description":"QueryAllowanceResponse is the response type for the Query/Allowance RPC method.","type":"object","properties":{"allowance":{"description":"allowance is a allowance granted for grantee by granter.","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}}},"cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse":{"description":"QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"allowances":{"description":"allowances that have been issued by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.feegrant.v1beta1.QueryAllowancesResponse":{"description":"QueryAllowancesResponse is the response type for the Query/Allowances RPC method.","type":"object","properties":{"allowances":{"description":"allowances are allowance's granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1.MsgCancelProposal":{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1.MsgCancelProposalResponse":{"description":"MsgCancelProposalResponse defines the response structure for executing a\nMsgCancelProposal message.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"canceled_height":{"description":"canceled_height defines the block height at which the proposal is canceled.","type":"string","format":"uint64"},"canceled_time":{"description":"canceled_time is the time when proposal is canceled.","type":"string","format":"date-time"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1.MsgExecLegacyContent":{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","type":"object","properties":{"authority":{"description":"authority must be the gov module address.","type":"string"},"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.gov.v1.MsgExecLegacyContentResponse":{"description":"MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type.","type":"object"},"cosmos.gov.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited or not"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"messages":{"description":"messages are the arbitrary messages to be executed if proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.gov.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/gov parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.gov.v1.Params"}}},"cosmos.gov.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.gov.v1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the Vote.","type":"string"},"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the VoteWeighted.","type":"string"},"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1.Params":{"description":"Params defines the parameters for the x/gov module.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"burn_proposal_deposit_prevote":{"type":"boolean","title":"burn deposits if the proposal does not enter voting period"},"burn_vote_quorum":{"type":"boolean","title":"burn deposits if a proposal does not meet quorum"},"burn_vote_veto":{"type":"boolean","title":"burn deposits if quorum with vote type no_veto is met"},"expedited_min_deposit":{"description":"Minimum expedited deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"expedited_threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.67.\n\nSince: cosmos-sdk 0.50","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.\n\nSince: cosmos-sdk 0.50","type":"string"},"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"min_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value minimum that must be met when making a deposit.\nDefault value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be\nrequired.\n\nSince: cosmos-sdk 0.50","type":"string"},"min_initial_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value that must be paid at proposal submission.","type":"string"},"proposal_cancel_dest":{"description":"The address which will receive (proposal_cancel_ratio * deposit) proposal deposits.\nIf empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned.\n\nSince: cosmos-sdk 0.50","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.\n\nSince: cosmos-sdk 0.50","type":"string"},"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\n considered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\n vetoed. Default value: 1/3.","type":"string"},"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"description":"Since: cosmos-sdk 0.50","type":"string","title":"failed_reason defines the reason why the proposal failed"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"},"id":{"description":"id defines the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages are the arbitrary messages to be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/gov#proposal-3"},"proposer":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"proposer is the address of the proposal sumbitter"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1.QueryConstitutionResponse":{"type":"object","title":"QueryConstitutionResponse is the response type for the Query/Constitution RPC method","properties":{"constitution":{"type":"string"}}},"cosmos.gov.v1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1.Deposit"}}},"cosmos.gov.v1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"Deprecated: Prefer to use `params` instead.\ndeposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1.DepositParams"},"params":{"description":"params defines all the paramaters of x/gov module.\n\nSince: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.gov.v1.Params"},"tally_params":{"description":"Deprecated: Prefer to use `params` instead.\ntally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1.TallyParams"},"voting_params":{"description":"Deprecated: Prefer to use `params` instead.\nvoting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1.VotingParams"}}},"cosmos.gov.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"description":"proposal is the requested governance proposal.","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}},"cosmos.gov.v1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}}},"cosmos.gov.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"}}},"cosmos.gov.v1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1.Vote"}}},"cosmos.gov.v1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Vote"}}}},"cosmos.gov.v1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string"}}},"cosmos.gov.v1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the number of abstain votes on a proposal.","type":"string"},"no_count":{"description":"no_count is the number of no votes on a proposal.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the number of no with veto votes on a proposal.","type":"string"},"yes_count":{"description":"yes_count is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.gov.v1beta1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1beta1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1beta1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1beta1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1beta1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.\n\nSince: cosmos-sdk 0.43","type":"object"},"cosmos.gov.v1beta1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1beta1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1beta1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1beta1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}}},"cosmos.gov.v1beta1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"deposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.DepositParams"},"tally_params":{"description":"tally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyParams"},"voting_params":{"description":"voting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1beta1.VotingParams"}}},"cosmos.gov.v1beta1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}},"cosmos.gov.v1beta1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}}},"cosmos.gov.v1beta1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"}}},"cosmos.gov.v1beta1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}},"cosmos.gov.v1beta1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}}},"cosmos.gov.v1beta1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string","format":"byte"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string","format":"byte"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string","format":"byte"}}},"cosmos.gov.v1beta1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain":{"description":"abstain is the number of abstain votes on a proposal.","type":"string"},"no":{"description":"no is the number of no votes on a proposal.","type":"string"},"no_with_veto":{"description":"no_with_veto is the number of no with veto votes on a proposal.","type":"string"},"yes":{"description":"yes is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1beta1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"option":{"description":"Deprecated: Prefer to use `options` instead. This field is set in queries\nif and only if `len(options) == 1` and that option has weight 1. In all\nother cases, this field will default to VOTE_OPTION_UNSPECIFIED.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"options":{"description":"options is the weighted vote options.\n\nSince: cosmos-sdk 0.43","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1beta1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1beta1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1beta1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.group.v1.Exec":{"description":"Exec defines modes of execution of a proposal on creation or on new vote.\n\n - EXEC_UNSPECIFIED: An empty value means that there should be a separate\nMsgExec request for the proposal to execute.\n - EXEC_TRY: Try to execute the proposal immediately.\nIf the proposal is not allowed per the DecisionPolicy,\nthe proposal will still be open and could\nbe executed at a later point.","type":"string","default":"EXEC_UNSPECIFIED","enum":["EXEC_UNSPECIFIED","EXEC_TRY"]},"cosmos.group.v1.GroupInfo":{"description":"GroupInfo represents the high-level on-chain information for a group.","type":"object","properties":{"admin":{"description":"admin is the account address of the group's admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group was created.","type":"string","format":"date-time"},"id":{"description":"id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata to attached to the group.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1"},"total_weight":{"description":"total_weight is the sum of the group members' weights.","type":"string"},"version":{"type":"string","format":"uint64","title":"version is used to track changes to a group's membership structure that\nwould break existing proposals. Whenever any members weight is changed,\nor any member is added or removed this version is incremented and will\ncause proposals based on older versions of this group to fail"}}},"cosmos.group.v1.GroupMember":{"description":"GroupMember represents the relationship between a group and a member.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member":{"description":"member is the member data.","$ref":"#/definitions/cosmos.group.v1.Member"}}},"cosmos.group.v1.GroupPolicyInfo":{"description":"GroupPolicyInfo represents the high-level on-chain information for a group policy.","type":"object","properties":{"address":{"description":"address is the account address of group policy.","type":"string"},"admin":{"description":"admin is the account address of the group admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group policy was created.","type":"string","format":"date-time"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the group policy.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#decision-policy-1"},"version":{"description":"version is used to track changes to a group's GroupPolicyInfo structure that\nwould create a different result on a running proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.Member":{"description":"Member represents a group member with an account address,\nnon-zero weight, metadata and added_at timestamp.","type":"object","properties":{"added_at":{"description":"added_at is a timestamp specifying when a member was added.","type":"string","format":"date-time"},"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MemberRequest":{"description":"MemberRequest represents a group member to be used in Msg server requests.\nContrary to `Member`, it doesn't have any `added_at` field\nsince this field cannot be set as part of requests.","type":"object","properties":{"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MsgCreateGroup":{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}},"metadata":{"description":"metadata is any arbitrary metadata to attached to the group.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicy":{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is any arbitrary metadata attached to the group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicyResponse":{"description":"MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type.","type":"object","properties":{"address":{"description":"address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupResponse":{"description":"MsgCreateGroupResponse is the Msg/CreateGroup response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgCreateGroupWithPolicy":{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group and group policy admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_metadata":{"description":"group_metadata is any arbitrary metadata attached to the group.","type":"string"},"group_policy_as_admin":{"description":"group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group\nand group policy admin.","type":"boolean"},"group_policy_metadata":{"description":"group_policy_metadata is any arbitrary metadata attached to the group policy.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgCreateGroupWithPolicyResponse":{"description":"MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group with policy.","type":"string","format":"uint64"},"group_policy_address":{"description":"group_policy_address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgExec":{"description":"MsgExec is the Msg/Exec request type.","type":"object","properties":{"executor":{"description":"executor is the account address used to execute the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgExecResponse":{"description":"MsgExecResponse is the Msg/Exec request type.","type":"object","properties":{"result":{"description":"result is the final result of the proposal execution.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"}}},"cosmos.group.v1.MsgLeaveGroup":{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","type":"object","properties":{"address":{"description":"address is the account address of the group member.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgLeaveGroupResponse":{"description":"MsgLeaveGroupResponse is the Msg/LeaveGroup response type.","type":"object"},"cosmos.group.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","type":"object","properties":{"exec":{"description":"exec defines the mode of execution of the proposal,\nwhether it should be executed immediately on creation or not.\nIf so, proposers signatures are considered as Yes votes.","$ref":"#/definitions/cosmos.group.v1.Exec"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposers":{"description":"proposers are the account addresses of the proposers.\nProposers signatures will be counted as yes votes.","type":"array","items":{"type":"string"}},"summary":{"description":"summary is the summary of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.group.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse is the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgUpdateGroupAdmin":{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the current account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"new_admin":{"description":"new_admin is the group new admin account address.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupAdminResponse":{"description":"MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMembers":{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member_updates":{"description":"member_updates is the list of members to update,\nset weight to 0 to remove a member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgUpdateGroupMembersResponse":{"description":"MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMetadata":{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is the updated group's metadata.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupMetadataResponse":{"description":"MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyAdmin":{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of the group policy.","type":"string"},"new_admin":{"description":"new_admin is the new group policy admin.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse":{"description":"MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy":{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy is the updated group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse":{"description":"MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyMetadata":{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"metadata":{"description":"metadata is the group policy metadata to be updated.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse":{"description":"MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type.","type":"object"},"cosmos.group.v1.MsgVote":{"description":"MsgVote is the Msg/Vote request type.","type":"object","properties":{"exec":{"description":"exec defines whether the proposal should be executed\nimmediately after voting or not.","$ref":"#/definitions/cosmos.group.v1.Exec"},"metadata":{"description":"metadata is any arbitrary metadata attached to the vote.","type":"string"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter account address.","type":"string"}}},"cosmos.group.v1.MsgVoteResponse":{"description":"MsgVoteResponse is the Msg/Vote response type.","type":"object"},"cosmos.group.v1.MsgWithdrawProposal":{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","type":"object","properties":{"address":{"description":"address is the admin of the group policy or one of the proposer of the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgWithdrawProposalResponse":{"description":"MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type.","type":"object"},"cosmos.group.v1.Proposal":{"description":"Proposal defines a group proposal. Any member of a group can submit a proposal\nfor a group policy to decide upon.\nA proposal consists of a set of `sdk.Msg`s that will be executed if the proposal\npasses as well as some optional metadata associated with the proposal.","type":"object","properties":{"executor_result":{"description":"executor_result is the final result of the proposal execution. Initial value is NotRun.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"},"final_tally_result":{"description":"final_tally_result contains the sums of all weighted votes for this\nproposal for each vote option. It is empty at submission, and only\npopulated after tallying, at voting period end or at proposal execution,\nwhichever happens first.","$ref":"#/definitions/cosmos.group.v1.TallyResult"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"group_policy_version":{"description":"group_policy_version tracks the version of the group policy at proposal submission.\nWhen a decision policy is changed, existing proposals from previous policy\nversions will become invalid with the `ABORTED` status.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"group_version":{"description":"group_version tracks the version of the group at proposal submission.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"id":{"description":"id is the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#proposal-4"},"proposers":{"description":"proposers are the account addresses of the proposers.","type":"array","items":{"type":"string"}},"status":{"description":"status represents the high level position in the life cycle of the proposal. Initial value is Submitted.","$ref":"#/definitions/cosmos.group.v1.ProposalStatus"},"submit_time":{"description":"submit_time is a timestamp specifying when a proposal was submitted.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"voting_period_end":{"description":"voting_period_end is the timestamp before which voting must be done.\nUnless a successful MsgExec is called before (to execute a proposal whose\ntally is successful before the voting period ends), tallying will be done\nat this point, and the `final_tally_result`and `status` fields will be\naccordingly updated.","type":"string","format":"date-time"}}},"cosmos.group.v1.ProposalExecutorResult":{"description":"ProposalExecutorResult defines types of proposal executor results.\n\n - PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED: An empty value is not allowed.\n - PROPOSAL_EXECUTOR_RESULT_NOT_RUN: We have not yet run the executor.\n - PROPOSAL_EXECUTOR_RESULT_SUCCESS: The executor was successful and proposed action updated state.\n - PROPOSAL_EXECUTOR_RESULT_FAILURE: The executor returned an error and proposed action didn't update state.","type":"string","default":"PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","enum":["PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","PROPOSAL_EXECUTOR_RESULT_NOT_RUN","PROPOSAL_EXECUTOR_RESULT_SUCCESS","PROPOSAL_EXECUTOR_RESULT_FAILURE"]},"cosmos.group.v1.ProposalStatus":{"description":"ProposalStatus defines proposal statuses.\n\n - PROPOSAL_STATUS_UNSPECIFIED: An empty value is invalid and not allowed.\n - PROPOSAL_STATUS_SUBMITTED: Initial status of a proposal when submitted.\n - PROPOSAL_STATUS_ACCEPTED: Final status of a proposal when the final tally is done and the outcome\npasses the group policy's decision policy.\n - PROPOSAL_STATUS_REJECTED: Final status of a proposal when the final tally is done and the outcome\nis rejected by the group policy's decision policy.\n - PROPOSAL_STATUS_ABORTED: Final status of a proposal when the group policy is modified before the\nfinal tally.\n - PROPOSAL_STATUS_WITHDRAWN: A proposal can be withdrawn before the voting start time by the owner.\nWhen this happens the final status is Withdrawn.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_SUBMITTED","PROPOSAL_STATUS_ACCEPTED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_ABORTED","PROPOSAL_STATUS_WITHDRAWN"]},"cosmos.group.v1.QueryGroupInfoResponse":{"description":"QueryGroupInfoResponse is the Query/GroupInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupInfo of the group.","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}}},"cosmos.group.v1.QueryGroupMembersResponse":{"description":"QueryGroupMembersResponse is the Query/GroupMembersResponse response type.","type":"object","properties":{"members":{"description":"members are the members of the group with given group_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupMember"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByAdminResponse":{"description":"QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info with provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByGroupResponse":{"description":"QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info associated with the provided group.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPolicyInfoResponse":{"description":"QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupPolicyInfo of the group policy.","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}}},"cosmos.group.v1.QueryGroupsByAdminResponse":{"description":"QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsByMemberResponse":{"description":"QueryGroupsByMemberResponse is the Query/GroupsByMember response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided group member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsResponse":{"description":"QueryGroupsResponse is the Query/Groups response type.\n\nSince: cosmos-sdk 0.47.1","type":"object","properties":{"groups":{"description":"`groups` is all the groups present in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the Query/Proposal response type.","type":"object","properties":{"proposal":{"description":"proposal is the proposal info.","$ref":"#/definitions/cosmos.group.v1.Proposal"}}},"cosmos.group.v1.QueryProposalsByGroupPolicyResponse":{"description":"QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals are the proposals with given group policy.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Proposal"}}}},"cosmos.group.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the Query/TallyResult response type.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.group.v1.TallyResult"}}},"cosmos.group.v1.QueryVoteByProposalVoterResponse":{"description":"QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type.","type":"object","properties":{"vote":{"description":"vote is the vote with given proposal_id and voter.","$ref":"#/definitions/cosmos.group.v1.Vote"}}},"cosmos.group.v1.QueryVotesByProposalResponse":{"description":"QueryVotesByProposalResponse is the Query/VotesByProposal response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes for given proposal_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.QueryVotesByVoterResponse":{"description":"QueryVotesByVoterResponse is the Query/VotesByVoter response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes by given voter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.TallyResult":{"description":"TallyResult represents the sum of weighted votes for each vote option.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the weighted sum of abstainers.","type":"string"},"no_count":{"description":"no_count is the weighted sum of no votes.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the weighted sum of veto.","type":"string"},"yes_count":{"description":"yes_count is the weighted sum of yes votes.","type":"string"}}},"cosmos.group.v1.Vote":{"type":"object","title":"Vote represents a vote for a proposal.string metadata","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"submit_time":{"description":"submit_time is the timestamp when the vote was submitted.","type":"string","format":"date-time"},"voter":{"description":"voter is the account address of the voter.","type":"string"}}},"cosmos.group.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will\nreturn an error.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.mint.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.mint.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.mint.v1beta1.Params":{"description":"Params defines the parameters for the x/mint module.","type":"object","properties":{"blocks_per_year":{"type":"string","format":"uint64","title":"expected blocks per year"},"goal_bonded":{"type":"string","title":"goal of percent bonded atoms"},"inflation_max":{"type":"string","title":"maximum inflation rate"},"inflation_min":{"type":"string","title":"minimum inflation rate"},"inflation_rate_change":{"type":"string","title":"maximum annual change in inflation rate"},"mint_denom":{"type":"string","title":"type of coin to mint"}}},"cosmos.mint.v1beta1.QueryAnnualProvisionsResponse":{"description":"QueryAnnualProvisionsResponse is the response type for the\nQuery/AnnualProvisions RPC method.","type":"object","properties":{"annual_provisions":{"description":"annual_provisions is the current minting annual provisions value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryInflationResponse":{"description":"QueryInflationResponse is the response type for the Query/Inflation RPC\nmethod.","type":"object","properties":{"inflation":{"description":"inflation is the current minting inflation value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.nft.v1beta1.Class":{"description":"Class defines the class of the nft type.","type":"object","properties":{"data":{"title":"data is the app specific metadata of the NFT class. Optional","$ref":"#/definitions/google.protobuf.Any"},"description":{"type":"string","title":"description is a brief description of nft classification. Optional"},"id":{"type":"string","title":"id defines the unique identifier of the NFT classification, similar to the contract address of ERC721"},"name":{"type":"string","title":"name defines the human-readable name of the NFT classification. Optional"},"symbol":{"type":"string","title":"symbol is an abbreviated name for nft classification. Optional"},"uri":{"type":"string","title":"uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri. Optional"}}},"cosmos.nft.v1beta1.MsgSend":{"description":"MsgSend represents a message to send a nft from one account to another account.","type":"object","properties":{"class_id":{"type":"string","title":"class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721"},"id":{"type":"string","title":"id defines the unique identification of nft"},"receiver":{"type":"string","title":"receiver is the receiver address of nft"},"sender":{"type":"string","title":"sender is the address of the owner of nft"}}},"cosmos.nft.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.nft.v1beta1.NFT":{"description":"NFT defines the NFT.","type":"object","properties":{"class_id":{"type":"string","title":"class_id associated with the NFT, similar to the contract address of ERC721"},"data":{"title":"data is an app specific data of the NFT. Optional","$ref":"#/definitions/google.protobuf.Any"},"id":{"type":"string","title":"id is a unique identifier of the NFT"},"uri":{"type":"string","title":"uri for the NFT metadata stored off chain"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri"}}},"cosmos.nft.v1beta1.QueryBalanceResponse":{"type":"object","title":"QueryBalanceResponse is the response type for the Query/Balance RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs of a given class owned by the owner"}}},"cosmos.nft.v1beta1.QueryClassResponse":{"type":"object","title":"QueryClassResponse is the response type for the Query/Class RPC method","properties":{"class":{"description":"class defines the class of the nft type.","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}}},"cosmos.nft.v1beta1.QueryClassesResponse":{"type":"object","title":"QueryClassesResponse is the response type for the Query/Classes RPC method","properties":{"classes":{"description":"class defines the class of the nft type.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryNFTResponse":{"type":"object","title":"QueryNFTResponse is the response type for the Query/NFT RPC method","properties":{"nft":{"title":"owner is the owner address of the nft","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}}},"cosmos.nft.v1beta1.QueryNFTsResponse":{"type":"object","title":"QueryNFTsResponse is the response type for the Query/NFTs RPC methods","properties":{"nfts":{"type":"array","title":"NFT defines the NFT","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryOwnerResponse":{"type":"object","title":"QueryOwnerResponse is the response type for the Query/Owner RPC method","properties":{"owner":{"type":"string","title":"owner is the owner address of the nft"}}},"cosmos.nft.v1beta1.QuerySupplyResponse":{"type":"object","title":"QuerySupplyResponse is the response type for the Query/Supply RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs from the given class"}}},"cosmos.params.v1beta1.ParamChange":{"description":"ParamChange defines an individual parameter change, for use in\nParameterChangeProposal.","type":"object","properties":{"key":{"type":"string"},"subspace":{"type":"string"},"value":{"type":"string"}}},"cosmos.params.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"param":{"description":"param defines the queried parameter.","$ref":"#/definitions/cosmos.params.v1beta1.ParamChange"}}},"cosmos.params.v1beta1.QuerySubspacesResponse":{"description":"QuerySubspacesResponse defines the response types for querying for all\nregistered subspaces and all keys for a subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"subspaces":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.params.v1beta1.Subspace"}}}},"cosmos.params.v1beta1.Subspace":{"description":"Subspace defines a parameter subspace name and all the keys that exist for\nthe subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjail":{"type":"object","title":"MsgUnjail defines the Msg/Unjail request type","properties":{"validator_addr":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjailResponse":{"type":"object","title":"MsgUnjailResponse defines the Msg/Unjail response type"},"cosmos.slashing.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/slashing parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.slashing.v1beta1.Params":{"description":"Params represents the parameters used for by the slashing module.","type":"object","properties":{"downtime_jail_duration":{"type":"string"},"min_signed_per_window":{"type":"string","format":"byte"},"signed_blocks_window":{"type":"string","format":"int64"},"slash_fraction_double_sign":{"type":"string","format":"byte"},"slash_fraction_downtime":{"type":"string","format":"byte"}}},"cosmos.slashing.v1beta1.QueryParamsResponse":{"type":"object","title":"QueryParamsResponse is the response type for the Query/Params RPC method","properties":{"params":{"$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.QuerySigningInfoResponse":{"type":"object","title":"QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC\nmethod","properties":{"val_signing_info":{"title":"val_signing_info is the signing info of requested val cons address","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}}},"cosmos.slashing.v1beta1.QuerySigningInfosResponse":{"type":"object","title":"QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC\nmethod","properties":{"info":{"type":"array","title":"info is the signing info of all validators","items":{"type":"object","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.slashing.v1beta1.ValidatorSigningInfo":{"description":"ValidatorSigningInfo defines a validator's signing info for monitoring their\nliveness activity.","type":"object","properties":{"address":{"type":"string"},"index_offset":{"description":"Index which is incremented every time a validator is bonded in a block and\n_may_ have signed a pre-commit or not. This in conjunction with the\nsigned_blocks_window param determines the index in the missed block bitmap.","type":"string","format":"int64"},"jailed_until":{"description":"Timestamp until which the validator is jailed due to liveness downtime.","type":"string","format":"date-time"},"missed_blocks_counter":{"description":"A counter of missed (unsigned) blocks. It is used to avoid unnecessary\nreads in the missed block bitmap.","type":"string","format":"int64"},"start_height":{"type":"string","format":"int64","title":"Height at which validator was first a candidate OR was un-jailed"},"tombstoned":{"description":"Whether or not a validator has been tombstoned (killed out of validator\nset). It is set once the validator commits an equivocation or for any other\nconfigured misbehavior.","type":"boolean"}}},"cosmos.staking.v1beta1.BondStatus":{"description":"BondStatus is the status of a validator.\n\n - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.","type":"string","default":"BOND_STATUS_UNSPECIFIED","enum":["BOND_STATUS_UNSPECIFIED","BOND_STATUS_UNBONDED","BOND_STATUS_UNBONDING","BOND_STATUS_BONDED"]},"cosmos.staking.v1beta1.Commission":{"description":"Commission defines commission parameters for a given validator.","type":"object","properties":{"commission_rates":{"description":"commission_rates defines the initial commission rates to be used for creating a validator.","$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"update_time":{"description":"update_time is the last time the commission rate was changed.","type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.CommissionRates":{"description":"CommissionRates defines the initial commission rates to be used for creating\na validator.","type":"object","properties":{"max_change_rate":{"description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction.","type":"string"},"max_rate":{"description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction.","type":"string"},"rate":{"description":"rate is the commission rate charged to delegators, as a fraction.","type":"string"}}},"cosmos.staking.v1beta1.Delegation":{"description":"Delegation represents the bond with tokens held by an account. It is\nowned by one delegator, and is associated with the voting power of one\nvalidator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"shares":{"description":"shares define the delegation shares received.","type":"string"},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.DelegationResponse":{"description":"DelegationResponse is equivalent to Delegation except that it contains a\nbalance in addition to shares which is more suitable for client responses.","type":"object","properties":{"balance":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Delegation"}}},"cosmos.staking.v1beta1.Description":{"description":"Description defines a validator description.","type":"object","properties":{"details":{"description":"details define other optional details.","type":"string"},"identity":{"description":"identity defines an optional identity signature (ex. UPort or Keybase).","type":"string"},"moniker":{"description":"moniker defines a human-readable name for the validator.","type":"string"},"security_contact":{"description":"security_contact defines an optional email for security contact.","type":"string"},"website":{"description":"website defines an optional website link.","type":"string"}}},"cosmos.staking.v1beta1.HistoricalInfo":{"description":"HistoricalInfo contains header and validator information for a given block.\nIt is stored as part of staking module's state, which persists the `n` most\nrecent HistoricalInfo\n(`n` is set by the staking module's `historical_entries` parameter).","type":"object","properties":{"header":{"$ref":"#/definitions/tendermint.types.Header"},"valset":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgBeginRedelegateResponse":{"description":"MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegation":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator","properties":{"amount":{"title":"amount is always less than or equal to unbonding delegation entry balance","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegationResponse"},"cosmos.staking.v1beta1.MsgCreateValidator":{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","type":"object","properties":{"commission":{"$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"delegator_address":{"description":"Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated.\nThe validator address bytes and delegator address bytes refer to the same account while creating validator (defer\nonly in bech32 notation).","type":"string"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"pubkey":{"$ref":"#/definitions/google.protobuf.Any"},"validator_address":{"type":"string"},"value":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.staking.v1beta1.MsgCreateValidatorResponse":{"description":"MsgCreateValidatorResponse defines the Msg/CreateValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgDelegate":{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgDelegateResponse":{"description":"MsgDelegateResponse defines the Msg/Delegate response type.","type":"object"},"cosmos.staking.v1beta1.MsgEditValidator":{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","type":"object","properties":{"commission_rate":{"type":"string","title":"We pass a reference to the new commission rate and min self delegation as\nit's not mandatory to update. If not updated, the deserialized rate will be\nzero with no way to distinguish if an update was intended.\nREF: #2373"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgEditValidatorResponse":{"description":"MsgEditValidatorResponse defines the Msg/EditValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgUndelegate":{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgUndelegateResponse":{"description":"MsgUndelegateResponse defines the Msg/Undelegate response type.","type":"object","properties":{"amount":{"description":"Since: cosmos-sdk 0.50","title":"amount returns the amount of undelegated coins","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/staking parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.staking.v1beta1.Params":{"description":"Params defines the parameters for the x/staking module.","type":"object","properties":{"bond_denom":{"description":"bond_denom defines the bondable coin denomination.","type":"string"},"historical_entries":{"description":"historical_entries is the number of historical entries to persist.","type":"integer","format":"int64"},"max_entries":{"description":"max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio).","type":"integer","format":"int64"},"max_validators":{"description":"max_validators is the maximum number of validators.","type":"integer","format":"int64"},"min_commission_rate":{"type":"string","title":"min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators"},"unbonding_time":{"description":"unbonding_time is the time duration of unbonding.","type":"string"}}},"cosmos.staking.v1beta1.Pool":{"description":"Pool is used for tracking bonded and not-bonded token supply of the bond\ndenomination.","type":"object","properties":{"bonded_tokens":{"type":"string"},"not_bonded_tokens":{"type":"string"}}},"cosmos.staking.v1beta1.QueryDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/Delegation RPC method.","type":"object","properties":{"delegation_response":{"description":"delegation_responses defines the delegation info of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse":{"description":"QueryDelegatorDelegationsResponse is response type for the\nQuery/DelegatorDelegations RPC method.","type":"object","properties":{"delegation_responses":{"description":"delegation_responses defines all the delegations' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse":{"description":"QueryUnbondingDelegatorDelegationsResponse is response type for the\nQuery/UnbondingDelegatorDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorResponse":{"description":"QueryDelegatorValidatorResponse response type for the\nQuery/DelegatorValidator RPC method.","type":"object","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators defines the validators' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.QueryHistoricalInfoResponse":{"description":"QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC\nmethod.","type":"object","properties":{"hist":{"description":"hist defines the historical info at the given height.","$ref":"#/definitions/cosmos.staking.v1beta1.HistoricalInfo"}}},"cosmos.staking.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.QueryPoolResponse":{"description":"QueryPoolResponse is response type for the Query/Pool RPC method.","type":"object","properties":{"pool":{"description":"pool defines the pool info.","$ref":"#/definitions/cosmos.staking.v1beta1.Pool"}}},"cosmos.staking.v1beta1.QueryRedelegationsResponse":{"description":"QueryRedelegationsResponse is response type for the Query/Redelegations RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"redelegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationResponse"}}}},"cosmos.staking.v1beta1.QueryUnbondingDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/UnbondingDelegation\nRPC method.","type":"object","properties":{"unbond":{"description":"unbond defines the unbonding information of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}},"cosmos.staking.v1beta1.QueryValidatorDelegationsResponse":{"type":"object","title":"QueryValidatorDelegationsResponse is response type for the\nQuery/ValidatorDelegations RPC method","properties":{"delegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryValidatorResponse":{"type":"object","title":"QueryValidatorResponse is response type for the Query/Validator RPC method","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse":{"description":"QueryValidatorUnbondingDelegationsResponse is response type for the\nQuery/ValidatorUnbondingDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryValidatorsResponse":{"type":"object","title":"QueryValidatorsResponse is response type for the Query/Validators RPC method","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators contains all the queried validators.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.Redelegation":{"description":"Redelegation contains the list of a particular delegator's redelegating bonds\nfrom a particular source validator to a particular destination validator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the bech32-encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the redelegation entries.\n\nredelegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}},"validator_dst_address":{"description":"validator_dst_address is the validator redelegation destination operator address.","type":"string"},"validator_src_address":{"description":"validator_src_address is the validator redelegation source operator address.","type":"string"}}},"cosmos.staking.v1beta1.RedelegationEntry":{"description":"RedelegationEntry defines a redelegation object with relevant metadata.","type":"object","properties":{"completion_time":{"description":"completion_time defines the unix time for redelegation completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height defines the height which the redelegation took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the initial balance when redelegation started.","type":"string"},"shares_dst":{"description":"shares_dst is the amount of destination-validator shares created by redelegation.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.RedelegationEntryResponse":{"description":"RedelegationEntryResponse is equivalent to a RedelegationEntry except that it\ncontains a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"balance":{"type":"string"},"redelegation_entry":{"$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}}},"cosmos.staking.v1beta1.RedelegationResponse":{"description":"RedelegationResponse is equivalent to a Redelegation except that its entries\ncontain a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntryResponse"}},"redelegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Redelegation"}}},"cosmos.staking.v1beta1.UnbondingDelegation":{"description":"UnbondingDelegation stores all of a single delegator's unbonding bonds\nfor a single validator in an time-ordered list.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the unbonding delegation entries.\n\nunbonding delegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegationEntry"}},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.UnbondingDelegationEntry":{"description":"UnbondingDelegationEntry defines an unbonding object with relevant metadata.","type":"object","properties":{"balance":{"description":"balance defines the tokens to receive at completion.","type":"string"},"completion_time":{"description":"completion_time is the unix time for unbonding completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the tokens initially scheduled to receive at completion.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.Validator":{"description":"Validator defines a validator, together with the total amount of the\nValidator's bond shares and their exchange rate to coins. Slashing results in\na decrease in the exchange rate, allowing correct calculation of future\nundelegations without iterating over delegators. When coins are delegated to\nthis validator, the validator is credited with a delegation whose number of\nbond shares is based on the amount of coins delegated divided by the current\nexchange rate. Voting power can be calculated as total bonded shares\nmultiplied by exchange rate.","type":"object","properties":{"commission":{"description":"commission defines the commission parameters.","$ref":"#/definitions/cosmos.staking.v1beta1.Commission"},"consensus_pubkey":{"description":"consensus_pubkey is the consensus public key of the validator, as a Protobuf Any.","$ref":"#/definitions/google.protobuf.Any"},"delegator_shares":{"description":"delegator_shares defines total shares issued to a validator's delegators.","type":"string"},"description":{"description":"description defines the description terms for the validator.","$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"jailed":{"description":"jailed defined whether the validator has been jailed from bonded status or not.","type":"boolean"},"min_self_delegation":{"description":"min_self_delegation is the validator's self declared minimum self delegation.\n\nSince: cosmos-sdk 0.46","type":"string"},"operator_address":{"description":"operator_address defines the address of the validator's operator; bech encoded in JSON.","type":"string"},"status":{"description":"status is the validator status (bonded/unbonding/unbonded).","$ref":"#/definitions/cosmos.staking.v1beta1.BondStatus"},"tokens":{"description":"tokens define the delegated tokens (incl. self-delegation).","type":"string"},"unbonding_height":{"description":"unbonding_height defines, if unbonding, the height at which this validator has begun unbonding.","type":"string","format":"int64"},"unbonding_ids":{"type":"array","title":"list of unbonding ids, each uniquely identifing an unbonding of this validator","items":{"type":"string","format":"uint64"}},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"strictly positive if this validator's unbonding has been stopped by external modules"},"unbonding_time":{"description":"unbonding_time defines, if unbonding, the min time for the validator to complete unbonding.","type":"string","format":"date-time"}}},"cosmos.store.streaming.abci.ListenCommitRequest":{"type":"object","title":"ListenCommitRequest is the request type for the ListenCommit RPC method","properties":{"block_height":{"type":"string","format":"int64","title":"explicitly pass in block height as ResponseCommit does not contain this info"},"change_set":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.store.v1beta1.StoreKVPair"}},"res":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}}},"cosmos.store.streaming.abci.ListenCommitResponse":{"type":"object","title":"ListenCommitResponse is the response type for the ListenCommit RPC method"},"cosmos.store.streaming.abci.ListenFinalizeBlockRequest":{"type":"object","title":"ListenEndBlockRequest is the request type for the ListenEndBlock RPC method","properties":{"req":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"},"res":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}}},"cosmos.store.streaming.abci.ListenFinalizeBlockResponse":{"type":"object","title":"ListenEndBlockResponse is the response type for the ListenEndBlock RPC method"},"cosmos.store.v1beta1.StoreKVPair":{"description":"Since: cosmos-sdk 0.43","type":"object","title":"StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes)\nIt optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and\nDeletes","properties":{"delete":{"type":"boolean","title":"true indicates a delete operation, false indicates a set operation"},"key":{"type":"string","format":"byte"},"store_key":{"type":"string","title":"the store key for the KVStore this pair originates from"},"value":{"type":"string","format":"byte"}}},"cosmos.tx.signing.v1beta1.SignMode":{"description":"SignMode represents a signing mode with its own security guarantees.\n\nThis enum should be considered a registry of all known sign modes\nin the Cosmos ecosystem. Apps are not expected to support all known\nsign modes. Apps that would like to support custom sign modes are\nencouraged to open a small PR against this file to add a new case\nto this SignMode enum describing their sign mode so that different\napps have a consistent version of this enum.\n\n - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\nrejected.\n - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\nverified with raw bytes from Tx.\n - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\nhuman-readable textual representation on top of the binary representation\nfrom SIGN_MODE_DIRECT.\n\nSince: cosmos-sdk 0.50\n - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\nSignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\nrequire signers signing over other signers' `signer_info`.\n\nSince: cosmos-sdk 0.46\n - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\nAmino JSON and will be removed in the future.\n - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\nSDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\nCurrently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\nbut is not implemented on the SDK by default. To enable EIP-191, you need\nto pass a custom `TxConfig` that has an implementation of\n`SignModeHandler` for EIP-191. The SDK may decide to fully support\nEIP-191 in the future.\n\nSince: cosmos-sdk 0.45.2","type":"string","default":"SIGN_MODE_UNSPECIFIED","enum":["SIGN_MODE_UNSPECIFIED","SIGN_MODE_DIRECT","SIGN_MODE_TEXTUAL","SIGN_MODE_DIRECT_AUX","SIGN_MODE_LEGACY_AMINO_JSON","SIGN_MODE_EIP_191"]},"cosmos.tx.v1beta1.AuthInfo":{"description":"AuthInfo describes the fee and signer modes that are used to sign a\ntransaction.","type":"object","properties":{"fee":{"description":"Fee is the fee and gas limit for the transaction. The first signer is the\nprimary signer and the one which pays the fee. The fee can be calculated\nbased on the cost of evaluating the body and doing signature verification\nof the signers. This can be estimated via simulation.","$ref":"#/definitions/cosmos.tx.v1beta1.Fee"},"signer_infos":{"description":"signer_infos defines the signing modes for the required signers. The number\nand order of elements must match the required signers from TxBody's\nmessages. The first element is the primary signer and the one which pays\nthe fee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.SignerInfo"}},"tip":{"description":"Tip is the optional tip used for transactions fees paid in another denom.\n\nThis field is ignored if the chain didn't enable tips, i.e. didn't add the\n`TipDecorator` in its posthandler.\n\nSince: cosmos-sdk 0.46","$ref":"#/definitions/cosmos.tx.v1beta1.Tip"}}},"cosmos.tx.v1beta1.BroadcastMode":{"description":"BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\nmethod.\n\n - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\nBROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits\nfor a CheckTx execution response only.\n - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client\nreturns immediately.","type":"string","default":"BROADCAST_MODE_UNSPECIFIED","enum":["BROADCAST_MODE_UNSPECIFIED","BROADCAST_MODE_BLOCK","BROADCAST_MODE_SYNC","BROADCAST_MODE_ASYNC"]},"cosmos.tx.v1beta1.BroadcastTxRequest":{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","type":"object","properties":{"mode":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastMode"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.BroadcastTxResponse":{"description":"BroadcastTxResponse is the response type for the\nService.BroadcastTx method.","type":"object","properties":{"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.Fee":{"description":"Fee includes the amount of coins paid in fees and the maximum\ngas to be used by the transaction. The ratio yields an effective \"gasprice\",\nwhich must be above some miminum to be accepted into the mempool.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of coins to be paid as a fee","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"gas_limit":{"type":"string","format":"uint64","title":"gas_limit is the maximum gas that can be used in transaction processing\nbefore an out of gas error occurs"},"granter":{"type":"string","title":"if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used\nto pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\nnot support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees.\nthe payer must be a tx signer (and thus have signed this field in AuthInfo).\nsetting this field does *not* change the ordering of required signers for the transaction.","type":"string"}}},"cosmos.tx.v1beta1.GetBlockWithTxsResponse":{"description":"GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs\nmethod.\n\nSince: cosmos-sdk 0.45.2","type":"object","properties":{"block":{"$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"pagination":{"description":"pagination defines a pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"txs":{"description":"txs are the transactions in the block.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.GetTxResponse":{"description":"GetTxResponse is the response type for the Service.GetTx method.","type":"object","properties":{"tx":{"description":"tx is the queried transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.GetTxsEventResponse":{"description":"GetTxsEventResponse is the response type for the Service.TxsByEvents\nRPC method.","type":"object","properties":{"pagination":{"description":"pagination defines a pagination for the response.\nDeprecated post v0.46.x: use total instead.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64","title":"total is total number of results available"},"tx_responses":{"description":"tx_responses is the list of queried TxResponses.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}},"txs":{"description":"txs is the list of queried transactions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.ModeInfo":{"description":"ModeInfo describes the signing mode of a single or nested multisig signer.","type":"object","properties":{"multi":{"title":"multi represents a nested multisig signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi"},"single":{"title":"single represents a single signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Single"}}},"cosmos.tx.v1beta1.ModeInfo.Multi":{"type":"object","title":"Multi is the mode info for a multisig public key","properties":{"bitarray":{"title":"bitarray specifies which keys within the multisig are signing","$ref":"#/definitions/cosmos.crypto.multisig.v1beta1.CompactBitArray"},"mode_infos":{"type":"array","title":"mode_infos is the corresponding modes of the signers of the multisig\nwhich could include nested multisig public keys","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"}}}},"cosmos.tx.v1beta1.ModeInfo.Single":{"type":"object","title":"Single is the mode info for a single signer. It is structured as a message\nto allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\nfuture","properties":{"mode":{"title":"mode is the signing mode of the single signer","$ref":"#/definitions/cosmos.tx.signing.v1beta1.SignMode"}}},"cosmos.tx.v1beta1.OrderBy":{"description":"- ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","type":"string","title":"OrderBy defines the sorting order","default":"ORDER_BY_UNSPECIFIED","enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"]},"cosmos.tx.v1beta1.SignerInfo":{"description":"SignerInfo describes the public key and signing mode of a single top-level\nsigner.","type":"object","properties":{"mode_info":{"title":"mode_info describes the signing mode of the signer and is a nested\nstructure to support nested multisig pubkey's","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"},"public_key":{"description":"public_key is the public key of the signer. It is optional for accounts\nthat already exist in state. If unset, the verifier can use the required \\\nsigner address for this position and lookup the public key.","$ref":"#/definitions/google.protobuf.Any"},"sequence":{"description":"sequence is the sequence of the account, which describes the\nnumber of committed transactions signed by a given address. It is used to\nprevent replay attacks.","type":"string","format":"uint64"}}},"cosmos.tx.v1beta1.SimulateRequest":{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to simulate.\nDeprecated. Send raw tx bytes instead.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_bytes":{"description":"tx_bytes is the raw transaction.\n\nSince: cosmos-sdk 0.43","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.SimulateResponse":{"description":"SimulateResponse is the response type for the\nService.SimulateRPC method.","type":"object","properties":{"gas_info":{"description":"gas_info is the information about gas used in the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.GasInfo"},"result":{"description":"result is the result of the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.Result"}}},"cosmos.tx.v1beta1.Tip":{"description":"Tip is the tip used for meta-transactions.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of the tip","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"tipper":{"type":"string","title":"tipper is the address of the account paying for the tip"}}},"cosmos.tx.v1beta1.Tx":{"description":"Tx is the standard type used for broadcasting transactions.","type":"object","properties":{"auth_info":{"title":"auth_info is the authorization related content of the transaction,\nspecifically signers, signer modes and fee","$ref":"#/definitions/cosmos.tx.v1beta1.AuthInfo"},"body":{"title":"body is the processable content of the transaction","$ref":"#/definitions/cosmos.tx.v1beta1.TxBody"},"signatures":{"description":"signatures is a list of signatures that matches the length and order of\nAuthInfo's signer_infos to allow connecting signature meta information like\npublic key and signing mode by position.","type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.tx.v1beta1.TxBody":{"description":"TxBody is the body of a transaction that all signers sign over.","type":"object","properties":{"extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, the transaction will be rejected","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"memo":{"description":"memo is any arbitrary note/comment to be added to the transaction.\nWARNING: in clients, any publicly exposed text should not be called memo,\nbut should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).","type":"string"},"messages":{"description":"messages is a list of messages to be executed. The required signers of\nthose messages define the number and order of elements in AuthInfo's\nsigner_infos and Tx's signatures. Each required signer address is added to\nthe list only the first time it occurs.\nBy convention, the first required signer (usually from the first message)\nis referred to as the primary signer and pays the fee for the whole\ntransaction.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"non_critical_extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, they will be ignored","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"timeout_height":{"type":"string","format":"uint64","title":"timeout is the block height after which this transaction will not\nbe processed by the chain"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeAminoResponse":{"description":"TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeResponse":{"description":"TxDecodeResponse is the response type for the\nService.TxDecode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the decoded transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeAminoRequest":{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxEncodeRequest":{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the transaction to encode.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeResponse":{"description":"TxEncodeResponse is the response type for the\nService.TxEncode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the encoded transaction bytes.","type":"string","format":"byte"}}},"cosmos.upgrade.v1beta1.ModuleVersion":{"description":"ModuleVersion specifies a module and its consensus version.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"name":{"type":"string","title":"name of the app module"},"version":{"type":"string","format":"uint64","title":"consensus version of the app module"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgrade":{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse":{"description":"MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"plan":{"description":"plan is the upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse":{"description":"MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.Plan":{"description":"Plan specifies information about a planned upgrade and when it should occur.","type":"object","properties":{"height":{"description":"The height at which the upgrade must be performed.","type":"string","format":"int64"},"info":{"type":"string","title":"Any application specific upgrade info to be included on-chain\nsuch as a git commit that validators could automatically upgrade to"},"name":{"description":"Sets the name for the upgrade. This name will be used by the upgraded\nversion of the software to apply any special \"on-upgrade\" commands during\nthe first BeginBlock method after the upgrade is applied. It is also used\nto detect whether a software version can handle a given upgrade. If no\nupgrade handler with this name has been set in the software, it will be\nassumed that the software is out-of-date when the upgrade Time or Height is\nreached and the software will exit.","type":"string"},"time":{"description":"Deprecated: Time based upgrades have been deprecated. Time based upgrade logic\nhas been removed from the SDK.\nIf this field is not empty, an error will be thrown.","type":"string","format":"date-time"},"upgraded_client_state":{"description":"Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been\nmoved to the IBC module in the sub module 02-client.\nIf this field is not empty, an error will be thrown.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.upgrade.v1beta1.QueryAppliedPlanResponse":{"description":"QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC\nmethod.","type":"object","properties":{"height":{"description":"height is the block height at which the plan was applied.","type":"string","format":"int64"}}},"cosmos.upgrade.v1beta1.QueryAuthorityResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"QueryAuthorityResponse is the response type for Query/Authority","properties":{"address":{"type":"string"}}},"cosmos.upgrade.v1beta1.QueryCurrentPlanResponse":{"description":"QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC\nmethod.","type":"object","properties":{"plan":{"description":"plan is the current upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.QueryModuleVersionsResponse":{"description":"QueryModuleVersionsResponse is the response type for the Query/ModuleVersions\nRPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"module_versions":{"description":"module_versions is a list of module names with their consensus versions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.upgrade.v1beta1.ModuleVersion"}}}},"cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState\nRPC method.","type":"object","properties":{"upgraded_consensus_state":{"type":"string","format":"byte","title":"Since: cosmos-sdk 0.43"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"from_address":{"type":"string"},"start_time":{"description":"start of vesting as unix time (in seconds).","type":"string","format":"int64"},"to_address":{"type":"string"},"vesting_periods":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.vesting.v1beta1.Period"}}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount\nresponse type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse":{"description":"MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreateVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"delayed":{"type":"boolean"},"end_time":{"description":"end of vesting as unix time (in seconds).","type":"string","format":"int64"},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type.","type":"object"},"cosmos.vesting.v1beta1.Period":{"description":"Period defines a length of time and amount of coins that will vest.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"length":{"description":"Period duration in seconds.","type":"string","format":"int64"}}},"cosmwasm.wasm.v1.AbsoluteTxPosition":{"description":"AbsoluteTxPosition is a unique transaction position that allows for global\nordering of transactions.","type":"object","properties":{"block_height":{"type":"string","format":"uint64","title":"BlockHeight is the block the contract was created at"},"tx_index":{"type":"string","format":"uint64","title":"TxIndex is a monotonic counter within the block (actual transaction index,\nor gas consumed)"}}},"cosmwasm.wasm.v1.AccessConfig":{"description":"AccessConfig access control type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.AccessType":{"description":"- ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty value\n - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses","type":"string","title":"AccessType permission types","default":"ACCESS_TYPE_UNSPECIFIED","enum":["ACCESS_TYPE_UNSPECIFIED","ACCESS_TYPE_NOBODY","ACCESS_TYPE_EVERYBODY","ACCESS_TYPE_ANY_OF_ADDRESSES"]},"cosmwasm.wasm.v1.CodeInfoResponse":{"type":"object","title":"CodeInfoResponse contains code meta data from CodeInfo","properties":{"code_id":{"type":"string","format":"uint64","title":"id for legacy support"},"creator":{"type":"string"},"data_hash":{"type":"string","format":"byte"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.ContractCodeHistoryEntry":{"description":"ContractCodeHistoryEntry metadata to a contract.","type":"object","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"msg":{"type":"string","format":"byte"},"operation":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryOperationType"},"updated":{"description":"Updated Tx position when the operation was executed.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"}}},"cosmwasm.wasm.v1.ContractCodeHistoryOperationType":{"description":"- CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data","type":"string","title":"ContractCodeHistoryOperationType actions that caused a code change","default":"CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","enum":["CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT","CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE","CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS"]},"cosmwasm.wasm.v1.ContractInfo":{"type":"object","title":"ContractInfo stores a WASM contract instance","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored Wasm code"},"created":{"description":"Created Tx position when the contract was instantiated.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"},"creator":{"type":"string","title":"Creator address who initially instantiated the contract"},"extension":{"description":"Extension is an extension point to store custom metadata within the\npersistence model.","$ref":"#/definitions/google.protobuf.Any"},"ibc2_port_id":{"type":"string"},"ibc_port_id":{"type":"string"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"}}},"cosmwasm.wasm.v1.Model":{"type":"object","title":"Model is a struct that holds a KV pair","properties":{"key":{"type":"string","format":"byte","title":"hex-encode key to read it better (this is often ascii)"},"value":{"type":"string","format":"byte","title":"base64-encode raw value"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses":{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse":{"description":"MsgAddCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgAddCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgClearAdmin":{"type":"object","title":"MsgClearAdmin removes any admin stored for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgClearAdminResponse":{"type":"object","title":"MsgClearAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgExecuteContract":{"type":"object","title":"MsgExecuteContract submits the given message data to a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on execution","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgExecuteContractResponse":{"description":"MsgExecuteContractResponse returns execution result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContract":{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2":{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"fix_msg":{"type":"boolean","title":"FixMsg include the msg value into the hash for the predictable address.\nDefault is false"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"salt":{"description":"Salt is an arbitrary value provided by the sender. Size can be 1 to 64.","type":"string","format":"byte"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2Response":{"type":"object","title":"MsgInstantiateContract2Response return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContractResponse":{"type":"object","title":"MsgInstantiateContractResponse return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgMigrateContract":{"type":"object","title":"MsgMigrateContract runs a code upgrade/ downgrade for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the new WASM code"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgMigrateContractResponse":{"description":"MsgMigrateContractResponse returns contract migration result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains same raw bytes returned as data from the wasm contract.\n(May be empty)"}}},"cosmwasm.wasm.v1.MsgPinCodes":{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the new WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgPinCodesResponse":{"description":"MsgPinCodesResponse defines the response structure for executing a\nMsgPinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses":{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse":{"description":"MsgRemoveCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgRemoveCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContract":{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"authority":{"description":"Authority is the address of the governance account.","type":"string"},"builder":{"type":"string","title":"Builder is the docker image used to build the code deterministically, used\nfor smart contract verification"},"code_hash":{"type":"string","format":"byte","title":"CodeHash is the SHA256 sum of the code outputted by builder, used for smart\ncontract verification"},"funds":{"type":"array","title":"Funds coins that are transferred from the authority account to the contract\non instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"source":{"type":"string","title":"Source is the URL where the code is hosted"},"unpin_code":{"description":"UnpinCode code on upload, optional. As default the uploaded contract is\npinned to cache.","type":"boolean"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse":{"description":"MsgStoreAndInstantiateContractResponse defines the response structure\nfor executing a MsgStoreAndInstantiateContract message.\n\nSince: 0.40","type":"object","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContract":{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse":{"description":"MsgStoreAndMigrateContractResponse defines the response structure\nfor executing a MsgStoreAndMigrateContract message.\n\nSince: 0.42","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreCode":{"type":"object","title":"MsgStoreCode submit Wasm code to the system","properties":{"instantiate_permission":{"title":"InstantiatePermission access control to apply on contract creation,\noptional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreCodeResponse":{"description":"MsgStoreCodeResponse returns store result data.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"}}},"cosmwasm.wasm.v1.MsgSudoContract":{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract as sudo"}}},"cosmwasm.wasm.v1.MsgSudoContractResponse":{"description":"MsgSudoContractResponse defines the response structure for executing a\nMsgSudoContract message.\n\nSince: 0.40","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgUnpinCodes":{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgUnpinCodesResponse":{"description":"MsgUnpinCodesResponse defines the response structure for executing a\nMsgUnpinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgUpdateAdmin":{"type":"object","title":"MsgUpdateAdmin sets a new admin for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_admin":{"type":"string","title":"NewAdmin address to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateAdminResponse":{"type":"object","title":"MsgUpdateAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateContractLabel":{"type":"object","title":"MsgUpdateContractLabel sets a new label for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_label":{"type":"string","title":"NewLabel string to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateContractLabelResponse":{"type":"object","title":"MsgUpdateContractLabelResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfig":{"type":"object","title":"MsgUpdateInstantiateConfig updates instantiate config for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the stored WASM code"},"new_instantiate_permission":{"title":"NewInstantiatePermission is the new access control","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse":{"type":"object","title":"MsgUpdateInstantiateConfigResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/wasm parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.Params":{"description":"Params defines the set of wasm parameters.","type":"object","properties":{"code_upload_access":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"instantiate_default_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.QueryAllContractStateResponse":{"type":"object","title":"QueryAllContractStateResponse is the response type for the\nQuery/AllContractState RPC method","properties":{"models":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.Model"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryBuildAddressResponse":{"description":"QueryBuildAddressResponse is the response type for the Query/BuildAddress RPC\nmethod.","type":"object","properties":{"address":{"type":"string","title":"Address is the contract address"}}},"cosmwasm.wasm.v1.QueryCodeInfoResponse":{"type":"object","title":"QueryCodeInfoResponse is the response type for the Query/CodeInfo RPC method","properties":{"checksum":{"type":"string","format":"byte"},"code_id":{"type":"string","format":"uint64"},"creator":{"type":"string"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.QueryCodeResponse":{"type":"object","title":"QueryCodeResponse is the response type for the Query/Code RPC method","properties":{"code_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"},"data":{"type":"string","format":"byte"}}},"cosmwasm.wasm.v1.QueryCodesResponse":{"type":"object","title":"QueryCodesResponse is the response type for the Query/Codes RPC method","properties":{"code_infos":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractHistoryResponse":{"type":"object","title":"QueryContractHistoryResponse is the response type for the\nQuery/ContractHistory RPC method","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryEntry"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractInfoResponse":{"type":"object","title":"QueryContractInfoResponse is the response type for the Query/ContractInfo RPC\nmethod","properties":{"address":{"type":"string","title":"address is the address of the contract"},"contract_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractInfo"}}},"cosmwasm.wasm.v1.QueryContractsByCodeResponse":{"type":"object","title":"QueryContractsByCodeResponse is the response type for the\nQuery/ContractsByCode RPC method","properties":{"contracts":{"type":"array","title":"contracts are a set of contract addresses","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractsByCreatorResponse":{"description":"QueryContractsByCreatorResponse is the response type for the\nQuery/ContractsByCreator RPC method.","type":"object","properties":{"contract_addresses":{"type":"array","title":"ContractAddresses result set","items":{"type":"string"}},"pagination":{"description":"Pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.QueryPinnedCodesResponse":{"type":"object","title":"QueryPinnedCodesResponse is the response type for the\nQuery/PinnedCodes RPC method","properties":{"code_ids":{"type":"array","items":{"type":"string","format":"uint64"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryRawContractStateResponse":{"type":"object","title":"QueryRawContractStateResponse is the response type for the\nQuery/RawContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the raw store data"}}},"cosmwasm.wasm.v1.QuerySmartContractStateResponse":{"type":"object","title":"QuerySmartContractStateResponse is the response type for the\nQuery/SmartContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the json data returned from the smart contract"}}},"cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse":{"description":"QueryWasmLimitsConfigResponse is the response type for the\nQuery/WasmLimitsConfig RPC method. It contains the JSON encoded limits for\nstatic validation of Wasm files.","type":"object","properties":{"config":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount":{"type":"object","title":"MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount","properties":{"connection_id":{"type":"string"},"ordering":{"$ref":"#/definitions/ibc.core.channel.v1.Order"},"owner":{"type":"string"},"version":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse":{"type":"object","title":"MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTx":{"type":"object","title":"MsgSendTx defines the payload for Msg/SendTx","properties":{"connection_id":{"type":"string"},"owner":{"type":"string"},"packet_data":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.InterchainAccountPacketData"},"relative_timeout":{"description":"Relative timeout timestamp provided will be added to the current block time during transaction execution.\nThe timeout timestamp must be non-zero.","type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse":{"type":"object","title":"MsgSendTxResponse defines the response for MsgSendTx","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/controller parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.controller.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the controller submodule.","type":"object","properties":{"controller_enabled":{"description":"controller_enabled enables or disables the controller submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse":{"description":"QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method.","type":"object","properties":{"address":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe":{"type":"object","title":"MsgModuleQuerySafe defines the payload for Msg/ModuleQuerySafe","properties":{"requests":{"description":"requests defines the module safe queries to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryRequest"}},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse":{"type":"object","title":"MsgModuleQuerySafeResponse defines the response for Msg/ModuleQuerySafe","properties":{"height":{"type":"string","format":"uint64","title":"height at which the responses were queried"},"responses":{"type":"array","title":"protobuf encoded responses for each query","items":{"type":"string","format":"byte"}}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/host parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.host.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the host submodule.","type":"object","properties":{"allow_messages":{"description":"allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain.","type":"array","items":{"type":"string"}},"host_enabled":{"description":"host_enabled enables or disables the host submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.host.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.QueryRequest":{"description":"QueryRequest defines the parameters for a particular query request\nby an interchain account.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"data defines the payload of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"},"path":{"type":"string","title":"path defines the path of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"}}},"ibc.applications.interchain_accounts.v1.InterchainAccountPacketData":{"description":"InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.","type":"object","properties":{"data":{"type":"string","format":"byte"},"memo":{"type":"string"},"type":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.Type"}}},"ibc.applications.interchain_accounts.v1.Type":{"description":"- TYPE_UNSPECIFIED: Default zero value enumeration\n - TYPE_EXECUTE_TX: Execute a transaction on an interchain accounts host chain","type":"string","title":"Type defines a classification of message issued from a controller chain to its associated interchain accounts\nhost","default":"TYPE_UNSPECIFIED","enum":["TYPE_UNSPECIFIED","TYPE_EXECUTE_TX"]},"ibc.applications.transfer.v1.Denom":{"description":"Denom holds the base denom of a Token and a trace of the chains it was sent through.","type":"object","properties":{"base":{"type":"string","title":"the base token denomination"},"trace":{"type":"array","title":"the trace of the token","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Hop"}}}},"ibc.applications.transfer.v1.Hop":{"type":"object","title":"Hop defines a port ID, channel ID pair specifying a unique \"hop\" in a trace","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.transfer.v1.MsgTransfer":{"type":"object","title":"MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between\nICS20 enabled chains. See ICS Spec here:\nhttps://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures","properties":{"encoding":{"type":"string","title":"optional encoding"},"memo":{"type":"string","title":"optional memo"},"receiver":{"type":"string","title":"the recipient address on the destination chain"},"sender":{"type":"string","title":"the sender address"},"source_channel":{"type":"string","title":"the channel by which the packet will be sent"},"source_port":{"type":"string","title":"the port on which the packet will be sent"},"timeout_height":{"description":"Timeout height relative to the current block height.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted.","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"description":"Timeout timestamp in absolute nanoseconds since unix epoch.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set.","type":"string","format":"uint64"},"token":{"title":"token to be transferred","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.applications.transfer.v1.MsgTransferResponse":{"description":"MsgTransferResponse defines the Msg/Transfer response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64","title":"sequence number of the transfer packet sent"}}},"ibc.applications.transfer.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"params":{"description":"params defines the transfer parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.transfer.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibc.applications.transfer.v1.Params":{"description":"Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false.","type":"object","properties":{"receive_enabled":{"description":"receive_enabled enables or disables all cross-chain token transfers to this\nchain.","type":"boolean"},"send_enabled":{"description":"send_enabled enables or disables all cross-chain token transfers from this\nchain.","type":"boolean"}}},"ibc.applications.transfer.v1.QueryDenomHashResponse":{"description":"QueryDenomHashResponse is the response type for the Query/DenomHash RPC\nmethod.","type":"object","properties":{"hash":{"description":"hash (in hex format) of the denomination trace information.","type":"string"}}},"ibc.applications.transfer.v1.QueryDenomResponse":{"description":"QueryDenomResponse is the response type for the Query/Denom RPC\nmethod.","type":"object","properties":{"denom":{"description":"denom returns the requested denomination.","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}}},"ibc.applications.transfer.v1.QueryDenomsResponse":{"description":"QueryDenomsResponse is the response type for the Query/Denoms RPC\nmethod.","type":"object","properties":{"denoms":{"description":"denoms returns all denominations.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.applications.transfer.v1.QueryEscrowAddressResponse":{"description":"QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.","type":"object","properties":{"escrow_address":{"type":"string","title":"the escrow account address"}}},"ibc.applications.transfer.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"}}},"ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse":{"description":"QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.core.channel.v1.Channel":{"description":"Channel defines pipeline for exactly-once packet delivery between specific\nmodules on separate blockchains, which has at least one end capable of\nsending packets and one end capable of receiving packets.","type":"object","properties":{"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.Counterparty":{"type":"object","title":"Counterparty defines a channel end counterparty","properties":{"channel_id":{"type":"string","title":"channel end on the counterparty chain"},"port_id":{"description":"port on the counterparty chain which owns the other end of the channel.","type":"string"}}},"ibc.core.channel.v1.IdentifiedChannel":{"description":"IdentifiedChannel defines a channel with additional port and channel\nidentifier fields.","type":"object","properties":{"channel_id":{"type":"string","title":"channel identifier"},"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"port_id":{"type":"string","title":"port identifier"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.MsgAcknowledgement":{"type":"object","title":"MsgAcknowledgement receives incoming IBC acknowledgement","properties":{"acknowledgement":{"type":"string","format":"byte"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgChannelCloseConfirm":{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseConfirmResponse":{"description":"MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelCloseInit":{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseInitResponse":{"description":"MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenAck":{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"counterparty_channel_id":{"type":"string"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenAckResponse":{"description":"MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenConfirm":{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenConfirmResponse":{"description":"MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenInit":{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","type":"object","properties":{"channel":{"$ref":"#/definitions/ibc.core.channel.v1.Channel"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenInitResponse":{"description":"MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTry":{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","type":"object","properties":{"channel":{"description":"NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC.","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"previous_channel_id":{"description":"Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC.","type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTryResponse":{"description":"MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacket":{"type":"object","title":"MsgRecvPacket receives incoming IBC packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnClose":{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","type":"object","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_close":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnCloseResponse":{"description":"MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.Order":{"description":"- ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\nwhich they were sent.\n - ORDER_ORDERED: packets are delivered exactly in the order which they were sent","type":"string","title":"Order defines if a channel is ORDERED or UNORDERED","default":"ORDER_NONE_UNSPECIFIED","enum":["ORDER_NONE_UNSPECIFIED","ORDER_UNORDERED","ORDER_ORDERED"]},"ibc.core.channel.v1.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"data":{"type":"string","format":"byte","title":"actual opaque bytes transferred directly to the application module"},"destination_channel":{"description":"identifies the channel end on the receiving chain.","type":"string"},"destination_port":{"description":"identifies the port on the receiving chain.","type":"string"},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_channel":{"description":"identifies the channel end on the sending chain.","type":"string"},"source_port":{"description":"identifies the port on the sending chain.","type":"string"},"timeout_height":{"title":"block height after which the packet times out","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"type":"string","format":"uint64","title":"block timestamp (in nanoseconds) after which the packet times out"}}},"ibc.core.channel.v1.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"channel_id":{"description":"channel unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"port_id":{"description":"channel port identifier.","type":"string"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v1.QueryChannelClientStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelConsensusStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelResponse":{"description":"QueryChannelResponse is the response type for the Query/Channel RPC method.\nBesides the Channel end, it includes a proof and the height from which the\nproof was retrieved.","type":"object","properties":{"channel":{"title":"channel associated with the request identifiers","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelsResponse":{"description":"QueryChannelsResponse is the response type for the Query/Channels RPC method.","type":"object","properties":{"channels":{"description":"list of stored channels of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryConnectionChannelsResponse":{"type":"object","title":"QueryConnectionChannelsResponse is the Response type for the\nQuery/QueryConnectionChannels RPC method","properties":{"channels":{"description":"list of channels associated with a connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryNextSequenceReceiveResponse":{"type":"object","title":"QuerySequenceResponse is the response type for the\nQuery/QueryNextSequenceReceiveResponse RPC method","properties":{"next_sequence_receive":{"type":"string","format":"uint64","title":"next sequence receive number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the request type for the\nQuery/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementResponse":{"type":"object","title":"QueryPacketAcknowledgementResponse defines the client query response for a\npacket which also includes a proof and the height from which the\nproof was retrieved","properties":{"acknowledgement":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketCommitmentResponse":{"type":"object","title":"QueryPacketCommitmentResponse defines the client query response for a packet\nwhich also includes a proof and the height from which the proof was\nretrieved","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketCommitmentsResponse":{"type":"object","title":"QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method","properties":{"commitments":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketReceiptResponse":{"type":"object","title":"QueryPacketReceiptResponse defines the client query response for a packet\nreceipt which also includes a proof, and the height from which the proof was\nretrieved","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v1.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.channel.v1.State":{"description":"State defines if a channel is in one of the following states:\nCLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A channel has just started the opening handshake.\n - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n - STATE_OPEN: A channel has completed the handshake. Open channels are\nready to send and receive packets.\n - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\npackets.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN","STATE_CLOSED"]},"ibc.core.channel.v2.Acknowledgement":{"description":"Acknowledgement contains a list of all ack results associated with a single packet.\nIn the case of a successful receive, the acknowledgement will contain an app acknowledgement\nfor each application that received a payload in the same order that the payloads were sent\nin the packet.\nIf the receive is not successful, the acknowledgement will contain a single app acknowledgment\nwhich will be a constant error acknowledgment as defined by the IBC v2 protocol.","type":"object","properties":{"app_acknowledgements":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.channel.v2.MsgAcknowledgement":{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","type":"object","properties":{"acknowledgement":{"$ref":"#/definitions/ibc.core.channel.v2.Acknowledgement"},"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgRecvPacket":{"description":"MsgRecvPacket receives an incoming IBC packet.","type":"object","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgSendPacket":{"description":"MsgSendPacket sends an outgoing IBC packet.","type":"object","properties":{"payloads":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"signer":{"type":"string"},"source_client":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgSendPacketResponse":{"description":"MsgSendPacketResponse defines the Msg/SendPacket response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"destination_client":{"description":"identifies the receiving client on the receiving chain.","type":"string"},"payloads":{"description":"a list of payloads, each one for a specific application.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_client":{"description":"identifies the sending client on the sending chain.","type":"string"},"timeout_timestamp":{"description":"timeout timestamp in seconds after which the packet times out.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"client_id":{"description":"client unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.Payload":{"type":"object","title":"Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes)","properties":{"destination_port":{"description":"specifies the destination port of the packet.","type":"string"},"encoding":{"description":"the encoding used for the provided value.","type":"string"},"source_port":{"description":"specifies the source port of the packet.","type":"string"},"value":{"description":"the raw bytes for the payload.","type":"string","format":"byte"},"version":{"description":"version of the specified application.","type":"string"}}},"ibc.core.channel.v2.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementResponse":{"description":"QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method.","type":"object","properties":{"acknowledgement":{"type":"string","format":"byte","title":"acknowledgement associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketCommitmentResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketCommitmentsResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitments":{"description":"collection of packet commitments for the requested channel identifier.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"description":"query block height.","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"description":"pagination response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketReceiptResponse":{"description":"QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method.","type":"object","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence or absence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v2.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.client.v1.ConsensusStateWithHeight":{"description":"ConsensusStateWithHeight defines a consensus state with an additional height\nfield.","type":"object","properties":{"consensus_state":{"title":"consensus state","$ref":"#/definitions/google.protobuf.Any"},"height":{"title":"consensus state height","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.Height":{"description":"Normally the RevisionHeight is incremented at each height while keeping\nRevisionNumber the same. However some consensus algorithms may choose to\nreset the height in certain conditions e.g. hard forks, state-machine\nbreaking changes In these cases, the RevisionNumber is incremented so that\nheight continues to be monitonically increasing even as the RevisionHeight\ngets reset\n\nPlease note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag.\nThis enforces the Go json marshaller to always emit zero values for both revision_number and revision_height.","type":"object","title":"Height is a monotonically increasing data type\nthat can be compared against another Height for the purposes of updating and\nfreezing clients","properties":{"revision_height":{"type":"string","format":"uint64","title":"the height within the given revision"},"revision_number":{"type":"string","format":"uint64","title":"the revision that the client is currently on"}}},"ibc.core.client.v1.IdentifiedClientState":{"description":"IdentifiedClientState defines a client state with an additional client\nidentifier field.","type":"object","properties":{"client_id":{"type":"string","title":"client identifier"},"client_state":{"title":"client state","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgCreateClient":{"type":"object","title":"MsgCreateClient defines a message to create an IBC client","properties":{"client_state":{"title":"light client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"description":"consensus state associated with the client that corresponds to a given\nheight.","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgCreateClientResponse":{"description":"MsgCreateClientResponse defines the Msg/CreateClient response type.","type":"object","properties":{"client_id":{"type":"string"}}},"ibc.core.client.v1.MsgDeleteClientCreator":{"type":"object","title":"MsgDeleteClientCreator defines a message to delete the client creator of a client","properties":{"client_id":{"type":"string","title":"client identifier"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgDeleteClientCreatorResponse":{"description":"MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type.","type":"object"},"ibc.core.client.v1.MsgIBCSoftwareUpgrade":{"type":"object","title":"MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal","properties":{"plan":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"},"signer":{"type":"string","title":"signer address"},"upgraded_client_state":{"description":"An UpgradedClientState must be provided to perform an IBC breaking upgrade.\nThis will make the chain commit to the correct upgraded (self) client state\nbefore the upgrade occurs, so that connecting chains can verify that the\nnew upgraded client is valid by verifying a proof on the previous version\nof the chain. This will allow IBC connections to persist smoothly across\nplanned chain upgrades. Correspondingly, the UpgradedClientState field has been\ndeprecated in the Cosmos SDK to allow for this logic to exist solely in\nthe 02-client module.","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse":{"description":"MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type.","type":"object"},"ibc.core.client.v1.MsgRecoverClient":{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"subject_client_id":{"type":"string","title":"the client identifier for the client to be updated if the proposal passes"},"substitute_client_id":{"type":"string","title":"the substitute client identifier for the client which will replace the subject\nclient"}}},"ibc.core.client.v1.MsgRecoverClientResponse":{"description":"MsgRecoverClientResponse defines the Msg/RecoverClient response type.","type":"object"},"ibc.core.client.v1.MsgSubmitMisbehaviour":{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"misbehaviour":{"title":"misbehaviour used for freezing the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgSubmitMisbehaviourResponse":{"description":"MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response\ntype.","type":"object"},"ibc.core.client.v1.MsgUpdateClient":{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_message":{"title":"client message to update the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateClientResponse":{"description":"MsgUpdateClientResponse defines the Msg/UpdateClient response type.","type":"object"},"ibc.core.client.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","type":"object","properties":{"params":{"description":"params defines the client parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.client.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.client.v1.MsgUpgradeClient":{"type":"object","title":"MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client\nstate","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_state":{"title":"upgraded client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"title":"upgraded consensus state, only contains enough information to serve as a\nbasis of trust in update logic","$ref":"#/definitions/google.protobuf.Any"},"proof_upgrade_client":{"type":"string","format":"byte","title":"proof that old chain committed to new client"},"proof_upgrade_consensus_state":{"type":"string","format":"byte","title":"proof that old chain committed to new consensus state"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpgradeClientResponse":{"description":"MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.","type":"object"},"ibc.core.client.v1.Params":{"description":"Params defines the set of IBC light client parameters.","type":"object","properties":{"allowed_clients":{"description":"allowed_clients defines the list of allowed client state types which can be created\nand interacted with. If a client type is removed from the allowed clients list, usage\nof this client will be disabled until it is added again to the list.","type":"array","items":{"type":"string"}}}},"ibc.core.client.v1.QueryClientCreatorResponse":{"description":"QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC\nmethod.","type":"object","properties":{"creator":{"type":"string","title":"creator of the client"}}},"ibc.core.client.v1.QueryClientParamsResponse":{"description":"QueryClientParamsResponse is the response type for the Query/ClientParams RPC\nmethod.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.client.v1.Params"}}},"ibc.core.client.v1.QueryClientStateResponse":{"description":"QueryClientStateResponse is the response type for the Query/ClientState RPC\nmethod. Besides the client state, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryClientStatesResponse":{"description":"QueryClientStatesResponse is the response type for the Query/ClientStates RPC\nmethod.","type":"object","properties":{"client_states":{"description":"list of stored ClientStates of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryClientStatusResponse":{"description":"QueryClientStatusResponse is the response type for the Query/ClientStatus RPC\nmethod. It returns the current status of the IBC client.","type":"object","properties":{"status":{"type":"string"}}},"ibc.core.client.v1.QueryConsensusStateHeightsResponse":{"type":"object","title":"QueryConsensusStateHeightsResponse is the response type for the\nQuery/ConsensusStateHeights RPC method","properties":{"consensus_state_heights":{"type":"array","title":"consensus state heights","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.Height"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryConsensusStateResponse":{"type":"object","title":"QueryConsensusStateResponse is the response type for the Query/ConsensusState\nRPC method","properties":{"consensus_state":{"title":"consensus state associated with the client identifier at the given height","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryConsensusStatesResponse":{"type":"object","title":"QueryConsensusStatesResponse is the response type for the\nQuery/ConsensusStates RPC method","properties":{"consensus_states":{"type":"array","title":"consensus states associated with the identifier","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.ConsensusStateWithHeight"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryUpgradedClientStateResponse":{"description":"QueryUpgradedClientStateResponse is the response type for the\nQuery/UpgradedClientState RPC method.","type":"object","properties":{"upgraded_client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the\nQuery/UpgradedConsensusState RPC method.","type":"object","properties":{"upgraded_consensus_state":{"title":"Consensus state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryVerifyMembershipRequest":{"type":"object","title":"QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method","properties":{"block_delay":{"type":"string","format":"uint64","title":"optional block delay"},"client_id":{"description":"client unique identifier.","type":"string"},"merkle_path":{"description":"the commitment key path.","$ref":"#/definitions/ibc.core.commitment.v2.MerklePath"},"proof":{"description":"the proof to be verified by the client.","type":"string","format":"byte"},"proof_height":{"description":"the height of the commitment root at which the proof is verified.","$ref":"#/definitions/ibc.core.client.v1.Height"},"time_delay":{"type":"string","format":"uint64","title":"optional time delay"},"value":{"description":"the value which is proven.","type":"string","format":"byte"}}},"ibc.core.client.v1.QueryVerifyMembershipResponse":{"type":"object","title":"QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method","properties":{"success":{"description":"boolean indicating success or failure of proof verification.","type":"boolean"}}},"ibc.core.client.v2.Config":{"type":"object","title":"Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages\nfor a given client.\nIf it is set, then only relayers in the allow list can send v2 messages\nIf it is not set, then the client allows permissionless relaying of v2 messages","properties":{"allowed_relayers":{"type":"array","title":"allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client","items":{"type":"string"}}}},"ibc.core.client.v2.CounterpartyInfo":{"type":"object","title":"CounterpartyInfo defines the key that the counterparty will use to message our client","properties":{"client_id":{"type":"string","title":"client identifier is the identifier used to send packet messages to our client"},"merkle_prefix":{"type":"array","title":"merkle prefix key is the prefix that ics provable keys are stored under","items":{"type":"string","format":"byte"}}}},"ibc.core.client.v2.MsgRegisterCounterparty":{"type":"object","title":"MsgRegisterCounterparty defines a message to register a counterparty on a client","properties":{"client_id":{"type":"string","title":"client identifier"},"counterparty_client_id":{"type":"string","title":"counterparty client identifier"},"counterparty_merkle_prefix":{"type":"array","title":"counterparty merkle prefix","items":{"type":"string","format":"byte"}},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgRegisterCounterpartyResponse":{"description":"MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type.","type":"object"},"ibc.core.client.v2.MsgUpdateClientConfig":{"type":"object","title":"MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client","properties":{"client_id":{"type":"string","title":"client identifier"},"config":{"description":"NOTE: All fields in the config must be supplied.","title":"allowed relayers","$ref":"#/definitions/ibc.core.client.v2.Config"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgUpdateClientConfigResponse":{"description":"MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type.","type":"object"},"ibc.core.client.v2.QueryConfigResponse":{"type":"object","title":"QueryConfigResponse is the response type for the Query/Config RPC method","properties":{"config":{"$ref":"#/definitions/ibc.core.client.v2.Config"}}},"ibc.core.client.v2.QueryCounterpartyInfoResponse":{"description":"QueryCounterpartyInfoResponse is the response type for the\nQuery/CounterpartyInfo RPC method.","type":"object","properties":{"counterparty_info":{"$ref":"#/definitions/ibc.core.client.v2.CounterpartyInfo"}}},"ibc.core.commitment.v1.MerklePrefix":{"type":"object","title":"MerklePrefix is merkle path prefixed to the key.\nThe constructed key from the Path and the key will be append(Path.KeyPath,\nappend(Path.KeyPrefix, key...))","properties":{"key_prefix":{"type":"string","format":"byte"}}},"ibc.core.commitment.v2.MerklePath":{"description":"MerklePath is the path used to verify commitment proofs, which can be an\narbitrary structured object (defined by a commitment type).\nICS-23 verification supports membership proofs for nested merkle trees.\nThe ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix.\nThe IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash\nstored in the consensus state of the client.\nEach element of the path represents the key of a merkle tree from the root to the leaf.\nThe elements of the path before the final element must be the path to the tree that contains\nthe ICS24 provable store. Thus, it should remain constant for all ICS24 proofs.\nThe final element of the path is the key of the leaf in the ICS24 provable store,\nThus IBC core will append the ICS24 path to the final element of the MerklePath\nstored in the counterparty to create the full path to the leaf for proof verification.\nExamples:\nCosmos SDK:\nThe Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes\nare hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"ibc\", \"\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"ibc\", \"{packetCommitmentPath}\"] which will then be used for final verification.\nEthereum:\nThe Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed\nby the smart contract state. Each smart contract has a specific prefix reserved within the global trie.\nThus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie.\nSince there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"IBCCoreContractAddressStoragePrefix\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"IBCCoreContractAddressStoragePrefix{packetCommitmentPath}\"] which will then be used for final\nverification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the\nconsensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24\nprovable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified\nby the client against the root hash in the client's consensus state.","type":"object","properties":{"key_path":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.connection.v1.ConnectionEnd":{"description":"ConnectionEnd defines a stateful object on a chain connected to another\nseparate one.\nNOTE: there must only be 2 defined ConnectionEnds to establish\na connection between two chains.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period that must pass before a consensus state can be used for\npacket-verification NOTE: delay period logic is only implemented by some\nclients.","type":"string","format":"uint64"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"description":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.Counterparty":{"description":"Counterparty defines the counterparty chain associated with a connection end.","type":"object","properties":{"client_id":{"description":"identifies the client on the counterparty chain associated with a given\nconnection.","type":"string"},"connection_id":{"description":"identifies the connection end on the counterparty chain associated with a\ngiven connection.","type":"string"},"prefix":{"description":"commitment merkle prefix of the counterparty chain.","$ref":"#/definitions/ibc.core.commitment.v1.MerklePrefix"}}},"ibc.core.connection.v1.IdentifiedConnection":{"description":"IdentifiedConnection defines a connection with additional connection\nidentifier field.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period associated with this connection.","type":"string","format":"uint64"},"id":{"description":"connection identifier.","type":"string"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"type":"array","title":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.MsgConnectionOpenAck":{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","type":"object","properties":{"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"connection_id":{"type":"string"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty_connection_id":{"type":"string"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain B: `UNINITIALIZED -\u003e\nTRYOPEN`"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenAckResponse":{"description":"MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenConfirm":{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","type":"object","properties":{"connection_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte","title":"proof for the change of the connection state on Chain A: `INIT -\u003e OPEN`"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenConfirmResponse":{"description":"MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm\nresponse type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenInit":{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","type":"object","properties":{"client_id":{"type":"string"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"type":"string","format":"uint64"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenInitResponse":{"description":"MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response\ntype.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenTry":{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","type":"object","properties":{"client_id":{"type":"string"},"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"counterparty_versions":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}},"delay_period":{"type":"string","format":"uint64"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"previous_connection_id":{"description":"Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC.","type":"string"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain A: `UNINITIALIZED -\u003e\nINIT`"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenTryResponse":{"description":"MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type.","type":"object"},"ibc.core.connection.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","type":"object","properties":{"params":{"description":"params defines the connection parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.connection.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.connection.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.connection.v1.Params":{"description":"Params defines the set of Connection parameters.","type":"object","properties":{"max_expected_time_per_block":{"description":"maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the\nlargest amount of time that the chain might reasonably take to produce the next block under normal operating\nconditions. A safe choice is 3-5x the expected time per block.","type":"string","format":"uint64"}}},"ibc.core.connection.v1.QueryClientConnectionsResponse":{"type":"object","title":"QueryClientConnectionsResponse is the response type for the\nQuery/ClientConnections RPC method","properties":{"connection_paths":{"description":"slice of all the connection paths associated with a client.","type":"array","items":{"type":"string"}},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was generated","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionClientStateResponse":{"type":"object","title":"QueryConnectionClientStateResponse is the response type for the\nQuery/ConnectionClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionConsensusStateResponse":{"type":"object","title":"QueryConnectionConsensusStateResponse is the response type for the\nQuery/ConnectionConsensusState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionParamsResponse":{"description":"QueryConnectionParamsResponse is the response type for the Query/ConnectionParams RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.connection.v1.Params"}}},"ibc.core.connection.v1.QueryConnectionResponse":{"description":"QueryConnectionResponse is the response type for the Query/Connection RPC\nmethod. Besides the connection end, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"connection":{"title":"connection associated with the request identifier","$ref":"#/definitions/ibc.core.connection.v1.ConnectionEnd"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionsResponse":{"description":"QueryConnectionsResponse is the response type for the Query/Connections RPC\nmethod.","type":"object","properties":{"connections":{"description":"list of stored connections of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.IdentifiedConnection"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.connection.v1.State":{"description":"State defines if a connection is in one of the following states:\nINIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A connection end has just started the opening handshake.\n - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\nchain.\n - STATE_OPEN: A connection end has completed the handshake.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN"]},"ibc.core.connection.v1.Version":{"description":"Version defines the versioning scheme used to negotiate the IBC version in\nthe connection handshake.","type":"object","properties":{"features":{"type":"array","title":"list of features compatible with the specified identifier","items":{"type":"string"}},"identifier":{"type":"string","title":"unique version identifier"}}},"ibc.lightclients.wasm.v1.MsgMigrateContract":{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the new wasm byte code for the contract"},"client_id":{"type":"string","title":"the client id of the contract"},"msg":{"type":"string","format":"byte","title":"the json encoded message to be passed to the contract on migration"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgMigrateContractResponse":{"type":"object","title":"MsgMigrateContractResponse defines the response type for the MigrateContract rpc"},"ibc.lightclients.wasm.v1.MsgRemoveChecksum":{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash to be removed from the store"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse":{"type":"object","title":"MsgStoreChecksumResponse defines the response type for the StoreCode rpc"},"ibc.lightclients.wasm.v1.MsgStoreCode":{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"wasm_byte_code":{"type":"string","format":"byte","title":"wasm byte code of light client contract. It can be raw or gzip compressed"}}},"ibc.lightclients.wasm.v1.MsgStoreCodeResponse":{"type":"object","title":"MsgStoreCodeResponse defines the response type for the StoreCode rpc","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the stored code"}}},"ibc.lightclients.wasm.v1.QueryChecksumsResponse":{"description":"QueryChecksumsResponse is the response type for the Query/Checksums RPC method.","type":"object","properties":{"checksums":{"description":"checksums is a list of the hex encoded checksums of all wasm codes stored.","type":"array","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.lightclients.wasm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC method.","type":"object","properties":{"data":{"type":"string","format":"byte"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.AuditPeerObservation":{"type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the epoch.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.AuditReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"}}},"lumera.audit.v1.AuditSelfReport":{"type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.EpochAnchor":{"description":"EpochAnchor is a minimal per-epoch on-chain anchor that freezes the deterministic seed\nand the eligible supernode sets used for deterministic selection off-chain.","type":"object","properties":{"active_set_commitment":{"type":"string","format":"byte"},"active_supernode_accounts":{"description":"active_supernode_accounts is the sorted list of ACTIVE supernodes at epoch start.","type":"array","items":{"type":"string"}},"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"params_commitment":{"description":"params_commitment is a hash commitment to Params (with defaults) at epoch start.","type":"string","format":"byte"},"seed":{"description":"seed is a fixed 32-byte value derived at epoch start (domain-separated).","type":"string","format":"byte"},"target_supernode_accounts":{"description":"target_supernode_accounts is the sorted list of eligible targets at epoch start:\nACTIVE + POSTPONED supernodes.","type":"array","items":{"type":"string"}},"targets_set_commitment":{"type":"string","format":"byte"}}},"lumera.audit.v1.Evidence":{"description":"Evidence is a stable outer record that stores evidence about an audited subject.\nType-specific fields are encoded into the `metadata` bytes field.","type":"object","properties":{"action_id":{"description":"action_id optionally links this evidence to a specific action.","type":"string"},"evidence_id":{"description":"evidence_id is a chain-assigned unique identifier.","type":"string","format":"uint64"},"evidence_type":{"description":"evidence_type is a stable discriminator used to interpret metadata.","$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is protobuf-binary bytes of a type-specific Evidence metadata message.","type":"string","format":"byte"},"reported_height":{"description":"reported_height is the block height when the evidence was submitted.","type":"string","format":"uint64"},"reporter_address":{"description":"reporter_address is the submitter of the evidence.","type":"string"},"subject_address":{"description":"subject_address is the audited subject (e.g. supernode-related actor).","type":"string"}}},"lumera.audit.v1.EvidenceType":{"description":" - EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE: action finalization rejected due to an invalid signature / signature-derived data.\n - EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: action finalization rejected because the attempted finalizer is not in the top-10 supernodes.\n - EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE: storage challenge failure evidence submitted by the deterministic challenger.","type":"string","default":"EVIDENCE_TYPE_UNSPECIFIED","enum":["EVIDENCE_TYPE_UNSPECIFIED","EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE","EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10","EVIDENCE_TYPE_ACTION_EXPIRED","EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE"]},"lumera.audit.v1.MsgSubmitAuditReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"peer_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditPeerObservation"}},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"},"supernode_account":{"type":"string"}}},"lumera.audit.v1.MsgSubmitAuditReportResponse":{"type":"object"},"lumera.audit.v1.MsgSubmitEvidence":{"type":"object","properties":{"action_id":{"type":"string"},"creator":{"type":"string"},"evidence_type":{"$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is JSON for the type-specific Evidence metadata message.\nThe chain stores protobuf-binary bytes derived from this JSON.","type":"string"},"subject_address":{"type":"string"}}},"lumera.audit.v1.MsgSubmitEvidenceResponse":{"type":"object","properties":{"evidence_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"action_finalization_not_in_top10_consecutive_epochs":{"description":"action_finalization_not_in_top10_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_not_in_top10_evidences_per_epoch":{"description":"action_finalization_not_in_top10_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_recovery_epochs":{"description":"action_finalization_recovery_epochs is the number of epochs to wait before considering recovery.","type":"integer","format":"int64"},"action_finalization_recovery_max_total_bad_evidences":{"description":"action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad\naction-finalization evidences in the recovery epoch-span for auto-recovery to occur.\nRecovery happens ONLY IF total_bad \u003c this value.","type":"integer","format":"int64"},"action_finalization_signature_failure_consecutive_epochs":{"description":"action_finalization_signature_failure_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"action_finalization_signature_failure_evidences_per_epoch":{"description":"action_finalization_signature_failure_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"consecutive_epochs_to_postpone":{"description":"Number of consecutive epochs a required port must be reported CLOSED by peers\nat or above peer_port_postpone_threshold_percent before postponing the supernode.","type":"integer","format":"int64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_zero_height":{"description":"epoch_zero_height defines the reference chain height at which epoch_id = 0 starts.\nThis makes epoch boundaries deterministic from genesis without needing to query state.","type":"string","format":"uint64"},"keep_last_epoch_entries":{"description":"How many completed epochs to keep in state for epoch-scoped data like AuditReport\nand related indices. Pruning runs at epoch end.","type":"string","format":"uint64"},"max_probe_targets_per_epoch":{"type":"integer","format":"int64"},"min_cpu_free_percent":{"description":"Minimum required host free capacity (self reported).\nfree% = 100 - usage%\nA usage% of 0 is treated as \"unknown\" (no action).","type":"integer","format":"int64"},"min_disk_free_percent":{"type":"integer","format":"int64"},"min_mem_free_percent":{"type":"integer","format":"int64"},"min_probe_targets_per_epoch":{"type":"integer","format":"int64"},"peer_port_postpone_threshold_percent":{"description":"Minimum percent (1-100) of peer reports that must report a required port as CLOSED\nfor the port to be treated as CLOSED for postponement purposes.\n\n100 means unanimous.\nExample: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%).","type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"sc_affirmation_timeout_ms":{"type":"string","format":"uint64"},"sc_candidate_keys_lookback_epochs":{"type":"integer","format":"int64"},"sc_challengers_per_epoch":{"type":"integer","format":"int64"},"sc_enabled":{"description":"Storage Challenge (SC) params.","type":"boolean"},"sc_evidence_max_bytes":{"type":"string","format":"uint64"},"sc_evidence_submitter_must_be_challenger":{"type":"boolean"},"sc_files_per_challenger":{"type":"integer","format":"int64"},"sc_max_slice_bytes":{"type":"string","format":"uint64"},"sc_min_slice_bytes":{"type":"string","format":"uint64"},"sc_observer_threshold":{"type":"integer","format":"int64"},"sc_replica_count":{"type":"integer","format":"int64"},"sc_response_timeout_ms":{"type":"string","format":"uint64"},"sc_start_jitter_ms":{"type":"string","format":"uint64"}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.QueryAssignedTargetsResponse":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"target_supernode_accounts":{"type":"array","items":{"type":"string"}}}},"lumera.audit.v1.QueryAuditReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.AuditReport"}}},"lumera.audit.v1.QueryAuditReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.AuditReport"}}}},"lumera.audit.v1.QueryCurrentEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryCurrentEpochResponse":{"type":"object","properties":{"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryEvidenceByActionResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryEvidenceByIdResponse":{"type":"object","properties":{"evidence":{"$ref":"#/definitions/lumera.audit.v1.Evidence"}}},"lumera.audit.v1.QueryEvidenceBySubjectResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QuerySelfReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SelfReport"}}}},"lumera.audit.v1.QuerySupernodeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.SupernodeReport"}}}},"lumera.audit.v1.SelfReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"report_height":{"type":"string","format":"int64"},"self_report":{"$ref":"#/definitions/lumera.audit.v1.AuditSelfReport"}}},"lumera.audit.v1.SupernodeReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"reason":{"description":"reason is an optional string describing why the state transition occurred.\nIt is currently set only for transitions into POSTPONED.","type":"string"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"tendermint.abci.CheckTxType":{"type":"string","default":"NEW","enum":["NEW","RECHECK"]},"tendermint.abci.CommitInfo":{"type":"object","properties":{"round":{"type":"integer","format":"int32"},"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.VoteInfo"}}}},"tendermint.abci.Event":{"description":"Event allows application developers to attach additional information to\nResponseFinalizeBlock and ResponseCheckTx.\nLater, transactions may be queried using these events.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.EventAttribute"}},"type":{"type":"string"}}},"tendermint.abci.EventAttribute":{"description":"EventAttribute is a single key-value pair, associated with an event.","type":"object","properties":{"index":{"type":"boolean","title":"nondeterministic"},"key":{"type":"string"},"value":{"type":"string"}}},"tendermint.abci.ExecTxResult":{"description":"ExecTxResult contains results of executing one individual transaction.\n\n* Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","title":"nondeterministic","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ExtendedCommitInfo":{"description":"ExtendedCommitInfo is similar to CommitInfo except that it is only used in\nthe PrepareProposal request such that CometBFT can provide vote extensions\nto the application.","type":"object","properties":{"round":{"description":"The round at which the block proposer decided in the previous height.","type":"integer","format":"int32"},"votes":{"description":"List of validators' addresses in the last validator set with their voting\ninformation, including vote extensions.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExtendedVoteInfo"}}}},"tendermint.abci.ExtendedVoteInfo":{"type":"object","properties":{"block_id_flag":{"title":"block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all","$ref":"#/definitions/tendermint.types.BlockIDFlag"},"extension_signature":{"type":"string","format":"byte","title":"Vote extension signature created by CometBFT"},"validator":{"description":"The validator that sent the vote.","$ref":"#/definitions/tendermint.abci.Validator"},"vote_extension":{"description":"Non-deterministic extension provided by the sending validator's application.","type":"string","format":"byte"}}},"tendermint.abci.Misbehavior":{"type":"object","properties":{"height":{"type":"string","format":"int64","title":"The height when the offense occurred"},"time":{"type":"string","format":"date-time","title":"The corresponding time where the offense occurred"},"total_voting_power":{"type":"string","format":"int64","title":"Total voting power of the validator set in case the ABCI application does\nnot store historical validators.\nhttps://github.com/tendermint/tendermint/issues/4581"},"type":{"$ref":"#/definitions/tendermint.abci.MisbehaviorType"},"validator":{"title":"The offending validator","$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.abci.MisbehaviorType":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","DUPLICATE_VOTE","LIGHT_CLIENT_ATTACK"]},"tendermint.abci.RequestApplySnapshotChunk":{"type":"object","title":"Applies a snapshot chunk","properties":{"chunk":{"type":"string","format":"byte"},"index":{"type":"integer","format":"int64"},"sender":{"type":"string"}}},"tendermint.abci.RequestCheckTx":{"type":"object","properties":{"tx":{"type":"string","format":"byte"},"type":{"$ref":"#/definitions/tendermint.abci.CheckTxType"}}},"tendermint.abci.RequestCommit":{"type":"object"},"tendermint.abci.RequestEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.RequestExtendVote":{"type":"object","title":"Extends a vote with application-injected data","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this vote may be referring to"},"height":{"type":"string","format":"int64","title":"the height of the extended vote"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time","title":"info of the block that this vote may be referring to"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFinalizeBlock":{"type":"object","properties":{"decided_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"hash":{"description":"hash is the merkle root hash of the fields of the decided block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"proposer_address is the address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFlush":{"type":"object"},"tendermint.abci.RequestInfo":{"type":"object","properties":{"abci_version":{"type":"string"},"block_version":{"type":"string","format":"uint64"},"p2p_version":{"type":"string","format":"uint64"},"version":{"type":"string"}}},"tendermint.abci.RequestInitChain":{"type":"object","properties":{"app_state_bytes":{"type":"string","format":"byte"},"chain_id":{"type":"string"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"initial_height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.RequestListSnapshots":{"type":"object","title":"lists available snapshots"},"tendermint.abci.RequestLoadSnapshotChunk":{"type":"object","title":"loads a snapshot chunk","properties":{"chunk":{"type":"integer","format":"int64"},"format":{"type":"integer","format":"int64"},"height":{"type":"string","format":"uint64"}}},"tendermint.abci.RequestOfferSnapshot":{"type":"object","title":"offers a snapshot to the application","properties":{"app_hash":{"type":"string","format":"byte","title":"light client-verified app hash for snapshot height"},"snapshot":{"title":"snapshot offered by peers","$ref":"#/definitions/tendermint.abci.Snapshot"}}},"tendermint.abci.RequestPrepareProposal":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"local_last_commit":{"$ref":"#/definitions/tendermint.abci.ExtendedCommitInfo"},"max_tx_bytes":{"description":"the modified transactions cannot exceed this size.","type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"address of the public key of the validator proposing the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"description":"txs is an array of transactions that will be included in a block,\nsent to the app for possible modifications.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestProcessProposal":{"type":"object","properties":{"hash":{"description":"hash is the merkle root hash of the fields of the proposed block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestQuery":{"type":"object","properties":{"data":{"type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"path":{"type":"string"},"prove":{"type":"boolean"}}},"tendermint.abci.RequestVerifyVoteExtension":{"type":"object","title":"Verify the vote extension","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this received vote corresponds to"},"height":{"type":"string","format":"int64"},"validator_address":{"type":"string","format":"byte","title":"the validator that signed the vote extension"},"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseApplySnapshotChunk":{"type":"object","properties":{"refetch_chunks":{"type":"array","title":"Chunks to refetch and reapply","items":{"type":"integer","format":"int64"}},"reject_senders":{"type":"array","title":"Chunk senders to reject and ban","items":{"type":"string"}},"result":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk.Result"}}},"tendermint.abci.ResponseApplySnapshotChunk.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Chunk successfully accepted\n - ABORT: Abort all snapshot restoration\n - RETRY: Retry chunk (combine with refetch and reject)\n - RETRY_SNAPSHOT: Retry snapshot (combine with refetch and reject)\n - REJECT_SNAPSHOT: Reject this snapshot, try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","RETRY","RETRY_SNAPSHOT","REJECT_SNAPSHOT"]},"tendermint.abci.ResponseCheckTx":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ResponseCommit":{"type":"object","properties":{"retain_height":{"type":"string","format":"int64"}}},"tendermint.abci.ResponseEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.ResponseExtendVote":{"type":"object","properties":{"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseFinalizeBlock":{"type":"object","properties":{"app_hash":{"description":"app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was\ndeterministic. It is up to the application to decide which algorithm to use.","type":"string","format":"byte"},"consensus_param_updates":{"description":"updates to the consensus params, if any.","$ref":"#/definitions/tendermint.types.ConsensusParams"},"events":{"type":"array","title":"set of block events emmitted as part of executing the block","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"tx_results":{"type":"array","title":"the result of executing each transaction including the events\nthe particular transction emitted. This should match the order\nof the transactions delivered in the block itself","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExecTxResult"}},"validator_updates":{"description":"a list of updates to the validator set. These will reflect the validator set at current height + 2.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseFlush":{"type":"object"},"tendermint.abci.ResponseInfo":{"type":"object","properties":{"app_version":{"type":"string","format":"uint64"},"data":{"type":"string"},"last_block_app_hash":{"type":"string","format":"byte"},"last_block_height":{"type":"string","format":"int64"},"version":{"type":"string"}}},"tendermint.abci.ResponseInitChain":{"type":"object","properties":{"app_hash":{"type":"string","format":"byte"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseListSnapshots":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Snapshot"}}}},"tendermint.abci.ResponseLoadSnapshotChunk":{"type":"object","properties":{"chunk":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseOfferSnapshot":{"type":"object","properties":{"result":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot.Result"}}},"tendermint.abci.ResponseOfferSnapshot.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Snapshot accepted, apply chunks\n - ABORT: Abort all snapshot restoration\n - REJECT: Reject this specific snapshot, try others\n - REJECT_FORMAT: Reject all snapshots of this format, try others\n - REJECT_SENDER: Reject all snapshots from the sender(s), try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","REJECT","REJECT_FORMAT","REJECT_SENDER"]},"tendermint.abci.ResponsePrepareProposal":{"type":"object","properties":{"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.ResponseProcessProposal":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal.ProposalStatus"}}},"tendermint.abci.ResponseProcessProposal.ProposalStatus":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.ResponseQuery":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"description":"bytes data = 2; // use \"value\" instead.\n\nnondeterministic","type":"string"},"proof_ops":{"$ref":"#/definitions/tendermint.crypto.ProofOps"},"value":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseVerifyVoteExtension":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus"}}},"tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus":{"description":" - REJECT: Rejecting the vote extension will reject the entire precommit by the sender.\nIncorrectly implementing this thus has liveness implications as it may affect\nCometBFT's ability to receive 2/3+ valid votes to finalize the block.\nHonest nodes should never be rejected.","type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.Snapshot":{"type":"object","properties":{"chunks":{"type":"integer","format":"int64","title":"Number of chunks in the snapshot"},"format":{"type":"integer","format":"int64","title":"The application-specific snapshot format"},"hash":{"type":"string","format":"byte","title":"Arbitrary snapshot hash, equal only if identical"},"height":{"type":"string","format":"uint64","title":"The height at which the snapshot was taken"},"metadata":{"type":"string","format":"byte","title":"Arbitrary application metadata"}}},"tendermint.abci.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte","title":"The first 20 bytes of SHA256(public key)"},"power":{"description":"The voting power","type":"string","format":"int64","title":"PubKey pub_key = 2 [(gogoproto.nullable)=false];"}}},"tendermint.abci.ValidatorUpdate":{"type":"object","properties":{"power":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"}}},"tendermint.abci.VoteInfo":{"type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"validator":{"$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.crypto.ProofOp":{"type":"object","title":"ProofOp defines an operation used for calculating Merkle root\nThe data could be arbitrary format, providing nessecary data\nfor example neighbouring node hash","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"tendermint.crypto.ProofOps":{"type":"object","title":"ProofOps is Merkle proof defined by the list of ProofOps","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.crypto.ProofOp"}}}},"tendermint.crypto.PublicKey":{"type":"object","title":"PublicKey defines the keys available for use with Validators","properties":{"ed25519":{"type":"string","format":"byte"},"secp256k1":{"type":"string","format":"byte"}}},"tendermint.p2p.DefaultNodeInfo":{"type":"object","properties":{"channels":{"type":"string","format":"byte"},"default_node_id":{"type":"string"},"listen_addr":{"type":"string"},"moniker":{"type":"string"},"network":{"type":"string"},"other":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfoOther"},"protocol_version":{"$ref":"#/definitions/tendermint.p2p.ProtocolVersion"},"version":{"type":"string"}}},"tendermint.p2p.DefaultNodeInfoOther":{"type":"object","properties":{"rpc_address":{"type":"string"},"tx_index":{"type":"string"}}},"tendermint.p2p.ProtocolVersion":{"type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"},"p2p":{"type":"string","format":"uint64"}}},"tendermint.types.ABCIParams":{"description":"ABCIParams configure functionality specific to the Application Blockchain Interface.","type":"object","properties":{"vote_extensions_enable_height":{"description":"vote_extensions_enable_height configures the first height during which\nvote extensions will be enabled. During this specified height, and for all\nsubsequent heights, precommit messages that do not contain valid extension data\nwill be considered invalid. Prior to this height, vote extensions will not\nbe used or accepted by validators on the network.\n\nOnce enabled, vote extensions will be created by the application in ExtendVote,\npassed to the application for validation in VerifyVoteExtension and given\nto the application to use when proposing a block during PrepareProposal.","type":"string","format":"int64"}}},"tendermint.types.Block":{"type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/tendermint.types.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"tendermint.types.BlockID":{"type":"object","title":"BlockID","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"$ref":"#/definitions/tendermint.types.PartSetHeader"}}},"tendermint.types.BlockIDFlag":{"description":"- BLOCK_ID_FLAG_UNKNOWN: indicates an error condition\n - BLOCK_ID_FLAG_ABSENT: the vote was not received\n - BLOCK_ID_FLAG_COMMIT: voted for the block that received the majority\n - BLOCK_ID_FLAG_NIL: voted for nil","type":"string","title":"BlockIdFlag indicates which BlockID the signature is for","default":"BLOCK_ID_FLAG_UNKNOWN","enum":["BLOCK_ID_FLAG_UNKNOWN","BLOCK_ID_FLAG_ABSENT","BLOCK_ID_FLAG_COMMIT","BLOCK_ID_FLAG_NIL"]},"tendermint.types.BlockParams":{"description":"BlockParams contains limits on the block size.","type":"object","properties":{"max_bytes":{"type":"string","format":"int64","title":"Max block size, in bytes.\nNote: must be greater than 0"},"max_gas":{"type":"string","format":"int64","title":"Max gas per block.\nNote: must be greater or equal to -1"}}},"tendermint.types.Commit":{"description":"Commit contains the evidence that a block was committed by a set of validators.","type":"object","properties":{"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signatures":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.CommitSig"}}}},"tendermint.types.CommitSig":{"description":"CommitSig is a part of the Vote included in a Commit.","type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"signature":{"type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"validator_address":{"type":"string","format":"byte"}}},"tendermint.types.ConsensusParams":{"description":"ConsensusParams contains consensus critical parameters that determine the\nvalidity of blocks.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"block":{"$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"},"version":{"$ref":"#/definitions/tendermint.types.VersionParams"}}},"tendermint.types.Data":{"type":"object","title":"Data contains the set of transactions included in the block","properties":{"txs":{"description":"Txs that will be applied by state @ block.Height+1.\nNOTE: not all txs here are valid. We're just agreeing on the order first.\nThis means that block.AppHash does not include these txs.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.types.DuplicateVoteEvidence":{"description":"DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.","type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"},"validator_power":{"type":"string","format":"int64"},"vote_a":{"$ref":"#/definitions/tendermint.types.Vote"},"vote_b":{"$ref":"#/definitions/tendermint.types.Vote"}}},"tendermint.types.Evidence":{"type":"object","properties":{"duplicate_vote_evidence":{"$ref":"#/definitions/tendermint.types.DuplicateVoteEvidence"},"light_client_attack_evidence":{"$ref":"#/definitions/tendermint.types.LightClientAttackEvidence"}}},"tendermint.types.EvidenceList":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Evidence"}}}},"tendermint.types.EvidenceParams":{"description":"EvidenceParams determine how we handle evidence of malfeasance.","type":"object","properties":{"max_age_duration":{"description":"Max age of evidence, in time.\n\nIt should correspond with an app's \"unbonding period\" or other similar\nmechanism for handling [Nothing-At-Stake\nattacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).","type":"string"},"max_age_num_blocks":{"description":"Max age of evidence, in blocks.\n\nThe basic formula for calculating this is: MaxAgeDuration / {average block\ntime}.","type":"string","format":"int64"},"max_bytes":{"type":"string","format":"int64","title":"This sets the maximum size of total evidence in bytes that can be committed in a single block.\nand should fall comfortably under the max block bytes.\nDefault is 1048576 or 1MB"}}},"tendermint.types.Header":{"description":"Header defines the structure of a block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"type":"string","format":"byte","title":"original proposer of the block"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"tendermint.types.LightBlock":{"type":"object","properties":{"signed_header":{"$ref":"#/definitions/tendermint.types.SignedHeader"},"validator_set":{"$ref":"#/definitions/tendermint.types.ValidatorSet"}}},"tendermint.types.LightClientAttackEvidence":{"description":"LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.","type":"object","properties":{"byzantine_validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}},"common_height":{"type":"string","format":"int64"},"conflicting_block":{"$ref":"#/definitions/tendermint.types.LightBlock"},"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"}}},"tendermint.types.PartSetHeader":{"type":"object","title":"PartsetHeader","properties":{"hash":{"type":"string","format":"byte"},"total":{"type":"integer","format":"int64"}}},"tendermint.types.SignedHeader":{"type":"object","properties":{"commit":{"$ref":"#/definitions/tendermint.types.Commit"},"header":{"$ref":"#/definitions/tendermint.types.Header"}}},"tendermint.types.SignedMsgType":{"description":"SignedMsgType is a type of signed message in the consensus.\n\n - SIGNED_MSG_TYPE_PREVOTE: Votes\n - SIGNED_MSG_TYPE_PROPOSAL: Proposals","type":"string","default":"SIGNED_MSG_TYPE_UNKNOWN","enum":["SIGNED_MSG_TYPE_UNKNOWN","SIGNED_MSG_TYPE_PREVOTE","SIGNED_MSG_TYPE_PRECOMMIT","SIGNED_MSG_TYPE_PROPOSAL"]},"tendermint.types.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"},"voting_power":{"type":"string","format":"int64"}}},"tendermint.types.ValidatorParams":{"description":"ValidatorParams restrict the public key types validators can use.\nNOTE: uses ABCI pubkey naming, not Amino names.","type":"object","properties":{"pub_key_types":{"type":"array","items":{"type":"string"}}}},"tendermint.types.ValidatorSet":{"type":"object","properties":{"proposer":{"$ref":"#/definitions/tendermint.types.Validator"},"total_voting_power":{"type":"string","format":"int64"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}}}},"tendermint.types.VersionParams":{"description":"VersionParams contains the ABCI application version.","type":"object","properties":{"app":{"type":"string","format":"uint64"}}},"tendermint.types.Vote":{"description":"Vote represents a prevote or precommit vote from validators for\nconsensus.","type":"object","properties":{"block_id":{"description":"zero if vote is nil.","$ref":"#/definitions/tendermint.types.BlockID"},"extension":{"description":"Vote extension provided by the application. Only valid for precommit\nmessages.","type":"string","format":"byte"},"extension_signature":{"description":"Vote extension signature by the validator if they participated in\nconsensus for the associated block.\nOnly valid for precommit messages.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signature":{"description":"Vote signature by the validator if they participated in consensus for the\nassociated block.","type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"type":{"$ref":"#/definitions/tendermint.types.SignedMsgType"},"validator_address":{"type":"string","format":"byte"},"validator_index":{"type":"integer","format":"int32"}}},"tendermint.version.Consensus":{"description":"Consensus captures the consensus rules for processing a block in the blockchain,\nincluding all blockchain data structures and the rules of the application's\nstate transition machine.","type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"}}}},"tags":[{"name":"Query"},{"name":"Msg"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file +{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}":{"get":{"tags":["Query"],"summary":"AssignedTargets returns the prober -\u003e targets assignment for a given supernode_account.\nIf filter_by_epoch_id is false, it returns the assignments for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_AssignedTargets","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAssignedTargetsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch":{"get":{"tags":["Query"],"summary":"CurrentEpoch returns the current derived epoch boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpoch","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch_anchor":{"get":{"tags":["Query"],"summary":"CurrentEpochAnchor returns the persisted epoch anchor for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpochAnchor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_anchor/{epoch_id}":{"get":{"tags":["Query"],"summary":"EpochAnchor returns the persisted epoch anchor for the given epoch_id.","operationId":"GithubComLumeraProtocollumeraQuery_EpochAnchor","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_report/{epoch_id}/{supernode_account}":{"get":{"tags":["Query"],"summary":"EpochReport returns the submitted epoch report for (epoch_id, supernode_account).","operationId":"GithubComLumeraProtocollumeraQuery_EpochReport","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"summary":"EpochReportsByReporter returns epoch reports submitted by the given reporter across epochs.","operationId":"GithubComLumeraProtocollumeraQuery_EpochReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_action/{action_id}":{"get":{"tags":["Query"],"summary":"EvidenceByAction queries evidence records by action id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceByAction","parameters":[{"type":"string","name":"action_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_subject/{subject_address}":{"get":{"tags":["Query"],"summary":"EvidenceBySubject queries evidence records by subject address.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceBySubject","parameters":[{"type":"string","name":"subject_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceBySubjectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/{evidence_id}":{"get":{"tags":["Query"],"summary":"EvidenceById queries a single evidence record by id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceById","parameters":[{"type":"string","format":"uint64","name":"evidence_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByIdResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/host_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"HostReports returns host reports submitted by the given supernode_account across epochs.","operationId":"GithubComLumeraProtocollumeraQuery_HostReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryHostReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin14","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/storage_challenge_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"StorageChallengeReports returns all reports that include storage-challenge observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_StorageChallengeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryStorageChallengeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin19","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin24","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin32","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the x/auth module\nparameters. The authority defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","operationId":"UpgradeMsg_Exec","parameters":[{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Grant":{"post":{"tags":["Msg"],"summary":"Grant grants the provided authorization to the grantee on the granter's\naccount with the provided expiration time. If there is already a grant\nfor the given (granter, grantee, Authorization) triple, then the grant\nwill be overwritten.","operationId":"UpgradeMsg_Grant","parameters":[{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Revoke":{"post":{"tags":["Msg"],"summary":"Revoke revokes any authorization corresponding to the provided method name on the\ngranter's account that has been granted to the grantee.","operationId":"UpgradeMsg_Revoke","parameters":[{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.autocli.v1.Query/AppOptions":{"post":{"tags":["Query"],"summary":"AppOptions returns the autocli options for all of the modules in an app.","operationId":"UpgradeQuery_AppOptions","parameters":[{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/MultiSend":{"post":{"tags":["Msg"],"summary":"MultiSend defines a method for sending coins from some accounts to other accounts.","operationId":"UpgradeMsg_MultiSend","parameters":[{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method for sending coins from one account to another account.","operationId":"UpgradeMsg_Send","parameters":[{"description":"MsgSend represents a message to send coins from one account to another.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/SetSendEnabled":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"SetSendEnabled is a governance operation for setting the SendEnabled flag\non any number of Denoms. Only the entries to add or update should be\nincluded. Entries that already exist in the store, but that aren't\nincluded in this message, will be left unchanged.","operationId":"UpgradeMsg_SetSendEnabled","parameters":[{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabled"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin53","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/AuthorizeCircuitBreaker":{"post":{"tags":["Msg"],"summary":"AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another\naccount's circuit breaker permissions.","operationId":"UpgradeMsg_AuthorizeCircuitBreaker","parameters":[{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/ResetCircuitBreaker":{"post":{"tags":["Msg"],"summary":"ResetCircuitBreaker resumes processing of Msg's in the state machine that\nhave been been paused using TripCircuitBreaker.","operationId":"UpgradeMsg_ResetCircuitBreaker","parameters":[{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/TripCircuitBreaker":{"post":{"tags":["Msg"],"summary":"TripCircuitBreaker pauses processing of Msg's in the state machine.","operationId":"UpgradeMsg_TripCircuitBreaker","parameters":[{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.consensus.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin66","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin68","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/VerifyInvariant":{"post":{"tags":["Msg"],"summary":"VerifyInvariant defines a method to verify a particular invariant.","operationId":"UpgradeMsg_VerifyInvariant","parameters":[{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/distribution module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"UpgradeMsg_CommunityPoolSpend","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/DepositValidatorRewardsPool":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"UpgradeMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"UpgradeMsg_FundCommunityPool","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress":{"post":{"tags":["Msg"],"summary":"SetWithdrawAddress defines a method to change the withdraw address\nfor a delegator (or validator self-delegation).","operationId":"UpgradeMsg_SetWithdrawAddress","parameters":[{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin79","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward":{"post":{"tags":["Msg"],"summary":"WithdrawDelegatorReward defines a method to withdraw rewards of delegator\nfrom a single validator.","operationId":"UpgradeMsg_WithdrawDelegatorReward","parameters":[{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission":{"post":{"tags":["Msg"],"summary":"WithdrawValidatorCommission defines a method to withdraw the\nfull commission to the validator address.","operationId":"UpgradeMsg_WithdrawValidatorCommission","parameters":[{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evidence.v1beta1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or\ncounterfactual signing.","operationId":"UpgradeMsg_SubmitEvidence","parameters":[{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/GrantAllowance":{"post":{"tags":["Msg"],"summary":"GrantAllowance grants fee allowance to the grantee on the granter's\naccount with the provided expiration time.","operationId":"UpgradeMsg_GrantAllowance","parameters":[{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/PruneAllowances":{"post":{"description":"Since cosmos-sdk 0.50","tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"UpgradeMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowances"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/RevokeAllowance":{"post":{"tags":["Msg"],"summary":"RevokeAllowance revokes any fee allowance of granter's account that\nhas been granted to the grantee.","operationId":"UpgradeMsg_RevokeAllowance","parameters":[{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/CancelProposal":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"UpgradeMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"UpgradeMsg_Deposit","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/ExecLegacyContent":{"post":{"tags":["Msg"],"summary":"ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal\nto execute a legacy content-based proposal.","operationId":"UpgradeMsg_ExecLegacyContent","parameters":[{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContent"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given the messages.","operationId":"UpgradeMsg_SubmitProposal","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin92","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"UpgradeMsg_Vote","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"UpgradeMsg_VoteWeighted","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"UpgradeMsg_DepositMixin96","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given a content.","operationId":"UpgradeMsg_SubmitProposalMixin96","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"UpgradeMsg_VoteMixin96","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/VoteWeighted":{"post":{"description":"Since: cosmos-sdk 0.43","tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"UpgradeMsg_VoteWeightedMixin96","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroup":{"post":{"tags":["Msg"],"summary":"CreateGroup creates a new group with an admin account address, a list of members and some optional metadata.","operationId":"UpgradeMsg_CreateGroup","parameters":[{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupPolicy creates a new group policy using given DecisionPolicy.","operationId":"UpgradeMsg_CreateGroupPolicy","parameters":[{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupWithPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupWithPolicy creates a new group with policy.","operationId":"UpgradeMsg_CreateGroupWithPolicy","parameters":[{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec executes a proposal.","operationId":"UpgradeMsg_ExecMixin100","parameters":[{"description":"MsgExec is the Msg/Exec request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/LeaveGroup":{"post":{"tags":["Msg"],"summary":"LeaveGroup allows a group member to leave the group.","operationId":"UpgradeMsg_LeaveGroup","parameters":[{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal submits a new proposal.","operationId":"UpgradeMsg_SubmitProposalMixin100","parameters":[{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupAdmin updates the group admin with given group id and previous admin address.","operationId":"UpgradeMsg_UpdateGroupAdmin","parameters":[{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMembers":{"post":{"tags":["Msg"],"summary":"UpdateGroupMembers updates the group members with given group id and admin address.","operationId":"UpgradeMsg_UpdateGroupMembers","parameters":[{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembers"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupMetadata updates the group metadata with given group id and admin address.","operationId":"UpgradeMsg_UpdateGroupMetadata","parameters":[{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyAdmin updates a group policy admin.","operationId":"UpgradeMsg_UpdateGroupPolicyAdmin","parameters":[{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyDecisionPolicy":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated.","operationId":"UpgradeMsg_UpdateGroupPolicyDecisionPolicy","parameters":[{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyMetadata updates a group policy metadata.","operationId":"UpgradeMsg_UpdateGroupPolicyMetadata","parameters":[{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote allows a voter to vote on a proposal.","operationId":"UpgradeMsg_VoteMixin100","parameters":[{"description":"MsgVote is the Msg/Vote request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/WithdrawProposal":{"post":{"tags":["Msg"],"summary":"WithdrawProposal withdraws a proposal.","operationId":"UpgradeMsg_WithdrawProposal","parameters":[{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.mint.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/mint module\nparameters. The authority is defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParamsMixin105","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.nft.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method to send a nft from one account to another account.","operationId":"UpgradeMsg_SendMixin111","parameters":[{"description":"MsgSend represents a message to send a nft from one account to another account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/Unjail":{"post":{"tags":["Msg"],"summary":"Unjail defines a method for unjailing a jailed validator, thus returning\nthem into the bonded validator set, so they can begin receiving provisions\nand rewards again.","operationId":"UpgradeMsg_Unjail","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjail"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjailResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/slashing module\nparameters. The authority defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParamsMixin118","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/BeginRedelegate":{"post":{"tags":["Msg"],"summary":"BeginRedelegate defines a method for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","operationId":"UpgradeMsg_BeginRedelegate","parameters":[{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"UpgradeMsg_CancelUnbondingDelegation","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegation"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CreateValidator":{"post":{"tags":["Msg"],"summary":"CreateValidator defines a method for creating a new validator.","operationId":"UpgradeMsg_CreateValidator","parameters":[{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Delegate":{"post":{"tags":["Msg"],"summary":"Delegate defines a method for performing a delegation of coins\nfrom a delegator to a validator.","operationId":"UpgradeMsg_Delegate","parameters":[{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/EditValidator":{"post":{"tags":["Msg"],"summary":"EditValidator defines a method for editing an existing validator.","operationId":"UpgradeMsg_EditValidator","parameters":[{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Undelegate":{"post":{"tags":["Msg"],"summary":"Undelegate defines a method for performing an undelegation from a\ndelegate and a validator.","operationId":"UpgradeMsg_Undelegate","parameters":[{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines an operation for updating the x/staking module\nparameters.\nSince: cosmos-sdk 0.47","operationId":"UpgradeMsg_UpdateParamsMixin123","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenCommit":{"post":{"tags":["ABCIListenerService"],"summary":"ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit","operationId":"UpgradeABCIListenerService_ListenCommit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenFinalizeBlock":{"post":{"tags":["ABCIListenerService"],"summary":"ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock","operationId":"UpgradeABCIListenerService_ListenFinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/CancelUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"UpgradeMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"UpgradeMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"UpgradeMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"UpgradeMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreateVestingAccount":{"post":{"tags":["Msg"],"summary":"CreateVestingAccount defines a method that enables creating a vesting\naccount.","operationId":"UpgradeMsg_CreateVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/account_info/{address}":{"get":{"description":"Since: cosmos-sdk 0.47","tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"UpgradeQuery_AccountInfo","parameters":[{"type":"string","description":"address is the account address string.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.43","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"UpgradeQuery_Accounts","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account details based on address.","operationId":"UpgradeQuery_Account","parameters":[{"type":"string","description":"address defines the address to query for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/address_by_id/{id}":{"get":{"description":"Since: cosmos-sdk 0.46.2","tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"UpgradeQuery_AccountAddressByID","parameters":[{"type":"string","format":"int64","description":"Deprecated, use account_id instead\n\nid is the account number of the address to be queried. This field\nshould have been an uint64 (like all account numbers), and will be\nupdated to uint64 in a future version of the auth query.","name":"id","in":"path","required":true},{"type":"string","format":"uint64","description":"account_id is the account number of the address to be queried.\n\nSince: cosmos-sdk 0.47","name":"account_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountAddressByIDResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"UpgradeQuery_Bech32Prefix","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.Bech32PrefixResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_bytes}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"UpgradeQuery_AddressBytesToString","parameters":[{"type":"string","format":"byte","name":"address_bytes","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressBytesToStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_string}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"UpgradeQuery_AddressStringToBytes","parameters":[{"type":"string","name":"address_string","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressStringToBytesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"UpgradeQuery_ModuleAccounts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts/{name}":{"get":{"tags":["Query"],"summary":"ModuleAccountByName returns the module account info by module name","operationId":"UpgradeQuery_ModuleAccountByName","parameters":[{"type":"string","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountByNameResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters.","operationId":"UpgradeQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants":{"get":{"tags":["Query"],"summary":"Returns list of `Authorization`, granted to the grantee by the granter.","operationId":"UpgradeQuery_Grants","parameters":[{"type":"string","name":"granter","in":"query"},{"type":"string","name":"grantee","in":"query"},{"type":"string","description":"Optional, msg_type_url, when set, will query only grants matching given msg type.","name":"msg_type_url","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/grantee/{grantee}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"UpgradeQuery_GranteeGrants","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranteeGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/granter/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"UpgradeQuery_GranterGrants","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranterGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"AllBalances queries the balance of all coins for a single account.","operationId":"UpgradeQuery_AllBalances","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"boolean","description":"resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.\n\nSince: cosmos-sdk 0.50","name":"resolve_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryAllBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}/by_denom":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a single coin for a single account.","operationId":"UpgradeQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners/{denom}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"UpgradeQuery_DenomOwners","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners_by_query":{"get":{"description":"Since: cosmos-sdk 0.50.3","tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"UpgradeQuery_DenomOwnersByQuery","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata":{"get":{"tags":["Query"],"summary":"DenomsMetadata queries the client metadata for all registered coin\ndenominations.","operationId":"UpgradeQuery_DenomsMetadata","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomsMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata/{denom}":{"get":{"tags":["Query"],"summary":"DenomMetadata queries the client metadata of a given coin denomination.","operationId":"UpgradeQuery_DenomMetadata","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata_by_query_string":{"get":{"tags":["Query"],"summary":"DenomMetadataByQueryString queries the client metadata of a given coin denomination.","operationId":"UpgradeQuery_DenomMetadataByQueryString","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/bank module.","operationId":"UpgradeQuery_ParamsMixin52","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/send_enabled":{"get":{"description":"This query only returns denominations that have specific SendEnabled settings.\nAny denomination that does not have a specific setting will use the default\nparams.default_send_enabled, and will not be returned by this query.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"UpgradeQuery_SendEnabled","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"denoms is the specific denoms you want look up. Leave empty to get all entries.","name":"denoms","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"UpgradeQuery_SpendableBalances","parameters":[{"type":"string","description":"address is the address to query spendable balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"UpgradeQuery_SpendableBalanceByDenom","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"TotalSupply queries the total supply of all coins.","operationId":"UpgradeQuery_TotalSupply","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryTotalSupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SupplyOf queries the supply of a single coin.","operationId":"UpgradeQuery_SupplyOf","parameters":[{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySupplyOfResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/config":{"get":{"tags":["Service"],"summary":"Config queries for the operator configuration.","operationId":"UpgradeService_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.ConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/status":{"get":{"tags":["Service"],"summary":"Status queries for the node status.","operationId":"UpgradeService_Status","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.StatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/authn":{"get":{"tags":["ReflectionService"],"summary":"GetAuthnDescriptor returns information on how to authenticate transactions in the application\nNOTE: this RPC is still experimental and might be subject to breaking changes or removal in\nfuture releases of the cosmos-sdk.","operationId":"UpgradeReflectionService_GetAuthnDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/chain":{"get":{"tags":["ReflectionService"],"summary":"GetChainDescriptor returns the description of the chain","operationId":"UpgradeReflectionService_GetChainDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/codec":{"get":{"tags":["ReflectionService"],"summary":"GetCodecDescriptor returns the descriptor of the codec of the application","operationId":"UpgradeReflectionService_GetCodecDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/configuration":{"get":{"tags":["ReflectionService"],"summary":"GetConfigurationDescriptor returns the descriptor for the sdk.Config of the application","operationId":"UpgradeReflectionService_GetConfigurationDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/query_services":{"get":{"tags":["ReflectionService"],"summary":"GetQueryServicesDescriptor returns the available gRPC queryable services of the application","operationId":"UpgradeReflectionService_GetQueryServicesDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/tx_descriptor":{"get":{"tags":["ReflectionService"],"summary":"GetTxDescriptor returns information on the used transaction object and available msgs that can be used","operationId":"UpgradeReflectionService_GetTxDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces":{"get":{"tags":["ReflectionService"],"summary":"ListAllInterfaces lists all the interfaces registered in the interface\nregistry.","operationId":"UpgradeReflectionService_ListAllInterfaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListAllInterfacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces/{interface_name}/implementations":{"get":{"tags":["ReflectionService"],"summary":"ListImplementations list all the concrete types that implement a given\ninterface.","operationId":"UpgradeReflectionService_ListImplementations","parameters":[{"type":"string","description":"interface_name defines the interface to query the implementations for.","name":"interface_name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListImplementationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/abci_query":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Service"],"summary":"ABCIQuery defines a query handler that supports ABCI queries directly to the\napplication, bypassing Tendermint completely. The ABCI query must contain\na valid and supported path, including app, custom, p2p, and store.","operationId":"UpgradeService_ABCIQuery","parameters":[{"type":"string","format":"byte","name":"data","in":"query"},{"type":"string","name":"path","in":"query"},{"type":"string","format":"int64","name":"height","in":"query"},{"type":"boolean","name":"prove","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ABCIQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/latest":{"get":{"tags":["Service"],"summary":"GetLatestBlock returns the latest block.","operationId":"UpgradeService_GetLatestBlock","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/{height}":{"get":{"tags":["Service"],"summary":"GetBlockByHeight queries block for given height.","operationId":"UpgradeService_GetBlockByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/node_info":{"get":{"tags":["Service"],"summary":"GetNodeInfo queries the current node info.","operationId":"UpgradeService_GetNodeInfo","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetNodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/syncing":{"get":{"tags":["Service"],"summary":"GetSyncing queries node syncing.","operationId":"UpgradeService_GetSyncing","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetSyncingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/latest":{"get":{"tags":["Service"],"summary":"GetLatestValidatorSet queries latest validator-set.","operationId":"UpgradeService_GetLatestValidatorSet","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/{height}":{"get":{"tags":["Service"],"summary":"GetValidatorSetByHeight queries validator-set at a given height.","operationId":"UpgradeService_GetValidatorSetByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"UpgradeQuery_AccountsMixin62","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"UpgradeQuery_AccountMixin62","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/disable_list":{"get":{"tags":["Query"],"summary":"DisabledList returns a list of disabled message urls","operationId":"UpgradeQuery_DisabledList","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.DisabledListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/consensus/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/consensus module.","operationId":"UpgradeQuery_ParamsMixin65","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"UpgradeQuery_CommunityPool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards":{"get":{"tags":["Query"],"summary":"DelegationTotalRewards queries the total rewards accrued by each\nvalidator.","operationId":"UpgradeQuery_DelegationTotalRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}":{"get":{"tags":["Query"],"summary":"DelegationRewards queries the total rewards accrued by a delegation.","operationId":"UpgradeQuery_DelegationRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true},{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators":{"get":{"tags":["Query"],"summary":"DelegatorValidators queries the validators of a delegator.","operationId":"UpgradeQuery_DelegatorValidators","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address":{"get":{"tags":["Query"],"summary":"DelegatorWithdrawAddress queries withdraw address of a delegator.","operationId":"UpgradeQuery_DelegatorWithdrawAddress","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries params of the distribution module.","operationId":"UpgradeQuery_ParamsMixin78","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}":{"get":{"tags":["Query"],"summary":"ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator","operationId":"UpgradeQuery_ValidatorDistributionInfo","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/commission":{"get":{"tags":["Query"],"summary":"ValidatorCommission queries accumulated commission for a validator.","operationId":"UpgradeQuery_ValidatorCommission","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards":{"get":{"tags":["Query"],"summary":"ValidatorOutstandingRewards queries rewards of a validator address.","operationId":"UpgradeQuery_ValidatorOutstandingRewards","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes":{"get":{"tags":["Query"],"summary":"ValidatorSlashes queries slash events of a validator.","operationId":"UpgradeQuery_ValidatorSlashes","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true},{"type":"string","format":"uint64","description":"starting_height defines the optional starting height to query the slashes.","name":"starting_height","in":"query"},{"type":"string","format":"uint64","description":"starting_height defines the optional ending height to query the slashes.","name":"ending_height","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorSlashesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence":{"get":{"tags":["Query"],"summary":"AllEvidence queries all evidence.","operationId":"UpgradeQuery_AllEvidence","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryAllEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence/{hash}":{"get":{"tags":["Query"],"summary":"Evidence queries evidence based on evidence hash.","operationId":"UpgradeQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.\n\nSince: cosmos-sdk 0.47","name":"hash","in":"path","required":true},{"type":"string","format":"byte","description":"evidence_hash defines the hash of the requested evidence.\nDeprecated: Use hash, a HEX encoded string, instead.","name":"evidence_hash","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}":{"get":{"tags":["Query"],"summary":"Allowance returns granted allwance to the grantee by the granter.","operationId":"UpgradeQuery_Allowance","parameters":[{"type":"string","description":"granter is the address of the user granting an allowance of their funds.","name":"granter","in":"path","required":true},{"type":"string","description":"grantee is the address of the user being granted an allowance of another user's funds.","name":"grantee","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowances/{grantee}":{"get":{"tags":["Query"],"summary":"Allowances returns all the grants for the given grantee address.","operationId":"UpgradeQuery_Allowances","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/issued/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"UpgradeQuery_AllowancesByGranter","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/constitution":{"get":{"tags":["Query"],"summary":"Constitution queries the chain's constitution.","operationId":"UpgradeQuery_Constitution","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryConstitutionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"UpgradeQuery_ParamsMixin91","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"UpgradeQuery_Proposals","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"UpgradeQuery_Proposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"UpgradeQuery_Deposits","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositAddr.","operationId":"UpgradeQuery_Deposit","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"UpgradeQuery_TallyResult","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"UpgradeQuery_Votes","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"UpgradeQuery_Vote","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"UpgradeQuery_ParamsMixin95","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"UpgradeQuery_ProposalsMixin95","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"UpgradeQuery_ProposalMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"UpgradeQuery_DepositsMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositor address.","operationId":"UpgradeQuery_DepositMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"UpgradeQuery_TallyResultMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"UpgradeQuery_VotesMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"UpgradeQuery_VoteMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_info/{group_id}":{"get":{"tags":["Query"],"summary":"GroupInfo queries group info based on group id.","operationId":"UpgradeQuery_GroupInfo","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_members/{group_id}":{"get":{"tags":["Query"],"summary":"GroupMembers queries members of a group by group id.","operationId":"UpgradeQuery_GroupMembers","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByAdmin queries group policies by admin address.","operationId":"UpgradeQuery_GroupPoliciesByAdmin","parameters":[{"type":"string","description":"admin is the admin address of the group policy.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_group/{group_id}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByGroup queries group policies by group id.","operationId":"UpgradeQuery_GroupPoliciesByGroup","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group policy's group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policy_info/{address}":{"get":{"tags":["Query"],"summary":"GroupPolicyInfo queries group policy info based on account address of group policy.","operationId":"UpgradeQuery_GroupPolicyInfo","parameters":[{"type":"string","description":"address is the account address of the group policy.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPolicyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups":{"get":{"description":"Since: cosmos-sdk 0.47.1","tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"UpgradeQuery_Groups","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupsByAdmin queries groups by admin address.","operationId":"UpgradeQuery_GroupsByAdmin","parameters":[{"type":"string","description":"admin is the account address of a group's admin.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_member/{address}":{"get":{"tags":["Query"],"summary":"GroupsByMember queries groups by member address.","operationId":"UpgradeQuery_GroupsByMember","parameters":[{"type":"string","description":"address is the group member address.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByMemberResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries a proposal based on proposal id.","operationId":"UpgradeQuery_ProposalMixin99","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult returns the tally result of a proposal. If the proposal is\nstill in voting period, then this query computes the current tally state,\nwhich might not be final. On the other hand, if the proposal is final,\nthen it simply returns the `final_tally_result` state stored in the\nproposal itself.","operationId":"UpgradeQuery_TallyResultMixin99","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique id of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals_by_group_policy/{address}":{"get":{"tags":["Query"],"summary":"ProposalsByGroupPolicy queries proposals based on account address of group policy.","operationId":"UpgradeQuery_ProposalsByGroupPolicy","parameters":[{"type":"string","description":"address is the account address of the group policy related to proposals.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalsByGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}":{"get":{"tags":["Query"],"summary":"VoteByProposalVoter queries a vote by proposal id and voter.","operationId":"UpgradeQuery_VoteByProposalVoter","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVoteByProposalVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"VotesByProposal queries a vote by proposal id.","operationId":"UpgradeQuery_VotesByProposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_voter/{voter}":{"get":{"tags":["Query"],"summary":"VotesByVoter queries a vote by voter.","operationId":"UpgradeQuery_VotesByVoter","parameters":[{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/annual_provisions":{"get":{"tags":["Query"],"summary":"AnnualProvisions current minting annual provisions value.","operationId":"UpgradeQuery_AnnualProvisions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryAnnualProvisionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/inflation":{"get":{"tags":["Query"],"summary":"Inflation returns the current minting inflation value.","operationId":"UpgradeQuery_Inflation","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryInflationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of minting parameters.","operationId":"UpgradeQuery_ParamsMixin104","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/balance/{owner}/{class_id}":{"get":{"tags":["Query"],"summary":"Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721","operationId":"UpgradeQuery_BalanceMixin110","parameters":[{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"path","required":true},{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes":{"get":{"tags":["Query"],"summary":"Classes queries all NFT classes","operationId":"UpgradeQuery_Classes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes/{class_id}":{"get":{"tags":["Query"],"summary":"Class queries an NFT class based on its id","operationId":"UpgradeQuery_Class","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts":{"get":{"tags":["Query"],"summary":"NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in\nERC721Enumerable","operationId":"UpgradeQuery_NFTs","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"query"},{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"NFT queries an NFT based on its class and id.","operationId":"UpgradeQuery_NFT","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/owner/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721","operationId":"UpgradeQuery_Owner","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryOwnerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/supply/{class_id}":{"get":{"tags":["Query"],"summary":"Supply queries the number of NFTs from the given class, same as totalSupply of ERC721.","operationId":"UpgradeQuery_Supply","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QuerySupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries a specific parameter of a module, given its subspace and\nkey.","operationId":"UpgradeQuery_ParamsMixin113","parameters":[{"type":"string","description":"subspace defines the module to query the parameter for.","name":"subspace","in":"query"},{"type":"string","description":"key defines the key of the parameter in the subspace.","name":"key","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/subspaces":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"UpgradeQuery_Subspaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QuerySubspacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of slashing module","operationId":"UpgradeQuery_ParamsMixin116","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos":{"get":{"tags":["Query"],"summary":"SigningInfos queries signing info of all validators","operationId":"UpgradeQuery_SigningInfos","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos/{cons_address}":{"get":{"tags":["Query"],"summary":"SigningInfo queries the signing info of given cons address","operationId":"UpgradeQuery_SigningInfo","parameters":[{"type":"string","description":"cons_address is the address to query signing info of","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegations/{delegator_addr}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorDelegations queries all delegations of a given delegator address.","operationId":"UpgradeQuery_DelegatorDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Redelegations queries redelegations of given address.","operationId":"UpgradeQuery_Redelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"src_validator_addr defines the validator address to redelegate from.","name":"src_validator_addr","in":"query"},{"type":"string","description":"dst_validator_addr defines the validator address to redelegate to.","name":"dst_validator_addr","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryRedelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorUnbondingDelegations queries all unbonding delegations of a given\ndelegator address.","operationId":"UpgradeQuery_DelegatorUnbondingDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorValidators queries all validators info for given delegator\naddress.","operationId":"UpgradeQuery_DelegatorValidatorsMixin121","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"DelegatorValidator queries validator info for given delegator validator\npair.","operationId":"UpgradeQuery_DelegatorValidator","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/historical_info/{height}":{"get":{"tags":["Query"],"summary":"HistoricalInfo queries the historical info for given height.","operationId":"UpgradeQuery_HistoricalInfo","parameters":[{"type":"string","format":"int64","description":"height defines at which height to query the historical info.","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryHistoricalInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the staking parameters.","operationId":"UpgradeQuery_ParamsMixin121","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/pool":{"get":{"tags":["Query"],"summary":"Pool queries the pool info.","operationId":"UpgradeQuery_Pool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Validators queries all validators that match the given status.","operationId":"UpgradeQuery_Validators","parameters":[{"type":"string","description":"status enables to query for validators matching a given status.","name":"status","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"Validator queries validator info for given validator address.","operationId":"UpgradeQuery_Validator","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorDelegations queries delegate info for given validator.","operationId":"UpgradeQuery_ValidatorDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}":{"get":{"tags":["Query"],"summary":"Delegation queries delegate info for given validator delegator pair.","operationId":"UpgradeQuery_Delegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation":{"get":{"tags":["Query"],"summary":"UnbondingDelegation queries unbonding info for given validator delegator\npair.","operationId":"UpgradeQuery_UnbondingDelegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorUnbondingDelegations queries unbonding delegations of a validator.","operationId":"UpgradeQuery_ValidatorUnbondingDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"UpgradeService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"UpgradeService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"UpgradeService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"UpgradeService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/simulate":{"post":{"tags":["Service"],"summary":"Simulate simulates executing a transaction for estimating gas usage.","operationId":"UpgradeService_Simulate","parameters":[{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs":{"get":{"tags":["Service"],"summary":"GetTxsEvent fetches txs by event.","operationId":"UpgradeService_GetTxsEvent","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"events is the list of transaction event type.\nDeprecated post v0.47.x: use query instead, which should contain a valid\nevents query.","name":"events","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"],"type":"string","default":"ORDER_BY_UNSPECIFIED","description":" - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","name":"order_by","in":"query"},{"type":"string","format":"uint64","description":"page is the page number to query, starts at 1. If not provided, will\ndefault to first page.","name":"page","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"limit","in":"query"},{"type":"string","description":"query defines the transaction event query that is proxied to Tendermint's\nTxSearch RPC method. The query must be valid.\n\nSince cosmos-sdk 0.50","name":"query","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}},"post":{"tags":["Service"],"summary":"BroadcastTx broadcast transaction.","operationId":"UpgradeService_BroadcastTx","parameters":[{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/block/{height}":{"get":{"description":"Since: cosmos-sdk 0.45.2","tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"UpgradeService_GetBlockWithTxs","parameters":[{"type":"string","format":"int64","description":"height is the height of the block to query.","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetBlockWithTxsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/{hash}":{"get":{"tags":["Service"],"summary":"GetTx fetches a tx by hash.","operationId":"UpgradeService_GetTx","parameters":[{"type":"string","description":"hash is the tx hash to query, encoded as a hex string.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/applied_plan/{name}":{"get":{"tags":["Query"],"summary":"AppliedPlan queries a previously applied upgrade plan by its name.","operationId":"UpgradeQuery_AppliedPlan","parameters":[{"type":"string","description":"name is the name of the applied plan to query for.","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAppliedPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/authority":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"UpgradeQuery_Authority","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAuthorityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/current_plan":{"get":{"tags":["Query"],"summary":"CurrentPlan queries the current upgrade plan.","operationId":"UpgradeQuery_CurrentPlan","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryCurrentPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/module_versions":{"get":{"description":"Since: cosmos-sdk 0.43","tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"UpgradeQuery_ModuleVersions","parameters":[{"type":"string","description":"module_name is a field to query a specific module\nconsensus version from state. Leaving this empty will\nfetch the full list of module versions from state","name":"module_name","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryModuleVersionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries the consensus state that will serve\nas a trusted kernel for the next version of this chain. It will only be\nstored at the last height of this chain.\nUpgradedConsensusState RPC not supported with legacy querier\nThis rpc is deprecated now that IBC has its own replacement\n(https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)","operationId":"UpgradeQuery_UpgradedConsensusState","parameters":[{"type":"string","format":"int64","description":"last height of the current chain must be sent in request\nas this is the height under which next consensus state is stored","name":"last_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/AddCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"AddCodeUploadParamsAddresses defines a governance operation for\nadding addresses to code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_AddCodeUploadParamsAddresses","parameters":[{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ClearAdmin":{"post":{"tags":["Msg"],"summary":"ClearAdmin removes any admin stored for a smart contract","operationId":"WasmMsg_ClearAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ExecuteContract":{"post":{"tags":["Msg"],"summary":"Execute submits the given message data to a smart contract","operationId":"WasmMsg_ExecuteContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract":{"post":{"tags":["Msg"],"summary":"InstantiateContract creates a new smart contract instance for the given\n code id.","operationId":"WasmMsg_InstantiateContract","parameters":[{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract2":{"post":{"tags":["Msg"],"summary":"InstantiateContract2 creates a new smart contract instance for the given\n code id with a predictable address","operationId":"WasmMsg_InstantiateContract2","parameters":[{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"Migrate runs a code upgrade/ downgrade for a smart contract","operationId":"WasmMsg_MigrateContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/PinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"PinCodes defines a governance operation for pinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_PinCodes","parameters":[{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/RemoveCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"RemoveCodeUploadParamsAddresses defines a governance operation for\nremoving addresses from code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_RemoveCodeUploadParamsAddresses","parameters":[{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndInstantiateContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"StoreAndInstantiateContract defines a governance operation for storing\nand instantiating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndInstantiateContract","parameters":[{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndMigrateContract":{"post":{"description":"Since: 0.42","tags":["Msg"],"summary":"StoreAndMigrateContract defines a governance operation for storing\nand migrating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndMigrateContract","parameters":[{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode to submit Wasm code to the system","operationId":"WasmMsg_StoreCode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/SudoContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"SudoContract defines a governance operation for calling sudo\non a contract. The authority is defined in the keeper.","operationId":"WasmMsg_SudoContract","parameters":[{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UnpinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UnpinCodes defines a governance operation for unpinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_UnpinCodes","parameters":[{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateAdmin":{"post":{"tags":["Msg"],"summary":"UpdateAdmin sets a new admin for a smart contract","operationId":"WasmMsg_UpdateAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateContractLabel":{"post":{"description":"Since: 0.43","tags":["Msg"],"summary":"UpdateContractLabel sets a new label for a smart contract","operationId":"WasmMsg_UpdateContractLabel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateInstantiateConfig":{"post":{"tags":["Msg"],"summary":"UpdateInstantiateConfig updates instantiate config for a smart contract","operationId":"WasmMsg_UpdateInstantiateConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateParams":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/wasm\nmodule parameters. The authority is defined in the keeper.","operationId":"WasmMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code":{"get":{"tags":["Query"],"summary":"Codes gets the metadata for all stored wasm codes","operationId":"WasmQuery_Codes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code-info/{code_id}":{"get":{"tags":["Query"],"summary":"CodeInfo gets the metadata for a single wasm code","operationId":"WasmQuery_CodeInfo","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}":{"get":{"tags":["Query"],"summary":"Code gets the binary code and metadata for a single wasm code","operationId":"WasmQuery_Code","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}/contracts":{"get":{"tags":["Query"],"summary":"ContractsByCode lists all smart contracts for a code id","operationId":"WasmQuery_ContractsByCode","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/params":{"get":{"tags":["Query"],"summary":"Params gets the module params","operationId":"WasmQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/pinned":{"get":{"tags":["Query"],"summary":"PinnedCodes gets the pinned code ids","operationId":"WasmQuery_PinnedCodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryPinnedCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/build_address":{"get":{"tags":["Query"],"summary":"BuildAddress builds a contract address","operationId":"WasmQuery_BuildAddress","parameters":[{"type":"string","description":"CodeHash is the hash of the code","name":"code_hash","in":"query"},{"type":"string","description":"CreatorAddress is the address of the contract instantiator","name":"creator_address","in":"query"},{"type":"string","description":"Salt is a hex encoded salt","name":"salt","in":"query"},{"type":"string","format":"byte","description":"InitArgs are optional json encoded init args to be used in contract address\nbuilding if provided","name":"init_args","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryBuildAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}":{"get":{"tags":["Query"],"summary":"ContractInfo gets the contract meta data","operationId":"WasmQuery_ContractInfo","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/history":{"get":{"tags":["Query"],"summary":"ContractHistory gets the contract code history","operationId":"WasmQuery_ContractHistory","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractHistoryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}":{"get":{"tags":["Query"],"summary":"RawContractState gets single key from the raw store data of a contract","operationId":"WasmQuery_RawContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryRawContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}":{"get":{"tags":["Query"],"summary":"SmartContractState get smart query result from the contract","operationId":"WasmQuery_SmartContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"QueryData contains the query data passed to the contract","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QuerySmartContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/state":{"get":{"tags":["Query"],"summary":"AllContractState gets all raw store data for a single contract","operationId":"WasmQuery_AllContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryAllContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contracts/creator/{creator_address}":{"get":{"tags":["Query"],"summary":"ContractsByCreator gets the contracts by creator","operationId":"WasmQuery_ContractsByCreator","parameters":[{"type":"string","description":"CreatorAddress is the address of contract creator","name":"creator_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/wasm-limits-config":{"get":{"tags":["Query"],"summary":"WasmLimitsConfig gets the configured limits for static validation of Wasm\nfiles, encoded in JSON.","operationId":"WasmQuery_WasmLimitsConfig","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/RegisterInterchainAccount":{"post":{"tags":["Msg"],"summary":"RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount.","operationId":"ControllerMsg_RegisterInterchainAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/SendTx":{"post":{"tags":["Msg"],"summary":"SendTx defines a rpc handler for MsgSendTx.","operationId":"ControllerMsg_SendTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/ModuleQuerySafe":{"post":{"tags":["Msg"],"summary":"ModuleQuerySafe defines a rpc handler for MsgModuleQuerySafe.","operationId":"ControllerMsg_ModuleQuerySafe","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin160","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/Transfer":{"post":{"tags":["Msg"],"summary":"Transfer defines a rpc handler method for MsgTransfer.","operationId":"ControllerMsg_Transfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin171","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_Acknowledgement","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseConfirm":{"post":{"tags":["Msg"],"summary":"ChannelCloseConfirm defines a rpc handler method for\nMsgChannelCloseConfirm.","operationId":"ControllerMsg_ChannelCloseConfirm","parameters":[{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseInit":{"post":{"tags":["Msg"],"summary":"ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit.","operationId":"ControllerMsg_ChannelCloseInit","parameters":[{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenAck":{"post":{"tags":["Msg"],"summary":"ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck.","operationId":"ControllerMsg_ChannelOpenAck","parameters":[{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenConfirm":{"post":{"tags":["Msg"],"summary":"ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm.","operationId":"ControllerMsg_ChannelOpenConfirm","parameters":[{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenInit":{"post":{"tags":["Msg"],"summary":"ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit.","operationId":"ControllerMsg_ChannelOpenInit","parameters":[{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenTry":{"post":{"tags":["Msg"],"summary":"ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry.","operationId":"ControllerMsg_ChannelOpenTry","parameters":[{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacket","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_Timeout","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/TimeoutOnClose":{"post":{"tags":["Msg"],"summary":"TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose.","operationId":"ControllerMsg_TimeoutOnClose","parameters":[{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnCloseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_AcknowledgementMixin179","parameters":[{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacketMixin179","parameters":[{"description":"MsgRecvPacket receives an incoming IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/SendPacket":{"post":{"tags":["Msg"],"summary":"SendPacket defines a rpc handler method for MsgSendPacket.","operationId":"ControllerMsg_SendPacket","parameters":[{"description":"MsgSendPacket sends an outgoing IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_TimeoutMixin179","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/CreateClient":{"post":{"tags":["Msg"],"summary":"CreateClient defines a rpc handler method for MsgCreateClient.","operationId":"ControllerMsg_CreateClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/DeleteClientCreator":{"post":{"tags":["Msg"],"summary":"DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator.","operationId":"ControllerMsg_DeleteClientCreator","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/IBCSoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade.","operationId":"ControllerMsg_IBCSoftwareUpgrade","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/RecoverClient":{"post":{"tags":["Msg"],"summary":"RecoverClient defines a rpc handler method for MsgRecoverClient.","operationId":"ControllerMsg_RecoverClient","parameters":[{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/SubmitMisbehaviour":{"post":{"tags":["Msg"],"summary":"SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.","operationId":"ControllerMsg_SubmitMisbehaviour","parameters":[{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviour"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviourResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClient":{"post":{"tags":["Msg"],"summary":"UpdateClient defines a rpc handler method for MsgUpdateClient.","operationId":"ControllerMsg_UpdateClient","parameters":[{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClientParams":{"post":{"tags":["Msg"],"summary":"UpdateClientParams defines a rpc handler method for MsgUpdateParams.","operationId":"ControllerMsg_UpdateClientParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpgradeClient":{"post":{"tags":["Msg"],"summary":"UpgradeClient defines a rpc handler method for MsgUpgradeClient.","operationId":"ControllerMsg_UpgradeClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/RegisterCounterparty":{"post":{"tags":["Msg"],"summary":"RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty.","operationId":"ControllerMsg_RegisterCounterparty","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterparty"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterpartyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/UpdateClientConfig":{"post":{"tags":["Msg"],"summary":"UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig.","operationId":"ControllerMsg_UpdateClientConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenAck":{"post":{"tags":["Msg"],"summary":"ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck.","operationId":"ControllerMsg_ConnectionOpenAck","parameters":[{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenConfirm":{"post":{"tags":["Msg"],"summary":"ConnectionOpenConfirm defines a rpc handler method for\nMsgConnectionOpenConfirm.","operationId":"ControllerMsg_ConnectionOpenConfirm","parameters":[{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenInit":{"post":{"tags":["Msg"],"summary":"ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit.","operationId":"ControllerMsg_ConnectionOpenInit","parameters":[{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenTry":{"post":{"tags":["Msg"],"summary":"ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry.","operationId":"ControllerMsg_ConnectionOpenTry","parameters":[{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/UpdateConnectionParams":{"post":{"tags":["Msg"],"summary":"UpdateConnectionParams defines a rpc handler method for\nMsgUpdateParams.","operationId":"ControllerMsg_UpdateConnectionParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"MigrateContract defines a rpc handler method for MsgMigrateContract.","operationId":"ControllerMsg_MigrateContract","parameters":[{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/RemoveChecksum":{"post":{"tags":["Msg"],"summary":"RemoveChecksum defines a rpc handler method for MsgRemoveChecksum.","operationId":"ControllerMsg_RemoveChecksum","parameters":[{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode defines a rpc handler method for MsgStoreCode.","operationId":"ControllerMsg_StoreCode","parameters":[{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"InterchainAccount returns the interchain account address for a given owner address on a given connection","operationId":"ControllerQuery_InterchainAccount","parameters":[{"type":"string","name":"owner","in":"path","required":true},{"type":"string","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA controller submodule.","operationId":"ControllerQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/host/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA host submodule.","operationId":"ControllerQuery_ParamsMixin159","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address":{"get":{"tags":["Query"],"summary":"EscrowAddress returns the escrow address for a particular port and channel id.","operationId":"ControllerQuery_EscrowAddress","parameters":[{"type":"string","description":"unique channel identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"unique port identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryEscrowAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denom_hashes/{trace}":{"get":{"tags":["Query"],"summary":"DenomHash queries a denomination hash information.","operationId":"ControllerQuery_DenomHash","parameters":[{"pattern":".+","type":"string","description":"The denomination trace ([port_id]/[channel_id])+/[denom]","name":"trace","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomHashResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms":{"get":{"tags":["Query"],"summary":"Denoms queries all denominations","operationId":"ControllerQuery_Denoms","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms/{hash}":{"get":{"tags":["Query"],"summary":"Denom queries a denomination","operationId":"ControllerQuery_Denom","parameters":[{"pattern":".+","type":"string","description":"hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ibc-transfer module.","operationId":"ControllerQuery_ParamsMixin168","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/total_escrow/{denom}":{"get":{"tags":["Query"],"summary":"TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.","operationId":"ControllerQuery_TotalEscrowForDenom","parameters":[{"pattern":".+","type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels":{"get":{"tags":["Query"],"summary":"Channels queries all the IBC channels of a chain.","operationId":"ControllerQuery_Channels","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}":{"get":{"tags":["Query"],"summary":"Channel queries an IBC Channel.","operationId":"ControllerQuery_Channel","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state":{"get":{"tags":["Query"],"summary":"ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.","operationId":"ControllerQuery_ChannelClientState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ChannelConsensusState queries for the consensus state for the channel\nassociated with the provided channel identifiers.","operationId":"ControllerQuery_ChannelConsensusState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"revision number of the consensus state","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"revision height of the consensus state","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence":{"get":{"tags":["Query"],"summary":"NextSequenceReceive returns the next receive sequence for a given channel.","operationId":"ControllerQuery_NextSequenceReceive","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceReceiveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSend","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all the packet acknowledgements associated\nwith a channel.","operationId":"ControllerQuery_PacketAcknowledgements","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored packet acknowledgement hash.","operationId":"ControllerQuery_PacketAcknowledgement","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments returns all the packet commitments hashes associated\nwith a channel.","operationId":"ControllerQuery_PacketCommitments","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated\nwith a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcks","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a\nchannel and sequences.","operationId":"ControllerQuery_UnreceivedPackets","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"packet_commitment_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitment","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries if a given packet sequence has been received on the\nqueried chain","operationId":"ControllerQuery_PacketReceipt","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/connections/{connection}/channels":{"get":{"tags":["Query"],"summary":"ConnectionChannels queries all the channels associated with a connection\nend.","operationId":"ControllerQuery_ConnectionChannels","parameters":[{"type":"string","description":"connection unique identifier","name":"connection","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryConnectionChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSendMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all packet acknowledgements associated with a channel.","operationId":"ControllerQuery_PacketAcknowledgementsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored acknowledgement commitment hash.","operationId":"ControllerQuery_PacketAcknowledgementMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcksMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedPacketsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries a stored packet receipt.","operationId":"ControllerQuery_PacketReceiptMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_creator/{client_id}":{"get":{"tags":["Query"],"summary":"ClientCreator queries the creator of a given client.","operationId":"ControllerQuery_ClientCreator","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states":{"get":{"tags":["Query"],"summary":"ClientStates queries all the IBC light clients of a chain.","operationId":"ControllerQuery_ClientStates","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states/{client_id}":{"get":{"tags":["Query"],"summary":"ClientState queries an IBC light client.","operationId":"ControllerQuery_ClientState","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_status/{client_id}":{"get":{"tags":["Query"],"summary":"Status queries the status of an IBC client.","operationId":"ControllerQuery_ClientStatus","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}":{"get":{"tags":["Query"],"summary":"ConsensusStates queries all the consensus state associated with a given\nclient.","operationId":"ControllerQuery_ConsensusStates","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/heights":{"get":{"tags":["Query"],"summary":"ConsensusStateHeights queries the height of every consensus states associated with a given client.","operationId":"ControllerQuery_ConsensusStateHeights","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateHeightsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConsensusState queries a consensus state associated with a client state at\na given height.","operationId":"ControllerQuery_ConsensusState","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision number","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision height","name":"revision_height","in":"path","required":true},{"type":"boolean","description":"latest_height overrides the height field and queries the latest stored\nConsensusState","name":"latest_height","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/params":{"get":{"tags":["Query"],"summary":"ClientParams queries all parameters of the ibc client submodule.","operationId":"ControllerQuery_ClientParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_client_states":{"get":{"tags":["Query"],"summary":"UpgradedClientState queries an Upgraded IBC light client.","operationId":"ControllerQuery_UpgradedClientState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_consensus_states":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries an Upgraded IBC consensus state.","operationId":"ControllerQuery_UpgradedConsensusState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/verify_membership":{"post":{"tags":["Query"],"summary":"VerifyMembership queries an IBC light client for proof verification of a value at a given key path.","operationId":"ControllerQuery_VerifyMembership","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/config/{client_id}":{"get":{"tags":["Query"],"summary":"Config queries the IBC client v2 configuration for a given client.","operationId":"ControllerQuery_Config","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/counterparty_info/{client_id}":{"get":{"tags":["Query"],"summary":"CounterpartyInfo queries an IBC light counter party info.","operationId":"ControllerQuery_CounterpartyInfo","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryCounterpartyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/client_connections/{client_id}":{"get":{"tags":["Query"],"summary":"ClientConnections queries the connection paths associated with a client\nstate.","operationId":"ControllerQuery_ClientConnections","parameters":[{"type":"string","description":"client identifier associated with a connection","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryClientConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections":{"get":{"tags":["Query"],"summary":"Connections queries all the IBC connections of a chain.","operationId":"ControllerQuery_Connections","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"Connection queries an IBC connection end.","operationId":"ControllerQuery_Connection","parameters":[{"type":"string","description":"connection unique identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/client_state":{"get":{"tags":["Query"],"summary":"ConnectionClientState queries the client state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionClientState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConnectionConsensusState queries the consensus state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionConsensusState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/params":{"get":{"tags":["Query"],"summary":"ConnectionParams queries all parameters of the ibc connection submodule.","operationId":"ControllerQuery_ConnectionParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums":{"get":{"tags":["Query"],"summary":"Get all Wasm checksums","operationId":"ControllerQuery_Checksums","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryChecksumsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums/{checksum}/code":{"get":{"tags":["Query"],"summary":"Get Wasm code for given checksum","operationId":"ControllerQuery_Code","parameters":[{"type":"string","description":"checksum is a hex encoded string of the code stored.","name":"checksum","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitEpochReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitEpochReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEpochReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEpochReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence defines the SubmitEvidence RPC.","operationId":"GithubComLumeraProtocollumeraMsg_SubmitEvidence","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin15","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin20","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin25","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin36","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ApplySnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestApplySnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/CheckTx":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_CheckTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCheckTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCheckTx"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Commit":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Commit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCommit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Echo":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Echo","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestEcho"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseEcho"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ExtendVote":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ExtendVote","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestExtendVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseExtendVote"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/FinalizeBlock":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_FinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Flush":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Flush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFlush"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFlush"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Info":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Info","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInfo"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInfo"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/InitChain":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_InitChain","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInitChain"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInitChain"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ListSnapshots":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ListSnapshots","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestListSnapshots"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseListSnapshots"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/LoadSnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_LoadSnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestLoadSnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseLoadSnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/OfferSnapshot":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_OfferSnapshot","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestOfferSnapshot"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/PrepareProposal":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_PrepareProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestPrepareProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponsePrepareProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ProcessProposal":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ProcessProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestProcessProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Query":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Query","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestQuery"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseQuery"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/VerifyVoteExtension":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_VerifyVoteExtension","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestVerifyVoteExtension"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.auth.v1beta1.AddressBytesToStringResponse":{"description":"AddressBytesToStringResponse is the response type for AddressString rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_bytes":{"type":"string","format":"byte"}}},"cosmos.auth.v1beta1.BaseAccount":{"description":"BaseAccount defines a base account type. It contains all the necessary fields\nfor basic account functionality. Any custom account type should extend this\ntype for additional functionality (e.g. vesting).","type":"object","properties":{"account_number":{"type":"string","format":"uint64"},"address":{"type":"string"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"sequence":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.Bech32PrefixResponse":{"description":"Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/auth parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.auth.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.auth.v1beta1.Params":{"description":"Params defines the parameters for the auth module.","type":"object","properties":{"max_memo_characters":{"type":"string","format":"uint64"},"sig_verify_cost_ed25519":{"type":"string","format":"uint64"},"sig_verify_cost_secp256k1":{"type":"string","format":"uint64"},"tx_sig_limit":{"type":"string","format":"uint64"},"tx_size_cost_per_byte":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.QueryAccountAddressByIDResponse":{"description":"Since: cosmos-sdk 0.46.2","type":"object","title":"QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method","properties":{"account_address":{"type":"string"}}},"cosmos.auth.v1beta1.QueryAccountInfoResponse":{"description":"QueryAccountInfoResponse is the Query/AccountInfo response type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"info":{"description":"info is the account info which is represented by BaseAccount.","$ref":"#/definitions/cosmos.auth.v1beta1.BaseAccount"}}},"cosmos.auth.v1beta1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"account":{"description":"account defines the account of the corresponding address.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryAccountsResponse":{"description":"QueryAccountsResponse is the response type for the Query/Accounts RPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"accounts":{"type":"array","title":"accounts are the existing accounts","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.auth.v1beta1.QueryModuleAccountByNameResponse":{"description":"QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method.","type":"object","properties":{"account":{"$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryModuleAccountsResponse":{"description":"QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.auth.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.authz.v1beta1.Grant":{"description":"Grant gives permissions to execute\nthe provide method with expiration time.","type":"object","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time","title":"time when the grant will expire and will be pruned. If null, then the grant\ndoesn't have a time expiration (other conditions in `authorization`\nmay apply to invalidate the grant)"}}},"cosmos.authz.v1beta1.GrantAuthorization":{"type":"object","title":"GrantAuthorization extends a grant with both the addresses of the grantee and granter.\nIt is used in genesis.proto and query.proto","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgExec":{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","type":"object","properties":{"grantee":{"type":"string"},"msgs":{"description":"Execute Msg.\nThe x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg))\ntriple and validate it.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.authz.v1beta1.MsgExecResponse":{"description":"MsgExecResponse defines the Msg/MsgExecResponse response type.","type":"object","properties":{"results":{"type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.authz.v1beta1.MsgGrant":{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","type":"object","properties":{"grant":{"$ref":"#/definitions/cosmos.authz.v1beta1.Grant"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgGrantResponse":{"description":"MsgGrantResponse defines the Msg/MsgGrant response type.","type":"object"},"cosmos.authz.v1beta1.MsgRevoke":{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","type":"object","properties":{"grantee":{"type":"string"},"granter":{"type":"string"},"msg_type_url":{"type":"string"}}},"cosmos.authz.v1beta1.MsgRevokeResponse":{"description":"MsgRevokeResponse defines the Msg/MsgRevokeResponse response type.","type":"object"},"cosmos.authz.v1beta1.QueryGranteeGrantsResponse":{"description":"QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted to the grantee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGranterGrantsResponse":{"description":"QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGrantsResponse":{"description":"QueryGrantsResponse is the response type for the Query/Authorizations RPC method.","type":"object","properties":{"grants":{"description":"authorizations is a list of grants granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.autocli.v1.AppOptionsRequest":{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","type":"object"},"cosmos.autocli.v1.AppOptionsResponse":{"description":"AppOptionsResponse is the RemoteInfoService/AppOptions response type.","type":"object","properties":{"module_options":{"description":"module_options is a map of module name to autocli module options.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ModuleOptions"}}}},"cosmos.autocli.v1.FlagOptions":{"description":"FlagOptions are options for flags generated from rpc request fields.\nBy default, all request fields are configured as flags based on the\nkebab-case name of the field. Fields can be turned into positional arguments\ninstead by using RpcCommandOptions.positional_args.","type":"object","properties":{"default_value":{"description":"default_value is the default value as text.","type":"string"},"deprecated":{"description":"deprecated is the usage text to show if this flag is deprecated.","type":"string"},"hidden":{"type":"boolean","title":"hidden hides the flag from help/usage text"},"name":{"description":"name is an alternate name to use for the field flag.","type":"string"},"shorthand":{"description":"shorthand is a one-letter abbreviated flag.","type":"string"},"shorthand_deprecated":{"description":"shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated.","type":"string"},"usage":{"description":"usage is the help message.","type":"string"}}},"cosmos.autocli.v1.ModuleOptions":{"description":"ModuleOptions describes the CLI options for a Cosmos SDK module.","type":"object","properties":{"query":{"description":"query describes the queries commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"},"tx":{"description":"tx describes the tx commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}},"cosmos.autocli.v1.PositionalArgDescriptor":{"description":"PositionalArgDescriptor describes a positional argument.","type":"object","properties":{"proto_field":{"description":"proto_field specifies the proto field to use as the positional arg. Any\nfields used as positional args will not have a flag generated.","type":"string"},"varargs":{"description":"varargs makes a positional parameter a varargs parameter. This can only be\napplied to last positional parameter and the proto_field must a repeated\nfield.","type":"boolean"}}},"cosmos.autocli.v1.RpcCommandOptions":{"description":"RpcCommandOptions specifies options for commands generated from protobuf\nrpc methods.","type":"object","properties":{"alias":{"description":"alias is an array of aliases that can be used instead of the first word in Use.","type":"array","items":{"type":"string"}},"deprecated":{"description":"deprecated defines, if this command is deprecated and should print this string when used.","type":"string"},"example":{"description":"example is examples of how to use the command.","type":"string"},"flag_options":{"description":"flag_options are options for flags generated from rpc request fields.\nBy default all request fields are configured as flags. They can\nalso be configured as positional args instead using positional_args.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.FlagOptions"}},"long":{"description":"long is the long message shown in the 'help \u003cthis-command\u003e' output.","type":"string"},"positional_args":{"description":"positional_args specifies positional arguments for the command.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.PositionalArgDescriptor"}},"rpc_method":{"description":"rpc_method is short name of the protobuf rpc method that this command is\ngenerated from.","type":"string"},"short":{"description":"short is the short description shown in the 'help' output.","type":"string"},"skip":{"description":"skip specifies whether to skip this rpc method when generating commands.","type":"boolean"},"suggest_for":{"description":"suggest_for is an array of command names for which this command will be suggested -\nsimilar to aliases but only suggests.","type":"array","items":{"type":"string"}},"use":{"description":"use is the one-line usage method. It also allows specifying an alternate\nname for the command as the first word of the usage text.\n\nBy default the name of an rpc command is the kebab-case short name of the\nrpc method.","type":"string"},"version":{"description":"version defines the version for this command. If this value is non-empty and the command does not\ndefine a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\nwill print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\ncommand does not define one.","type":"string"}}},"cosmos.autocli.v1.ServiceCommandDescriptor":{"description":"ServiceCommandDescriptor describes a CLI command based on a protobuf service.","type":"object","properties":{"rpc_command_options":{"description":"rpc_command_options are options for commands generated from rpc methods.\nIf no options are specified for a given rpc method on the service, a\ncommand will be generated for that method with the default options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.RpcCommandOptions"}},"service":{"description":"service is the fully qualified name of the protobuf service to build\nthe command from. It can be left empty if sub_commands are used instead\nwhich may be the case if a module provides multiple tx and/or query services.","type":"string"},"sub_commands":{"description":"sub_commands is a map of optional sub-commands for this command based on\ndifferent protobuf services. The map key is used as the name of the\nsub-command.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}}},"cosmos.bank.v1beta1.DenomOwner":{"description":"DenomOwner defines structure representing an account that owns or holds a\nparticular denominated token. It contains the account address and account\nbalance of the denominated token.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address":{"description":"address defines the address that owns a particular denomination.","type":"string"},"balance":{"description":"balance is the balance of the denominated coin for an account.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.DenomUnit":{"description":"DenomUnit represents a struct that describes a given\ndenomination unit of the basic token.","type":"object","properties":{"aliases":{"type":"array","title":"aliases is a list of string aliases for the given denom","items":{"type":"string"}},"denom":{"description":"denom represents the string name of the given denom unit (e.g uatom).","type":"string"},"exponent":{"description":"exponent represents power of 10 exponent that one must\nraise the base_denom to in order to equal the given DenomUnit's denom\n1 denom = 10^exponent base_denom\n(e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\nexponent = 6, thus: 1 atom = 10^6 uatom).","type":"integer","format":"int64"}}},"cosmos.bank.v1beta1.Input":{"description":"Input models transaction input.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Metadata":{"description":"Metadata represents a struct that describes\na basic token.","type":"object","properties":{"base":{"description":"base represents the base denom (should be the DenomUnit with exponent = 0).","type":"string"},"denom_units":{"type":"array","title":"denom_units represents the list of DenomUnit's for a given coin","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomUnit"}},"description":{"type":"string"},"display":{"description":"display indicates the suggested denom that should be\ndisplayed in clients.","type":"string"},"name":{"description":"Since: cosmos-sdk 0.43","type":"string","title":"name defines the name of the token (eg: Cosmos Atom)"},"symbol":{"description":"symbol is the token symbol usually shown on exchanges (eg: ATOM). This can\nbe the same as the display.\n\nSince: cosmos-sdk 0.43","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"},"uri_hash":{"description":"URIHash is a sha256 hash of a document pointed by URI. It's used to verify that\nthe document didn't change. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"}}},"cosmos.bank.v1beta1.MsgMultiSend":{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","type":"object","properties":{"inputs":{"description":"Inputs, despite being `repeated`, only allows one sender input. This is\nchecked in MsgMultiSend's ValidateBasic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Input"}},"outputs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Output"}}}},"cosmos.bank.v1beta1.MsgMultiSendResponse":{"description":"MsgMultiSendResponse defines the Msg/MultiSend response type.","type":"object"},"cosmos.bank.v1beta1.MsgSend":{"description":"MsgSend represents a message to send coins from one account to another.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.bank.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.bank.v1beta1.MsgSetSendEnabled":{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module.","type":"string"},"send_enabled":{"description":"send_enabled is the list of entries to add or update.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}},"use_default_for":{"description":"use_default_for is a list of denoms that should use the params.default_send_enabled value.\nDenoms listed here will have their SendEnabled entries deleted.\nIf a denom is included that doesn't have a SendEnabled entry,\nit will be ignored.","type":"array","items":{"type":"string"}}}},"cosmos.bank.v1beta1.MsgSetSendEnabledResponse":{"description":"MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/bank parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.Output":{"description":"Output models transaction outputs.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Params":{"description":"Params defines the parameters for the bank module.","type":"object","properties":{"default_send_enabled":{"type":"boolean"},"send_enabled":{"description":"Deprecated: Use of SendEnabled in params is deprecated.\nFor genesis, use the newly added send_enabled field in the genesis object.\nStorage, lookup, and manipulation of this information is now in the keeper.\n\nAs of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QueryAllBalancesResponse":{"description":"QueryAllBalancesResponse is the response type for the Query/AllBalances RPC\nmethod.","type":"object","properties":{"balances":{"description":"balances is the balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse":{"description":"QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC\nmethod. Identical with QueryDenomMetadataResponse but receives denom as query string in request.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomMetadataResponse":{"description":"QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC\nmethod.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse":{"description":"QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query.\n\nSince: cosmos-sdk 0.50.3","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomOwnersResponse":{"description":"QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomsMetadataResponse":{"description":"QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC\nmethod.","type":"object","properties":{"metadatas":{"description":"metadata provides the client information for all the registered tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/bank parameters.","type":"object","properties":{"params":{"description":"params provides the parameters of the bank module.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.QuerySendEnabledResponse":{"description":"QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response. This field is only\npopulated if the denoms field in the request is empty.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"send_enabled":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse":{"description":"QuerySpendableBalanceByDenomResponse defines the gRPC response structure for\nquerying an account's spendable balance for a specific denom.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QuerySpendableBalancesResponse":{"description":"QuerySpendableBalancesResponse defines the gRPC response structure for querying\nan account's spendable balances.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"balances":{"description":"balances is the spendable balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QuerySupplyOfResponse":{"description":"QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method.","type":"object","properties":{"amount":{"description":"amount is the supply of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryTotalSupplyResponse":{"type":"object","title":"QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC\nmethod","properties":{"pagination":{"description":"pagination defines the pagination in the response.\n\nSince: cosmos-sdk 0.43","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supply":{"type":"array","title":"supply is the supply of the coins","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.SendEnabled":{"description":"SendEnabled maps coin denom to a send_enabled status (whether a denom is\nsendable).","type":"object","properties":{"denom":{"type":"string"},"enabled":{"type":"boolean"}}},"cosmos.base.abci.v1beta1.ABCIMessageLog":{"description":"ABCIMessageLog defines a structure containing an indexed tx ABCI message log.","type":"object","properties":{"events":{"description":"Events contains a slice of Event objects that were emitted during some\nexecution.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.StringEvent"}},"log":{"type":"string"},"msg_index":{"type":"integer","format":"int64"}}},"cosmos.base.abci.v1beta1.Attribute":{"description":"Attribute defines an attribute wrapper where the key and value are\nstrings instead of raw bytes.","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"cosmos.base.abci.v1beta1.GasInfo":{"description":"GasInfo defines tx execution gas context.","type":"object","properties":{"gas_used":{"description":"GasUsed is the amount of gas actually consumed.","type":"string","format":"uint64"},"gas_wanted":{"description":"GasWanted is the maximum units of work we allow this tx to perform.","type":"string","format":"uint64"}}},"cosmos.base.abci.v1beta1.Result":{"description":"Result is the union of ResponseFormat and ResponseCheckTx.","type":"object","properties":{"data":{"description":"Data is any data returned from message or handler execution. It MUST be\nlength prefixed in order to separate data from multiple message executions.\nDeprecated. This field is still populated, but prefer msg_response instead\nbecause it also contains the Msg response typeURL.","type":"string","format":"byte"},"events":{"description":"Events contains a slice of Event objects that were emitted during message\nor handler execution.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"log":{"description":"Log contains the log information from message or handler execution.","type":"string"},"msg_responses":{"description":"msg_responses contains the Msg handler responses type packed in Anys.\n\nSince: cosmos-sdk 0.46","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.base.abci.v1beta1.StringEvent":{"description":"StringEvent defines en Event object wrapper where all the attributes\ncontain key/value pairs that are strings instead of raw bytes.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.Attribute"}},"type":{"type":"string"}}},"cosmos.base.abci.v1beta1.TxResponse":{"description":"TxResponse defines a structure containing relevant tx data and metadata. The\ntags are stringified and the log is JSON decoded.","type":"object","properties":{"code":{"description":"Response code.","type":"integer","format":"int64"},"codespace":{"type":"string","title":"Namespace for the Code"},"data":{"description":"Result bytes, if any.","type":"string"},"events":{"description":"Events defines all the events emitted by processing a transaction. Note,\nthese events include those emitted by processing all the messages and those\nemitted from the ante. Whereas Logs contains the events, with\nadditional metadata, emitted only by processing the messages.\n\nSince: cosmos-sdk 0.42.11, 0.44.5, 0.45","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"description":"Amount of gas consumed by transaction.","type":"string","format":"int64"},"gas_wanted":{"description":"Amount of gas requested for transaction.","type":"string","format":"int64"},"height":{"type":"string","format":"int64","title":"The block height"},"info":{"description":"Additional information. May be non-deterministic.","type":"string"},"logs":{"description":"The output of the application's logger (typed). May be non-deterministic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.ABCIMessageLog"}},"raw_log":{"description":"The output of the application's logger (raw string). May be\nnon-deterministic.","type":"string"},"timestamp":{"description":"Time of the previous block. For heights \u003e 1, it's the weighted median of\nthe timestamps of the valid votes in the block.LastCommit. For height == 1,\nit's genesis time.","type":"string"},"tx":{"description":"The request transaction bytes.","$ref":"#/definitions/google.protobuf.Any"},"txhash":{"description":"The transaction hash.","type":"string"}}},"cosmos.base.node.v1beta1.ConfigResponse":{"description":"ConfigResponse defines the response structure for the Config gRPC query.","type":"object","properties":{"halt_height":{"type":"string","format":"uint64"},"minimum_gas_price":{"type":"string"},"pruning_interval":{"type":"string"},"pruning_keep_recent":{"type":"string"}}},"cosmos.base.node.v1beta1.StatusResponse":{"description":"StateResponse defines the response structure for the status of a node.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"app hash of the current block"},"earliest_store_height":{"type":"string","format":"uint64","title":"earliest block height available in the store"},"height":{"type":"string","format":"uint64","title":"current block height"},"timestamp":{"type":"string","format":"date-time","title":"block height timestamp"},"validator_hash":{"type":"string","format":"byte","title":"validator hash provided by the consensus header"}}},"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.reflection.v1beta1.ListAllInterfacesResponse":{"description":"ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC.","type":"object","properties":{"interface_names":{"description":"interface_names is an array of all the registered interfaces.","type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v1beta1.ListImplementationsResponse":{"description":"ListImplementationsResponse is the response type of the ListImplementations\nRPC.","type":"object","properties":{"implementation_message_names":{"type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v2alpha1.AuthnDescriptor":{"type":"object","title":"AuthnDescriptor provides information on how to sign transactions without relying\non the online RPCs GetTxMetadata and CombineUnsignedTxAndSignatures","properties":{"sign_modes":{"type":"array","title":"sign_modes defines the supported signature algorithm","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.SigningModeDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ChainDescriptor":{"type":"object","title":"ChainDescriptor describes chain information of the application","properties":{"id":{"type":"string","title":"id is the chain id"}}},"cosmos.base.reflection.v2alpha1.CodecDescriptor":{"type":"object","title":"CodecDescriptor describes the registered interfaces and provides metadata information on the types","properties":{"interfaces":{"type":"array","title":"interfaces is a list of the registerted interfaces descriptors","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ConfigurationDescriptor":{"type":"object","title":"ConfigurationDescriptor contains metadata information on the sdk.Config","properties":{"bech32_account_address_prefix":{"type":"string","title":"bech32_account_address_prefix is the account address prefix"}}},"cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse":{"type":"object","title":"GetAuthnDescriptorResponse is the response returned by the GetAuthnDescriptor RPC","properties":{"authn":{"title":"authn describes how to authenticate to the application when sending transactions","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.AuthnDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse":{"type":"object","title":"GetChainDescriptorResponse is the response returned by the GetChainDescriptor RPC","properties":{"chain":{"title":"chain describes application chain information","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ChainDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse":{"type":"object","title":"GetCodecDescriptorResponse is the response returned by the GetCodecDescriptor RPC","properties":{"codec":{"title":"codec describes the application codec such as registered interfaces and implementations","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.CodecDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse":{"type":"object","title":"GetConfigurationDescriptorResponse is the response returned by the GetConfigurationDescriptor RPC","properties":{"config":{"title":"config describes the application's sdk.Config","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ConfigurationDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse":{"type":"object","title":"GetQueryServicesDescriptorResponse is the response returned by the GetQueryServicesDescriptor RPC","properties":{"queries":{"title":"queries provides information on the available queryable services","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServicesDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse":{"type":"object","title":"GetTxDescriptorResponse is the response returned by the GetTxDescriptor RPC","properties":{"tx":{"title":"tx provides information on msgs that can be forwarded to the application\nalongside the accepted transaction protobuf type","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.TxDescriptor"}}},"cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor":{"type":"object","title":"InterfaceAcceptingMessageDescriptor describes a protobuf message which contains\nan interface represented as a google.protobuf.Any","properties":{"field_descriptor_names":{"type":"array","title":"field_descriptor_names is a list of the protobuf name (not fullname) of the field\nwhich contains the interface as google.protobuf.Any (the interface is the same, but\nit can be in multiple fields of the same proto message)","items":{"type":"string"}},"fullname":{"type":"string","title":"fullname is the protobuf fullname of the type containing the interface"}}},"cosmos.base.reflection.v2alpha1.InterfaceDescriptor":{"type":"object","title":"InterfaceDescriptor describes the implementation of an interface","properties":{"fullname":{"type":"string","title":"fullname is the name of the interface"},"interface_accepting_messages":{"type":"array","title":"interface_accepting_messages contains information regarding the proto messages which contain the interface as\ngoogle.protobuf.Any field","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor"}},"interface_implementers":{"type":"array","title":"interface_implementers is a list of the descriptors of the interface implementers","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor"}}}},"cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor":{"type":"object","title":"InterfaceImplementerDescriptor describes an interface implementer","properties":{"fullname":{"type":"string","title":"fullname is the protobuf queryable name of the interface implementer"},"type_url":{"type":"string","title":"type_url defines the type URL used when marshalling the type as any\nthis is required so we can provide type safe google.protobuf.Any marshalling and\nunmarshalling, making sure that we don't accept just 'any' type\nin our interface fields"}}},"cosmos.base.reflection.v2alpha1.MsgDescriptor":{"type":"object","title":"MsgDescriptor describes a cosmos-sdk message that can be delivered with a transaction","properties":{"msg_type_url":{"description":"msg_type_url contains the TypeURL of a sdk.Msg.","type":"string"}}},"cosmos.base.reflection.v2alpha1.QueryMethodDescriptor":{"type":"object","title":"QueryMethodDescriptor describes a queryable method of a query service\nno other info is provided beside method name and tendermint queryable path\nbecause it would be redundant with the grpc reflection service","properties":{"full_query_path":{"type":"string","title":"full_query_path is the path that can be used to query\nthis method via tendermint abci.Query"},"name":{"type":"string","title":"name is the protobuf name (not fullname) of the method"}}},"cosmos.base.reflection.v2alpha1.QueryServiceDescriptor":{"type":"object","title":"QueryServiceDescriptor describes a cosmos-sdk queryable service","properties":{"fullname":{"type":"string","title":"fullname is the protobuf fullname of the service descriptor"},"is_module":{"type":"boolean","title":"is_module describes if this service is actually exposed by an application's module"},"methods":{"type":"array","title":"methods provides a list of query service methods","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryMethodDescriptor"}}}},"cosmos.base.reflection.v2alpha1.QueryServicesDescriptor":{"type":"object","title":"QueryServicesDescriptor contains the list of cosmos-sdk queriable services","properties":{"query_services":{"type":"array","title":"query_services is a list of cosmos-sdk QueryServiceDescriptor","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServiceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.SigningModeDescriptor":{"type":"object","title":"SigningModeDescriptor provides information on a signing flow of the application\nNOTE(fdymylja): here we could go as far as providing an entire flow on how\nto sign a message given a SigningModeDescriptor, but it's better to think about\nthis another time","properties":{"authn_info_provider_method_fullname":{"type":"string","title":"authn_info_provider_method_fullname defines the fullname of the method to call to get\nthe metadata required to authenticate using the provided sign_modes"},"name":{"type":"string","title":"name defines the unique name of the signing mode"},"number":{"type":"integer","format":"int32","title":"number is the unique int32 identifier for the sign_mode enum"}}},"cosmos.base.reflection.v2alpha1.TxDescriptor":{"type":"object","title":"TxDescriptor describes the accepted transaction type","properties":{"fullname":{"description":"fullname is the protobuf fullname of the raw transaction type (for instance the tx.Tx type)\nit is not meant to support polymorphism of transaction types, it is supposed to be used by\nreflection clients to understand if they can handle a specific transaction type in an application.","type":"string"},"msgs":{"type":"array","title":"msgs lists the accepted application messages (sdk.Msg)","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.MsgDescriptor"}}}},"cosmos.base.tendermint.v1beta1.ABCIQueryResponse":{"description":"ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query.\n\nNote: This type is a duplicate of the ResponseQuery proto type defined in\nTendermint.","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"type":"string","title":"nondeterministic"},"proof_ops":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOps"},"value":{"type":"string","format":"byte"}}},"cosmos.base.tendermint.v1beta1.Block":{"description":"Block is tendermint type Block, with the Header proposer address\nfield converted to bech32 string.","type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse":{"description":"GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestBlockResponse":{"description":"GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse":{"description":"GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.GetNodeInfoResponse":{"description":"GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method.","type":"object","properties":{"application_version":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.VersionInfo"},"default_node_info":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfo"}}},"cosmos.base.tendermint.v1beta1.GetSyncingResponse":{"description":"GetSyncingResponse is the response type for the Query/GetSyncing RPC method.","type":"object","properties":{"syncing":{"type":"boolean"}}},"cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse":{"description":"GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.Header":{"description":"Header defines the structure of a Tendermint block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"description":"proposer_address is the original block proposer address, formatted as a Bech32 string.\nIn Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\nfor better UX.\n\noriginal proposer of the block","type":"string"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"cosmos.base.tendermint.v1beta1.Module":{"type":"object","title":"Module is the type for VersionInfo","properties":{"path":{"type":"string","title":"module path"},"sum":{"type":"string","title":"checksum"},"version":{"type":"string","title":"module version"}}},"cosmos.base.tendermint.v1beta1.ProofOp":{"description":"ProofOp defines an operation used for calculating Merkle root. The data could\nbe arbitrary format, providing necessary data for example neighbouring node\nhash.\n\nNote: This type is a duplicate of the ProofOp proto type defined in Tendermint.","type":"object","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"cosmos.base.tendermint.v1beta1.ProofOps":{"description":"ProofOps is Merkle proof defined by the list of ProofOps.\n\nNote: This type is a duplicate of the ProofOps proto type defined in Tendermint.","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOp"}}}},"cosmos.base.tendermint.v1beta1.Validator":{"description":"Validator is the type for the validator-set.","type":"object","properties":{"address":{"type":"string"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"voting_power":{"type":"string","format":"int64"}}},"cosmos.base.tendermint.v1beta1.VersionInfo":{"description":"VersionInfo is the type for the GetNodeInfoResponse message.","type":"object","properties":{"app_name":{"type":"string"},"build_deps":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Module"}},"build_tags":{"type":"string"},"cosmos_sdk_version":{"type":"string","title":"Since: cosmos-sdk 0.43"},"git_commit":{"type":"string"},"go_version":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.base.v1beta1.DecCoin":{"description":"DecCoin defines a token with a denomination and a decimal amount.\n\nNOTE: The amount field is an Dec which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.circuit.v1.AccountResponse":{"description":"AccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"permission":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.AccountsResponse":{"description":"AccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.circuit.v1.GenesisAccountPermissions"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.circuit.v1.DisabledListResponse":{"description":"DisabledListResponse is the response type for the Query/DisabledList RPC method.","type":"object","properties":{"disabled_list":{"type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.GenesisAccountPermissions":{"type":"object","title":"GenesisAccountPermissions is the account permissions for the circuit breaker in genesis","properties":{"address":{"type":"string"},"permissions":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreaker":{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","type":"object","properties":{"grantee":{"description":"grantee is the account authorized with the provided permissions.","type":"string"},"granter":{"description":"granter is the granter of the circuit breaker permissions and must have\nLEVEL_SUPER_ADMIN.","type":"string"},"permissions":{"description":"permissions are the circuit breaker permissions that the grantee receives.\nThese will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can\nbe specified to revoke all permissions.","$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse":{"description":"MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgResetCircuitBreaker":{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip or reset the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of Msg type URLs to resume processing. If\nit is left empty all Msg processing for type URLs that the account is\nauthorized to trip will resume.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgResetCircuitBreakerResponse":{"description":"MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgTripCircuitBreaker":{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of type URLs to immediately stop processing.\nIF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY.\nThis value is validated against the authority's permissions and if the\nauthority does not have permissions to trip the specified msg type URLs\n(or all URLs), the operation will fail.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgTripCircuitBreakerResponse":{"description":"MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.Permissions":{"description":"Permissions are the permissions that an account has to trip\nor reset the circuit breaker.","type":"object","properties":{"level":{"description":"level is the level of permissions granted to this account.","$ref":"#/definitions/cosmos.circuit.v1.Permissions.Level"},"limit_type_urls":{"description":"limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type\nURLs that the account can trip. It is an error to use limit_type_urls with\na level other than LEVEL_SOME_MSGS.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.Permissions.Level":{"description":"Level is the permission level.\n\n - LEVEL_NONE_UNSPECIFIED: LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit\nbreaker permissions.\n - LEVEL_SOME_MSGS: LEVEL_SOME_MSGS indicates that the account will have permission to\ntrip or reset the circuit breaker for some Msg type URLs. If this level\nis chosen, a non-empty list of Msg type URLs must be provided in\nlimit_type_urls.\n - LEVEL_ALL_MSGS: LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit\nbreaker for Msg's of all type URLs.\n - LEVEL_SUPER_ADMIN: LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker\nactions and can grant permissions to other accounts.","type":"string","default":"LEVEL_NONE_UNSPECIFIED","enum":["LEVEL_NONE_UNSPECIFIED","LEVEL_SOME_MSGS","LEVEL_ALL_MSGS","LEVEL_SUPER_ADMIN"]},"cosmos.consensus.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"abci":{"title":"Since: cosmos-sdk 0.50","$ref":"#/definitions/tendermint.types.ABCIParams"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"block":{"description":"params defines the x/consensus parameters to update.\nVersionsParams is not included in this Msg because it is tracked\nsepararately in x/upgrade.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"}}},"cosmos.consensus.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.consensus.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/consensus parameters.","type":"object","properties":{"params":{"description":"params are the tendermint consensus params stored in the consensus module.\nPlease note that `params.version` is not populated in this response, it is\ntracked separately in the x/upgrade module.","$ref":"#/definitions/tendermint.types.ConsensusParams"}}},"cosmos.crisis.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"constant_fee":{"description":"constant_fee defines the x/crisis parameter.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.crisis.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.crisis.v1beta1.MsgVerifyInvariant":{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","type":"object","properties":{"invariant_module_name":{"description":"name of the invariant module.","type":"string"},"invariant_route":{"description":"invariant_route is the msg's invariant route.","type":"string"},"sender":{"description":"sender is the account address of private key to send coins to fee collector account.","type":"string"}}},"cosmos.crisis.v1beta1.MsgVerifyInvariantResponse":{"description":"MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type.","type":"object"},"cosmos.crypto.multisig.v1beta1.CompactBitArray":{"description":"CompactBitArray is an implementation of a space efficient bit array.\nThis is used to ensure that the encoded data takes up a minimal amount of\nspace after proto encoding.\nThis is not thread safe, and is not intended for concurrent usage.","type":"object","properties":{"elems":{"type":"string","format":"byte"},"extra_bits_stored":{"type":"integer","format":"int64"}}},"cosmos.distribution.v1beta1.DelegationDelegatorReward":{"description":"DelegationDelegatorReward represents the properties\nof a delegator's delegation reward.","type":"object","properties":{"reward":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse":{"description":"MsgDepositValidatorRewardsPoolResponse defines the response to executing a\nMsgDepositValidatorRewardsPool message.\n\nSince: cosmos-sdk 0.50","type":"object"},"cosmos.distribution.v1beta1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.distribution.v1beta1.MsgSetWithdrawAddress":{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","type":"object","properties":{"delegator_address":{"type":"string"},"withdraw_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse":{"description":"MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response\ntype.","type":"object"},"cosmos.distribution.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/distribution parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward":{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse":{"description":"MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward\nresponse type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission":{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","type":"object","properties":{"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse":{"description":"MsgWithdrawValidatorCommissionResponse defines the\nMsg/WithdrawValidatorCommission response type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.Params":{"description":"Params defines the set of params for the distribution module.","type":"object","properties":{"base_proposer_reward":{"description":"Deprecated: The base_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"bonus_proposer_reward":{"description":"Deprecated: The bonus_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"community_tax":{"type":"string"},"withdraw_addr_enabled":{"type":"boolean"}}},"cosmos.distribution.v1beta1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationRewardsResponse":{"description":"QueryDelegationRewardsResponse is the response type for the\nQuery/DelegationRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines the rewards accrued by a delegation.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse":{"description":"QueryDelegationTotalRewardsResponse is the response type for the\nQuery/DelegationTotalRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines all the rewards accrued by a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.DelegationDelegatorReward"}},"total":{"description":"total defines the sum of all the rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is the response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"validators":{"description":"validators defines the validators a delegator is delegating for.","type":"array","items":{"type":"string"}}}},"cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse":{"description":"QueryDelegatorWithdrawAddressResponse is the response type for the\nQuery/DelegatorWithdrawAddress RPC method.","type":"object","properties":{"withdraw_address":{"description":"withdraw_address defines the delegator address to query for.","type":"string"}}},"cosmos.distribution.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.QueryValidatorCommissionResponse":{"type":"object","title":"QueryValidatorCommissionResponse is the response type for the\nQuery/ValidatorCommission RPC method","properties":{"commission":{"description":"commission defines the commission the validator received.","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorAccumulatedCommission"}}},"cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse":{"description":"QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method.","type":"object","properties":{"commission":{"description":"commission defines the commission the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"operator_address":{"description":"operator_address defines the validator operator address.","type":"string"},"self_bond_rewards":{"description":"self_bond_rewards defines the self delegations rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse":{"description":"QueryValidatorOutstandingRewardsResponse is the response type for the\nQuery/ValidatorOutstandingRewards RPC method.","type":"object","properties":{"rewards":{"$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorOutstandingRewards"}}},"cosmos.distribution.v1beta1.QueryValidatorSlashesResponse":{"description":"QueryValidatorSlashesResponse is the response type for the\nQuery/ValidatorSlashes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"slashes":{"description":"slashes defines the slashes the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorSlashEvent"}}}},"cosmos.distribution.v1beta1.ValidatorAccumulatedCommission":{"description":"ValidatorAccumulatedCommission represents accumulated commission\nfor a validator kept as a running counter, can be withdrawn at any time.","type":"object","properties":{"commission":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorOutstandingRewards":{"description":"ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\nfor a validator inexpensive to track, allows simple sanity checks.","type":"object","properties":{"rewards":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorSlashEvent":{"description":"ValidatorSlashEvent represents a validator slash event.\nHeight is implicit within the store key.\nThis is needed to calculate appropriate amount of staking tokens\nfor delegations which are withdrawn after a slash has occurred.","type":"object","properties":{"fraction":{"type":"string"},"validator_period":{"type":"string","format":"uint64"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidence":{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","type":"object","properties":{"evidence":{"description":"evidence defines the evidence of misbehavior.","$ref":"#/definitions/google.protobuf.Any"},"submitter":{"description":"submitter is the signer account address of evidence.","type":"string"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse":{"description":"MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.","type":"object","properties":{"hash":{"description":"hash defines the hash of the evidence.","type":"string","format":"byte"}}},"cosmos.evidence.v1beta1.QueryAllEvidenceResponse":{"description":"QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC\nmethod.","type":"object","properties":{"evidence":{"description":"evidence returns all evidences.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.evidence.v1beta1.QueryEvidenceResponse":{"description":"QueryEvidenceResponse is the response type for the Query/Evidence RPC method.","type":"object","properties":{"evidence":{"description":"evidence returns the requested evidence.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.feegrant.v1beta1.Grant":{"type":"object","title":"Grant is stored in the KVStore to record a grant with full context","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowance":{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","type":"object","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse":{"description":"MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgPruneAllowances":{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","type":"object","properties":{"pruner":{"description":"pruner is the address of the user pruning expired allowances.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse":{"description":"MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type.\n\nSince cosmos-sdk 0.50","type":"object"},"cosmos.feegrant.v1beta1.MsgRevokeAllowance":{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","type":"object","properties":{"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse":{"description":"MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.QueryAllowanceResponse":{"description":"QueryAllowanceResponse is the response type for the Query/Allowance RPC method.","type":"object","properties":{"allowance":{"description":"allowance is a allowance granted for grantee by granter.","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}}},"cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse":{"description":"QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"allowances":{"description":"allowances that have been issued by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.feegrant.v1beta1.QueryAllowancesResponse":{"description":"QueryAllowancesResponse is the response type for the Query/Allowances RPC method.","type":"object","properties":{"allowances":{"description":"allowances are allowance's granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1.MsgCancelProposal":{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1.MsgCancelProposalResponse":{"description":"MsgCancelProposalResponse defines the response structure for executing a\nMsgCancelProposal message.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"canceled_height":{"description":"canceled_height defines the block height at which the proposal is canceled.","type":"string","format":"uint64"},"canceled_time":{"description":"canceled_time is the time when proposal is canceled.","type":"string","format":"date-time"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1.MsgExecLegacyContent":{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","type":"object","properties":{"authority":{"description":"authority must be the gov module address.","type":"string"},"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.gov.v1.MsgExecLegacyContentResponse":{"description":"MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type.","type":"object"},"cosmos.gov.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited or not"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"messages":{"description":"messages are the arbitrary messages to be executed if proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.gov.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/gov parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.gov.v1.Params"}}},"cosmos.gov.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.gov.v1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the Vote.","type":"string"},"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the VoteWeighted.","type":"string"},"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1.Params":{"description":"Params defines the parameters for the x/gov module.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"burn_proposal_deposit_prevote":{"type":"boolean","title":"burn deposits if the proposal does not enter voting period"},"burn_vote_quorum":{"type":"boolean","title":"burn deposits if a proposal does not meet quorum"},"burn_vote_veto":{"type":"boolean","title":"burn deposits if quorum with vote type no_veto is met"},"expedited_min_deposit":{"description":"Minimum expedited deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"expedited_threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.67.\n\nSince: cosmos-sdk 0.50","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.\n\nSince: cosmos-sdk 0.50","type":"string"},"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"min_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value minimum that must be met when making a deposit.\nDefault value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be\nrequired.\n\nSince: cosmos-sdk 0.50","type":"string"},"min_initial_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value that must be paid at proposal submission.","type":"string"},"proposal_cancel_dest":{"description":"The address which will receive (proposal_cancel_ratio * deposit) proposal deposits.\nIf empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned.\n\nSince: cosmos-sdk 0.50","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.\n\nSince: cosmos-sdk 0.50","type":"string"},"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\n considered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\n vetoed. Default value: 1/3.","type":"string"},"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"description":"Since: cosmos-sdk 0.50","type":"string","title":"failed_reason defines the reason why the proposal failed"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"},"id":{"description":"id defines the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages are the arbitrary messages to be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/gov#proposal-3"},"proposer":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"proposer is the address of the proposal sumbitter"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1.QueryConstitutionResponse":{"type":"object","title":"QueryConstitutionResponse is the response type for the Query/Constitution RPC method","properties":{"constitution":{"type":"string"}}},"cosmos.gov.v1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1.Deposit"}}},"cosmos.gov.v1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"Deprecated: Prefer to use `params` instead.\ndeposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1.DepositParams"},"params":{"description":"params defines all the paramaters of x/gov module.\n\nSince: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.gov.v1.Params"},"tally_params":{"description":"Deprecated: Prefer to use `params` instead.\ntally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1.TallyParams"},"voting_params":{"description":"Deprecated: Prefer to use `params` instead.\nvoting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1.VotingParams"}}},"cosmos.gov.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"description":"proposal is the requested governance proposal.","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}},"cosmos.gov.v1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}}},"cosmos.gov.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"}}},"cosmos.gov.v1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1.Vote"}}},"cosmos.gov.v1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Vote"}}}},"cosmos.gov.v1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string"}}},"cosmos.gov.v1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the number of abstain votes on a proposal.","type":"string"},"no_count":{"description":"no_count is the number of no votes on a proposal.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the number of no with veto votes on a proposal.","type":"string"},"yes_count":{"description":"yes_count is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.gov.v1beta1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1beta1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1beta1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1beta1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1beta1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.\n\nSince: cosmos-sdk 0.43","type":"object"},"cosmos.gov.v1beta1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1beta1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1beta1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1beta1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}}},"cosmos.gov.v1beta1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"deposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.DepositParams"},"tally_params":{"description":"tally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyParams"},"voting_params":{"description":"voting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1beta1.VotingParams"}}},"cosmos.gov.v1beta1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}},"cosmos.gov.v1beta1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}}},"cosmos.gov.v1beta1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"}}},"cosmos.gov.v1beta1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}},"cosmos.gov.v1beta1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}}},"cosmos.gov.v1beta1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string","format":"byte"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string","format":"byte"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string","format":"byte"}}},"cosmos.gov.v1beta1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain":{"description":"abstain is the number of abstain votes on a proposal.","type":"string"},"no":{"description":"no is the number of no votes on a proposal.","type":"string"},"no_with_veto":{"description":"no_with_veto is the number of no with veto votes on a proposal.","type":"string"},"yes":{"description":"yes is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1beta1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"option":{"description":"Deprecated: Prefer to use `options` instead. This field is set in queries\nif and only if `len(options) == 1` and that option has weight 1. In all\nother cases, this field will default to VOTE_OPTION_UNSPECIFIED.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"options":{"description":"options is the weighted vote options.\n\nSince: cosmos-sdk 0.43","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1beta1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1beta1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1beta1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.group.v1.Exec":{"description":"Exec defines modes of execution of a proposal on creation or on new vote.\n\n - EXEC_UNSPECIFIED: An empty value means that there should be a separate\nMsgExec request for the proposal to execute.\n - EXEC_TRY: Try to execute the proposal immediately.\nIf the proposal is not allowed per the DecisionPolicy,\nthe proposal will still be open and could\nbe executed at a later point.","type":"string","default":"EXEC_UNSPECIFIED","enum":["EXEC_UNSPECIFIED","EXEC_TRY"]},"cosmos.group.v1.GroupInfo":{"description":"GroupInfo represents the high-level on-chain information for a group.","type":"object","properties":{"admin":{"description":"admin is the account address of the group's admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group was created.","type":"string","format":"date-time"},"id":{"description":"id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata to attached to the group.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1"},"total_weight":{"description":"total_weight is the sum of the group members' weights.","type":"string"},"version":{"type":"string","format":"uint64","title":"version is used to track changes to a group's membership structure that\nwould break existing proposals. Whenever any members weight is changed,\nor any member is added or removed this version is incremented and will\ncause proposals based on older versions of this group to fail"}}},"cosmos.group.v1.GroupMember":{"description":"GroupMember represents the relationship between a group and a member.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member":{"description":"member is the member data.","$ref":"#/definitions/cosmos.group.v1.Member"}}},"cosmos.group.v1.GroupPolicyInfo":{"description":"GroupPolicyInfo represents the high-level on-chain information for a group policy.","type":"object","properties":{"address":{"description":"address is the account address of group policy.","type":"string"},"admin":{"description":"admin is the account address of the group admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group policy was created.","type":"string","format":"date-time"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the group policy.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#decision-policy-1"},"version":{"description":"version is used to track changes to a group's GroupPolicyInfo structure that\nwould create a different result on a running proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.Member":{"description":"Member represents a group member with an account address,\nnon-zero weight, metadata and added_at timestamp.","type":"object","properties":{"added_at":{"description":"added_at is a timestamp specifying when a member was added.","type":"string","format":"date-time"},"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MemberRequest":{"description":"MemberRequest represents a group member to be used in Msg server requests.\nContrary to `Member`, it doesn't have any `added_at` field\nsince this field cannot be set as part of requests.","type":"object","properties":{"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MsgCreateGroup":{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}},"metadata":{"description":"metadata is any arbitrary metadata to attached to the group.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicy":{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is any arbitrary metadata attached to the group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicyResponse":{"description":"MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type.","type":"object","properties":{"address":{"description":"address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupResponse":{"description":"MsgCreateGroupResponse is the Msg/CreateGroup response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgCreateGroupWithPolicy":{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group and group policy admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_metadata":{"description":"group_metadata is any arbitrary metadata attached to the group.","type":"string"},"group_policy_as_admin":{"description":"group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group\nand group policy admin.","type":"boolean"},"group_policy_metadata":{"description":"group_policy_metadata is any arbitrary metadata attached to the group policy.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgCreateGroupWithPolicyResponse":{"description":"MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group with policy.","type":"string","format":"uint64"},"group_policy_address":{"description":"group_policy_address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgExec":{"description":"MsgExec is the Msg/Exec request type.","type":"object","properties":{"executor":{"description":"executor is the account address used to execute the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgExecResponse":{"description":"MsgExecResponse is the Msg/Exec request type.","type":"object","properties":{"result":{"description":"result is the final result of the proposal execution.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"}}},"cosmos.group.v1.MsgLeaveGroup":{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","type":"object","properties":{"address":{"description":"address is the account address of the group member.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgLeaveGroupResponse":{"description":"MsgLeaveGroupResponse is the Msg/LeaveGroup response type.","type":"object"},"cosmos.group.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","type":"object","properties":{"exec":{"description":"exec defines the mode of execution of the proposal,\nwhether it should be executed immediately on creation or not.\nIf so, proposers signatures are considered as Yes votes.","$ref":"#/definitions/cosmos.group.v1.Exec"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposers":{"description":"proposers are the account addresses of the proposers.\nProposers signatures will be counted as yes votes.","type":"array","items":{"type":"string"}},"summary":{"description":"summary is the summary of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.group.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse is the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgUpdateGroupAdmin":{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the current account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"new_admin":{"description":"new_admin is the group new admin account address.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupAdminResponse":{"description":"MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMembers":{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member_updates":{"description":"member_updates is the list of members to update,\nset weight to 0 to remove a member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgUpdateGroupMembersResponse":{"description":"MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMetadata":{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is the updated group's metadata.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupMetadataResponse":{"description":"MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyAdmin":{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of the group policy.","type":"string"},"new_admin":{"description":"new_admin is the new group policy admin.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse":{"description":"MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy":{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy is the updated group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse":{"description":"MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyMetadata":{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"metadata":{"description":"metadata is the group policy metadata to be updated.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse":{"description":"MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type.","type":"object"},"cosmos.group.v1.MsgVote":{"description":"MsgVote is the Msg/Vote request type.","type":"object","properties":{"exec":{"description":"exec defines whether the proposal should be executed\nimmediately after voting or not.","$ref":"#/definitions/cosmos.group.v1.Exec"},"metadata":{"description":"metadata is any arbitrary metadata attached to the vote.","type":"string"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter account address.","type":"string"}}},"cosmos.group.v1.MsgVoteResponse":{"description":"MsgVoteResponse is the Msg/Vote response type.","type":"object"},"cosmos.group.v1.MsgWithdrawProposal":{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","type":"object","properties":{"address":{"description":"address is the admin of the group policy or one of the proposer of the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgWithdrawProposalResponse":{"description":"MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type.","type":"object"},"cosmos.group.v1.Proposal":{"description":"Proposal defines a group proposal. Any member of a group can submit a proposal\nfor a group policy to decide upon.\nA proposal consists of a set of `sdk.Msg`s that will be executed if the proposal\npasses as well as some optional metadata associated with the proposal.","type":"object","properties":{"executor_result":{"description":"executor_result is the final result of the proposal execution. Initial value is NotRun.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"},"final_tally_result":{"description":"final_tally_result contains the sums of all weighted votes for this\nproposal for each vote option. It is empty at submission, and only\npopulated after tallying, at voting period end or at proposal execution,\nwhichever happens first.","$ref":"#/definitions/cosmos.group.v1.TallyResult"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"group_policy_version":{"description":"group_policy_version tracks the version of the group policy at proposal submission.\nWhen a decision policy is changed, existing proposals from previous policy\nversions will become invalid with the `ABORTED` status.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"group_version":{"description":"group_version tracks the version of the group at proposal submission.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"id":{"description":"id is the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#proposal-4"},"proposers":{"description":"proposers are the account addresses of the proposers.","type":"array","items":{"type":"string"}},"status":{"description":"status represents the high level position in the life cycle of the proposal. Initial value is Submitted.","$ref":"#/definitions/cosmos.group.v1.ProposalStatus"},"submit_time":{"description":"submit_time is a timestamp specifying when a proposal was submitted.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"voting_period_end":{"description":"voting_period_end is the timestamp before which voting must be done.\nUnless a successful MsgExec is called before (to execute a proposal whose\ntally is successful before the voting period ends), tallying will be done\nat this point, and the `final_tally_result`and `status` fields will be\naccordingly updated.","type":"string","format":"date-time"}}},"cosmos.group.v1.ProposalExecutorResult":{"description":"ProposalExecutorResult defines types of proposal executor results.\n\n - PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED: An empty value is not allowed.\n - PROPOSAL_EXECUTOR_RESULT_NOT_RUN: We have not yet run the executor.\n - PROPOSAL_EXECUTOR_RESULT_SUCCESS: The executor was successful and proposed action updated state.\n - PROPOSAL_EXECUTOR_RESULT_FAILURE: The executor returned an error and proposed action didn't update state.","type":"string","default":"PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","enum":["PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","PROPOSAL_EXECUTOR_RESULT_NOT_RUN","PROPOSAL_EXECUTOR_RESULT_SUCCESS","PROPOSAL_EXECUTOR_RESULT_FAILURE"]},"cosmos.group.v1.ProposalStatus":{"description":"ProposalStatus defines proposal statuses.\n\n - PROPOSAL_STATUS_UNSPECIFIED: An empty value is invalid and not allowed.\n - PROPOSAL_STATUS_SUBMITTED: Initial status of a proposal when submitted.\n - PROPOSAL_STATUS_ACCEPTED: Final status of a proposal when the final tally is done and the outcome\npasses the group policy's decision policy.\n - PROPOSAL_STATUS_REJECTED: Final status of a proposal when the final tally is done and the outcome\nis rejected by the group policy's decision policy.\n - PROPOSAL_STATUS_ABORTED: Final status of a proposal when the group policy is modified before the\nfinal tally.\n - PROPOSAL_STATUS_WITHDRAWN: A proposal can be withdrawn before the voting start time by the owner.\nWhen this happens the final status is Withdrawn.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_SUBMITTED","PROPOSAL_STATUS_ACCEPTED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_ABORTED","PROPOSAL_STATUS_WITHDRAWN"]},"cosmos.group.v1.QueryGroupInfoResponse":{"description":"QueryGroupInfoResponse is the Query/GroupInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupInfo of the group.","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}}},"cosmos.group.v1.QueryGroupMembersResponse":{"description":"QueryGroupMembersResponse is the Query/GroupMembersResponse response type.","type":"object","properties":{"members":{"description":"members are the members of the group with given group_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupMember"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByAdminResponse":{"description":"QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info with provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByGroupResponse":{"description":"QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info associated with the provided group.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPolicyInfoResponse":{"description":"QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupPolicyInfo of the group policy.","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}}},"cosmos.group.v1.QueryGroupsByAdminResponse":{"description":"QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsByMemberResponse":{"description":"QueryGroupsByMemberResponse is the Query/GroupsByMember response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided group member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsResponse":{"description":"QueryGroupsResponse is the Query/Groups response type.\n\nSince: cosmos-sdk 0.47.1","type":"object","properties":{"groups":{"description":"`groups` is all the groups present in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the Query/Proposal response type.","type":"object","properties":{"proposal":{"description":"proposal is the proposal info.","$ref":"#/definitions/cosmos.group.v1.Proposal"}}},"cosmos.group.v1.QueryProposalsByGroupPolicyResponse":{"description":"QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals are the proposals with given group policy.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Proposal"}}}},"cosmos.group.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the Query/TallyResult response type.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.group.v1.TallyResult"}}},"cosmos.group.v1.QueryVoteByProposalVoterResponse":{"description":"QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type.","type":"object","properties":{"vote":{"description":"vote is the vote with given proposal_id and voter.","$ref":"#/definitions/cosmos.group.v1.Vote"}}},"cosmos.group.v1.QueryVotesByProposalResponse":{"description":"QueryVotesByProposalResponse is the Query/VotesByProposal response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes for given proposal_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.QueryVotesByVoterResponse":{"description":"QueryVotesByVoterResponse is the Query/VotesByVoter response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes by given voter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.TallyResult":{"description":"TallyResult represents the sum of weighted votes for each vote option.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the weighted sum of abstainers.","type":"string"},"no_count":{"description":"no_count is the weighted sum of no votes.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the weighted sum of veto.","type":"string"},"yes_count":{"description":"yes_count is the weighted sum of yes votes.","type":"string"}}},"cosmos.group.v1.Vote":{"type":"object","title":"Vote represents a vote for a proposal.string metadata","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"submit_time":{"description":"submit_time is the timestamp when the vote was submitted.","type":"string","format":"date-time"},"voter":{"description":"voter is the account address of the voter.","type":"string"}}},"cosmos.group.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will\nreturn an error.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.mint.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.mint.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.mint.v1beta1.Params":{"description":"Params defines the parameters for the x/mint module.","type":"object","properties":{"blocks_per_year":{"type":"string","format":"uint64","title":"expected blocks per year"},"goal_bonded":{"type":"string","title":"goal of percent bonded atoms"},"inflation_max":{"type":"string","title":"maximum inflation rate"},"inflation_min":{"type":"string","title":"minimum inflation rate"},"inflation_rate_change":{"type":"string","title":"maximum annual change in inflation rate"},"mint_denom":{"type":"string","title":"type of coin to mint"}}},"cosmos.mint.v1beta1.QueryAnnualProvisionsResponse":{"description":"QueryAnnualProvisionsResponse is the response type for the\nQuery/AnnualProvisions RPC method.","type":"object","properties":{"annual_provisions":{"description":"annual_provisions is the current minting annual provisions value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryInflationResponse":{"description":"QueryInflationResponse is the response type for the Query/Inflation RPC\nmethod.","type":"object","properties":{"inflation":{"description":"inflation is the current minting inflation value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.nft.v1beta1.Class":{"description":"Class defines the class of the nft type.","type":"object","properties":{"data":{"title":"data is the app specific metadata of the NFT class. Optional","$ref":"#/definitions/google.protobuf.Any"},"description":{"type":"string","title":"description is a brief description of nft classification. Optional"},"id":{"type":"string","title":"id defines the unique identifier of the NFT classification, similar to the contract address of ERC721"},"name":{"type":"string","title":"name defines the human-readable name of the NFT classification. Optional"},"symbol":{"type":"string","title":"symbol is an abbreviated name for nft classification. Optional"},"uri":{"type":"string","title":"uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri. Optional"}}},"cosmos.nft.v1beta1.MsgSend":{"description":"MsgSend represents a message to send a nft from one account to another account.","type":"object","properties":{"class_id":{"type":"string","title":"class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721"},"id":{"type":"string","title":"id defines the unique identification of nft"},"receiver":{"type":"string","title":"receiver is the receiver address of nft"},"sender":{"type":"string","title":"sender is the address of the owner of nft"}}},"cosmos.nft.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.nft.v1beta1.NFT":{"description":"NFT defines the NFT.","type":"object","properties":{"class_id":{"type":"string","title":"class_id associated with the NFT, similar to the contract address of ERC721"},"data":{"title":"data is an app specific data of the NFT. Optional","$ref":"#/definitions/google.protobuf.Any"},"id":{"type":"string","title":"id is a unique identifier of the NFT"},"uri":{"type":"string","title":"uri for the NFT metadata stored off chain"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri"}}},"cosmos.nft.v1beta1.QueryBalanceResponse":{"type":"object","title":"QueryBalanceResponse is the response type for the Query/Balance RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs of a given class owned by the owner"}}},"cosmos.nft.v1beta1.QueryClassResponse":{"type":"object","title":"QueryClassResponse is the response type for the Query/Class RPC method","properties":{"class":{"description":"class defines the class of the nft type.","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}}},"cosmos.nft.v1beta1.QueryClassesResponse":{"type":"object","title":"QueryClassesResponse is the response type for the Query/Classes RPC method","properties":{"classes":{"description":"class defines the class of the nft type.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryNFTResponse":{"type":"object","title":"QueryNFTResponse is the response type for the Query/NFT RPC method","properties":{"nft":{"title":"owner is the owner address of the nft","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}}},"cosmos.nft.v1beta1.QueryNFTsResponse":{"type":"object","title":"QueryNFTsResponse is the response type for the Query/NFTs RPC methods","properties":{"nfts":{"type":"array","title":"NFT defines the NFT","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryOwnerResponse":{"type":"object","title":"QueryOwnerResponse is the response type for the Query/Owner RPC method","properties":{"owner":{"type":"string","title":"owner is the owner address of the nft"}}},"cosmos.nft.v1beta1.QuerySupplyResponse":{"type":"object","title":"QuerySupplyResponse is the response type for the Query/Supply RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs from the given class"}}},"cosmos.params.v1beta1.ParamChange":{"description":"ParamChange defines an individual parameter change, for use in\nParameterChangeProposal.","type":"object","properties":{"key":{"type":"string"},"subspace":{"type":"string"},"value":{"type":"string"}}},"cosmos.params.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"param":{"description":"param defines the queried parameter.","$ref":"#/definitions/cosmos.params.v1beta1.ParamChange"}}},"cosmos.params.v1beta1.QuerySubspacesResponse":{"description":"QuerySubspacesResponse defines the response types for querying for all\nregistered subspaces and all keys for a subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"subspaces":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.params.v1beta1.Subspace"}}}},"cosmos.params.v1beta1.Subspace":{"description":"Subspace defines a parameter subspace name and all the keys that exist for\nthe subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjail":{"type":"object","title":"MsgUnjail defines the Msg/Unjail request type","properties":{"validator_addr":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjailResponse":{"type":"object","title":"MsgUnjailResponse defines the Msg/Unjail response type"},"cosmos.slashing.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/slashing parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.slashing.v1beta1.Params":{"description":"Params represents the parameters used for by the slashing module.","type":"object","properties":{"downtime_jail_duration":{"type":"string"},"min_signed_per_window":{"type":"string","format":"byte"},"signed_blocks_window":{"type":"string","format":"int64"},"slash_fraction_double_sign":{"type":"string","format":"byte"},"slash_fraction_downtime":{"type":"string","format":"byte"}}},"cosmos.slashing.v1beta1.QueryParamsResponse":{"type":"object","title":"QueryParamsResponse is the response type for the Query/Params RPC method","properties":{"params":{"$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.QuerySigningInfoResponse":{"type":"object","title":"QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC\nmethod","properties":{"val_signing_info":{"title":"val_signing_info is the signing info of requested val cons address","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}}},"cosmos.slashing.v1beta1.QuerySigningInfosResponse":{"type":"object","title":"QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC\nmethod","properties":{"info":{"type":"array","title":"info is the signing info of all validators","items":{"type":"object","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.slashing.v1beta1.ValidatorSigningInfo":{"description":"ValidatorSigningInfo defines a validator's signing info for monitoring their\nliveness activity.","type":"object","properties":{"address":{"type":"string"},"index_offset":{"description":"Index which is incremented every time a validator is bonded in a block and\n_may_ have signed a pre-commit or not. This in conjunction with the\nsigned_blocks_window param determines the index in the missed block bitmap.","type":"string","format":"int64"},"jailed_until":{"description":"Timestamp until which the validator is jailed due to liveness downtime.","type":"string","format":"date-time"},"missed_blocks_counter":{"description":"A counter of missed (unsigned) blocks. It is used to avoid unnecessary\nreads in the missed block bitmap.","type":"string","format":"int64"},"start_height":{"type":"string","format":"int64","title":"Height at which validator was first a candidate OR was un-jailed"},"tombstoned":{"description":"Whether or not a validator has been tombstoned (killed out of validator\nset). It is set once the validator commits an equivocation or for any other\nconfigured misbehavior.","type":"boolean"}}},"cosmos.staking.v1beta1.BondStatus":{"description":"BondStatus is the status of a validator.\n\n - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.","type":"string","default":"BOND_STATUS_UNSPECIFIED","enum":["BOND_STATUS_UNSPECIFIED","BOND_STATUS_UNBONDED","BOND_STATUS_UNBONDING","BOND_STATUS_BONDED"]},"cosmos.staking.v1beta1.Commission":{"description":"Commission defines commission parameters for a given validator.","type":"object","properties":{"commission_rates":{"description":"commission_rates defines the initial commission rates to be used for creating a validator.","$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"update_time":{"description":"update_time is the last time the commission rate was changed.","type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.CommissionRates":{"description":"CommissionRates defines the initial commission rates to be used for creating\na validator.","type":"object","properties":{"max_change_rate":{"description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction.","type":"string"},"max_rate":{"description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction.","type":"string"},"rate":{"description":"rate is the commission rate charged to delegators, as a fraction.","type":"string"}}},"cosmos.staking.v1beta1.Delegation":{"description":"Delegation represents the bond with tokens held by an account. It is\nowned by one delegator, and is associated with the voting power of one\nvalidator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"shares":{"description":"shares define the delegation shares received.","type":"string"},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.DelegationResponse":{"description":"DelegationResponse is equivalent to Delegation except that it contains a\nbalance in addition to shares which is more suitable for client responses.","type":"object","properties":{"balance":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Delegation"}}},"cosmos.staking.v1beta1.Description":{"description":"Description defines a validator description.","type":"object","properties":{"details":{"description":"details define other optional details.","type":"string"},"identity":{"description":"identity defines an optional identity signature (ex. UPort or Keybase).","type":"string"},"moniker":{"description":"moniker defines a human-readable name for the validator.","type":"string"},"security_contact":{"description":"security_contact defines an optional email for security contact.","type":"string"},"website":{"description":"website defines an optional website link.","type":"string"}}},"cosmos.staking.v1beta1.HistoricalInfo":{"description":"HistoricalInfo contains header and validator information for a given block.\nIt is stored as part of staking module's state, which persists the `n` most\nrecent HistoricalInfo\n(`n` is set by the staking module's `historical_entries` parameter).","type":"object","properties":{"header":{"$ref":"#/definitions/tendermint.types.Header"},"valset":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgBeginRedelegateResponse":{"description":"MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegation":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator","properties":{"amount":{"title":"amount is always less than or equal to unbonding delegation entry balance","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegationResponse"},"cosmos.staking.v1beta1.MsgCreateValidator":{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","type":"object","properties":{"commission":{"$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"delegator_address":{"description":"Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated.\nThe validator address bytes and delegator address bytes refer to the same account while creating validator (defer\nonly in bech32 notation).","type":"string"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"pubkey":{"$ref":"#/definitions/google.protobuf.Any"},"validator_address":{"type":"string"},"value":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.staking.v1beta1.MsgCreateValidatorResponse":{"description":"MsgCreateValidatorResponse defines the Msg/CreateValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgDelegate":{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgDelegateResponse":{"description":"MsgDelegateResponse defines the Msg/Delegate response type.","type":"object"},"cosmos.staking.v1beta1.MsgEditValidator":{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","type":"object","properties":{"commission_rate":{"type":"string","title":"We pass a reference to the new commission rate and min self delegation as\nit's not mandatory to update. If not updated, the deserialized rate will be\nzero with no way to distinguish if an update was intended.\nREF: #2373"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgEditValidatorResponse":{"description":"MsgEditValidatorResponse defines the Msg/EditValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgUndelegate":{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgUndelegateResponse":{"description":"MsgUndelegateResponse defines the Msg/Undelegate response type.","type":"object","properties":{"amount":{"description":"Since: cosmos-sdk 0.50","title":"amount returns the amount of undelegated coins","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/staking parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.staking.v1beta1.Params":{"description":"Params defines the parameters for the x/staking module.","type":"object","properties":{"bond_denom":{"description":"bond_denom defines the bondable coin denomination.","type":"string"},"historical_entries":{"description":"historical_entries is the number of historical entries to persist.","type":"integer","format":"int64"},"max_entries":{"description":"max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio).","type":"integer","format":"int64"},"max_validators":{"description":"max_validators is the maximum number of validators.","type":"integer","format":"int64"},"min_commission_rate":{"type":"string","title":"min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators"},"unbonding_time":{"description":"unbonding_time is the time duration of unbonding.","type":"string"}}},"cosmos.staking.v1beta1.Pool":{"description":"Pool is used for tracking bonded and not-bonded token supply of the bond\ndenomination.","type":"object","properties":{"bonded_tokens":{"type":"string"},"not_bonded_tokens":{"type":"string"}}},"cosmos.staking.v1beta1.QueryDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/Delegation RPC method.","type":"object","properties":{"delegation_response":{"description":"delegation_responses defines the delegation info of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse":{"description":"QueryDelegatorDelegationsResponse is response type for the\nQuery/DelegatorDelegations RPC method.","type":"object","properties":{"delegation_responses":{"description":"delegation_responses defines all the delegations' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse":{"description":"QueryUnbondingDelegatorDelegationsResponse is response type for the\nQuery/UnbondingDelegatorDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorResponse":{"description":"QueryDelegatorValidatorResponse response type for the\nQuery/DelegatorValidator RPC method.","type":"object","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators defines the validators' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.QueryHistoricalInfoResponse":{"description":"QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC\nmethod.","type":"object","properties":{"hist":{"description":"hist defines the historical info at the given height.","$ref":"#/definitions/cosmos.staking.v1beta1.HistoricalInfo"}}},"cosmos.staking.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.QueryPoolResponse":{"description":"QueryPoolResponse is response type for the Query/Pool RPC method.","type":"object","properties":{"pool":{"description":"pool defines the pool info.","$ref":"#/definitions/cosmos.staking.v1beta1.Pool"}}},"cosmos.staking.v1beta1.QueryRedelegationsResponse":{"description":"QueryRedelegationsResponse is response type for the Query/Redelegations RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"redelegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationResponse"}}}},"cosmos.staking.v1beta1.QueryUnbondingDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/UnbondingDelegation\nRPC method.","type":"object","properties":{"unbond":{"description":"unbond defines the unbonding information of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}},"cosmos.staking.v1beta1.QueryValidatorDelegationsResponse":{"type":"object","title":"QueryValidatorDelegationsResponse is response type for the\nQuery/ValidatorDelegations RPC method","properties":{"delegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryValidatorResponse":{"type":"object","title":"QueryValidatorResponse is response type for the Query/Validator RPC method","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse":{"description":"QueryValidatorUnbondingDelegationsResponse is response type for the\nQuery/ValidatorUnbondingDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryValidatorsResponse":{"type":"object","title":"QueryValidatorsResponse is response type for the Query/Validators RPC method","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators contains all the queried validators.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.Redelegation":{"description":"Redelegation contains the list of a particular delegator's redelegating bonds\nfrom a particular source validator to a particular destination validator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the bech32-encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the redelegation entries.\n\nredelegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}},"validator_dst_address":{"description":"validator_dst_address is the validator redelegation destination operator address.","type":"string"},"validator_src_address":{"description":"validator_src_address is the validator redelegation source operator address.","type":"string"}}},"cosmos.staking.v1beta1.RedelegationEntry":{"description":"RedelegationEntry defines a redelegation object with relevant metadata.","type":"object","properties":{"completion_time":{"description":"completion_time defines the unix time for redelegation completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height defines the height which the redelegation took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the initial balance when redelegation started.","type":"string"},"shares_dst":{"description":"shares_dst is the amount of destination-validator shares created by redelegation.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.RedelegationEntryResponse":{"description":"RedelegationEntryResponse is equivalent to a RedelegationEntry except that it\ncontains a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"balance":{"type":"string"},"redelegation_entry":{"$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}}},"cosmos.staking.v1beta1.RedelegationResponse":{"description":"RedelegationResponse is equivalent to a Redelegation except that its entries\ncontain a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntryResponse"}},"redelegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Redelegation"}}},"cosmos.staking.v1beta1.UnbondingDelegation":{"description":"UnbondingDelegation stores all of a single delegator's unbonding bonds\nfor a single validator in an time-ordered list.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the unbonding delegation entries.\n\nunbonding delegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegationEntry"}},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.UnbondingDelegationEntry":{"description":"UnbondingDelegationEntry defines an unbonding object with relevant metadata.","type":"object","properties":{"balance":{"description":"balance defines the tokens to receive at completion.","type":"string"},"completion_time":{"description":"completion_time is the unix time for unbonding completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the tokens initially scheduled to receive at completion.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.Validator":{"description":"Validator defines a validator, together with the total amount of the\nValidator's bond shares and their exchange rate to coins. Slashing results in\na decrease in the exchange rate, allowing correct calculation of future\nundelegations without iterating over delegators. When coins are delegated to\nthis validator, the validator is credited with a delegation whose number of\nbond shares is based on the amount of coins delegated divided by the current\nexchange rate. Voting power can be calculated as total bonded shares\nmultiplied by exchange rate.","type":"object","properties":{"commission":{"description":"commission defines the commission parameters.","$ref":"#/definitions/cosmos.staking.v1beta1.Commission"},"consensus_pubkey":{"description":"consensus_pubkey is the consensus public key of the validator, as a Protobuf Any.","$ref":"#/definitions/google.protobuf.Any"},"delegator_shares":{"description":"delegator_shares defines total shares issued to a validator's delegators.","type":"string"},"description":{"description":"description defines the description terms for the validator.","$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"jailed":{"description":"jailed defined whether the validator has been jailed from bonded status or not.","type":"boolean"},"min_self_delegation":{"description":"min_self_delegation is the validator's self declared minimum self delegation.\n\nSince: cosmos-sdk 0.46","type":"string"},"operator_address":{"description":"operator_address defines the address of the validator's operator; bech encoded in JSON.","type":"string"},"status":{"description":"status is the validator status (bonded/unbonding/unbonded).","$ref":"#/definitions/cosmos.staking.v1beta1.BondStatus"},"tokens":{"description":"tokens define the delegated tokens (incl. self-delegation).","type":"string"},"unbonding_height":{"description":"unbonding_height defines, if unbonding, the height at which this validator has begun unbonding.","type":"string","format":"int64"},"unbonding_ids":{"type":"array","title":"list of unbonding ids, each uniquely identifing an unbonding of this validator","items":{"type":"string","format":"uint64"}},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"strictly positive if this validator's unbonding has been stopped by external modules"},"unbonding_time":{"description":"unbonding_time defines, if unbonding, the min time for the validator to complete unbonding.","type":"string","format":"date-time"}}},"cosmos.store.streaming.abci.ListenCommitRequest":{"type":"object","title":"ListenCommitRequest is the request type for the ListenCommit RPC method","properties":{"block_height":{"type":"string","format":"int64","title":"explicitly pass in block height as ResponseCommit does not contain this info"},"change_set":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.store.v1beta1.StoreKVPair"}},"res":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}}},"cosmos.store.streaming.abci.ListenCommitResponse":{"type":"object","title":"ListenCommitResponse is the response type for the ListenCommit RPC method"},"cosmos.store.streaming.abci.ListenFinalizeBlockRequest":{"type":"object","title":"ListenEndBlockRequest is the request type for the ListenEndBlock RPC method","properties":{"req":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"},"res":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}}},"cosmos.store.streaming.abci.ListenFinalizeBlockResponse":{"type":"object","title":"ListenEndBlockResponse is the response type for the ListenEndBlock RPC method"},"cosmos.store.v1beta1.StoreKVPair":{"description":"Since: cosmos-sdk 0.43","type":"object","title":"StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes)\nIt optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and\nDeletes","properties":{"delete":{"type":"boolean","title":"true indicates a delete operation, false indicates a set operation"},"key":{"type":"string","format":"byte"},"store_key":{"type":"string","title":"the store key for the KVStore this pair originates from"},"value":{"type":"string","format":"byte"}}},"cosmos.tx.signing.v1beta1.SignMode":{"description":"SignMode represents a signing mode with its own security guarantees.\n\nThis enum should be considered a registry of all known sign modes\nin the Cosmos ecosystem. Apps are not expected to support all known\nsign modes. Apps that would like to support custom sign modes are\nencouraged to open a small PR against this file to add a new case\nto this SignMode enum describing their sign mode so that different\napps have a consistent version of this enum.\n\n - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\nrejected.\n - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\nverified with raw bytes from Tx.\n - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\nhuman-readable textual representation on top of the binary representation\nfrom SIGN_MODE_DIRECT.\n\nSince: cosmos-sdk 0.50\n - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\nSignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\nrequire signers signing over other signers' `signer_info`.\n\nSince: cosmos-sdk 0.46\n - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\nAmino JSON and will be removed in the future.\n - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\nSDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\nCurrently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\nbut is not implemented on the SDK by default. To enable EIP-191, you need\nto pass a custom `TxConfig` that has an implementation of\n`SignModeHandler` for EIP-191. The SDK may decide to fully support\nEIP-191 in the future.\n\nSince: cosmos-sdk 0.45.2","type":"string","default":"SIGN_MODE_UNSPECIFIED","enum":["SIGN_MODE_UNSPECIFIED","SIGN_MODE_DIRECT","SIGN_MODE_TEXTUAL","SIGN_MODE_DIRECT_AUX","SIGN_MODE_LEGACY_AMINO_JSON","SIGN_MODE_EIP_191"]},"cosmos.tx.v1beta1.AuthInfo":{"description":"AuthInfo describes the fee and signer modes that are used to sign a\ntransaction.","type":"object","properties":{"fee":{"description":"Fee is the fee and gas limit for the transaction. The first signer is the\nprimary signer and the one which pays the fee. The fee can be calculated\nbased on the cost of evaluating the body and doing signature verification\nof the signers. This can be estimated via simulation.","$ref":"#/definitions/cosmos.tx.v1beta1.Fee"},"signer_infos":{"description":"signer_infos defines the signing modes for the required signers. The number\nand order of elements must match the required signers from TxBody's\nmessages. The first element is the primary signer and the one which pays\nthe fee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.SignerInfo"}},"tip":{"description":"Tip is the optional tip used for transactions fees paid in another denom.\n\nThis field is ignored if the chain didn't enable tips, i.e. didn't add the\n`TipDecorator` in its posthandler.\n\nSince: cosmos-sdk 0.46","$ref":"#/definitions/cosmos.tx.v1beta1.Tip"}}},"cosmos.tx.v1beta1.BroadcastMode":{"description":"BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\nmethod.\n\n - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\nBROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits\nfor a CheckTx execution response only.\n - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client\nreturns immediately.","type":"string","default":"BROADCAST_MODE_UNSPECIFIED","enum":["BROADCAST_MODE_UNSPECIFIED","BROADCAST_MODE_BLOCK","BROADCAST_MODE_SYNC","BROADCAST_MODE_ASYNC"]},"cosmos.tx.v1beta1.BroadcastTxRequest":{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","type":"object","properties":{"mode":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastMode"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.BroadcastTxResponse":{"description":"BroadcastTxResponse is the response type for the\nService.BroadcastTx method.","type":"object","properties":{"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.Fee":{"description":"Fee includes the amount of coins paid in fees and the maximum\ngas to be used by the transaction. The ratio yields an effective \"gasprice\",\nwhich must be above some miminum to be accepted into the mempool.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of coins to be paid as a fee","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"gas_limit":{"type":"string","format":"uint64","title":"gas_limit is the maximum gas that can be used in transaction processing\nbefore an out of gas error occurs"},"granter":{"type":"string","title":"if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used\nto pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\nnot support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees.\nthe payer must be a tx signer (and thus have signed this field in AuthInfo).\nsetting this field does *not* change the ordering of required signers for the transaction.","type":"string"}}},"cosmos.tx.v1beta1.GetBlockWithTxsResponse":{"description":"GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs\nmethod.\n\nSince: cosmos-sdk 0.45.2","type":"object","properties":{"block":{"$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"pagination":{"description":"pagination defines a pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"txs":{"description":"txs are the transactions in the block.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.GetTxResponse":{"description":"GetTxResponse is the response type for the Service.GetTx method.","type":"object","properties":{"tx":{"description":"tx is the queried transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.GetTxsEventResponse":{"description":"GetTxsEventResponse is the response type for the Service.TxsByEvents\nRPC method.","type":"object","properties":{"pagination":{"description":"pagination defines a pagination for the response.\nDeprecated post v0.46.x: use total instead.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64","title":"total is total number of results available"},"tx_responses":{"description":"tx_responses is the list of queried TxResponses.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}},"txs":{"description":"txs is the list of queried transactions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.ModeInfo":{"description":"ModeInfo describes the signing mode of a single or nested multisig signer.","type":"object","properties":{"multi":{"title":"multi represents a nested multisig signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi"},"single":{"title":"single represents a single signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Single"}}},"cosmos.tx.v1beta1.ModeInfo.Multi":{"type":"object","title":"Multi is the mode info for a multisig public key","properties":{"bitarray":{"title":"bitarray specifies which keys within the multisig are signing","$ref":"#/definitions/cosmos.crypto.multisig.v1beta1.CompactBitArray"},"mode_infos":{"type":"array","title":"mode_infos is the corresponding modes of the signers of the multisig\nwhich could include nested multisig public keys","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"}}}},"cosmos.tx.v1beta1.ModeInfo.Single":{"type":"object","title":"Single is the mode info for a single signer. It is structured as a message\nto allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\nfuture","properties":{"mode":{"title":"mode is the signing mode of the single signer","$ref":"#/definitions/cosmos.tx.signing.v1beta1.SignMode"}}},"cosmos.tx.v1beta1.OrderBy":{"description":"- ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","type":"string","title":"OrderBy defines the sorting order","default":"ORDER_BY_UNSPECIFIED","enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"]},"cosmos.tx.v1beta1.SignerInfo":{"description":"SignerInfo describes the public key and signing mode of a single top-level\nsigner.","type":"object","properties":{"mode_info":{"title":"mode_info describes the signing mode of the signer and is a nested\nstructure to support nested multisig pubkey's","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"},"public_key":{"description":"public_key is the public key of the signer. It is optional for accounts\nthat already exist in state. If unset, the verifier can use the required \\\nsigner address for this position and lookup the public key.","$ref":"#/definitions/google.protobuf.Any"},"sequence":{"description":"sequence is the sequence of the account, which describes the\nnumber of committed transactions signed by a given address. It is used to\nprevent replay attacks.","type":"string","format":"uint64"}}},"cosmos.tx.v1beta1.SimulateRequest":{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to simulate.\nDeprecated. Send raw tx bytes instead.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_bytes":{"description":"tx_bytes is the raw transaction.\n\nSince: cosmos-sdk 0.43","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.SimulateResponse":{"description":"SimulateResponse is the response type for the\nService.SimulateRPC method.","type":"object","properties":{"gas_info":{"description":"gas_info is the information about gas used in the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.GasInfo"},"result":{"description":"result is the result of the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.Result"}}},"cosmos.tx.v1beta1.Tip":{"description":"Tip is the tip used for meta-transactions.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of the tip","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"tipper":{"type":"string","title":"tipper is the address of the account paying for the tip"}}},"cosmos.tx.v1beta1.Tx":{"description":"Tx is the standard type used for broadcasting transactions.","type":"object","properties":{"auth_info":{"title":"auth_info is the authorization related content of the transaction,\nspecifically signers, signer modes and fee","$ref":"#/definitions/cosmos.tx.v1beta1.AuthInfo"},"body":{"title":"body is the processable content of the transaction","$ref":"#/definitions/cosmos.tx.v1beta1.TxBody"},"signatures":{"description":"signatures is a list of signatures that matches the length and order of\nAuthInfo's signer_infos to allow connecting signature meta information like\npublic key and signing mode by position.","type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.tx.v1beta1.TxBody":{"description":"TxBody is the body of a transaction that all signers sign over.","type":"object","properties":{"extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, the transaction will be rejected","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"memo":{"description":"memo is any arbitrary note/comment to be added to the transaction.\nWARNING: in clients, any publicly exposed text should not be called memo,\nbut should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).","type":"string"},"messages":{"description":"messages is a list of messages to be executed. The required signers of\nthose messages define the number and order of elements in AuthInfo's\nsigner_infos and Tx's signatures. Each required signer address is added to\nthe list only the first time it occurs.\nBy convention, the first required signer (usually from the first message)\nis referred to as the primary signer and pays the fee for the whole\ntransaction.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"non_critical_extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, they will be ignored","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"timeout_height":{"type":"string","format":"uint64","title":"timeout is the block height after which this transaction will not\nbe processed by the chain"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeAminoResponse":{"description":"TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeResponse":{"description":"TxDecodeResponse is the response type for the\nService.TxDecode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the decoded transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeAminoRequest":{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxEncodeRequest":{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the transaction to encode.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeResponse":{"description":"TxEncodeResponse is the response type for the\nService.TxEncode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the encoded transaction bytes.","type":"string","format":"byte"}}},"cosmos.upgrade.v1beta1.ModuleVersion":{"description":"ModuleVersion specifies a module and its consensus version.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"name":{"type":"string","title":"name of the app module"},"version":{"type":"string","format":"uint64","title":"consensus version of the app module"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgrade":{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse":{"description":"MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"plan":{"description":"plan is the upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse":{"description":"MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.Plan":{"description":"Plan specifies information about a planned upgrade and when it should occur.","type":"object","properties":{"height":{"description":"The height at which the upgrade must be performed.","type":"string","format":"int64"},"info":{"type":"string","title":"Any application specific upgrade info to be included on-chain\nsuch as a git commit that validators could automatically upgrade to"},"name":{"description":"Sets the name for the upgrade. This name will be used by the upgraded\nversion of the software to apply any special \"on-upgrade\" commands during\nthe first BeginBlock method after the upgrade is applied. It is also used\nto detect whether a software version can handle a given upgrade. If no\nupgrade handler with this name has been set in the software, it will be\nassumed that the software is out-of-date when the upgrade Time or Height is\nreached and the software will exit.","type":"string"},"time":{"description":"Deprecated: Time based upgrades have been deprecated. Time based upgrade logic\nhas been removed from the SDK.\nIf this field is not empty, an error will be thrown.","type":"string","format":"date-time"},"upgraded_client_state":{"description":"Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been\nmoved to the IBC module in the sub module 02-client.\nIf this field is not empty, an error will be thrown.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.upgrade.v1beta1.QueryAppliedPlanResponse":{"description":"QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC\nmethod.","type":"object","properties":{"height":{"description":"height is the block height at which the plan was applied.","type":"string","format":"int64"}}},"cosmos.upgrade.v1beta1.QueryAuthorityResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"QueryAuthorityResponse is the response type for Query/Authority","properties":{"address":{"type":"string"}}},"cosmos.upgrade.v1beta1.QueryCurrentPlanResponse":{"description":"QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC\nmethod.","type":"object","properties":{"plan":{"description":"plan is the current upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.QueryModuleVersionsResponse":{"description":"QueryModuleVersionsResponse is the response type for the Query/ModuleVersions\nRPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"module_versions":{"description":"module_versions is a list of module names with their consensus versions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.upgrade.v1beta1.ModuleVersion"}}}},"cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState\nRPC method.","type":"object","properties":{"upgraded_consensus_state":{"type":"string","format":"byte","title":"Since: cosmos-sdk 0.43"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"from_address":{"type":"string"},"start_time":{"description":"start of vesting as unix time (in seconds).","type":"string","format":"int64"},"to_address":{"type":"string"},"vesting_periods":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.vesting.v1beta1.Period"}}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount\nresponse type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse":{"description":"MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreateVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"delayed":{"type":"boolean"},"end_time":{"description":"end of vesting as unix time (in seconds).","type":"string","format":"int64"},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type.","type":"object"},"cosmos.vesting.v1beta1.Period":{"description":"Period defines a length of time and amount of coins that will vest.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"length":{"description":"Period duration in seconds.","type":"string","format":"int64"}}},"cosmwasm.wasm.v1.AbsoluteTxPosition":{"description":"AbsoluteTxPosition is a unique transaction position that allows for global\nordering of transactions.","type":"object","properties":{"block_height":{"type":"string","format":"uint64","title":"BlockHeight is the block the contract was created at"},"tx_index":{"type":"string","format":"uint64","title":"TxIndex is a monotonic counter within the block (actual transaction index,\nor gas consumed)"}}},"cosmwasm.wasm.v1.AccessConfig":{"description":"AccessConfig access control type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.AccessType":{"description":"- ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty value\n - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses","type":"string","title":"AccessType permission types","default":"ACCESS_TYPE_UNSPECIFIED","enum":["ACCESS_TYPE_UNSPECIFIED","ACCESS_TYPE_NOBODY","ACCESS_TYPE_EVERYBODY","ACCESS_TYPE_ANY_OF_ADDRESSES"]},"cosmwasm.wasm.v1.CodeInfoResponse":{"type":"object","title":"CodeInfoResponse contains code meta data from CodeInfo","properties":{"code_id":{"type":"string","format":"uint64","title":"id for legacy support"},"creator":{"type":"string"},"data_hash":{"type":"string","format":"byte"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.ContractCodeHistoryEntry":{"description":"ContractCodeHistoryEntry metadata to a contract.","type":"object","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"msg":{"type":"string","format":"byte"},"operation":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryOperationType"},"updated":{"description":"Updated Tx position when the operation was executed.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"}}},"cosmwasm.wasm.v1.ContractCodeHistoryOperationType":{"description":"- CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data","type":"string","title":"ContractCodeHistoryOperationType actions that caused a code change","default":"CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","enum":["CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT","CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE","CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS"]},"cosmwasm.wasm.v1.ContractInfo":{"type":"object","title":"ContractInfo stores a WASM contract instance","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored Wasm code"},"created":{"description":"Created Tx position when the contract was instantiated.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"},"creator":{"type":"string","title":"Creator address who initially instantiated the contract"},"extension":{"description":"Extension is an extension point to store custom metadata within the\npersistence model.","$ref":"#/definitions/google.protobuf.Any"},"ibc2_port_id":{"type":"string"},"ibc_port_id":{"type":"string"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"}}},"cosmwasm.wasm.v1.Model":{"type":"object","title":"Model is a struct that holds a KV pair","properties":{"key":{"type":"string","format":"byte","title":"hex-encode key to read it better (this is often ascii)"},"value":{"type":"string","format":"byte","title":"base64-encode raw value"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses":{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse":{"description":"MsgAddCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgAddCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgClearAdmin":{"type":"object","title":"MsgClearAdmin removes any admin stored for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgClearAdminResponse":{"type":"object","title":"MsgClearAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgExecuteContract":{"type":"object","title":"MsgExecuteContract submits the given message data to a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on execution","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgExecuteContractResponse":{"description":"MsgExecuteContractResponse returns execution result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContract":{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2":{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"fix_msg":{"type":"boolean","title":"FixMsg include the msg value into the hash for the predictable address.\nDefault is false"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"salt":{"description":"Salt is an arbitrary value provided by the sender. Size can be 1 to 64.","type":"string","format":"byte"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2Response":{"type":"object","title":"MsgInstantiateContract2Response return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContractResponse":{"type":"object","title":"MsgInstantiateContractResponse return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgMigrateContract":{"type":"object","title":"MsgMigrateContract runs a code upgrade/ downgrade for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the new WASM code"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgMigrateContractResponse":{"description":"MsgMigrateContractResponse returns contract migration result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains same raw bytes returned as data from the wasm contract.\n(May be empty)"}}},"cosmwasm.wasm.v1.MsgPinCodes":{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the new WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgPinCodesResponse":{"description":"MsgPinCodesResponse defines the response structure for executing a\nMsgPinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses":{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse":{"description":"MsgRemoveCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgRemoveCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContract":{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"authority":{"description":"Authority is the address of the governance account.","type":"string"},"builder":{"type":"string","title":"Builder is the docker image used to build the code deterministically, used\nfor smart contract verification"},"code_hash":{"type":"string","format":"byte","title":"CodeHash is the SHA256 sum of the code outputted by builder, used for smart\ncontract verification"},"funds":{"type":"array","title":"Funds coins that are transferred from the authority account to the contract\non instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"source":{"type":"string","title":"Source is the URL where the code is hosted"},"unpin_code":{"description":"UnpinCode code on upload, optional. As default the uploaded contract is\npinned to cache.","type":"boolean"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse":{"description":"MsgStoreAndInstantiateContractResponse defines the response structure\nfor executing a MsgStoreAndInstantiateContract message.\n\nSince: 0.40","type":"object","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContract":{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse":{"description":"MsgStoreAndMigrateContractResponse defines the response structure\nfor executing a MsgStoreAndMigrateContract message.\n\nSince: 0.42","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreCode":{"type":"object","title":"MsgStoreCode submit Wasm code to the system","properties":{"instantiate_permission":{"title":"InstantiatePermission access control to apply on contract creation,\noptional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreCodeResponse":{"description":"MsgStoreCodeResponse returns store result data.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"}}},"cosmwasm.wasm.v1.MsgSudoContract":{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract as sudo"}}},"cosmwasm.wasm.v1.MsgSudoContractResponse":{"description":"MsgSudoContractResponse defines the response structure for executing a\nMsgSudoContract message.\n\nSince: 0.40","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgUnpinCodes":{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgUnpinCodesResponse":{"description":"MsgUnpinCodesResponse defines the response structure for executing a\nMsgUnpinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgUpdateAdmin":{"type":"object","title":"MsgUpdateAdmin sets a new admin for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_admin":{"type":"string","title":"NewAdmin address to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateAdminResponse":{"type":"object","title":"MsgUpdateAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateContractLabel":{"type":"object","title":"MsgUpdateContractLabel sets a new label for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_label":{"type":"string","title":"NewLabel string to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateContractLabelResponse":{"type":"object","title":"MsgUpdateContractLabelResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfig":{"type":"object","title":"MsgUpdateInstantiateConfig updates instantiate config for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the stored WASM code"},"new_instantiate_permission":{"title":"NewInstantiatePermission is the new access control","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse":{"type":"object","title":"MsgUpdateInstantiateConfigResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/wasm parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.Params":{"description":"Params defines the set of wasm parameters.","type":"object","properties":{"code_upload_access":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"instantiate_default_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.QueryAllContractStateResponse":{"type":"object","title":"QueryAllContractStateResponse is the response type for the\nQuery/AllContractState RPC method","properties":{"models":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.Model"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryBuildAddressResponse":{"description":"QueryBuildAddressResponse is the response type for the Query/BuildAddress RPC\nmethod.","type":"object","properties":{"address":{"type":"string","title":"Address is the contract address"}}},"cosmwasm.wasm.v1.QueryCodeInfoResponse":{"type":"object","title":"QueryCodeInfoResponse is the response type for the Query/CodeInfo RPC method","properties":{"checksum":{"type":"string","format":"byte"},"code_id":{"type":"string","format":"uint64"},"creator":{"type":"string"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.QueryCodeResponse":{"type":"object","title":"QueryCodeResponse is the response type for the Query/Code RPC method","properties":{"code_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"},"data":{"type":"string","format":"byte"}}},"cosmwasm.wasm.v1.QueryCodesResponse":{"type":"object","title":"QueryCodesResponse is the response type for the Query/Codes RPC method","properties":{"code_infos":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractHistoryResponse":{"type":"object","title":"QueryContractHistoryResponse is the response type for the\nQuery/ContractHistory RPC method","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryEntry"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractInfoResponse":{"type":"object","title":"QueryContractInfoResponse is the response type for the Query/ContractInfo RPC\nmethod","properties":{"address":{"type":"string","title":"address is the address of the contract"},"contract_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractInfo"}}},"cosmwasm.wasm.v1.QueryContractsByCodeResponse":{"type":"object","title":"QueryContractsByCodeResponse is the response type for the\nQuery/ContractsByCode RPC method","properties":{"contracts":{"type":"array","title":"contracts are a set of contract addresses","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractsByCreatorResponse":{"description":"QueryContractsByCreatorResponse is the response type for the\nQuery/ContractsByCreator RPC method.","type":"object","properties":{"contract_addresses":{"type":"array","title":"ContractAddresses result set","items":{"type":"string"}},"pagination":{"description":"Pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.QueryPinnedCodesResponse":{"type":"object","title":"QueryPinnedCodesResponse is the response type for the\nQuery/PinnedCodes RPC method","properties":{"code_ids":{"type":"array","items":{"type":"string","format":"uint64"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryRawContractStateResponse":{"type":"object","title":"QueryRawContractStateResponse is the response type for the\nQuery/RawContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the raw store data"}}},"cosmwasm.wasm.v1.QuerySmartContractStateResponse":{"type":"object","title":"QuerySmartContractStateResponse is the response type for the\nQuery/SmartContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the json data returned from the smart contract"}}},"cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse":{"description":"QueryWasmLimitsConfigResponse is the response type for the\nQuery/WasmLimitsConfig RPC method. It contains the JSON encoded limits for\nstatic validation of Wasm files.","type":"object","properties":{"config":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount":{"type":"object","title":"MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount","properties":{"connection_id":{"type":"string"},"ordering":{"$ref":"#/definitions/ibc.core.channel.v1.Order"},"owner":{"type":"string"},"version":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse":{"type":"object","title":"MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTx":{"type":"object","title":"MsgSendTx defines the payload for Msg/SendTx","properties":{"connection_id":{"type":"string"},"owner":{"type":"string"},"packet_data":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.InterchainAccountPacketData"},"relative_timeout":{"description":"Relative timeout timestamp provided will be added to the current block time during transaction execution.\nThe timeout timestamp must be non-zero.","type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse":{"type":"object","title":"MsgSendTxResponse defines the response for MsgSendTx","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/controller parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.controller.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the controller submodule.","type":"object","properties":{"controller_enabled":{"description":"controller_enabled enables or disables the controller submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse":{"description":"QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method.","type":"object","properties":{"address":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe":{"type":"object","title":"MsgModuleQuerySafe defines the payload for Msg/ModuleQuerySafe","properties":{"requests":{"description":"requests defines the module safe queries to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryRequest"}},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse":{"type":"object","title":"MsgModuleQuerySafeResponse defines the response for Msg/ModuleQuerySafe","properties":{"height":{"type":"string","format":"uint64","title":"height at which the responses were queried"},"responses":{"type":"array","title":"protobuf encoded responses for each query","items":{"type":"string","format":"byte"}}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/host parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.host.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the host submodule.","type":"object","properties":{"allow_messages":{"description":"allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain.","type":"array","items":{"type":"string"}},"host_enabled":{"description":"host_enabled enables or disables the host submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.host.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.QueryRequest":{"description":"QueryRequest defines the parameters for a particular query request\nby an interchain account.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"data defines the payload of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"},"path":{"type":"string","title":"path defines the path of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"}}},"ibc.applications.interchain_accounts.v1.InterchainAccountPacketData":{"description":"InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.","type":"object","properties":{"data":{"type":"string","format":"byte"},"memo":{"type":"string"},"type":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.Type"}}},"ibc.applications.interchain_accounts.v1.Type":{"description":"- TYPE_UNSPECIFIED: Default zero value enumeration\n - TYPE_EXECUTE_TX: Execute a transaction on an interchain accounts host chain","type":"string","title":"Type defines a classification of message issued from a controller chain to its associated interchain accounts\nhost","default":"TYPE_UNSPECIFIED","enum":["TYPE_UNSPECIFIED","TYPE_EXECUTE_TX"]},"ibc.applications.transfer.v1.Denom":{"description":"Denom holds the base denom of a Token and a trace of the chains it was sent through.","type":"object","properties":{"base":{"type":"string","title":"the base token denomination"},"trace":{"type":"array","title":"the trace of the token","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Hop"}}}},"ibc.applications.transfer.v1.Hop":{"type":"object","title":"Hop defines a port ID, channel ID pair specifying a unique \"hop\" in a trace","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.transfer.v1.MsgTransfer":{"type":"object","title":"MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between\nICS20 enabled chains. See ICS Spec here:\nhttps://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures","properties":{"encoding":{"type":"string","title":"optional encoding"},"memo":{"type":"string","title":"optional memo"},"receiver":{"type":"string","title":"the recipient address on the destination chain"},"sender":{"type":"string","title":"the sender address"},"source_channel":{"type":"string","title":"the channel by which the packet will be sent"},"source_port":{"type":"string","title":"the port on which the packet will be sent"},"timeout_height":{"description":"Timeout height relative to the current block height.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted.","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"description":"Timeout timestamp in absolute nanoseconds since unix epoch.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set.","type":"string","format":"uint64"},"token":{"title":"token to be transferred","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.applications.transfer.v1.MsgTransferResponse":{"description":"MsgTransferResponse defines the Msg/Transfer response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64","title":"sequence number of the transfer packet sent"}}},"ibc.applications.transfer.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"params":{"description":"params defines the transfer parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.transfer.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibc.applications.transfer.v1.Params":{"description":"Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false.","type":"object","properties":{"receive_enabled":{"description":"receive_enabled enables or disables all cross-chain token transfers to this\nchain.","type":"boolean"},"send_enabled":{"description":"send_enabled enables or disables all cross-chain token transfers from this\nchain.","type":"boolean"}}},"ibc.applications.transfer.v1.QueryDenomHashResponse":{"description":"QueryDenomHashResponse is the response type for the Query/DenomHash RPC\nmethod.","type":"object","properties":{"hash":{"description":"hash (in hex format) of the denomination trace information.","type":"string"}}},"ibc.applications.transfer.v1.QueryDenomResponse":{"description":"QueryDenomResponse is the response type for the Query/Denom RPC\nmethod.","type":"object","properties":{"denom":{"description":"denom returns the requested denomination.","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}}},"ibc.applications.transfer.v1.QueryDenomsResponse":{"description":"QueryDenomsResponse is the response type for the Query/Denoms RPC\nmethod.","type":"object","properties":{"denoms":{"description":"denoms returns all denominations.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.applications.transfer.v1.QueryEscrowAddressResponse":{"description":"QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.","type":"object","properties":{"escrow_address":{"type":"string","title":"the escrow account address"}}},"ibc.applications.transfer.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"}}},"ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse":{"description":"QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.core.channel.v1.Channel":{"description":"Channel defines pipeline for exactly-once packet delivery between specific\nmodules on separate blockchains, which has at least one end capable of\nsending packets and one end capable of receiving packets.","type":"object","properties":{"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.Counterparty":{"type":"object","title":"Counterparty defines a channel end counterparty","properties":{"channel_id":{"type":"string","title":"channel end on the counterparty chain"},"port_id":{"description":"port on the counterparty chain which owns the other end of the channel.","type":"string"}}},"ibc.core.channel.v1.IdentifiedChannel":{"description":"IdentifiedChannel defines a channel with additional port and channel\nidentifier fields.","type":"object","properties":{"channel_id":{"type":"string","title":"channel identifier"},"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"port_id":{"type":"string","title":"port identifier"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.MsgAcknowledgement":{"type":"object","title":"MsgAcknowledgement receives incoming IBC acknowledgement","properties":{"acknowledgement":{"type":"string","format":"byte"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgChannelCloseConfirm":{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseConfirmResponse":{"description":"MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelCloseInit":{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseInitResponse":{"description":"MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenAck":{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"counterparty_channel_id":{"type":"string"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenAckResponse":{"description":"MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenConfirm":{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenConfirmResponse":{"description":"MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenInit":{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","type":"object","properties":{"channel":{"$ref":"#/definitions/ibc.core.channel.v1.Channel"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenInitResponse":{"description":"MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTry":{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","type":"object","properties":{"channel":{"description":"NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC.","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"previous_channel_id":{"description":"Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC.","type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTryResponse":{"description":"MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacket":{"type":"object","title":"MsgRecvPacket receives incoming IBC packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnClose":{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","type":"object","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_close":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnCloseResponse":{"description":"MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.Order":{"description":"- ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\nwhich they were sent.\n - ORDER_ORDERED: packets are delivered exactly in the order which they were sent","type":"string","title":"Order defines if a channel is ORDERED or UNORDERED","default":"ORDER_NONE_UNSPECIFIED","enum":["ORDER_NONE_UNSPECIFIED","ORDER_UNORDERED","ORDER_ORDERED"]},"ibc.core.channel.v1.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"data":{"type":"string","format":"byte","title":"actual opaque bytes transferred directly to the application module"},"destination_channel":{"description":"identifies the channel end on the receiving chain.","type":"string"},"destination_port":{"description":"identifies the port on the receiving chain.","type":"string"},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_channel":{"description":"identifies the channel end on the sending chain.","type":"string"},"source_port":{"description":"identifies the port on the sending chain.","type":"string"},"timeout_height":{"title":"block height after which the packet times out","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"type":"string","format":"uint64","title":"block timestamp (in nanoseconds) after which the packet times out"}}},"ibc.core.channel.v1.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"channel_id":{"description":"channel unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"port_id":{"description":"channel port identifier.","type":"string"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v1.QueryChannelClientStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelConsensusStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelResponse":{"description":"QueryChannelResponse is the response type for the Query/Channel RPC method.\nBesides the Channel end, it includes a proof and the height from which the\nproof was retrieved.","type":"object","properties":{"channel":{"title":"channel associated with the request identifiers","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelsResponse":{"description":"QueryChannelsResponse is the response type for the Query/Channels RPC method.","type":"object","properties":{"channels":{"description":"list of stored channels of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryConnectionChannelsResponse":{"type":"object","title":"QueryConnectionChannelsResponse is the Response type for the\nQuery/QueryConnectionChannels RPC method","properties":{"channels":{"description":"list of channels associated with a connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryNextSequenceReceiveResponse":{"type":"object","title":"QuerySequenceResponse is the response type for the\nQuery/QueryNextSequenceReceiveResponse RPC method","properties":{"next_sequence_receive":{"type":"string","format":"uint64","title":"next sequence receive number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the request type for the\nQuery/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementResponse":{"type":"object","title":"QueryPacketAcknowledgementResponse defines the client query response for a\npacket which also includes a proof and the height from which the\nproof was retrieved","properties":{"acknowledgement":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketCommitmentResponse":{"type":"object","title":"QueryPacketCommitmentResponse defines the client query response for a packet\nwhich also includes a proof and the height from which the proof was\nretrieved","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketCommitmentsResponse":{"type":"object","title":"QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method","properties":{"commitments":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketReceiptResponse":{"type":"object","title":"QueryPacketReceiptResponse defines the client query response for a packet\nreceipt which also includes a proof, and the height from which the proof was\nretrieved","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v1.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.channel.v1.State":{"description":"State defines if a channel is in one of the following states:\nCLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A channel has just started the opening handshake.\n - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n - STATE_OPEN: A channel has completed the handshake. Open channels are\nready to send and receive packets.\n - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\npackets.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN","STATE_CLOSED"]},"ibc.core.channel.v2.Acknowledgement":{"description":"Acknowledgement contains a list of all ack results associated with a single packet.\nIn the case of a successful receive, the acknowledgement will contain an app acknowledgement\nfor each application that received a payload in the same order that the payloads were sent\nin the packet.\nIf the receive is not successful, the acknowledgement will contain a single app acknowledgment\nwhich will be a constant error acknowledgment as defined by the IBC v2 protocol.","type":"object","properties":{"app_acknowledgements":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.channel.v2.MsgAcknowledgement":{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","type":"object","properties":{"acknowledgement":{"$ref":"#/definitions/ibc.core.channel.v2.Acknowledgement"},"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgRecvPacket":{"description":"MsgRecvPacket receives an incoming IBC packet.","type":"object","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgSendPacket":{"description":"MsgSendPacket sends an outgoing IBC packet.","type":"object","properties":{"payloads":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"signer":{"type":"string"},"source_client":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgSendPacketResponse":{"description":"MsgSendPacketResponse defines the Msg/SendPacket response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"destination_client":{"description":"identifies the receiving client on the receiving chain.","type":"string"},"payloads":{"description":"a list of payloads, each one for a specific application.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_client":{"description":"identifies the sending client on the sending chain.","type":"string"},"timeout_timestamp":{"description":"timeout timestamp in seconds after which the packet times out.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"client_id":{"description":"client unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.Payload":{"type":"object","title":"Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes)","properties":{"destination_port":{"description":"specifies the destination port of the packet.","type":"string"},"encoding":{"description":"the encoding used for the provided value.","type":"string"},"source_port":{"description":"specifies the source port of the packet.","type":"string"},"value":{"description":"the raw bytes for the payload.","type":"string","format":"byte"},"version":{"description":"version of the specified application.","type":"string"}}},"ibc.core.channel.v2.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementResponse":{"description":"QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method.","type":"object","properties":{"acknowledgement":{"type":"string","format":"byte","title":"acknowledgement associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketCommitmentResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketCommitmentsResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitments":{"description":"collection of packet commitments for the requested channel identifier.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"description":"query block height.","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"description":"pagination response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketReceiptResponse":{"description":"QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method.","type":"object","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence or absence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v2.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.client.v1.ConsensusStateWithHeight":{"description":"ConsensusStateWithHeight defines a consensus state with an additional height\nfield.","type":"object","properties":{"consensus_state":{"title":"consensus state","$ref":"#/definitions/google.protobuf.Any"},"height":{"title":"consensus state height","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.Height":{"description":"Normally the RevisionHeight is incremented at each height while keeping\nRevisionNumber the same. However some consensus algorithms may choose to\nreset the height in certain conditions e.g. hard forks, state-machine\nbreaking changes In these cases, the RevisionNumber is incremented so that\nheight continues to be monitonically increasing even as the RevisionHeight\ngets reset\n\nPlease note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag.\nThis enforces the Go json marshaller to always emit zero values for both revision_number and revision_height.","type":"object","title":"Height is a monotonically increasing data type\nthat can be compared against another Height for the purposes of updating and\nfreezing clients","properties":{"revision_height":{"type":"string","format":"uint64","title":"the height within the given revision"},"revision_number":{"type":"string","format":"uint64","title":"the revision that the client is currently on"}}},"ibc.core.client.v1.IdentifiedClientState":{"description":"IdentifiedClientState defines a client state with an additional client\nidentifier field.","type":"object","properties":{"client_id":{"type":"string","title":"client identifier"},"client_state":{"title":"client state","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgCreateClient":{"type":"object","title":"MsgCreateClient defines a message to create an IBC client","properties":{"client_state":{"title":"light client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"description":"consensus state associated with the client that corresponds to a given\nheight.","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgCreateClientResponse":{"description":"MsgCreateClientResponse defines the Msg/CreateClient response type.","type":"object","properties":{"client_id":{"type":"string"}}},"ibc.core.client.v1.MsgDeleteClientCreator":{"type":"object","title":"MsgDeleteClientCreator defines a message to delete the client creator of a client","properties":{"client_id":{"type":"string","title":"client identifier"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgDeleteClientCreatorResponse":{"description":"MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type.","type":"object"},"ibc.core.client.v1.MsgIBCSoftwareUpgrade":{"type":"object","title":"MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal","properties":{"plan":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"},"signer":{"type":"string","title":"signer address"},"upgraded_client_state":{"description":"An UpgradedClientState must be provided to perform an IBC breaking upgrade.\nThis will make the chain commit to the correct upgraded (self) client state\nbefore the upgrade occurs, so that connecting chains can verify that the\nnew upgraded client is valid by verifying a proof on the previous version\nof the chain. This will allow IBC connections to persist smoothly across\nplanned chain upgrades. Correspondingly, the UpgradedClientState field has been\ndeprecated in the Cosmos SDK to allow for this logic to exist solely in\nthe 02-client module.","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse":{"description":"MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type.","type":"object"},"ibc.core.client.v1.MsgRecoverClient":{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"subject_client_id":{"type":"string","title":"the client identifier for the client to be updated if the proposal passes"},"substitute_client_id":{"type":"string","title":"the substitute client identifier for the client which will replace the subject\nclient"}}},"ibc.core.client.v1.MsgRecoverClientResponse":{"description":"MsgRecoverClientResponse defines the Msg/RecoverClient response type.","type":"object"},"ibc.core.client.v1.MsgSubmitMisbehaviour":{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"misbehaviour":{"title":"misbehaviour used for freezing the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgSubmitMisbehaviourResponse":{"description":"MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response\ntype.","type":"object"},"ibc.core.client.v1.MsgUpdateClient":{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_message":{"title":"client message to update the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateClientResponse":{"description":"MsgUpdateClientResponse defines the Msg/UpdateClient response type.","type":"object"},"ibc.core.client.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","type":"object","properties":{"params":{"description":"params defines the client parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.client.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.client.v1.MsgUpgradeClient":{"type":"object","title":"MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client\nstate","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_state":{"title":"upgraded client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"title":"upgraded consensus state, only contains enough information to serve as a\nbasis of trust in update logic","$ref":"#/definitions/google.protobuf.Any"},"proof_upgrade_client":{"type":"string","format":"byte","title":"proof that old chain committed to new client"},"proof_upgrade_consensus_state":{"type":"string","format":"byte","title":"proof that old chain committed to new consensus state"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpgradeClientResponse":{"description":"MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.","type":"object"},"ibc.core.client.v1.Params":{"description":"Params defines the set of IBC light client parameters.","type":"object","properties":{"allowed_clients":{"description":"allowed_clients defines the list of allowed client state types which can be created\nand interacted with. If a client type is removed from the allowed clients list, usage\nof this client will be disabled until it is added again to the list.","type":"array","items":{"type":"string"}}}},"ibc.core.client.v1.QueryClientCreatorResponse":{"description":"QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC\nmethod.","type":"object","properties":{"creator":{"type":"string","title":"creator of the client"}}},"ibc.core.client.v1.QueryClientParamsResponse":{"description":"QueryClientParamsResponse is the response type for the Query/ClientParams RPC\nmethod.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.client.v1.Params"}}},"ibc.core.client.v1.QueryClientStateResponse":{"description":"QueryClientStateResponse is the response type for the Query/ClientState RPC\nmethod. Besides the client state, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryClientStatesResponse":{"description":"QueryClientStatesResponse is the response type for the Query/ClientStates RPC\nmethod.","type":"object","properties":{"client_states":{"description":"list of stored ClientStates of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryClientStatusResponse":{"description":"QueryClientStatusResponse is the response type for the Query/ClientStatus RPC\nmethod. It returns the current status of the IBC client.","type":"object","properties":{"status":{"type":"string"}}},"ibc.core.client.v1.QueryConsensusStateHeightsResponse":{"type":"object","title":"QueryConsensusStateHeightsResponse is the response type for the\nQuery/ConsensusStateHeights RPC method","properties":{"consensus_state_heights":{"type":"array","title":"consensus state heights","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.Height"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryConsensusStateResponse":{"type":"object","title":"QueryConsensusStateResponse is the response type for the Query/ConsensusState\nRPC method","properties":{"consensus_state":{"title":"consensus state associated with the client identifier at the given height","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryConsensusStatesResponse":{"type":"object","title":"QueryConsensusStatesResponse is the response type for the\nQuery/ConsensusStates RPC method","properties":{"consensus_states":{"type":"array","title":"consensus states associated with the identifier","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.ConsensusStateWithHeight"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryUpgradedClientStateResponse":{"description":"QueryUpgradedClientStateResponse is the response type for the\nQuery/UpgradedClientState RPC method.","type":"object","properties":{"upgraded_client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the\nQuery/UpgradedConsensusState RPC method.","type":"object","properties":{"upgraded_consensus_state":{"title":"Consensus state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryVerifyMembershipRequest":{"type":"object","title":"QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method","properties":{"block_delay":{"type":"string","format":"uint64","title":"optional block delay"},"client_id":{"description":"client unique identifier.","type":"string"},"merkle_path":{"description":"the commitment key path.","$ref":"#/definitions/ibc.core.commitment.v2.MerklePath"},"proof":{"description":"the proof to be verified by the client.","type":"string","format":"byte"},"proof_height":{"description":"the height of the commitment root at which the proof is verified.","$ref":"#/definitions/ibc.core.client.v1.Height"},"time_delay":{"type":"string","format":"uint64","title":"optional time delay"},"value":{"description":"the value which is proven.","type":"string","format":"byte"}}},"ibc.core.client.v1.QueryVerifyMembershipResponse":{"type":"object","title":"QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method","properties":{"success":{"description":"boolean indicating success or failure of proof verification.","type":"boolean"}}},"ibc.core.client.v2.Config":{"type":"object","title":"Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages\nfor a given client.\nIf it is set, then only relayers in the allow list can send v2 messages\nIf it is not set, then the client allows permissionless relaying of v2 messages","properties":{"allowed_relayers":{"type":"array","title":"allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client","items":{"type":"string"}}}},"ibc.core.client.v2.CounterpartyInfo":{"type":"object","title":"CounterpartyInfo defines the key that the counterparty will use to message our client","properties":{"client_id":{"type":"string","title":"client identifier is the identifier used to send packet messages to our client"},"merkle_prefix":{"type":"array","title":"merkle prefix key is the prefix that ics provable keys are stored under","items":{"type":"string","format":"byte"}}}},"ibc.core.client.v2.MsgRegisterCounterparty":{"type":"object","title":"MsgRegisterCounterparty defines a message to register a counterparty on a client","properties":{"client_id":{"type":"string","title":"client identifier"},"counterparty_client_id":{"type":"string","title":"counterparty client identifier"},"counterparty_merkle_prefix":{"type":"array","title":"counterparty merkle prefix","items":{"type":"string","format":"byte"}},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgRegisterCounterpartyResponse":{"description":"MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type.","type":"object"},"ibc.core.client.v2.MsgUpdateClientConfig":{"type":"object","title":"MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client","properties":{"client_id":{"type":"string","title":"client identifier"},"config":{"description":"NOTE: All fields in the config must be supplied.","title":"allowed relayers","$ref":"#/definitions/ibc.core.client.v2.Config"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgUpdateClientConfigResponse":{"description":"MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type.","type":"object"},"ibc.core.client.v2.QueryConfigResponse":{"type":"object","title":"QueryConfigResponse is the response type for the Query/Config RPC method","properties":{"config":{"$ref":"#/definitions/ibc.core.client.v2.Config"}}},"ibc.core.client.v2.QueryCounterpartyInfoResponse":{"description":"QueryCounterpartyInfoResponse is the response type for the\nQuery/CounterpartyInfo RPC method.","type":"object","properties":{"counterparty_info":{"$ref":"#/definitions/ibc.core.client.v2.CounterpartyInfo"}}},"ibc.core.commitment.v1.MerklePrefix":{"type":"object","title":"MerklePrefix is merkle path prefixed to the key.\nThe constructed key from the Path and the key will be append(Path.KeyPath,\nappend(Path.KeyPrefix, key...))","properties":{"key_prefix":{"type":"string","format":"byte"}}},"ibc.core.commitment.v2.MerklePath":{"description":"MerklePath is the path used to verify commitment proofs, which can be an\narbitrary structured object (defined by a commitment type).\nICS-23 verification supports membership proofs for nested merkle trees.\nThe ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix.\nThe IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash\nstored in the consensus state of the client.\nEach element of the path represents the key of a merkle tree from the root to the leaf.\nThe elements of the path before the final element must be the path to the tree that contains\nthe ICS24 provable store. Thus, it should remain constant for all ICS24 proofs.\nThe final element of the path is the key of the leaf in the ICS24 provable store,\nThus IBC core will append the ICS24 path to the final element of the MerklePath\nstored in the counterparty to create the full path to the leaf for proof verification.\nExamples:\nCosmos SDK:\nThe Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes\nare hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"ibc\", \"\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"ibc\", \"{packetCommitmentPath}\"] which will then be used for final verification.\nEthereum:\nThe Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed\nby the smart contract state. Each smart contract has a specific prefix reserved within the global trie.\nThus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie.\nSince there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"IBCCoreContractAddressStoragePrefix\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"IBCCoreContractAddressStoragePrefix{packetCommitmentPath}\"] which will then be used for final\nverification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the\nconsensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24\nprovable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified\nby the client against the root hash in the client's consensus state.","type":"object","properties":{"key_path":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.connection.v1.ConnectionEnd":{"description":"ConnectionEnd defines a stateful object on a chain connected to another\nseparate one.\nNOTE: there must only be 2 defined ConnectionEnds to establish\na connection between two chains.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period that must pass before a consensus state can be used for\npacket-verification NOTE: delay period logic is only implemented by some\nclients.","type":"string","format":"uint64"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"description":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.Counterparty":{"description":"Counterparty defines the counterparty chain associated with a connection end.","type":"object","properties":{"client_id":{"description":"identifies the client on the counterparty chain associated with a given\nconnection.","type":"string"},"connection_id":{"description":"identifies the connection end on the counterparty chain associated with a\ngiven connection.","type":"string"},"prefix":{"description":"commitment merkle prefix of the counterparty chain.","$ref":"#/definitions/ibc.core.commitment.v1.MerklePrefix"}}},"ibc.core.connection.v1.IdentifiedConnection":{"description":"IdentifiedConnection defines a connection with additional connection\nidentifier field.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period associated with this connection.","type":"string","format":"uint64"},"id":{"description":"connection identifier.","type":"string"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"type":"array","title":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.MsgConnectionOpenAck":{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","type":"object","properties":{"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"connection_id":{"type":"string"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty_connection_id":{"type":"string"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain B: `UNINITIALIZED -\u003e\nTRYOPEN`"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenAckResponse":{"description":"MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenConfirm":{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","type":"object","properties":{"connection_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte","title":"proof for the change of the connection state on Chain A: `INIT -\u003e OPEN`"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenConfirmResponse":{"description":"MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm\nresponse type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenInit":{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","type":"object","properties":{"client_id":{"type":"string"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"type":"string","format":"uint64"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenInitResponse":{"description":"MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response\ntype.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenTry":{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","type":"object","properties":{"client_id":{"type":"string"},"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"counterparty_versions":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}},"delay_period":{"type":"string","format":"uint64"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"previous_connection_id":{"description":"Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC.","type":"string"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain A: `UNINITIALIZED -\u003e\nINIT`"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenTryResponse":{"description":"MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type.","type":"object"},"ibc.core.connection.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","type":"object","properties":{"params":{"description":"params defines the connection parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.connection.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.connection.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.connection.v1.Params":{"description":"Params defines the set of Connection parameters.","type":"object","properties":{"max_expected_time_per_block":{"description":"maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the\nlargest amount of time that the chain might reasonably take to produce the next block under normal operating\nconditions. A safe choice is 3-5x the expected time per block.","type":"string","format":"uint64"}}},"ibc.core.connection.v1.QueryClientConnectionsResponse":{"type":"object","title":"QueryClientConnectionsResponse is the response type for the\nQuery/ClientConnections RPC method","properties":{"connection_paths":{"description":"slice of all the connection paths associated with a client.","type":"array","items":{"type":"string"}},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was generated","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionClientStateResponse":{"type":"object","title":"QueryConnectionClientStateResponse is the response type for the\nQuery/ConnectionClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionConsensusStateResponse":{"type":"object","title":"QueryConnectionConsensusStateResponse is the response type for the\nQuery/ConnectionConsensusState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionParamsResponse":{"description":"QueryConnectionParamsResponse is the response type for the Query/ConnectionParams RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.connection.v1.Params"}}},"ibc.core.connection.v1.QueryConnectionResponse":{"description":"QueryConnectionResponse is the response type for the Query/Connection RPC\nmethod. Besides the connection end, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"connection":{"title":"connection associated with the request identifier","$ref":"#/definitions/ibc.core.connection.v1.ConnectionEnd"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionsResponse":{"description":"QueryConnectionsResponse is the response type for the Query/Connections RPC\nmethod.","type":"object","properties":{"connections":{"description":"list of stored connections of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.IdentifiedConnection"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.connection.v1.State":{"description":"State defines if a connection is in one of the following states:\nINIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A connection end has just started the opening handshake.\n - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\nchain.\n - STATE_OPEN: A connection end has completed the handshake.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN"]},"ibc.core.connection.v1.Version":{"description":"Version defines the versioning scheme used to negotiate the IBC version in\nthe connection handshake.","type":"object","properties":{"features":{"type":"array","title":"list of features compatible with the specified identifier","items":{"type":"string"}},"identifier":{"type":"string","title":"unique version identifier"}}},"ibc.lightclients.wasm.v1.MsgMigrateContract":{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the new wasm byte code for the contract"},"client_id":{"type":"string","title":"the client id of the contract"},"msg":{"type":"string","format":"byte","title":"the json encoded message to be passed to the contract on migration"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgMigrateContractResponse":{"type":"object","title":"MsgMigrateContractResponse defines the response type for the MigrateContract rpc"},"ibc.lightclients.wasm.v1.MsgRemoveChecksum":{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash to be removed from the store"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse":{"type":"object","title":"MsgStoreChecksumResponse defines the response type for the StoreCode rpc"},"ibc.lightclients.wasm.v1.MsgStoreCode":{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"wasm_byte_code":{"type":"string","format":"byte","title":"wasm byte code of light client contract. It can be raw or gzip compressed"}}},"ibc.lightclients.wasm.v1.MsgStoreCodeResponse":{"type":"object","title":"MsgStoreCodeResponse defines the response type for the StoreCode rpc","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the stored code"}}},"ibc.lightclients.wasm.v1.QueryChecksumsResponse":{"description":"QueryChecksumsResponse is the response type for the Query/Checksums RPC method.","type":"object","properties":{"checksums":{"description":"checksums is a list of the hex encoded checksums of all wasm codes stored.","type":"array","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.lightclients.wasm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC method.","type":"object","properties":{"data":{"type":"string","format":"byte"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.EpochAnchor":{"description":"EpochAnchor is a minimal per-epoch on-chain anchor that freezes the deterministic seed\nand the eligible supernode sets used for deterministic selection off-chain.","type":"object","properties":{"active_set_commitment":{"type":"string","format":"byte"},"active_supernode_accounts":{"description":"active_supernode_accounts is the sorted list of ACTIVE supernodes at epoch start.","type":"array","items":{"type":"string"}},"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"params_commitment":{"description":"params_commitment is a hash commitment to Params (with defaults) at epoch start.","type":"string","format":"byte"},"seed":{"description":"seed is a fixed 32-byte value derived at epoch start (domain-separated).","type":"string","format":"byte"},"target_supernode_accounts":{"description":"target_supernode_accounts is the sorted list of eligible targets at epoch start:\nACTIVE + POSTPONED supernodes.","type":"array","items":{"type":"string"}},"targets_set_commitment":{"type":"string","format":"byte"}}},"lumera.audit.v1.EpochReport":{"description":"EpochReport is a single per-epoch report submitted by a Supernode.","type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"report_height":{"type":"string","format":"int64"},"storage_challenge_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeObservation"}},"supernode_account":{"type":"string"}}},"lumera.audit.v1.Evidence":{"description":"Evidence is a stable outer record that stores evidence about an audited subject.\nType-specific fields are encoded into the `metadata` bytes field.","type":"object","properties":{"action_id":{"description":"action_id optionally links this evidence to a specific action.","type":"string"},"evidence_id":{"description":"evidence_id is a chain-assigned unique identifier.","type":"string","format":"uint64"},"evidence_type":{"description":"evidence_type is a stable discriminator used to interpret metadata.","$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is protobuf-binary bytes of a type-specific Evidence metadata message.","type":"string","format":"byte"},"reported_height":{"description":"reported_height is the block height when the evidence was submitted.","type":"string","format":"uint64"},"reporter_address":{"description":"reporter_address is the submitter of the evidence.","type":"string"},"subject_address":{"description":"subject_address is the audited subject (e.g. supernode-related actor).","type":"string"}}},"lumera.audit.v1.EvidenceType":{"description":" - EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE: action finalization rejected due to an invalid signature / signature-derived data.\n - EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: action finalization rejected because the attempted finalizer is not in the top-10 supernodes.\n - EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE: storage challenge failure evidence submitted by the deterministic challenger.","type":"string","default":"EVIDENCE_TYPE_UNSPECIFIED","enum":["EVIDENCE_TYPE_UNSPECIFIED","EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE","EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10","EVIDENCE_TYPE_ACTION_EXPIRED","EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE"]},"lumera.audit.v1.HostReport":{"description":"HostReport is the Supernode's self-reported host metrics and counters for an epoch.","type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.HostReportEntry":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"report_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.MsgSubmitEpochReport":{"type":"object","properties":{"creator":{"description":"creator is the transaction signer.","type":"string"},"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"storage_challenge_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeObservation"}}}},"lumera.audit.v1.MsgSubmitEpochReportResponse":{"type":"object"},"lumera.audit.v1.MsgSubmitEvidence":{"type":"object","properties":{"action_id":{"type":"string"},"creator":{"type":"string"},"evidence_type":{"$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is JSON for the type-specific Evidence metadata message.\nThe chain stores protobuf-binary bytes derived from this JSON.","type":"string"},"subject_address":{"type":"string"}}},"lumera.audit.v1.MsgSubmitEvidenceResponse":{"type":"object","properties":{"evidence_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"action_finalization_not_in_top10_consecutive_epochs":{"description":"action_finalization_not_in_top10_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_not_in_top10_evidences_per_epoch":{"description":"action_finalization_not_in_top10_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_recovery_epochs":{"description":"action_finalization_recovery_epochs is the number of epochs to wait before considering recovery.","type":"integer","format":"int64"},"action_finalization_recovery_max_total_bad_evidences":{"description":"action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad\naction-finalization evidences in the recovery epoch-span for auto-recovery to occur.\nRecovery happens ONLY IF total_bad \u003c this value.","type":"integer","format":"int64"},"action_finalization_signature_failure_consecutive_epochs":{"description":"action_finalization_signature_failure_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"action_finalization_signature_failure_evidences_per_epoch":{"description":"action_finalization_signature_failure_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"consecutive_epochs_to_postpone":{"description":"Number of consecutive epochs a required port must be reported CLOSED by peers\nat or above peer_port_postpone_threshold_percent before postponing the supernode.","type":"integer","format":"int64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_zero_height":{"description":"epoch_zero_height defines the reference chain height at which epoch_id = 0 starts.\nThis makes epoch boundaries deterministic from genesis without needing to query state.","type":"string","format":"uint64"},"keep_last_epoch_entries":{"description":"How many completed epochs to keep in state for epoch-scoped data like EpochReport\nand related indices. Pruning runs at epoch end.","type":"string","format":"uint64"},"max_probe_targets_per_epoch":{"type":"integer","format":"int64"},"min_cpu_free_percent":{"description":"Minimum required host free capacity (self reported).\nfree% = 100 - usage%\nA usage% of 0 is treated as \"unknown\" (no action).","type":"integer","format":"int64"},"min_disk_free_percent":{"type":"integer","format":"int64"},"min_mem_free_percent":{"type":"integer","format":"int64"},"min_probe_targets_per_epoch":{"type":"integer","format":"int64"},"peer_port_postpone_threshold_percent":{"description":"Minimum percent (1-100) of peer reports that must report a required port as CLOSED\nfor the port to be treated as CLOSED for postponement purposes.\n\n100 means unanimous.\nExample: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%).","type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"sc_challengers_per_epoch":{"type":"integer","format":"int64"},"sc_enabled":{"description":"Storage Challenge (SC) params.","type":"boolean"}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.QueryAssignedTargetsResponse":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"target_supernode_accounts":{"type":"array","items":{"type":"string"}}}},"lumera.audit.v1.QueryCurrentEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryCurrentEpochResponse":{"type":"object","properties":{"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryEpochReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.EpochReport"}}},"lumera.audit.v1.QueryEpochReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.EpochReport"}}}},"lumera.audit.v1.QueryEvidenceByActionResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryEvidenceByIdResponse":{"type":"object","properties":{"evidence":{"$ref":"#/definitions/lumera.audit.v1.Evidence"}}},"lumera.audit.v1.QueryEvidenceBySubjectResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryHostReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.HostReportEntry"}}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QueryStorageChallengeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeReport"}}}},"lumera.audit.v1.StorageChallengeObservation":{"description":"StorageChallengeObservation is a prober's reachability observation about an assigned target.","type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the epoch.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.StorageChallengeReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"reason":{"description":"reason is an optional string describing why the state transition occurred.\nIt is currently set only for transitions into POSTPONED.","type":"string"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"tendermint.abci.CheckTxType":{"type":"string","default":"NEW","enum":["NEW","RECHECK"]},"tendermint.abci.CommitInfo":{"type":"object","properties":{"round":{"type":"integer","format":"int32"},"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.VoteInfo"}}}},"tendermint.abci.Event":{"description":"Event allows application developers to attach additional information to\nResponseFinalizeBlock and ResponseCheckTx.\nLater, transactions may be queried using these events.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.EventAttribute"}},"type":{"type":"string"}}},"tendermint.abci.EventAttribute":{"description":"EventAttribute is a single key-value pair, associated with an event.","type":"object","properties":{"index":{"type":"boolean","title":"nondeterministic"},"key":{"type":"string"},"value":{"type":"string"}}},"tendermint.abci.ExecTxResult":{"description":"ExecTxResult contains results of executing one individual transaction.\n\n* Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","title":"nondeterministic","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ExtendedCommitInfo":{"description":"ExtendedCommitInfo is similar to CommitInfo except that it is only used in\nthe PrepareProposal request such that CometBFT can provide vote extensions\nto the application.","type":"object","properties":{"round":{"description":"The round at which the block proposer decided in the previous height.","type":"integer","format":"int32"},"votes":{"description":"List of validators' addresses in the last validator set with their voting\ninformation, including vote extensions.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExtendedVoteInfo"}}}},"tendermint.abci.ExtendedVoteInfo":{"type":"object","properties":{"block_id_flag":{"title":"block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all","$ref":"#/definitions/tendermint.types.BlockIDFlag"},"extension_signature":{"type":"string","format":"byte","title":"Vote extension signature created by CometBFT"},"validator":{"description":"The validator that sent the vote.","$ref":"#/definitions/tendermint.abci.Validator"},"vote_extension":{"description":"Non-deterministic extension provided by the sending validator's application.","type":"string","format":"byte"}}},"tendermint.abci.Misbehavior":{"type":"object","properties":{"height":{"type":"string","format":"int64","title":"The height when the offense occurred"},"time":{"type":"string","format":"date-time","title":"The corresponding time where the offense occurred"},"total_voting_power":{"type":"string","format":"int64","title":"Total voting power of the validator set in case the ABCI application does\nnot store historical validators.\nhttps://github.com/tendermint/tendermint/issues/4581"},"type":{"$ref":"#/definitions/tendermint.abci.MisbehaviorType"},"validator":{"title":"The offending validator","$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.abci.MisbehaviorType":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","DUPLICATE_VOTE","LIGHT_CLIENT_ATTACK"]},"tendermint.abci.RequestApplySnapshotChunk":{"type":"object","title":"Applies a snapshot chunk","properties":{"chunk":{"type":"string","format":"byte"},"index":{"type":"integer","format":"int64"},"sender":{"type":"string"}}},"tendermint.abci.RequestCheckTx":{"type":"object","properties":{"tx":{"type":"string","format":"byte"},"type":{"$ref":"#/definitions/tendermint.abci.CheckTxType"}}},"tendermint.abci.RequestCommit":{"type":"object"},"tendermint.abci.RequestEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.RequestExtendVote":{"type":"object","title":"Extends a vote with application-injected data","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this vote may be referring to"},"height":{"type":"string","format":"int64","title":"the height of the extended vote"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time","title":"info of the block that this vote may be referring to"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFinalizeBlock":{"type":"object","properties":{"decided_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"hash":{"description":"hash is the merkle root hash of the fields of the decided block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"proposer_address is the address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFlush":{"type":"object"},"tendermint.abci.RequestInfo":{"type":"object","properties":{"abci_version":{"type":"string"},"block_version":{"type":"string","format":"uint64"},"p2p_version":{"type":"string","format":"uint64"},"version":{"type":"string"}}},"tendermint.abci.RequestInitChain":{"type":"object","properties":{"app_state_bytes":{"type":"string","format":"byte"},"chain_id":{"type":"string"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"initial_height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.RequestListSnapshots":{"type":"object","title":"lists available snapshots"},"tendermint.abci.RequestLoadSnapshotChunk":{"type":"object","title":"loads a snapshot chunk","properties":{"chunk":{"type":"integer","format":"int64"},"format":{"type":"integer","format":"int64"},"height":{"type":"string","format":"uint64"}}},"tendermint.abci.RequestOfferSnapshot":{"type":"object","title":"offers a snapshot to the application","properties":{"app_hash":{"type":"string","format":"byte","title":"light client-verified app hash for snapshot height"},"snapshot":{"title":"snapshot offered by peers","$ref":"#/definitions/tendermint.abci.Snapshot"}}},"tendermint.abci.RequestPrepareProposal":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"local_last_commit":{"$ref":"#/definitions/tendermint.abci.ExtendedCommitInfo"},"max_tx_bytes":{"description":"the modified transactions cannot exceed this size.","type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"address of the public key of the validator proposing the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"description":"txs is an array of transactions that will be included in a block,\nsent to the app for possible modifications.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestProcessProposal":{"type":"object","properties":{"hash":{"description":"hash is the merkle root hash of the fields of the proposed block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestQuery":{"type":"object","properties":{"data":{"type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"path":{"type":"string"},"prove":{"type":"boolean"}}},"tendermint.abci.RequestVerifyVoteExtension":{"type":"object","title":"Verify the vote extension","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this received vote corresponds to"},"height":{"type":"string","format":"int64"},"validator_address":{"type":"string","format":"byte","title":"the validator that signed the vote extension"},"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseApplySnapshotChunk":{"type":"object","properties":{"refetch_chunks":{"type":"array","title":"Chunks to refetch and reapply","items":{"type":"integer","format":"int64"}},"reject_senders":{"type":"array","title":"Chunk senders to reject and ban","items":{"type":"string"}},"result":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk.Result"}}},"tendermint.abci.ResponseApplySnapshotChunk.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Chunk successfully accepted\n - ABORT: Abort all snapshot restoration\n - RETRY: Retry chunk (combine with refetch and reject)\n - RETRY_SNAPSHOT: Retry snapshot (combine with refetch and reject)\n - REJECT_SNAPSHOT: Reject this snapshot, try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","RETRY","RETRY_SNAPSHOT","REJECT_SNAPSHOT"]},"tendermint.abci.ResponseCheckTx":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ResponseCommit":{"type":"object","properties":{"retain_height":{"type":"string","format":"int64"}}},"tendermint.abci.ResponseEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.ResponseExtendVote":{"type":"object","properties":{"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseFinalizeBlock":{"type":"object","properties":{"app_hash":{"description":"app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was\ndeterministic. It is up to the application to decide which algorithm to use.","type":"string","format":"byte"},"consensus_param_updates":{"description":"updates to the consensus params, if any.","$ref":"#/definitions/tendermint.types.ConsensusParams"},"events":{"type":"array","title":"set of block events emmitted as part of executing the block","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"tx_results":{"type":"array","title":"the result of executing each transaction including the events\nthe particular transction emitted. This should match the order\nof the transactions delivered in the block itself","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExecTxResult"}},"validator_updates":{"description":"a list of updates to the validator set. These will reflect the validator set at current height + 2.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseFlush":{"type":"object"},"tendermint.abci.ResponseInfo":{"type":"object","properties":{"app_version":{"type":"string","format":"uint64"},"data":{"type":"string"},"last_block_app_hash":{"type":"string","format":"byte"},"last_block_height":{"type":"string","format":"int64"},"version":{"type":"string"}}},"tendermint.abci.ResponseInitChain":{"type":"object","properties":{"app_hash":{"type":"string","format":"byte"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseListSnapshots":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Snapshot"}}}},"tendermint.abci.ResponseLoadSnapshotChunk":{"type":"object","properties":{"chunk":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseOfferSnapshot":{"type":"object","properties":{"result":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot.Result"}}},"tendermint.abci.ResponseOfferSnapshot.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Snapshot accepted, apply chunks\n - ABORT: Abort all snapshot restoration\n - REJECT: Reject this specific snapshot, try others\n - REJECT_FORMAT: Reject all snapshots of this format, try others\n - REJECT_SENDER: Reject all snapshots from the sender(s), try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","REJECT","REJECT_FORMAT","REJECT_SENDER"]},"tendermint.abci.ResponsePrepareProposal":{"type":"object","properties":{"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.ResponseProcessProposal":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal.ProposalStatus"}}},"tendermint.abci.ResponseProcessProposal.ProposalStatus":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.ResponseQuery":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"description":"bytes data = 2; // use \"value\" instead.\n\nnondeterministic","type":"string"},"proof_ops":{"$ref":"#/definitions/tendermint.crypto.ProofOps"},"value":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseVerifyVoteExtension":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus"}}},"tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus":{"description":" - REJECT: Rejecting the vote extension will reject the entire precommit by the sender.\nIncorrectly implementing this thus has liveness implications as it may affect\nCometBFT's ability to receive 2/3+ valid votes to finalize the block.\nHonest nodes should never be rejected.","type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.Snapshot":{"type":"object","properties":{"chunks":{"type":"integer","format":"int64","title":"Number of chunks in the snapshot"},"format":{"type":"integer","format":"int64","title":"The application-specific snapshot format"},"hash":{"type":"string","format":"byte","title":"Arbitrary snapshot hash, equal only if identical"},"height":{"type":"string","format":"uint64","title":"The height at which the snapshot was taken"},"metadata":{"type":"string","format":"byte","title":"Arbitrary application metadata"}}},"tendermint.abci.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte","title":"The first 20 bytes of SHA256(public key)"},"power":{"description":"The voting power","type":"string","format":"int64","title":"PubKey pub_key = 2 [(gogoproto.nullable)=false];"}}},"tendermint.abci.ValidatorUpdate":{"type":"object","properties":{"power":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"}}},"tendermint.abci.VoteInfo":{"type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"validator":{"$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.crypto.ProofOp":{"type":"object","title":"ProofOp defines an operation used for calculating Merkle root\nThe data could be arbitrary format, providing nessecary data\nfor example neighbouring node hash","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"tendermint.crypto.ProofOps":{"type":"object","title":"ProofOps is Merkle proof defined by the list of ProofOps","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.crypto.ProofOp"}}}},"tendermint.crypto.PublicKey":{"type":"object","title":"PublicKey defines the keys available for use with Validators","properties":{"ed25519":{"type":"string","format":"byte"},"secp256k1":{"type":"string","format":"byte"}}},"tendermint.p2p.DefaultNodeInfo":{"type":"object","properties":{"channels":{"type":"string","format":"byte"},"default_node_id":{"type":"string"},"listen_addr":{"type":"string"},"moniker":{"type":"string"},"network":{"type":"string"},"other":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfoOther"},"protocol_version":{"$ref":"#/definitions/tendermint.p2p.ProtocolVersion"},"version":{"type":"string"}}},"tendermint.p2p.DefaultNodeInfoOther":{"type":"object","properties":{"rpc_address":{"type":"string"},"tx_index":{"type":"string"}}},"tendermint.p2p.ProtocolVersion":{"type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"},"p2p":{"type":"string","format":"uint64"}}},"tendermint.types.ABCIParams":{"description":"ABCIParams configure functionality specific to the Application Blockchain Interface.","type":"object","properties":{"vote_extensions_enable_height":{"description":"vote_extensions_enable_height configures the first height during which\nvote extensions will be enabled. During this specified height, and for all\nsubsequent heights, precommit messages that do not contain valid extension data\nwill be considered invalid. Prior to this height, vote extensions will not\nbe used or accepted by validators on the network.\n\nOnce enabled, vote extensions will be created by the application in ExtendVote,\npassed to the application for validation in VerifyVoteExtension and given\nto the application to use when proposing a block during PrepareProposal.","type":"string","format":"int64"}}},"tendermint.types.Block":{"type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/tendermint.types.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"tendermint.types.BlockID":{"type":"object","title":"BlockID","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"$ref":"#/definitions/tendermint.types.PartSetHeader"}}},"tendermint.types.BlockIDFlag":{"description":"- BLOCK_ID_FLAG_UNKNOWN: indicates an error condition\n - BLOCK_ID_FLAG_ABSENT: the vote was not received\n - BLOCK_ID_FLAG_COMMIT: voted for the block that received the majority\n - BLOCK_ID_FLAG_NIL: voted for nil","type":"string","title":"BlockIdFlag indicates which BlockID the signature is for","default":"BLOCK_ID_FLAG_UNKNOWN","enum":["BLOCK_ID_FLAG_UNKNOWN","BLOCK_ID_FLAG_ABSENT","BLOCK_ID_FLAG_COMMIT","BLOCK_ID_FLAG_NIL"]},"tendermint.types.BlockParams":{"description":"BlockParams contains limits on the block size.","type":"object","properties":{"max_bytes":{"type":"string","format":"int64","title":"Max block size, in bytes.\nNote: must be greater than 0"},"max_gas":{"type":"string","format":"int64","title":"Max gas per block.\nNote: must be greater or equal to -1"}}},"tendermint.types.Commit":{"description":"Commit contains the evidence that a block was committed by a set of validators.","type":"object","properties":{"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signatures":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.CommitSig"}}}},"tendermint.types.CommitSig":{"description":"CommitSig is a part of the Vote included in a Commit.","type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"signature":{"type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"validator_address":{"type":"string","format":"byte"}}},"tendermint.types.ConsensusParams":{"description":"ConsensusParams contains consensus critical parameters that determine the\nvalidity of blocks.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"block":{"$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"},"version":{"$ref":"#/definitions/tendermint.types.VersionParams"}}},"tendermint.types.Data":{"type":"object","title":"Data contains the set of transactions included in the block","properties":{"txs":{"description":"Txs that will be applied by state @ block.Height+1.\nNOTE: not all txs here are valid. We're just agreeing on the order first.\nThis means that block.AppHash does not include these txs.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.types.DuplicateVoteEvidence":{"description":"DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.","type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"},"validator_power":{"type":"string","format":"int64"},"vote_a":{"$ref":"#/definitions/tendermint.types.Vote"},"vote_b":{"$ref":"#/definitions/tendermint.types.Vote"}}},"tendermint.types.Evidence":{"type":"object","properties":{"duplicate_vote_evidence":{"$ref":"#/definitions/tendermint.types.DuplicateVoteEvidence"},"light_client_attack_evidence":{"$ref":"#/definitions/tendermint.types.LightClientAttackEvidence"}}},"tendermint.types.EvidenceList":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Evidence"}}}},"tendermint.types.EvidenceParams":{"description":"EvidenceParams determine how we handle evidence of malfeasance.","type":"object","properties":{"max_age_duration":{"description":"Max age of evidence, in time.\n\nIt should correspond with an app's \"unbonding period\" or other similar\nmechanism for handling [Nothing-At-Stake\nattacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).","type":"string"},"max_age_num_blocks":{"description":"Max age of evidence, in blocks.\n\nThe basic formula for calculating this is: MaxAgeDuration / {average block\ntime}.","type":"string","format":"int64"},"max_bytes":{"type":"string","format":"int64","title":"This sets the maximum size of total evidence in bytes that can be committed in a single block.\nand should fall comfortably under the max block bytes.\nDefault is 1048576 or 1MB"}}},"tendermint.types.Header":{"description":"Header defines the structure of a block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"type":"string","format":"byte","title":"original proposer of the block"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"tendermint.types.LightBlock":{"type":"object","properties":{"signed_header":{"$ref":"#/definitions/tendermint.types.SignedHeader"},"validator_set":{"$ref":"#/definitions/tendermint.types.ValidatorSet"}}},"tendermint.types.LightClientAttackEvidence":{"description":"LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.","type":"object","properties":{"byzantine_validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}},"common_height":{"type":"string","format":"int64"},"conflicting_block":{"$ref":"#/definitions/tendermint.types.LightBlock"},"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"}}},"tendermint.types.PartSetHeader":{"type":"object","title":"PartsetHeader","properties":{"hash":{"type":"string","format":"byte"},"total":{"type":"integer","format":"int64"}}},"tendermint.types.SignedHeader":{"type":"object","properties":{"commit":{"$ref":"#/definitions/tendermint.types.Commit"},"header":{"$ref":"#/definitions/tendermint.types.Header"}}},"tendermint.types.SignedMsgType":{"description":"SignedMsgType is a type of signed message in the consensus.\n\n - SIGNED_MSG_TYPE_PREVOTE: Votes\n - SIGNED_MSG_TYPE_PROPOSAL: Proposals","type":"string","default":"SIGNED_MSG_TYPE_UNKNOWN","enum":["SIGNED_MSG_TYPE_UNKNOWN","SIGNED_MSG_TYPE_PREVOTE","SIGNED_MSG_TYPE_PRECOMMIT","SIGNED_MSG_TYPE_PROPOSAL"]},"tendermint.types.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"},"voting_power":{"type":"string","format":"int64"}}},"tendermint.types.ValidatorParams":{"description":"ValidatorParams restrict the public key types validators can use.\nNOTE: uses ABCI pubkey naming, not Amino names.","type":"object","properties":{"pub_key_types":{"type":"array","items":{"type":"string"}}}},"tendermint.types.ValidatorSet":{"type":"object","properties":{"proposer":{"$ref":"#/definitions/tendermint.types.Validator"},"total_voting_power":{"type":"string","format":"int64"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}}}},"tendermint.types.VersionParams":{"description":"VersionParams contains the ABCI application version.","type":"object","properties":{"app":{"type":"string","format":"uint64"}}},"tendermint.types.Vote":{"description":"Vote represents a prevote or precommit vote from validators for\nconsensus.","type":"object","properties":{"block_id":{"description":"zero if vote is nil.","$ref":"#/definitions/tendermint.types.BlockID"},"extension":{"description":"Vote extension provided by the application. Only valid for precommit\nmessages.","type":"string","format":"byte"},"extension_signature":{"description":"Vote extension signature by the validator if they participated in\nconsensus for the associated block.\nOnly valid for precommit messages.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signature":{"description":"Vote signature by the validator if they participated in consensus for the\nassociated block.","type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"type":{"$ref":"#/definitions/tendermint.types.SignedMsgType"},"validator_address":{"type":"string","format":"byte"},"validator_index":{"type":"integer","format":"int32"}}},"tendermint.version.Consensus":{"description":"Consensus captures the consensus rules for processing a block in the blockchain,\nincluding all blockchain data structures and the rules of the application's\nstate transition machine.","type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"}}}},"tags":[{"name":"Query"},{"name":"Msg"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file diff --git a/proto/lumera/audit/v1/audit.proto b/proto/lumera/audit/v1/audit.proto index 392549e..e1cdd98 100644 --- a/proto/lumera/audit/v1/audit.proto +++ b/proto/lumera/audit/v1/audit.proto @@ -13,7 +13,8 @@ enum PortState { PORT_STATE_CLOSED = 2; } -message AuditSelfReport { +// HostReport is the Supernode's self-reported host metrics and counters for an epoch. +message HostReport { double cpu_usage_percent = 1; double mem_usage_percent = 2; double disk_usage_percent = 3; @@ -23,18 +24,20 @@ message AuditSelfReport { uint32 failed_actions_count = 5; } -message AuditPeerObservation { +// StorageChallengeObservation is a prober's reachability observation about an assigned target. +message StorageChallengeObservation { string target_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; // port_states[i] refers to required_open_ports[i] for the epoch. repeated PortState port_states = 2; } -message AuditReport { +// EpochReport is a single per-epoch report submitted by a Supernode. +message EpochReport { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; uint64 epoch_id = 2; int64 report_height = 3; - AuditSelfReport self_report = 4 [(gogoproto.nullable) = false]; - repeated AuditPeerObservation peer_observations = 5; + HostReport host_report = 4 [(gogoproto.nullable) = false]; + repeated StorageChallengeObservation storage_challenge_observations = 5; } diff --git a/proto/lumera/audit/v1/evidence_metadata.proto b/proto/lumera/audit/v1/evidence_metadata.proto index 0d26131..15f7205 100644 --- a/proto/lumera/audit/v1/evidence_metadata.proto +++ b/proto/lumera/audit/v1/evidence_metadata.proto @@ -29,7 +29,8 @@ message ActionFinalizationNotInTop10EvidenceMetadata { message StorageChallengeFailureEvidenceMetadata { uint64 epoch_id = 1; - // challenger_supernode_account must be the tx signer for evidence submission. + // challenger_supernode_account must match the tx signer (MsgSubmitEvidence.creator). + // The keeper validates challenger authorization deterministically from the epoch anchor. string challenger_supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; // challenged_supernode_account should match Evidence.subject_address. diff --git a/proto/lumera/audit/v1/params.proto b/proto/lumera/audit/v1/params.proto index 0d7f672..282ce55 100644 --- a/proto/lumera/audit/v1/params.proto +++ b/proto/lumera/audit/v1/params.proto @@ -33,7 +33,7 @@ message Params { // at or above peer_port_postpone_threshold_percent before postponing the supernode. uint32 consecutive_epochs_to_postpone = 10; - // How many completed epochs to keep in state for epoch-scoped data like AuditReport + // How many completed epochs to keep in state for epoch-scoped data like EpochReport // and related indices. Pruning runs at epoch end. uint64 keep_last_epoch_entries = 11; @@ -86,15 +86,4 @@ message Params { // Storage Challenge (SC) params. bool sc_enabled = 19; uint32 sc_challengers_per_epoch = 20; - uint32 sc_files_per_challenger = 21; - uint32 sc_replica_count = 22; - uint32 sc_observer_threshold = 23; - uint64 sc_min_slice_bytes = 24; - uint64 sc_max_slice_bytes = 25; - uint64 sc_response_timeout_ms = 26; - uint64 sc_affirmation_timeout_ms = 27; - uint64 sc_evidence_max_bytes = 28; - uint32 sc_candidate_keys_lookback_epochs = 29; - uint64 sc_start_jitter_ms = 30; - bool sc_evidence_submitter_must_be_challenger = 31; } diff --git a/proto/lumera/audit/v1/query.proto b/proto/lumera/audit/v1/query.proto index cee3806..4eb10fc 100644 --- a/proto/lumera/audit/v1/query.proto +++ b/proto/lumera/audit/v1/query.proto @@ -57,22 +57,24 @@ service Query { option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}"; } - rpc AuditReport(QueryAuditReportRequest) returns (QueryAuditReportResponse) { - option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_report/{epoch_id}/{supernode_account}"; + // EpochReport returns the submitted epoch report for (epoch_id, supernode_account). + rpc EpochReport(QueryEpochReportRequest) returns (QueryEpochReportResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/epoch_report/{epoch_id}/{supernode_account}"; } - rpc AuditReportsByReporter(QueryAuditReportsByReporterRequest) returns (QueryAuditReportsByReporterResponse) { - option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/audit_reports_by_reporter/{supernode_account}"; + // EpochReportsByReporter returns epoch reports submitted by the given reporter across epochs. + rpc EpochReportsByReporter(QueryEpochReportsByReporterRequest) returns (QueryEpochReportsByReporterResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/epoch_reports_by_reporter/{supernode_account}"; } - // SupernodeReports returns all reports that include observations about the given supernode_account. - rpc SupernodeReports(QuerySupernodeReportsRequest) returns (QuerySupernodeReportsResponse) { - option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/supernode_reports/{supernode_account}"; + // StorageChallengeReports returns all reports that include storage-challenge observations about the given supernode_account. + rpc StorageChallengeReports(QueryStorageChallengeReportsRequest) returns (QueryStorageChallengeReportsResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/storage_challenge_reports/{supernode_account}"; } - // SelfReports returns self-reports submitted by the given supernode_account across epochs. - rpc SelfReports(QuerySelfReportsRequest) returns (QuerySelfReportsResponse) { - option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/self_reports/{supernode_account}"; + // HostReports returns host reports submitted by the given supernode_account across epochs. + rpc HostReports(QueryHostReportsRequest) returns (QueryHostReportsResponse) { + option (google.api.http).get = "/LumeraProtocol/lumera/audit/v1/host_reports/{supernode_account}"; } } @@ -145,60 +147,60 @@ message QueryAssignedTargetsResponse { repeated string target_supernode_accounts = 4 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; } -message QueryAuditReportRequest { +message QueryEpochReportRequest { uint64 epoch_id = 1; string supernode_account = 2 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; } -message QueryAuditReportResponse { - AuditReport report = 1 [(gogoproto.nullable) = false]; +message QueryEpochReportResponse { + EpochReport report = 1 [(gogoproto.nullable) = false]; } -message QueryAuditReportsByReporterRequest { +message QueryEpochReportsByReporterRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; uint64 epoch_id = 2; cosmos.base.query.v1beta1.PageRequest pagination = 3; bool filter_by_epoch_id = 4; } -message QueryAuditReportsByReporterResponse { - repeated AuditReport reports = 1 [(gogoproto.nullable) = false]; +message QueryEpochReportsByReporterResponse { + repeated EpochReport reports = 1 [(gogoproto.nullable) = false]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QuerySupernodeReportsRequest { +message QueryStorageChallengeReportsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; uint64 epoch_id = 2; cosmos.base.query.v1beta1.PageRequest pagination = 3; bool filter_by_epoch_id = 4; } -message SupernodeReport { +message StorageChallengeReport { string reporter_supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; uint64 epoch_id = 2; int64 report_height = 3; repeated PortState port_states = 4; } -message QuerySupernodeReportsResponse { - repeated SupernodeReport reports = 1 [(gogoproto.nullable) = false]; +message QueryStorageChallengeReportsResponse { + repeated StorageChallengeReport reports = 1 [(gogoproto.nullable) = false]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QuerySelfReportsRequest { +message QueryHostReportsRequest { string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; uint64 epoch_id = 2; cosmos.base.query.v1beta1.PageRequest pagination = 3; bool filter_by_epoch_id = 4; } -message SelfReport { +message HostReportEntry { uint64 epoch_id = 1; int64 report_height = 2; - AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; + HostReport host_report = 3 [(gogoproto.nullable) = false]; } -message QuerySelfReportsResponse { - repeated SelfReport reports = 1 [(gogoproto.nullable) = false]; +message QueryHostReportsResponse { + repeated HostReportEntry reports = 1 [(gogoproto.nullable) = false]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/proto/lumera/audit/v1/tx.proto b/proto/lumera/audit/v1/tx.proto index 3bd21ce..dec420a 100644 --- a/proto/lumera/audit/v1/tx.proto +++ b/proto/lumera/audit/v1/tx.proto @@ -20,7 +20,7 @@ service Msg { // parameters. The authority defaults to the x/gov module account. rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); - rpc SubmitAuditReport(MsgSubmitAuditReport) returns (MsgSubmitAuditReportResponse); + rpc SubmitEpochReport(MsgSubmitEpochReport) returns (MsgSubmitEpochReportResponse); // SubmitEvidence defines the SubmitEvidence RPC. rpc SubmitEvidence(MsgSubmitEvidence) returns (MsgSubmitEvidenceResponse); @@ -36,17 +36,18 @@ message MsgUpdateParams { message MsgUpdateParamsResponse {} -message MsgSubmitAuditReport { - option (cosmos.msg.v1.signer) = "supernode_account"; +message MsgSubmitEpochReport { + option (cosmos.msg.v1.signer) = "creator"; - string supernode_account = 1 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + // creator is the transaction signer. + string creator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; uint64 epoch_id = 2; - AuditSelfReport self_report = 3 [(gogoproto.nullable) = false]; - repeated AuditPeerObservation peer_observations = 4; + HostReport host_report = 3 [(gogoproto.nullable) = false]; + repeated StorageChallengeObservation storage_challenge_observations = 4; } -message MsgSubmitAuditReportResponse {} +message MsgSubmitEpochReportResponse {} message MsgSubmitEvidence { option (cosmos.msg.v1.signer) = "creator"; diff --git a/tests/systemtests/audit_host_requirements_bypass_test.go b/tests/systemtests/audit_host_requirements_bypass_test.go index faa59dc..a7164b4 100644 --- a/tests/systemtests/audit_host_requirements_bypass_test.go +++ b/tests/systemtests/audit_host_requirements_bypass_test.go @@ -12,16 +12,16 @@ import ( func TestAuditHostRequirements_UsageZeroBypassesMinimums(t *testing.T) { const ( - reportingWindowBlocks = uint64(10) + epochLengthBlocks = uint64(10) ) const originHeight = int64(1) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), - setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), func(genesis []byte) []byte { - // Avoid missing-report postponement before/around the tested window. - state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("10")) + // Avoid missing-report postponement before/around the tested epoch. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("10")) require.NoError(t, err) // Enforce host requirements, but allow "unknown" usage values to bypass (usage_percent==0). @@ -40,21 +40,21 @@ func TestAuditHostRequirements_UsageZeroBypassesMinimums(t *testing.T) { registerSupernode(t, cli, n1, "192.168.1.2") currentHeight := sut.AwaitNextBlock(t) - windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) - enforceHeight := windowStartHeight + int64(reportingWindowBlocks) + epochID, epochStartHeight := nextEpochAfterHeight(originHeight, epochLengthBlocks, currentHeight) + enforceHeight := epochStartHeight + int64(epochLengthBlocks) - awaitAtLeastHeight(t, windowStartHeight) + awaitAtLeastHeight(t, epochStartHeight) - seed := headerHashAtHeight(t, sut.rpcAddr, windowStartHeight) + seed := headerHashAtHeight(t, sut.rpcAddr, epochStartHeight) senders := sortedStrings(n0.accAddr, n1.accAddr) receivers := sortedStrings(n0.accAddr, n1.accAddr) - kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kWindow) + kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kEpoch) - targets0, ok := assignedTargets(seed, senders, receivers, kWindow, n0.accAddr) + targets0, ok := assignedTargets(seed, senders, receivers, kEpoch, n0.accAddr) require.True(t, ok) require.Len(t, targets0, 1) - targets1, ok := assignedTargets(seed, senders, receivers, kWindow, n1.accAddr) + targets1, ok := assignedTargets(seed, senders, receivers, kEpoch, n1.accAddr) require.True(t, ok) require.Len(t, targets1, 1) @@ -68,16 +68,16 @@ func TestAuditHostRequirements_UsageZeroBypassesMinimums(t *testing.T) { require.NoError(t, err) unknownSelf := string(unknownSelfBz) - okSelf := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + okHost := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) // node0 reports "unknown" cpu usage (0), which must not trigger host-requirements postponement. - tx0 := submitAuditReport(t, cli, n0.nodeName, windowID, unknownSelf, []string{ - auditPeerObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + tx0 := submitEpochReport(t, cli, n0.nodeName, epochID, unknownSelf, []string{ + storageChallengeObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, tx0) - tx1 := submitAuditReport(t, cli, n1.nodeName, windowID, okSelf, []string{ - auditPeerObservationJSON(targets1[0], []string{"PORT_STATE_OPEN"}), + tx1 := submitEpochReport(t, cli, n1.nodeName, epochID, okHost, []string{ + storageChallengeObservationJSON(targets1[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, tx1) diff --git a/tests/systemtests/audit_host_requirements_enforcement_test.go b/tests/systemtests/audit_host_requirements_enforcement_test.go index 055edcf..510f5fd 100644 --- a/tests/systemtests/audit_host_requirements_enforcement_test.go +++ b/tests/systemtests/audit_host_requirements_enforcement_test.go @@ -12,17 +12,17 @@ import ( func TestAuditHostRequirementsPostponesActiveSupernode(t *testing.T) { const ( - // Keep windows small so AwaitBlockHeight timeouts don't flake. - reportingWindowBlocks = uint64(10) + // Keep epochs small so AwaitBlockHeight timeouts don't flake. + epochLengthBlocks = uint64(10) ) const originHeight = int64(1) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), - setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), func(genesis []byte) []byte { - // Avoid missing-report postponement before the first tested window. - state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("10")) + // Avoid missing-report postponement before the first tested epoch. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("10")) require.NoError(t, err) // Enforce host requirements. @@ -41,21 +41,21 @@ func TestAuditHostRequirementsPostponesActiveSupernode(t *testing.T) { registerSupernode(t, cli, n1, "192.168.1.2") currentHeight := sut.AwaitNextBlock(t) - windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) - enforceHeight := windowStartHeight + int64(reportingWindowBlocks) + epochID, epochStartHeight := nextEpochAfterHeight(originHeight, epochLengthBlocks, currentHeight) + enforceHeight := epochStartHeight + int64(epochLengthBlocks) - awaitAtLeastHeight(t, windowStartHeight) + awaitAtLeastHeight(t, epochStartHeight) - seed := headerHashAtHeight(t, sut.rpcAddr, windowStartHeight) + seed := headerHashAtHeight(t, sut.rpcAddr, epochStartHeight) senders := sortedStrings(n0.accAddr, n1.accAddr) receivers := sortedStrings(n0.accAddr, n1.accAddr) - kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kWindow) + kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kEpoch) - targets0, ok := assignedTargets(seed, senders, receivers, kWindow, n0.accAddr) + targets0, ok := assignedTargets(seed, senders, receivers, kEpoch, n0.accAddr) require.True(t, ok) require.Len(t, targets0, 1) - targets1, ok := assignedTargets(seed, senders, receivers, kWindow, n1.accAddr) + targets1, ok := assignedTargets(seed, senders, receivers, kEpoch, n1.accAddr) require.True(t, ok) require.Len(t, targets1, 1) @@ -69,17 +69,17 @@ func TestAuditHostRequirementsPostponesActiveSupernode(t *testing.T) { require.NoError(t, err) badSelf := string(badSelfBz) - okSelf := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + okHost := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) // node0 violates host requirements. - tx0 := submitAuditReport(t, cli, n0.nodeName, windowID, badSelf, []string{ - auditPeerObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + tx0 := submitEpochReport(t, cli, n0.nodeName, epochID, badSelf, []string{ + storageChallengeObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, tx0) // node1 stays compliant (and also submits to avoid missing-report enforcement). - tx1 := submitAuditReport(t, cli, n1.nodeName, windowID, okSelf, []string{ - auditPeerObservationJSON(targets1[0], []string{"PORT_STATE_OPEN"}), + tx1 := submitEpochReport(t, cli, n1.nodeName, epochID, okHost, []string{ + storageChallengeObservationJSON(targets1[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, tx1) diff --git a/tests/systemtests/audit_missing_report_enforcement_test.go b/tests/systemtests/audit_missing_report_enforcement_test.go index a0ef2d2..f53f0de 100644 --- a/tests/systemtests/audit_missing_report_enforcement_test.go +++ b/tests/systemtests/audit_missing_report_enforcement_test.go @@ -3,9 +3,9 @@ package system // This test validates missing-report enforcement in EndBlocker: -// - two ACTIVE supernodes exist during a window -// - only one submits a report for that window -// - after `window_end + 1`, the missing sender is POSTPONED +// - two ACTIVE supernodes exist during an epoch +// - only one submits a report for that epoch +// - after `epoch_end + 1`, the missing sender is POSTPONED import ( "testing" @@ -15,13 +15,13 @@ import ( func TestAuditMissingReportPostponesSender(t *testing.T) { const ( - reportingWindowBlocks = uint64(10) + epochLengthBlocks = uint64(10) ) const originHeight = int64(1) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), - setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), ) sut.StartChain(t) @@ -33,29 +33,29 @@ func TestAuditMissingReportPostponesSender(t *testing.T) { registerSupernode(t, cli, n1, "192.168.1.2") currentHeight := sut.AwaitNextBlock(t) - blocks := int64(reportingWindowBlocks) + blocks := int64(epochLengthBlocks) - var windowID uint64 - var windowStartHeight int64 - var windowEndHeight int64 + var epochID uint64 + var epochStartHeight int64 + var epochEndHeight int64 for { - windowID = uint64((currentHeight - originHeight) / blocks) - windowStartHeight = originHeight + int64(windowID)*blocks - windowEndHeight = windowStartHeight + blocks - 1 - // Ensure there's enough room in the window so the tx is committed before the next window starts. - if windowEndHeight-currentHeight >= 3 { + epochID = uint64((currentHeight - originHeight) / blocks) + epochStartHeight = originHeight + int64(epochID)*blocks + epochEndHeight = epochStartHeight + blocks - 1 + // Ensure there's enough room in the epoch so the tx is committed before the next epoch starts. + if epochEndHeight-currentHeight >= 3 { break } currentHeight = sut.AwaitNextBlock(t) } - enforceHeight := windowEndHeight + 1 + enforceHeight := epochEndHeight + 1 - self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) - // node0 submits a report; node1 submits nothing in this window. - txResp := submitAuditReport(t, cli, n0.nodeName, windowID, self, nil) + host := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) + // node0 submits a report; node1 submits nothing in this epoch. + txResp := submitEpochReport(t, cli, n0.nodeName, epochID, host, nil) RequireTxSuccess(t, txResp) - // node1 does not submit any report for this window -> should be postponed after the window ends. + // node1 does not submit any report for this epoch -> should be postponed after the epoch ends. awaitAtLeastHeight(t, enforceHeight) require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) diff --git a/tests/systemtests/audit_peer_observation_completeness_test.go b/tests/systemtests/audit_peer_observation_completeness_test.go index ddce4cd..e346edf 100644 --- a/tests/systemtests/audit_peer_observation_completeness_test.go +++ b/tests/systemtests/audit_peer_observation_completeness_test.go @@ -10,20 +10,20 @@ import ( "github.com/tidwall/sjson" ) -// This test validates that ACTIVE probers must submit peer observations for all assigned targets. +// This test validates that ACTIVE probers must submit storage challenge observations for all assigned targets. func TestAuditSubmitReport_ProberRequiresAllPeerObservations(t *testing.T) { const ( - // Keep windows long enough in real time to avoid end-blocker enforcement during the test. - reportingWindowBlocks = uint64(20) + // Keep epochs long enough in real time to avoid end-blocker enforcement during the test. + epochLengthBlocks = uint64(20) ) const originHeight = int64(1) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), - setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), func(genesis []byte) []byte { - // Avoid missing-report postponement before the window under test. - state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte(strconv.FormatUint(2, 10))) + // Avoid missing-report postponement before the epoch under test. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte(strconv.FormatUint(2, 10))) require.NoError(t, err) return state }, @@ -38,10 +38,10 @@ func TestAuditSubmitReport_ProberRequiresAllPeerObservations(t *testing.T) { registerSupernode(t, cli, n1, "192.168.1.2") currentHeight := sut.AwaitNextBlock(t) - windowID, windowStartHeight := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) - awaitAtLeastHeight(t, windowStartHeight) + epochID, epochStartHeight := nextEpochAfterHeight(originHeight, epochLengthBlocks, currentHeight) + awaitAtLeastHeight(t, epochStartHeight) - self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) - txResp := submitAuditReport(t, cli, n0.nodeName, windowID, self, nil) - RequireTxFailure(t, txResp, "expected peer observations") + host := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) + txResp := submitEpochReport(t, cli, n0.nodeName, epochID, host, nil) + RequireTxFailure(t, txResp, "expected storage challenge observations") } diff --git a/tests/systemtests/audit_peer_ports_enforcement_test.go b/tests/systemtests/audit_peer_ports_enforcement_test.go index 0789c34..962dc2a 100644 --- a/tests/systemtests/audit_peer_ports_enforcement_test.go +++ b/tests/systemtests/audit_peer_ports_enforcement_test.go @@ -11,15 +11,15 @@ import ( func TestAuditPeerPortsUnanimousClosedPostponesAfterConsecutiveWindows(t *testing.T) { const ( - reportingWindowBlocks = uint64(10) + epochLengthBlocks = uint64(10) ) const originHeight = int64(1) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), - setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), func(genesis []byte) []byte { - state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("2")) + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("2")) require.NoError(t, err) return state }, @@ -34,55 +34,55 @@ func TestAuditPeerPortsUnanimousClosedPostponesAfterConsecutiveWindows(t *testin registerSupernode(t, cli, n1, "192.168.1.2") currentHeight := sut.AwaitNextBlock(t) - windowID1, window1Start := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) - windowID2 := windowID1 + 1 - window2Start := window1Start + int64(reportingWindowBlocks) - enforce2 := window2Start + int64(reportingWindowBlocks) + epochID1, epoch1Start := nextEpochAfterHeight(originHeight, epochLengthBlocks, currentHeight) + epochID2 := epochID1 + 1 + epoch2Start := epoch1Start + int64(epochLengthBlocks) + enforce2 := epoch2Start + int64(epochLengthBlocks) senders := sortedStrings(n0.accAddr, n1.accAddr) receivers := sortedStrings(n0.accAddr, n1.accAddr) - kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kWindow) + kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kEpoch) - selfOpen := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + hostOpen := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) // Window 1: node0 reports node1 as CLOSED, node1 reports node0 as OPEN. - awaitAtLeastHeight(t, window1Start) - seed1 := headerHashAtHeight(t, sut.rpcAddr, window1Start) - targets0w1, ok := assignedTargets(seed1, senders, receivers, kWindow, n0.accAddr) + awaitAtLeastHeight(t, epoch1Start) + seed1 := headerHashAtHeight(t, sut.rpcAddr, epoch1Start) + targets0e1, ok := assignedTargets(seed1, senders, receivers, kEpoch, n0.accAddr) require.True(t, ok) - require.Len(t, targets0w1, 1) - targets1w1, ok := assignedTargets(seed1, senders, receivers, kWindow, n1.accAddr) + require.Len(t, targets0e1, 1) + targets1e1, ok := assignedTargets(seed1, senders, receivers, kEpoch, n1.accAddr) require.True(t, ok) - require.Len(t, targets1w1, 1) + require.Len(t, targets1e1, 1) - tx0w1 := submitAuditReport(t, cli, n0.nodeName, windowID1, selfOpen, []string{ - auditPeerObservationJSON(targets0w1[0], []string{"PORT_STATE_CLOSED"}), + tx0e1 := submitEpochReport(t, cli, n0.nodeName, epochID1, hostOpen, []string{ + storageChallengeObservationJSON(targets0e1[0], []string{"PORT_STATE_CLOSED"}), }) - RequireTxSuccess(t, tx0w1) - tx1w1 := submitAuditReport(t, cli, n1.nodeName, windowID1, selfOpen, []string{ - auditPeerObservationJSON(targets1w1[0], []string{"PORT_STATE_OPEN"}), + RequireTxSuccess(t, tx0e1) + tx1e1 := submitEpochReport(t, cli, n1.nodeName, epochID1, hostOpen, []string{ + storageChallengeObservationJSON(targets1e1[0], []string{"PORT_STATE_OPEN"}), }) - RequireTxSuccess(t, tx1w1) + RequireTxSuccess(t, tx1e1) // Window 2: repeat -> node1 should be POSTPONED at window end due to consecutive unanimous CLOSED. - awaitAtLeastHeight(t, window2Start) - seed2 := headerHashAtHeight(t, sut.rpcAddr, window2Start) - targets0w2, ok := assignedTargets(seed2, senders, receivers, kWindow, n0.accAddr) + awaitAtLeastHeight(t, epoch2Start) + seed2 := headerHashAtHeight(t, sut.rpcAddr, epoch2Start) + targets0e2, ok := assignedTargets(seed2, senders, receivers, kEpoch, n0.accAddr) require.True(t, ok) - require.Len(t, targets0w2, 1) - targets1w2, ok := assignedTargets(seed2, senders, receivers, kWindow, n1.accAddr) + require.Len(t, targets0e2, 1) + targets1e2, ok := assignedTargets(seed2, senders, receivers, kEpoch, n1.accAddr) require.True(t, ok) - require.Len(t, targets1w2, 1) + require.Len(t, targets1e2, 1) - tx0w2 := submitAuditReport(t, cli, n0.nodeName, windowID2, selfOpen, []string{ - auditPeerObservationJSON(targets0w2[0], []string{"PORT_STATE_CLOSED"}), + tx0e2 := submitEpochReport(t, cli, n0.nodeName, epochID2, hostOpen, []string{ + storageChallengeObservationJSON(targets0e2[0], []string{"PORT_STATE_CLOSED"}), }) - RequireTxSuccess(t, tx0w2) - tx1w2 := submitAuditReport(t, cli, n1.nodeName, windowID2, selfOpen, []string{ - auditPeerObservationJSON(targets1w2[0], []string{"PORT_STATE_OPEN"}), + RequireTxSuccess(t, tx0e2) + tx1e2 := submitEpochReport(t, cli, n1.nodeName, epochID2, hostOpen, []string{ + storageChallengeObservationJSON(targets1e2[0], []string{"PORT_STATE_OPEN"}), }) - RequireTxSuccess(t, tx1w2) + RequireTxSuccess(t, tx1e2) awaitAtLeastHeight(t, enforce2) diff --git a/tests/systemtests/audit_postponed_reporter_self_only_test.go b/tests/systemtests/audit_postponed_reporter_self_only_test.go index 314a46e..af18aef 100644 --- a/tests/systemtests/audit_postponed_reporter_self_only_test.go +++ b/tests/systemtests/audit_postponed_reporter_self_only_test.go @@ -12,20 +12,20 @@ import ( func TestAuditSubmitReport_PostponedReporterSelfOnly(t *testing.T) { const ( - // Keep windows long enough in real time to avoid missing-report postponement before the first tested window. - reportingWindowBlocks = uint64(20) + // Keep epochs long enough in real time to avoid missing-report postponement before the first tested epoch. + epochLengthBlocks = uint64(20) ) const originHeight = int64(1) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), - setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), func(genesis []byte) []byte { - // Avoid missing-report postponement before the first tested window. - state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("2")) + // Avoid missing-report postponement before the first tested epoch. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("2")) require.NoError(t, err) - // Make it easy to postpone node1 via self host requirements (independent of consecutive windows). + // Make it easy to postpone node1 via host requirements (independent of consecutive epochs). state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) require.NoError(t, err) return state @@ -41,23 +41,23 @@ func TestAuditSubmitReport_PostponedReporterSelfOnly(t *testing.T) { registerSupernode(t, cli, n1, "192.168.1.2") currentHeight := sut.AwaitNextBlock(t) - windowID1, window1Start := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) - windowID2 := windowID1 + 1 - window2Start := window1Start + int64(reportingWindowBlocks) + epochID1, epoch1Start := nextEpochAfterHeight(originHeight, epochLengthBlocks, currentHeight) + epochID2 := epochID1 + 1 + epoch2Start := epoch1Start + int64(epochLengthBlocks) - awaitAtLeastHeight(t, window1Start) + awaitAtLeastHeight(t, epoch1Start) - seed1 := headerHashAtHeight(t, sut.rpcAddr, window1Start) + seed1 := headerHashAtHeight(t, sut.rpcAddr, epoch1Start) senders := sortedStrings(n0.accAddr, n1.accAddr) receivers := sortedStrings(n0.accAddr, n1.accAddr) - kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kWindow) + kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kEpoch) - targets0, ok := assignedTargets(seed1, senders, receivers, kWindow, n0.accAddr) + targets0, ok := assignedTargets(seed1, senders, receivers, kEpoch, n0.accAddr) require.True(t, ok) require.Len(t, targets0, 1) - self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + host := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) node1BadSelfBz, err := json.Marshal(map[string]any{ "cpu_usage_percent": 99.0, @@ -69,28 +69,28 @@ func TestAuditSubmitReport_PostponedReporterSelfOnly(t *testing.T) { require.NoError(t, err) node1BadSelf := string(node1BadSelfBz) - // Both submit in window1 so missing-report enforcement doesn't interfere. - // node1 violates host minimums and should become POSTPONED at window end. - txResp0 := submitAuditReport(t, cli, n0.nodeName, windowID1, self, []string{ - auditPeerObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + // Both submit in epoch1 so missing-report enforcement doesn't interfere. + // node1 violates host minimums and should become POSTPONED at epoch end. + txResp0 := submitEpochReport(t, cli, n0.nodeName, epochID1, host, []string{ + storageChallengeObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, txResp0) - txResp1 := submitAuditReport(t, cli, n1.nodeName, windowID1, node1BadSelf, []string{ - auditPeerObservationJSON(n0.accAddr, []string{"PORT_STATE_OPEN"}), + txResp1 := submitEpochReport(t, cli, n1.nodeName, epochID1, node1BadSelf, []string{ + storageChallengeObservationJSON(n0.accAddr, []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, txResp1) - awaitAtLeastHeight(t, window2Start) + awaitAtLeastHeight(t, epoch2Start) require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) - // POSTPONED reporter cannot submit peer observations. - txBad := submitAuditReport(t, cli, n1.nodeName, windowID2, self, []string{ - auditPeerObservationJSON(n0.accAddr, []string{"PORT_STATE_OPEN"}), + // POSTPONED reporter cannot submit storage challenge observations. + txBad := submitEpochReport(t, cli, n1.nodeName, epochID2, host, []string{ + storageChallengeObservationJSON(n0.accAddr, []string{"PORT_STATE_OPEN"}), }) - RequireTxFailure(t, txBad, "reporter not eligible for peer observations in this window") + RequireTxFailure(t, txBad, "reporter not eligible for storage challenge observations") - // POSTPONED reporter can submit a self report only. - txOK := submitAuditReport(t, cli, n1.nodeName, windowID2, self, nil) + // POSTPONED reporter can submit a host report only. + txOK := submitEpochReport(t, cli, n1.nodeName, epochID2, host, nil) RequireTxSuccess(t, txOK) } diff --git a/tests/systemtests/audit_recovery_enforcement_test.go b/tests/systemtests/audit_recovery_enforcement_test.go index fd8d89b..398495b 100644 --- a/tests/systemtests/audit_recovery_enforcement_test.go +++ b/tests/systemtests/audit_recovery_enforcement_test.go @@ -12,16 +12,16 @@ import ( func TestAuditRecovery_PostponedBecomesActiveWithSelfAndPeerOpen(t *testing.T) { const ( - reportingWindowBlocks = uint64(10) + epochLengthBlocks = uint64(10) ) const originHeight = int64(1) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), - setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), func(genesis []byte) []byte { // Keep missing-report / peer-port streaks from interfering with this recovery test. - state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_windows_to_postpone", []byte("10")) + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("10")) require.NoError(t, err) // Use host requirements to get into POSTPONED state deterministically. @@ -40,17 +40,17 @@ func TestAuditRecovery_PostponedBecomesActiveWithSelfAndPeerOpen(t *testing.T) { registerSupernode(t, cli, n1, "192.168.1.2") currentHeight := sut.AwaitNextBlock(t) - windowID1, window1Start := nextWindowAfterHeight(originHeight, reportingWindowBlocks, currentHeight) - windowID2 := windowID1 + 1 - window2Start := window1Start + int64(reportingWindowBlocks) - enforce2 := window2Start + int64(reportingWindowBlocks) + epochID1, epoch1Start := nextEpochAfterHeight(originHeight, epochLengthBlocks, currentHeight) + epochID2 := epochID1 + 1 + epoch2Start := epoch1Start + int64(epochLengthBlocks) + enforce2 := epoch2Start + int64(epochLengthBlocks) senders := sortedStrings(n0.accAddr, n1.accAddr) receivers := sortedStrings(n0.accAddr, n1.accAddr) - kWindow := computeKWindow(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kWindow) + kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) + require.Equal(t, uint32(1), kEpoch) - selfOK := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) + hostOK := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) badSelfBz, err := json.Marshal(map[string]any{ "cpu_usage_percent": 99.0, @@ -60,44 +60,44 @@ func TestAuditRecovery_PostponedBecomesActiveWithSelfAndPeerOpen(t *testing.T) { "failed_actions_count": 0, }) require.NoError(t, err) - selfBad := string(badSelfBz) + hostBad := string(badSelfBz) - // Window 1: node1 violates host requirements -> becomes POSTPONED. - awaitAtLeastHeight(t, window1Start) - seed1 := headerHashAtHeight(t, sut.rpcAddr, window1Start) - targets0w1, ok := assignedTargets(seed1, senders, receivers, kWindow, n0.accAddr) + // Epoch 1: node1 violates host requirements -> becomes POSTPONED. + awaitAtLeastHeight(t, epoch1Start) + seed1 := headerHashAtHeight(t, sut.rpcAddr, epoch1Start) + targets0e1, ok := assignedTargets(seed1, senders, receivers, kEpoch, n0.accAddr) require.True(t, ok) - require.Len(t, targets0w1, 1) - targets1w1, ok := assignedTargets(seed1, senders, receivers, kWindow, n1.accAddr) + require.Len(t, targets0e1, 1) + targets1e1, ok := assignedTargets(seed1, senders, receivers, kEpoch, n1.accAddr) require.True(t, ok) - require.Len(t, targets1w1, 1) + require.Len(t, targets1e1, 1) - tx0w1 := submitAuditReport(t, cli, n0.nodeName, windowID1, selfOK, []string{ - auditPeerObservationJSON(targets0w1[0], []string{"PORT_STATE_OPEN"}), + tx0e1 := submitEpochReport(t, cli, n0.nodeName, epochID1, hostOK, []string{ + storageChallengeObservationJSON(targets0e1[0], []string{"PORT_STATE_OPEN"}), }) - RequireTxSuccess(t, tx0w1) - tx1w1 := submitAuditReport(t, cli, n1.nodeName, windowID1, selfBad, []string{ - auditPeerObservationJSON(targets1w1[0], []string{"PORT_STATE_OPEN"}), + RequireTxSuccess(t, tx0e1) + tx1e1 := submitEpochReport(t, cli, n1.nodeName, epochID1, hostBad, []string{ + storageChallengeObservationJSON(targets1e1[0], []string{"PORT_STATE_OPEN"}), }) - RequireTxSuccess(t, tx1w1) + RequireTxSuccess(t, tx1e1) - awaitAtLeastHeight(t, window2Start) + awaitAtLeastHeight(t, epoch2Start) require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) - // Window 2: node1 submits compliant self report (no peer observations), - // and node0 submits an OPEN peer observation about node1 in the same window -> recovery at window end. - seed2 := headerHashAtHeight(t, sut.rpcAddr, window2Start) - targets0w2, ok := assignedTargets(seed2, senders, receivers, kWindow, n0.accAddr) + // Epoch 2: node1 submits compliant host report (no storage challenge observations), + // and node0 submits an OPEN storage challenge observation about node1 in the same epoch -> recovery at epoch end. + seed2 := headerHashAtHeight(t, sut.rpcAddr, epoch2Start) + targets0e2, ok := assignedTargets(seed2, senders, receivers, kEpoch, n0.accAddr) require.True(t, ok) - require.Len(t, targets0w2, 1) + require.Len(t, targets0e2, 1) - tx0w2 := submitAuditReport(t, cli, n0.nodeName, windowID2, selfOK, []string{ - auditPeerObservationJSON(targets0w2[0], []string{"PORT_STATE_OPEN"}), + tx0e2 := submitEpochReport(t, cli, n0.nodeName, epochID2, hostOK, []string{ + storageChallengeObservationJSON(targets0e2[0], []string{"PORT_STATE_OPEN"}), }) - RequireTxSuccess(t, tx0w2) + RequireTxSuccess(t, tx0e2) - tx1w2 := submitAuditReport(t, cli, n1.nodeName, windowID2, selfOK, nil) - RequireTxSuccess(t, tx1w2) + tx1e2 := submitEpochReport(t, cli, n1.nodeName, epochID2, hostOK, nil) + RequireTxSuccess(t, tx1e2) awaitAtLeastHeight(t, enforce2) require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n1.valAddr)) diff --git a/tests/systemtests/audit_submit_and_query_test.go b/tests/systemtests/audit_submit_and_query_test.go index 0d7dba0..4b0a2c9 100644 --- a/tests/systemtests/audit_submit_and_query_test.go +++ b/tests/systemtests/audit_submit_and_query_test.go @@ -4,11 +4,11 @@ package system // This test validates the "happy path" end-to-end: // - supernode registration -// - audit report submission via CLI +// - epoch report submission via CLI // - querying stored report via gRPC // // Assertions: -// - the reporter's report is stored under (window_id, supernode_account) +// - the reporter's report is stored under (epoch_id, supernode_account) import ( "testing" @@ -18,13 +18,13 @@ import ( func TestAuditSubmitReportAndQuery(t *testing.T) { const ( - // Keep windows long enough in real time to avoid end-blocker enforcement during the test. - reportingWindowBlocks = uint64(20) + // Keep epochs long enough in real time to avoid end-blocker enforcement during the test. + epochLengthBlocks = uint64(20) ) sut.ModifyGenesisJSON(t, setSupernodeParamsForAuditTests(t), - setAuditParamsForFastWindows(t, reportingWindowBlocks, 1, 1, 1, []uint32{4444}), + setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), ) sut.StartChain(t) @@ -35,32 +35,32 @@ func TestAuditSubmitReportAndQuery(t *testing.T) { registerSupernode(t, cli, n0, "192.168.1.1") registerSupernode(t, cli, n1, "192.168.1.2") - // These nodes register during window 0, after the window-0 snapshot was created at height 1. - // If they submit *no* report in window 0, EndBlock(0) will postpone them for "missing report" at height 20. - // Submit self-only reports in the current window to keep them ACTIVE for the next window. + // These nodes register during epoch 0, after the epoch-0 snapshot was created at height 1. + // If they submit *no* report in epoch 0, EndBlock will postpone them for "missing report". + // Submit host-only reports in the current epoch to keep them ACTIVE for the next epoch. ws0 := auditQueryAssignedTargets(t, 0, false, n0.accAddr) - self := auditSelfReportJSON([]string{"PORT_STATE_OPEN"}) - RequireTxSuccess(t, submitAuditReport(t, cli, n0.nodeName, ws0.WindowId, self, nil)) - RequireTxSuccess(t, submitAuditReport(t, cli, n1.nodeName, ws0.WindowId, self, nil)) + host := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) + RequireTxSuccess(t, submitEpochReport(t, cli, n0.nodeName, ws0.EpochId, host, nil)) + RequireTxSuccess(t, submitEpochReport(t, cli, n1.nodeName, ws0.EpochId, host, nil)) - // Now wait for the next window boundary so the snapshot includes the registered supernodes. - awaitAtLeastHeight(t, ws0.WindowStartHeight+int64(reportingWindowBlocks)) + // Now wait for the next epoch boundary so the snapshot includes the registered supernodes. + awaitAtLeastHeight(t, ws0.EpochStartHeight+int64(epochLengthBlocks)) ws1 := auditQueryAssignedTargets(t, 0, false, n0.accAddr) - require.Greater(t, len(ws1.TargetSupernodeAccounts), 0, "expected n0 to be assigned targets in window %d", ws1.WindowId) + require.Greater(t, len(ws1.TargetSupernodeAccounts), 0, "expected n0 to be assigned targets in epoch %d", ws1.EpochId) // Construct a minimal report. Since n0 is ACTIVE, it is a prober and must submit peer observations - // for all assigned targets for the window. + // for all assigned targets for the epoch. peerObs := make([]string, 0, len(ws1.TargetSupernodeAccounts)) for _, target := range ws1.TargetSupernodeAccounts { - peerObs = append(peerObs, auditPeerObservationJSON(target, []string{"PORT_STATE_OPEN"})) + peerObs = append(peerObs, storageChallengeObservationJSON(target, []string{"PORT_STATE_OPEN"})) } - txResp := submitAuditReport(t, cli, n0.nodeName, ws1.WindowId, self, peerObs) + txResp := submitEpochReport(t, cli, n0.nodeName, ws1.EpochId, host, peerObs) RequireTxSuccess(t, txResp) - // Query via gRPC instead of CLI JSON because AuditReport contains float fields and + // Query via gRPC instead of CLI JSON because EpochReport contains float fields and // CLI JSON marshalling is currently broken ("unknown type float64") in this environment. - report := auditQueryReport(t, ws1.WindowId, n0.accAddr) + report := auditQueryReport(t, ws1.EpochId, n0.accAddr) require.Equal(t, n0.accAddr, report.SupernodeAccount) - require.Equal(t, ws1.WindowId, report.WindowId) + require.Equal(t, ws1.EpochId, report.EpochId) } diff --git a/tests/systemtests/audit_test_helpers_test.go b/tests/systemtests/audit_test_helpers_test.go index 17b04a1..36cb937 100644 --- a/tests/systemtests/audit_test_helpers_test.go +++ b/tests/systemtests/audit_test_helpers_test.go @@ -5,9 +5,9 @@ package system // This file contains helper functions used by the audit module systemtests. // // Why helpers exist here: -// - The audit module behavior depends heavily on block height (window boundaries). +// - The audit module behavior depends heavily on block height (epoch boundaries). // - The systemtest harness runs a real multi-node testnet; we need stable ways to: -// - pick a safe window to test against (avoid racing enforcement), +// - pick a safe epoch to test against (avoid racing enforcement), // - derive deterministic peer targets (same logic as the keeper), // - submit reports via CLI, // - query results reliably (gRPC where CLI JSON marshalling is known to break). @@ -34,22 +34,25 @@ import ( audittypes "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) -// setAuditParamsForFastWindows overrides audit module params in genesis so tests complete quickly. -func setAuditParamsForFastWindows(t *testing.T, reportingWindowBlocks uint64, peerQuorumReports, minTargets, maxTargets uint32, requiredOpenPorts []uint32) GenesisMutator { +// setAuditParamsForFastEpochs overrides audit module params in genesis so tests complete quickly. +func setAuditParamsForFastEpochs(t *testing.T, epochLengthBlocks uint64, peerQuorumReports, minTargets, maxTargets uint32, requiredOpenPorts []uint32) GenesisMutator { return func(genesis []byte) []byte { t.Helper() state := genesis var err error - state, err = sjson.SetRawBytes(state, "app_state.audit.params.reporting_window_blocks", []byte(fmt.Sprintf("%q", strconv.FormatUint(reportingWindowBlocks, 10)))) + state, err = sjson.SetRawBytes(state, "app_state.audit.params.epoch_length_blocks", []byte(fmt.Sprintf("%q", strconv.FormatUint(epochLengthBlocks, 10)))) + require.NoError(t, err) + // In system tests, start epoch 0 at height 1 (the first block height on a fresh chain). + state, err = sjson.SetRawBytes(state, "app_state.audit.params.epoch_zero_height", []byte(fmt.Sprintf("%q", "1"))) require.NoError(t, err) state, err = sjson.SetRawBytes(state, "app_state.audit.params.peer_quorum_reports", []byte(strconv.FormatUint(uint64(peerQuorumReports), 10))) require.NoError(t, err) - state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_probe_targets_per_window", []byte(strconv.FormatUint(uint64(minTargets), 10))) + state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_probe_targets_per_epoch", []byte(strconv.FormatUint(uint64(minTargets), 10))) require.NoError(t, err) - state, err = sjson.SetRawBytes(state, "app_state.audit.params.max_probe_targets_per_window", []byte(strconv.FormatUint(uint64(maxTargets), 10))) + state, err = sjson.SetRawBytes(state, "app_state.audit.params.max_probe_targets_per_epoch", []byte(strconv.FormatUint(uint64(maxTargets), 10))) require.NoError(t, err) portsJSON, err := json.Marshal(requiredOpenPorts) @@ -88,40 +91,40 @@ func awaitAtLeastHeight(t *testing.T, height int64) { sut.AwaitBlockHeight(t, height) } -// pickWindowForStartAtOrAfter returns the first window whose start height is >= minStartHeight. -// This is a "ceiling" window picker. -func pickWindowForStartAtOrAfter(originHeight int64, windowBlocks uint64, minStartHeight int64) (windowID uint64, startHeight int64) { - if windowBlocks == 0 { +// pickEpochForStartAtOrAfter returns the first epoch whose start height is >= minStartHeight. +// This is a "ceiling" epoch picker. +func pickEpochForStartAtOrAfter(originHeight int64, epochBlocks uint64, minStartHeight int64) (epochID uint64, startHeight int64) { + if epochBlocks == 0 { return 0, originHeight } if minStartHeight < originHeight { minStartHeight = originHeight } - blocks := int64(windowBlocks) + blocks := int64(epochBlocks) delta := minStartHeight - originHeight - windowID = uint64((delta + blocks - 1) / blocks) // ceil(delta/blocks) - startHeight = originHeight + int64(windowID)*blocks - return windowID, startHeight + epochID = uint64((delta + blocks - 1) / blocks) // ceil(delta/blocks) + startHeight = originHeight + int64(epochID)*blocks + return epochID, startHeight } -// nextWindowAfterHeight returns the next window after the provided height. +// nextEpochAfterHeight returns the next epoch after the provided height. // // We use this in tests to: // - register supernodes first, -// - then wait for the *next* window boundary to ensure snapshot inclusion and acceptance. -func nextWindowAfterHeight(originHeight int64, windowBlocks uint64, height int64) (windowID uint64, startHeight int64) { - if windowBlocks == 0 { +// - then wait for the *next* epoch boundary to ensure snapshot inclusion and acceptance. +func nextEpochAfterHeight(originHeight int64, epochBlocks uint64, height int64) (epochID uint64, startHeight int64) { + if epochBlocks == 0 { return 0, originHeight } if height < originHeight { return 0, originHeight } - blocks := int64(windowBlocks) + blocks := int64(epochBlocks) currentID := uint64((height - originHeight) / blocks) - windowID = currentID + 1 - startHeight = originHeight + int64(windowID)*blocks - return windowID, startHeight + epochID = currentID + 1 + startHeight = originHeight + int64(epochID)*blocks + return epochID, startHeight } type testNodeIdentity struct { @@ -142,7 +145,7 @@ func getNodeIdentity(t *testing.T, cli *LumeradCli, nodeName string) testNodeIde // registerSupernode registers a supernode using the node's own key as both: // - the tx signer (via --from), -// - the supernode_account (so that later MsgSubmitAuditReport signatures match). +// - the supernode_account (so that later MsgSubmitEpochReport signatures match). func registerSupernode(t *testing.T, cli *LumeradCli, id testNodeIdentity, ip string) { t.Helper() resp := cli.CustomCommand( @@ -172,9 +175,9 @@ func headerHashAtHeight(t *testing.T, rpcAddr string, height int64) []byte { return []byte(hash) } -// computeKWindow replicates x/audit/v1/keeper.computeKWindow to keep tests deterministic and black-box. -// It computes how many peer targets each sender must probe this window. -func computeKWindow(peerQuorumReports, minTargets, maxTargets uint32, sendersCount, receiversCount int) uint32 { +// computeKEpoch replicates x/audit/v1/keeper.computeKWindow to keep tests deterministic and black-box. +// It computes how many peer targets each sender must probe this epoch. +func computeKEpoch(peerQuorumReports, minTargets, maxTargets uint32, sendersCount, receiversCount int) uint32 { if sendersCount <= 0 || receiversCount <= 1 { return 0 } @@ -256,9 +259,9 @@ func assignedTargets(seed []byte, senders, receivers []string, kWindow uint32, s return out, true } -// auditSelfReportJSON builds the JSON payload for the positional self-report argument. -// AuditSelfReport contains float fields (cpu/mem/disk), so we keep values simple. -func auditSelfReportJSON(inboundPortStates []string) string { +// auditHostReportJSON builds the JSON payload for the positional host-report argument. +// HostReport contains float fields (cpu/mem/disk), so we keep values simple. +func auditHostReportJSON(inboundPortStates []string) string { bz, _ := json.Marshal(map[string]any{ "cpu_usage_percent": 1.0, "mem_usage_percent": 1.0, @@ -269,8 +272,8 @@ func auditSelfReportJSON(inboundPortStates []string) string { return string(bz) } -// auditPeerObservationJSON builds the JSON payload for --peer-observations flag. -func auditPeerObservationJSON(targetSupernodeAccount string, portStates []string) string { +// storageChallengeObservationJSON builds the JSON payload for --storage-challenge-observations flag. +func storageChallengeObservationJSON(targetSupernodeAccount string, portStates []string) string { bz, _ := json.Marshal(map[string]any{ "target_supernode_account": targetSupernodeAccount, "port_states": portStates, @@ -278,17 +281,17 @@ func auditPeerObservationJSON(targetSupernodeAccount string, portStates []string return string(bz) } -// submitAuditReport submits a report using the AutoCLI command: +// submitEpochReport submits a report using the AutoCLI command: // -// tx audit submit-audit-report [window-id] [self-report-json] --peer-observations ... +// tx audit submit-epoch-report [epoch-id] [host-report-json] --storage-challenge-observations ... // // We keep it as a CLI call to validate the end-to-end integration path (signer handling, encoding). -func submitAuditReport(t *testing.T, cli *LumeradCli, fromNode string, windowID uint64, selfReportJSON string, peerObservationJSONs []string) string { +func submitEpochReport(t *testing.T, cli *LumeradCli, fromNode string, epochID uint64, hostReportJSON string, storageChallengeObservationJSONs []string) string { t.Helper() - args := []string{"tx", "audit", "submit-audit-report", strconv.FormatUint(windowID, 10), selfReportJSON, "--from", fromNode} - for _, obs := range peerObservationJSONs { - args = append(args, "--peer-observations", obs) + args := []string{"tx", "audit", "submit-epoch-report", strconv.FormatUint(epochID, 10), hostReportJSON, "--from", fromNode} + for _, obs := range storageChallengeObservationJSONs { + args = append(args, "--storage-challenge-observations", obs) } return cli.CustomCommand(args...) @@ -331,7 +334,7 @@ func sortedStrings(in ...string) []string { // newAuditQueryClient creates a gRPC query client against node0's gRPC endpoint. // -// - `AuditReport` contains float fields; CLI JSON marshalling for those fields is currently broken +// - `EpochReport` contains float fields; CLI JSON marshalling for those fields is currently broken // in this environment and fails with "unknown type float64". func newAuditQueryClient(t *testing.T) (audittypes.QueryClient, func()) { t.Helper() @@ -343,27 +346,27 @@ func newAuditQueryClient(t *testing.T) (audittypes.QueryClient, func()) { } // auditQueryReport queries a stored report via gRPC. -func auditQueryReport(t *testing.T, windowID uint64, reporterSupernodeAccount string) audittypes.AuditReport { +func auditQueryReport(t *testing.T, epochID uint64, reporterSupernodeAccount string) audittypes.EpochReport { t.Helper() qc, _ := newAuditQueryClient(t) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - resp, err := qc.AuditReport(ctx, &audittypes.QueryAuditReportRequest{ - WindowId: windowID, + resp, err := qc.EpochReport(ctx, &audittypes.QueryEpochReportRequest{ + EpochId: epochID, SupernodeAccount: reporterSupernodeAccount, }) require.NoError(t, err) return resp.Report } -func auditQueryAssignedTargets(t *testing.T, windowID uint64, filterByWindowID bool, proberSupernodeAccount string) audittypes.QueryAssignedTargetsResponse { +func auditQueryAssignedTargets(t *testing.T, epochID uint64, filterByEpochID bool, proberSupernodeAccount string) audittypes.QueryAssignedTargetsResponse { t.Helper() qc, _ := newAuditQueryClient(t) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() resp, err := qc.AssignedTargets(ctx, &audittypes.QueryAssignedTargetsRequest{ - WindowId: windowID, - FilterByWindowId: filterByWindowID, + EpochId: epochID, + FilterByEpochId: filterByEpochID, SupernodeAccount: proberSupernodeAccount, }) require.NoError(t, err) diff --git a/tests/systemtests/supernode_utils.go b/tests/systemtests/supernode_utils.go index 7972017..6e032b6 100644 --- a/tests/systemtests/supernode_utils.go +++ b/tests/systemtests/supernode_utils.go @@ -2,9 +2,9 @@ package system import ( "encoding/json" + "errors" "strconv" "testing" - "errors" "time" sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" diff --git a/x/audit/v1/POSTPONEMENT_RULES.md b/x/audit/v1/POSTPONEMENT_RULES.md index 456044e..71e410c 100644 --- a/x/audit/v1/POSTPONEMENT_RULES.md +++ b/x/audit/v1/POSTPONEMENT_RULES.md @@ -1,13 +1,13 @@ # Postponement and Recovery Rules (audit/v1) -This document describes the on-chain rules implemented by `x/audit/v1` for switching a supernode between `ACTIVE` and `POSTPONED`, and for recovering back to `ACTIVE`. +This document describes the on-chain rules implemented by the audit module (v1) for switching a supernode between `ACTIVE` and `POSTPONED`, and for recovering back to `ACTIVE`. ## Definitions - **Epoch**: a contiguous block-height interval `[epoch_start_height, epoch_end_height]` derived from `epoch_zero_height` and `epoch_length_blocks`. - **Probers**: supernodes that are `ACTIVE` at epoch start (i.e., present in `EpochAnchor.active_supernode_accounts`). - **Targets**: supernodes that are `ACTIVE` or `POSTPONED` at epoch start (i.e., present in `EpochAnchor.target_supernode_accounts`). -- **Report**: `MsgSubmitAuditReport` stored under `(epoch_id, supernode_account)`. +- **Report**: `MsgSubmitEpochReport` stored under `(epoch_id, reporter_supernode_account)`, where the reporter is the tx signer (`creator`). ## Enforcement timing @@ -15,13 +15,13 @@ All postpone/recovery decisions are evaluated only at **epoch end** (`epoch_end_ ## Submission-time gating and completeness -Peer observation gating is enforced only when `MsgSubmitAuditReport` is accepted (enforcement later assumes stored observations already passed these checks): +Peer observation gating is enforced only when `MsgSubmitEpochReport` is accepted (enforcement later assumes stored observations already passed these checks): - If the reporter is a **prober** for the epoch (it is in `EpochAnchor.active_supernode_accounts`), then: - - `peer_observations` must include **exactly one entry per assigned target** (no missing targets, no extra targets, no duplicates). - - For each `peer_observation`, `port_states` length must equal the configured `required_open_ports` length. + - `storage_challenge_observations` must include **exactly one entry per assigned target** (no missing targets, no extra targets, no duplicates). + - For each `storage_challenge_observation`, `port_states` length must equal the configured `required_open_ports` length. - If the reporter is **not** a prober for the epoch (e.g. `POSTPONED`), then: - - `peer_observations` must be empty (self-report only). + - `storage_challenge_observations` must be empty (host-report only). ## Postpone rules @@ -31,14 +31,14 @@ If an `ACTIVE` supernode fails to submit any report for `consecutive_epochs_to_p This is evaluated by checking for a stored report in each of the last `N` epochs. -### 2) Host requirements (self report) +### 2) Host Report requirements -If a submitted self report violates any enabled minimum free% threshold, the supernode is set to `POSTPONED`. +If a submitted host report violates any enabled minimum free% threshold, the supernode is set to `POSTPONED`. - Params: `min_cpu_free_percent`, `min_mem_free_percent`, `min_disk_free_percent` (`free% = 100 - usage%`). - Special case: if `*_usage_percent == 0`, that metric is treated as **unknown** and does not trigger postponement. -The following self-report fields are currently ignored by postponement logic: +The following host-report fields are currently ignored by postponement logic: - `failed_actions_count` - `inbound_port_states` @@ -53,5 +53,5 @@ An epoch counts toward the consecutive requirement only if: ## Recovery rule (POSTPONED → ACTIVE) In a single epoch, a `POSTPONED` supernode becomes `ACTIVE` if: -- it submits one compliant self report (host requirements), and +- it submits one compliant host report (Host Report requirements), and - there exists at least **1** peer report about that supernode in the same epoch where **all** required ports are `PORT_STATE_OPEN`. diff --git a/x/audit/v1/README.md b/x/audit/v1/README.md index 4da517f..9d50f57 100644 --- a/x/audit/v1/README.md +++ b/x/audit/v1/README.md @@ -21,15 +21,16 @@ The audit module provides **epoch-based** reporting and enforcement for supernod - a deterministic epoch seed, and - the eligible supernode sets at epoch start (ACTIVE set and target set). -Supernodes submit one report per epoch (`MsgSubmitAuditReport`). At epoch end, the chain evaluates the collected reports (plus selected evidence) to postpone or recover supernodes. +Supernodes submit one report per epoch (`MsgSubmitEpochReport`). At epoch end, the chain evaluates the collected reports (plus selected evidence) to postpone or recover supernodes. ## Overview High-level flow: 1. **Derive epoch boundaries from height** using `epoch_zero_height` and `epoch_length_blocks`. + - When the module is first activated on an already-running chain (via the initial chain upgrade that introduces the audit module), `epoch_zero_height` is set automatically to the upgrade height. 2. **At epoch start height** (`BeginBlocker`), persist `EpochAnchor(epoch_id)` for the epoch. -3. **During the epoch**, supernodes submit `MsgSubmitAuditReport` (one per supernode per epoch). +3. **During the epoch**, supernodes submit `MsgSubmitEpochReport` (one per supernode per epoch). 4. **At epoch end height** (`EndBlocker`), evaluate postponement/recovery rules and prune old epoch-scoped state. ## Epochs and Anchoring @@ -51,24 +52,24 @@ Note: commitment fields are stored on-chain but are not currently validated/used ## Reports -Reports are persisted per `(epoch_id, supernode_account)` and include: +Reports are persisted per `(epoch_id, reporter_supernode_account)` and include: -- `self_report`: self-attested host metrics and counters -- `peer_observations`: port-state observations about other supernodes +- `host_report`: self-attested host metrics and counters (Host Report) +- `storage_challenge_observations`: port-state observations about other supernodes (Storage Challenge) Report submission rules: - only the **current** `epoch_id` (as derived at the current block height) is accepted -- only one report per `(epoch_id, supernode_account)` is accepted -- if `required_open_ports` is non-empty, each peer observation must include exactly that many `port_states` -- `self_report.inbound_port_states` must be either empty (unknown/unreported) or exactly `len(required_open_ports)` (same ordering) +- only one report per `(epoch_id, reporter_supernode_account)` is accepted +- if `required_open_ports` is non-empty, each storage challenge observation must include exactly that many `port_states` +- `host_report.inbound_port_states` must be either empty (unknown/unreported) or exactly `len(required_open_ports)` (same ordering) ### Deterministic peer-observation gating -Peer observation requirements are enforced at `MsgSubmitAuditReport` time: +Peer observation requirements are enforced at `MsgSubmitEpochReport` time: - If the reporter is **ACTIVE at epoch start** (i.e. is present in `EpochAnchor.active_supernode_accounts`), the chain deterministically computes the reporter’s assigned targets and requires exactly one observation per target (no extras, no duplicates). -- If the reporter is **not** ACTIVE at epoch start, `peer_observations` must be empty. +- If the reporter is **not** ACTIVE at epoch start, `storage_challenge_observations` must be empty. Assignments are derived from: @@ -86,7 +87,7 @@ At epoch end, a supernode can be postponed for: - **Action-finalization evidence thresholds** (per-epoch counts meeting consecutive-epoch windows), - **Missing reports** for `consecutive_epochs_to_postpone` consecutive epochs, -- **Self host minimum failures** (CPU/mem/disk free% thresholds), +- **Self Report minimum failures** (CPU/mem/disk free% thresholds), - **Peer port thresholds**: a required port is treated as CLOSED if peer observations meet `peer_port_postpone_threshold_percent`, and this happens for `consecutive_epochs_to_postpone` consecutive epochs. ### Recovery (`POSTPONED -> ACTIVE`) @@ -96,7 +97,7 @@ At epoch end, a supernode can recover: - If postponed due to action-finalization evidence: by the action-finalization recovery window and total-bad-evidence constraint. - Otherwise: if it has a compliant self report and at least one peer observation in the epoch where all required ports are `OPEN`. -Detailed behavior is implemented in `x/audit/v1/keeper/enforcement.go`. +Detailed behavior is implemented in the module's epoch-end enforcement logic. ## Evidence @@ -105,17 +106,17 @@ Evidence records are append-only on-chain records used by enforcement logic. Supported evidence types include: - action module evidence (submitted by the action module account via keeper integration; reserved types are rejected by `MsgSubmitEvidence`) -- storage challenge failure evidence (submitted by challengers; optionally restricted to deterministic challengers for an epoch) +- storage challenge failure evidence (submitted by challengers; deterministically restricted to authorized challengers for an epoch when storage challenge is enabled) -Evidence metadata is provided as JSON in `MsgSubmitEvidence` and stored on-chain as protobuf-binary bytes derived from the JSON. Evidence submission enforces size bounds (and honors `sc_evidence_max_bytes` for SC evidence). +Evidence metadata is provided as JSON in `MsgSubmitEvidence` and stored on-chain as protobuf-binary bytes derived from the JSON. Evidence metadata size is not explicitly bounded by the audit module; transaction size limits are expected to bound worst-case payloads. -For storage challenge failure evidence, challenger authorization (when enabled) is derived deterministically from the epoch anchor seed and anchored ACTIVE set. +For storage challenge failure evidence, challenger authorization is derived deterministically from the epoch anchor seed and anchored ACTIVE set when storage challenge is enabled. ## Pruning and State Layout At epoch end, `PruneOldEpochs` prunes epoch-scoped state to keep only the last `keep_last_epoch_entries` epochs (inclusive). -State is stored under human-readable prefixes with binary epoch IDs (`u64be(epoch_id)`) so lexicographic ordering matches numeric ordering. Key layouts are defined in `x/audit/v1/types/keys.go`, including: +State is stored under human-readable prefixes with binary epoch IDs (`u64be(epoch_id)`) so lexicographic ordering matches numeric ordering. Key layouts are defined in the module types, including: - epoch anchors: `ea/` - reports: `r/` @@ -127,16 +128,16 @@ Note: evidence records are not currently pruned by `PruneOldEpochs`. ## Messages -### `MsgSubmitAuditReport` +### `MsgSubmitEpochReport` -Signed by `supernode_account`: +Signed by `creator` (the transaction signer). The chain treats `creator` as the reporter supernode account. ```protobuf -message MsgSubmitAuditReport { - string supernode_account = 1; +message MsgSubmitEpochReport { + string creator = 1; uint64 epoch_id = 2; - AuditSelfReport self_report = 3; - repeated AuditPeerObservation peer_observations = 4; + HostReport host_report = 3; + repeated StorageChallengeObservation storage_challenge_observations = 4; } ``` @@ -167,10 +168,10 @@ Governance-authority-gated parameter update: - `Query/EpochAnchor(epoch_id)` - `Query/CurrentEpochAnchor` - `Query/AssignedTargets(supernode_account)` (optional `epoch_id` filter) -- `Query/AuditReport(epoch_id, supernode_account)` -- `Query/AuditReportsByReporter(supernode_account)` (paginated; optional `epoch_id` filter) -- `Query/SupernodeReports(supernode_account)` (paginated; optional `epoch_id` filter) -- `Query/SelfReports(supernode_account)` (paginated; optional `epoch_id` filter) +- `Query/EpochReport(epoch_id, supernode_account)` +- `Query/EpochReportsByReporter(supernode_account)` (paginated; optional `epoch_id` filter) +- `Query/StorageChallengeReports(supernode_account)` (paginated; optional `epoch_id` filter) +- `Query/HostReports(supernode_account)` (paginated; optional `epoch_id` filter) - Evidence: - `Query/EvidenceById` - `Query/EvidenceBySubject` (paginated) @@ -178,11 +179,11 @@ Governance-authority-gated parameter update: ## Parameters -Params are initialized from genesis and may later be updated by governance via `MsgUpdateParams` (with epoch-cadence fields immutable). Defaults (see `x/audit/v1/types/params.go`): +Params are initialized from genesis and may later be updated by governance via `MsgUpdateParams` (with epoch-cadence fields immutable). Defaults: - Epoch cadence: - `epoch_length_blocks`: `400` (immutable after genesis) - - `epoch_zero_height`: `1` (immutable after genesis) + - `epoch_zero_height`: set once at module activation (immutable after that) - Report/assignment gating: - `peer_quorum_reports`: `3` - `min_probe_targets_per_epoch`: `3` @@ -198,7 +199,8 @@ Params are initialized from genesis and may later be updated by governance via ` - Action-finalization evidence: - `action_finalization_*` thresholds and windows - Storage challenge: - - `sc_*` settings, including `sc_evidence_max_bytes` (max SC evidence metadata bytes) + - `sc_enabled` + - `sc_challengers_per_epoch` (0 means auto-select) ## Genesis @@ -214,4 +216,4 @@ Epoch boundaries are purely param-derived; there is no mutable “current epoch - gRPC query service: `lumera.audit.v1.Query` - gRPC msg service: `lumera.audit.v1.Msg` -- REST endpoints are defined via `google.api.http` annotations in `proto/lumera/audit/v1/query.proto`. +- REST endpoints are defined via `google.api.http` annotations in the audit query service. diff --git a/x/audit/v1/keeper/enforcement.go b/x/audit/v1/keeper/enforcement.go index 7373d48..df9edfc 100644 --- a/x/audit/v1/keeper/enforcement.go +++ b/x/audit/v1/keeper/enforcement.go @@ -16,7 +16,7 @@ const ( ) // EnforceEpochEnd evaluates the completed epoch and updates supernode states accordingly. -// It does not re-check peer assignment gating; that must be enforced at MsgSubmitAuditReport time. +// It does not re-check storage-challenge assignment gating; that must be enforced at MsgSubmitEpochReport time. func (k Keeper) EnforceEpochEnd(ctx sdk.Context, epochID uint64, params types.Params) error { params = params.WithDefaults() @@ -141,7 +141,7 @@ func (k Keeper) shouldRecoverAtEpochEnd(ctx sdk.Context, supernodeAccount string return k.shouldRecoverFromActionFinalizationPostponement(ctx, supernodeAccount, epochID, postponedAtEpochID, params), nil } - // Need one compliant self report. + // Need one compliant host report. selfCompliant, err := k.selfHostCompliant(ctx, supernodeAccount, epochID, params) if err != nil || !selfCompliant { return false, err @@ -168,10 +168,10 @@ func (k Keeper) shouldRecoverAtEpochEnd(ctx sdk.Context, supernodeAccount string continue } - var obs *types.AuditPeerObservation - for i := range r.PeerObservations { - if r.PeerObservations[i] != nil && r.PeerObservations[i].TargetSupernodeAccount == supernodeAccount { - obs = r.PeerObservations[i] + var obs *types.StorageChallengeObservation + for i := range r.StorageChallengeObservations { + if r.StorageChallengeObservations[i] != nil && r.StorageChallengeObservations[i].TargetSupernodeAccount == supernodeAccount { + obs = r.StorageChallengeObservations[i] break } } @@ -292,13 +292,13 @@ func (k Keeper) selfHostViolatesMinimums(ctx sdk.Context, supernodeAccount strin } // If any known metric is below minimum free%, postpone. - if violatesMinFree(r.SelfReport.CpuUsagePercent, params.MinCpuFreePercent) { + if violatesMinFree(r.HostReport.CpuUsagePercent, params.MinCpuFreePercent) { return true, nil } - if violatesMinFree(r.SelfReport.MemUsagePercent, params.MinMemFreePercent) { + if violatesMinFree(r.HostReport.MemUsagePercent, params.MinMemFreePercent) { return true, nil } - if violatesMinFree(r.SelfReport.DiskUsagePercent, params.MinDiskFreePercent) { + if violatesMinFree(r.HostReport.DiskUsagePercent, params.MinDiskFreePercent) { return true, nil } @@ -311,13 +311,13 @@ func (k Keeper) selfHostCompliant(ctx sdk.Context, supernodeAccount string, epoc return false, nil } - if !compliesMinFree(r.SelfReport.CpuUsagePercent, params.MinCpuFreePercent) { + if !compliesMinFree(r.HostReport.CpuUsagePercent, params.MinCpuFreePercent) { return false, nil } - if !compliesMinFree(r.SelfReport.MemUsagePercent, params.MinMemFreePercent) { + if !compliesMinFree(r.HostReport.MemUsagePercent, params.MinMemFreePercent) { return false, nil } - if !compliesMinFree(r.SelfReport.DiskUsagePercent, params.MinDiskFreePercent) { + if !compliesMinFree(r.HostReport.DiskUsagePercent, params.MinDiskFreePercent) { return false, nil } @@ -377,10 +377,10 @@ func (k Keeper) peersPortStateMeetsThresholdWithPeers(ctx sdk.Context, target st return false, nil } - var obs *types.AuditPeerObservation - for i := range r.PeerObservations { - if r.PeerObservations[i] != nil && r.PeerObservations[i].TargetSupernodeAccount == target { - obs = r.PeerObservations[i] + var obs *types.StorageChallengeObservation + for i := range r.StorageChallengeObservations { + if r.StorageChallengeObservations[i] != nil && r.StorageChallengeObservations[i].TargetSupernodeAccount == target { + obs = r.StorageChallengeObservations[i] break } } @@ -402,7 +402,7 @@ func (k Keeper) peersPortStateMeetsThresholdWithPeers(ctx sdk.Context, target st func (k Keeper) peerReportersForTargetEpoch(ctx sdk.Context, target string, epochID uint64) ([]string, error) { store := k.kvStore(ctx) - prefix := types.SupernodeReportIndexEpochPrefix(target, epochID) + prefix := types.StorageChallengeReportIndexEpochPrefix(target, epochID) it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) defer it.Close() diff --git a/x/audit/v1/keeper/enforcement_test.go b/x/audit/v1/keeper/enforcement_test.go index 7d1c6d5..70c8b88 100644 --- a/x/audit/v1/keeper/enforcement_test.go +++ b/x/audit/v1/keeper/enforcement_test.go @@ -15,23 +15,23 @@ func TestPeerPortPostponementThresholdPercent(t *testing.T) { t.Helper() // Target must submit a report to avoid missing-report postponement. - err := f.keeper.SetReport(f.ctx, types.AuditReport{ + err := f.keeper.SetReport(f.ctx, types.EpochReport{ SupernodeAccount: target.SupernodeAccount, EpochId: epochID, ReportHeight: f.ctx.BlockHeight(), - SelfReport: types.AuditSelfReport{}, + HostReport: types.HostReport{}, }) if err != nil { t.Fatalf("failed to set target report: %v", err) } for i, peer := range peers { - err := f.keeper.SetReport(f.ctx, types.AuditReport{ + err := f.keeper.SetReport(f.ctx, types.EpochReport{ SupernodeAccount: peer.SupernodeAccount, EpochId: epochID, ReportHeight: f.ctx.BlockHeight(), - SelfReport: types.AuditSelfReport{}, - PeerObservations: []*types.AuditPeerObservation{ + HostReport: types.HostReport{}, + StorageChallengeObservations: []*types.StorageChallengeObservation{ { TargetSupernodeAccount: target.SupernodeAccount, PortStates: []types.PortState{portStateForPeer[i]}, @@ -41,7 +41,7 @@ func TestPeerPortPostponementThresholdPercent(t *testing.T) { if err != nil { t.Fatalf("failed to set peer report: %v", err) } - f.keeper.SetSupernodeReportIndex(f.ctx, target.SupernodeAccount, epochID, peer.SupernodeAccount) + f.keeper.SetStorageChallengeReportIndex(f.ctx, target.SupernodeAccount, epochID, peer.SupernodeAccount) } } diff --git a/x/audit/v1/keeper/evidence.go b/x/audit/v1/keeper/evidence.go index 85a4643..50ab48c 100644 --- a/x/audit/v1/keeper/evidence.go +++ b/x/audit/v1/keeper/evidence.go @@ -14,18 +14,10 @@ import ( ) const ( - // Evidence is currently unpruned and stored on-chain, so these must remain bounded to - // avoid state-bloat/DoS. Keep them "roomy" enough to avoid accidental breakage. - maxEvidenceMetadataJSONBytes = 2 * 1024 * 1024 // 2 MiB - maxEvidenceActionIDBytes = 4 * 1024 // 4 KiB - - // Applies to non-SC evidence types until/unless a dedicated param is introduced. - maxEvidenceMetadataBytes = 256 * 1024 // 256 KiB - - maxScChallengeIDBytes = 256 // 256 B - maxScFileKeyBytes = 4 * 1024 // 4 KiB - maxScFailureTypeBytes = 256 // 256 B - maxScTranscriptHashBytes = 256 // 256 B + maxEvidenceActionIDBytes = 4 * 1024 // 4 KiB + + // Evidence metadata size is not explicitly enforced here. Transaction size limits + // (and any app-level tx size limits) are expected to bound worst-case payloads. ) func (k Keeper) CreateEvidence( @@ -64,9 +56,6 @@ func (k Keeper) CreateEvidence( if metadataJSON == "" { return 0, types.ErrInvalidMetadata } - if len(metadataJSON) > maxEvidenceMetadataJSONBytes { - return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "metadata is too large") - } if actionID == "" { // For the initial supported evidence types (action expiration/finalization), action id is required. @@ -85,9 +74,6 @@ func (k Keeper) CreateEvidence( if err != nil { return 0, errorsmod.Wrap(types.ErrInvalidMetadata, err.Error()) } - if evidenceType != types.EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE && len(metadataBytes) > maxEvidenceMetadataBytes { - return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "metadata is too large") - } sdkCtx := sdk.UnwrapSDKContext(ctx) if evidenceType == types.EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED || @@ -103,9 +89,6 @@ func (k Keeper) CreateEvidence( if evidenceType == types.EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE { params := k.GetParams(ctx).WithDefaults() - if params.ScEvidenceMaxBytes > 0 && uint64(len(metadataBytes)) > params.ScEvidenceMaxBytes { - return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "metadata exceeds sc_evidence_max_bytes") - } var m types.StorageChallengeFailureEvidenceMetadata if err := gogoproto.Unmarshal(metadataBytes, &m); err != nil { @@ -123,40 +106,32 @@ func (k Keeper) CreateEvidence( if subjectAddress != m.ChallengedSupernodeAccount { return 0, errorsmod.Wrap(types.ErrInvalidSubject, "subject_address must match challenged_supernode_account") } - if len(strings.TrimSpace(m.ChallengeId)) > maxScChallengeIDBytes { - return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "challenge_id is too large") - } - if len(strings.TrimSpace(m.FileKey)) > maxScFileKeyBytes { - return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "file_key is too large") - } - if len(strings.TrimSpace(m.FailureType)) > maxScFailureTypeBytes { - return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "failure_type is too large") - } - if len(strings.TrimSpace(m.TranscriptHash)) > maxScTranscriptHashBytes { - return 0, errorsmod.Wrap(types.ErrInvalidMetadata, "transcript_hash is too large") - } anchor, found := k.GetEpochAnchor(sdkCtx, m.EpochId) if !found { return 0, errorsmod.Wrap(types.ErrInvalidMetadata, fmt.Sprintf("epoch anchor not found for epoch_id %d", m.EpochId)) } - if params.ScEnabled && params.ScEvidenceSubmitterMustBeChallenger { - kc := storageChallengeChallengerCount(len(anchor.ActiveSupernodeAccounts), params.ScChallengersPerEpoch) - target := storageChallengeComparisonTarget(anchor.Seed, m.EpochId) - challengers := selectTopByXORDistance(anchor.ActiveSupernodeAccounts, target, kc) + if !params.ScEnabled { + return 0, errorsmod.Wrap(types.ErrInvalidEvidenceType, "storage challenge evidence is disabled") + } - allowed := false - for _, c := range challengers { - if c == reporterAddress { - allowed = true - break - } - } - if !allowed { - return 0, errorsmod.Wrap(types.ErrInvalidReporter, "reporter is not an authorized challenger for epoch") + // Storage challenge failure evidence submitters must always be deterministically + // authorized challengers for the referenced epoch. + kc := storageChallengeChallengerCount(len(anchor.ActiveSupernodeAccounts), params.ScChallengersPerEpoch) + target := storageChallengeComparisonTarget(anchor.Seed, m.EpochId) + challengers := selectTopByXORDistance(anchor.ActiveSupernodeAccounts, target, kc) + + allowed := false + for _, c := range challengers { + if c == reporterAddress { + allowed = true + break } } + if !allowed { + return 0, errorsmod.Wrap(types.ErrInvalidReporter, "reporter is not an authorized challenger for epoch") + } // Optional consistency check: ensure subject was eligible as a target at epoch start. eligible := false diff --git a/x/audit/v1/keeper/genesis.go b/x/audit/v1/keeper/genesis.go index 24faab0..e9e43ca 100644 --- a/x/audit/v1/keeper/genesis.go +++ b/x/audit/v1/keeper/genesis.go @@ -10,9 +10,14 @@ import ( // InitGenesis initializes the module's state from a provided genesis state. func (k Keeper) InitGenesis(ctx context.Context, genState types.GenesisState) error { + params := genState.Params.WithDefaults() + if err := params.Validate(); err != nil { + return err + } + // Genesis is the initial source of truth for module params. After genesis, params can // only be updated via governance (MsgUpdateParams). - if err := k.SetParams(ctx, genState.Params); err != nil { + if err := k.SetParams(ctx, params); err != nil { return err } @@ -21,11 +26,6 @@ func (k Keeper) InitGenesis(ctx context.Context, genState types.GenesisState) er sdkCtx = sdk.UnwrapSDKContext(ctx) } - params := genState.Params.WithDefaults() - if err := params.Validate(); err != nil { - return err - } - var nextEvidenceID uint64 if genState.NextEvidenceId != 0 { nextEvidenceID = genState.NextEvidenceId diff --git a/x/audit/v1/keeper/msg_submit_audit_report.go b/x/audit/v1/keeper/msg_submit_epoch_report.go similarity index 67% rename from x/audit/v1/keeper/msg_submit_audit_report.go rename to x/audit/v1/keeper/msg_submit_epoch_report.go index 0ba6dbd..e0e95fd 100644 --- a/x/audit/v1/keeper/msg_submit_audit_report.go +++ b/x/audit/v1/keeper/msg_submit_epoch_report.go @@ -9,10 +9,13 @@ import ( "github.com/LumeraProtocol/lumera/x/audit/v1/types" ) -func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAuditReport) (*types.MsgSubmitAuditReportResponse, error) { +func (m msgServer) SubmitEpochReport(ctx context.Context, req *types.MsgSubmitEpochReport) (*types.MsgSubmitEpochReportResponse, error) { if req == nil { return nil, errorsmod.Wrap(types.ErrInvalidSigner, "empty request") } + if req.Creator == "" { + return nil, errorsmod.Wrap(types.ErrInvalidSigner, "creator is required") + } sdkCtx := sdk.UnwrapSDKContext(ctx) params := m.GetParams(ctx).WithDefaults() @@ -29,12 +32,12 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu return nil, errorsmod.Wrapf(types.ErrInvalidEpochID, "epoch_id not accepted at height %d", sdkCtx.BlockHeight()) } - _, found, err := m.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.SupernodeAccount) + _, found, err := m.supernodeKeeper.GetSuperNodeByAccount(sdkCtx, req.Creator) if err != nil { return nil, err } if !found { - return nil, errorsmod.Wrap(types.ErrReporterNotFound, "unknown supernode_account") + return nil, errorsmod.Wrap(types.ErrReporterNotFound, "creator is not a registered supernode") } anchor, found := m.GetEpochAnchor(sdkCtx, req.EpochId) @@ -42,7 +45,9 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu return nil, errorsmod.Wrapf(types.ErrInvalidEpochID, "epoch anchor not found for epoch_id %d", req.EpochId) } - allowedTargetsList, isProber, err := computeAuditPeerTargetsForReporter(¶ms, anchor.ActiveSupernodeAccounts, anchor.TargetSupernodeAccounts, anchor.Seed, req.SupernodeAccount) + reporterAccount := req.Creator + + allowedTargetsList, isProber, err := computeAuditPeerTargetsForReporter(¶ms, anchor.ActiveSupernodeAccounts, anchor.TargetSupernodeAccounts, anchor.Seed, reporterAccount) if err != nil { return nil, err } @@ -52,52 +57,52 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu } requiredPortsLen := len(params.RequiredOpenPorts) - // Self report port states are persisted on-chain. To prevent state bloat and keep the + // Host report port states are persisted on-chain. To prevent state bloat and keep the // semantics clear, allow either: // - an empty list (unknown/unreported), or // - a full list matching required_open_ports length (same ordering). - if len(req.SelfReport.InboundPortStates) > requiredPortsLen { + if len(req.HostReport.InboundPortStates) > requiredPortsLen { return nil, errorsmod.Wrapf( types.ErrInvalidPortStatesLength, "inbound_port_states length %d exceeds required_open_ports length %d", - len(req.SelfReport.InboundPortStates), requiredPortsLen, + len(req.HostReport.InboundPortStates), requiredPortsLen, ) } - if len(req.SelfReport.InboundPortStates) != 0 && len(req.SelfReport.InboundPortStates) != requiredPortsLen { + if len(req.HostReport.InboundPortStates) != 0 && len(req.HostReport.InboundPortStates) != requiredPortsLen { return nil, errorsmod.Wrapf( types.ErrInvalidPortStatesLength, "inbound_port_states length %d must be 0 or %d", - len(req.SelfReport.InboundPortStates), requiredPortsLen, + len(req.HostReport.InboundPortStates), requiredPortsLen, ) } if !isProber { // Not a prober for this epoch (e.g. POSTPONED). Peer observations are not accepted. - if len(req.PeerObservations) > 0 { - return nil, errorsmod.Wrap(types.ErrInvalidReporterState, "reporter not eligible for peer observations in this epoch") + if len(req.StorageChallengeObservations) > 0 { + return nil, errorsmod.Wrap(types.ErrInvalidReporterState, "reporter not eligible for storage challenge observations in this epoch") } } else { // Probers must submit peer observations for all assigned targets for the epoch. - if len(req.PeerObservations) != len(allowedTargets) { - return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "expected peer observations for %d assigned targets; got %d", len(allowedTargets), len(req.PeerObservations)) + if len(req.StorageChallengeObservations) != len(allowedTargets) { + return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "expected storage challenge observations for %d assigned targets; got %d", len(allowedTargets), len(req.StorageChallengeObservations)) } - seenTargets := make(map[string]struct{}, len(req.PeerObservations)) - for _, obs := range req.PeerObservations { + seenTargets := make(map[string]struct{}, len(req.StorageChallengeObservations)) + for _, obs := range req.StorageChallengeObservations { if obs == nil { - return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "nil peer observation") + return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "nil storage challenge observation") } target := obs.TargetSupernodeAccount if target == "" { return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "empty target_supernode_account") } - if target == req.SupernodeAccount { + if target == reporterAccount { return nil, errorsmod.Wrap(types.ErrInvalidPeerObservations, "self-targeting is not allowed") } if _, ok := allowedTargets[target]; !ok { return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "target %q is not assigned to reporter in this epoch", target) } if _, dup := seenTargets[target]; dup { - return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "duplicate peer observation for target %q", target) + return nil, errorsmod.Wrapf(types.ErrInvalidPeerObservations, "duplicate storage challenge observation for target %q", target) } seenTargets[target] = struct{}{} @@ -110,27 +115,26 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu } } - reporterAccount := req.SupernodeAccount if m.HasReport(sdkCtx, req.EpochId, reporterAccount) { return nil, errorsmod.Wrap(types.ErrDuplicateReport, "report already submitted for this epoch") } - report := types.AuditReport{ - SupernodeAccount: reporterAccount, - EpochId: req.EpochId, - ReportHeight: sdkCtx.BlockHeight(), - SelfReport: req.SelfReport, - PeerObservations: req.PeerObservations, + report := types.EpochReport{ + SupernodeAccount: reporterAccount, + EpochId: req.EpochId, + ReportHeight: sdkCtx.BlockHeight(), + HostReport: req.HostReport, + StorageChallengeObservations: req.StorageChallengeObservations, } if err := m.SetReport(sdkCtx, report); err != nil { return nil, err } m.SetReportIndex(sdkCtx, req.EpochId, reporterAccount) - m.SetSelfReportIndex(sdkCtx, req.EpochId, reporterAccount) + m.SetHostReportIndex(sdkCtx, req.EpochId, reporterAccount) - seenSupernodes := make(map[string]struct{}, len(req.PeerObservations)) - for _, obs := range req.PeerObservations { + seenSupernodes := make(map[string]struct{}, len(req.StorageChallengeObservations)) + for _, obs := range req.StorageChallengeObservations { if obs == nil { continue } @@ -142,8 +146,8 @@ func (m msgServer) SubmitAuditReport(ctx context.Context, req *types.MsgSubmitAu continue } seenSupernodes[supernodeAccount] = struct{}{} - m.SetSupernodeReportIndex(sdkCtx, supernodeAccount, req.EpochId, reporterAccount) + m.SetStorageChallengeReportIndex(sdkCtx, supernodeAccount, req.EpochId, reporterAccount) } - return &types.MsgSubmitAuditReportResponse{}, nil + return &types.MsgSubmitEpochReportResponse{}, nil } diff --git a/x/audit/v1/keeper/msg_submit_audit_report_test.go b/x/audit/v1/keeper/msg_submit_epoch_report_test.go similarity index 75% rename from x/audit/v1/keeper/msg_submit_audit_report_test.go rename to x/audit/v1/keeper/msg_submit_epoch_report_test.go index 94b1507..1f38327 100644 --- a/x/audit/v1/keeper/msg_submit_audit_report_test.go +++ b/x/audit/v1/keeper/msg_submit_epoch_report_test.go @@ -11,7 +11,7 @@ import ( "go.uber.org/mock/gomock" ) -func TestSubmitAuditReport_ValidatesInboundPortStatesLength(t *testing.T) { +func TestSubmitEpochReport_ValidatesInboundPortStatesLength(t *testing.T) { f := initFixture(t) f.ctx = f.ctx.WithBlockHeight(1) @@ -45,35 +45,34 @@ func TestSubmitAuditReport_ValidatesInboundPortStatesLength(t *testing.T) { require.Greater(t, requiredPortsLen, 0) // Empty inbound_port_states is allowed (unknown/unreported). - _, err = ms.SubmitAuditReport(f.ctx, &types.MsgSubmitAuditReport{ - SupernodeAccount: reporter, - EpochId: 0, - SelfReport: types.AuditSelfReport{}, - PeerObservations: nil, + _, err = ms.SubmitEpochReport(f.ctx, &types.MsgSubmitEpochReport{ + Creator: reporter, + EpochId: 0, + HostReport: types.HostReport{}, + StorageChallengeObservations: nil, }) require.NoError(t, err) // Partial inbound_port_states is rejected. - _, err = ms.SubmitAuditReport(f.ctx, &types.MsgSubmitAuditReport{ - SupernodeAccount: reporter, - EpochId: 0, - SelfReport: types.AuditSelfReport{ + _, err = ms.SubmitEpochReport(f.ctx, &types.MsgSubmitEpochReport{ + Creator: reporter, + EpochId: 0, + HostReport: types.HostReport{ InboundPortStates: []types.PortState{types.PortState_PORT_STATE_OPEN}, }, - PeerObservations: nil, + StorageChallengeObservations: nil, }) require.Error(t, err) // Oversized inbound_port_states is rejected. oversized := make([]types.PortState, requiredPortsLen+1) - _, err = ms.SubmitAuditReport(f.ctx, &types.MsgSubmitAuditReport{ - SupernodeAccount: reporter, - EpochId: 0, - SelfReport: types.AuditSelfReport{ + _, err = ms.SubmitEpochReport(f.ctx, &types.MsgSubmitEpochReport{ + Creator: reporter, + EpochId: 0, + HostReport: types.HostReport{ InboundPortStates: oversized, }, - PeerObservations: nil, + StorageChallengeObservations: nil, }) require.Error(t, err) } - diff --git a/x/audit/v1/keeper/prune.go b/x/audit/v1/keeper/prune.go index 5935fbe..32d16df 100644 --- a/x/audit/v1/keeper/prune.go +++ b/x/audit/v1/keeper/prune.go @@ -31,17 +31,17 @@ func (k Keeper) PruneOldEpochs(ctx sdk.Context, currentEpochID uint64, params ty } // Reports: r/ - if err := prunePrefixByWindowIDLeadingU64(store, []byte("r/"), minKeepEpochID); err != nil { + if err := prunePrefixByWindowIDLeadingU64(store, types.ReportPrefix(), minKeepEpochID); err != nil { return err } // Indices: // - ri// - // - ss// - // - sr/// - pruneReporterTrailingWindowID(store, []byte("ri/"), minKeepEpochID) - pruneReporterTrailingWindowID(store, []byte("ss/"), minKeepEpochID) - pruneSupernodeWindowReporter(store, []byte("sr/"), minKeepEpochID) + // - hr// + // - sc/// + pruneReporterTrailingWindowID(store, types.ReportIndexRootPrefix(), minKeepEpochID) + pruneReporterTrailingWindowID(store, types.HostReportIndexRootPrefix(), minKeepEpochID) + pruneSupernodeWindowReporter(store, types.StorageChallengeReportIndexRootPrefix(), minKeepEpochID) // Evidence epoch counts: eve//... if err := prunePrefixByWindowIDLeadingU64(store, types.EvidenceEpochCountPrefix(), minKeepEpochID); err != nil { @@ -112,7 +112,7 @@ func pruneReporterTrailingWindowID(store storetypes.KVStore, prefix []byte, minK // pruneSupernodeWindowReporter prunes keys shaped like: // -// sr/"/""/" +// sc/"/""/" func pruneSupernodeWindowReporter(store storetypes.KVStore, prefix []byte, minKeepWindowID uint64) { it := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) defer it.Close() diff --git a/x/audit/v1/keeper/query_audit_report.go b/x/audit/v1/keeper/query_epoch_report.go similarity index 77% rename from x/audit/v1/keeper/query_audit_report.go rename to x/audit/v1/keeper/query_epoch_report.go index 42ba296..065656d 100644 --- a/x/audit/v1/keeper/query_audit_report.go +++ b/x/audit/v1/keeper/query_epoch_report.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (q queryServer) AuditReport(ctx context.Context, req *types.QueryAuditReportRequest) (*types.QueryAuditReportResponse, error) { +func (q queryServer) EpochReport(ctx context.Context, req *types.QueryEpochReportRequest) (*types.QueryEpochReportResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -30,8 +30,8 @@ func (q queryServer) AuditReport(ctx context.Context, req *types.QueryAuditRepor r, found := q.k.GetReport(sdkCtx, req.EpochId, req.SupernodeAccount) if !found { - return nil, status.Error(codes.NotFound, "audit report not found") + return nil, status.Error(codes.NotFound, "epoch report not found") } - return &types.QueryAuditReportResponse{Report: r}, nil + return &types.QueryEpochReportResponse{Report: r}, nil } diff --git a/x/audit/v1/keeper/query_audit_reports_by_reporter.go b/x/audit/v1/keeper/query_epoch_reports_by_reporter.go similarity index 77% rename from x/audit/v1/keeper/query_audit_reports_by_reporter.go rename to x/audit/v1/keeper/query_epoch_reports_by_reporter.go index aa7d472..913ec1b 100644 --- a/x/audit/v1/keeper/query_audit_reports_by_reporter.go +++ b/x/audit/v1/keeper/query_epoch_reports_by_reporter.go @@ -13,7 +13,7 @@ import ( "google.golang.org/grpc/status" ) -func (q queryServer) AuditReportsByReporter(ctx context.Context, req *types.QueryAuditReportsByReporterRequest) (*types.QueryAuditReportsByReporterResponse, error) { +func (q queryServer) EpochReportsByReporter(ctx context.Context, req *types.QueryEpochReportsByReporterRequest) (*types.QueryEpochReportsByReporterResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -35,7 +35,7 @@ func (q queryServer) AuditReportsByReporter(ctx context.Context, req *types.Quer storeAdapter := runtime.KVStoreAdapter(q.k.storeService.OpenKVStore(sdkCtx)) store := prefix.NewStore(storeAdapter, types.ReportIndexPrefix(req.SupernodeAccount)) - var reports []types.AuditReport + var reports []types.EpochReport pagination := req.Pagination if pagination == nil { @@ -45,9 +45,9 @@ func (q queryServer) AuditReportsByReporter(ctx context.Context, req *types.Quer if req.FilterByEpochId { r, found := q.k.GetReport(sdkCtx, req.EpochId, req.SupernodeAccount) if !found { - return &types.QueryAuditReportsByReporterResponse{Reports: []types.AuditReport{}, Pagination: &query.PageResponse{}}, nil + return &types.QueryEpochReportsByReporterResponse{Reports: []types.EpochReport{}, Pagination: &query.PageResponse{}}, nil } - return &types.QueryAuditReportsByReporterResponse{Reports: []types.AuditReport{r}, Pagination: &query.PageResponse{}}, nil + return &types.QueryEpochReportsByReporterResponse{Reports: []types.EpochReport{r}, Pagination: &query.PageResponse{}}, nil } pageRes, err := query.Paginate(store, pagination, func(key, _ []byte) error { @@ -66,7 +66,7 @@ func (q queryServer) AuditReportsByReporter(ctx context.Context, req *types.Quer return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryAuditReportsByReporterResponse{ + return &types.QueryEpochReportsByReporterResponse{ Reports: reports, Pagination: pageRes, }, nil diff --git a/x/audit/v1/keeper/query_self_reports.go b/x/audit/v1/keeper/query_host_reports.go similarity index 75% rename from x/audit/v1/keeper/query_self_reports.go rename to x/audit/v1/keeper/query_host_reports.go index cb0b546..0a3196a 100644 --- a/x/audit/v1/keeper/query_self_reports.go +++ b/x/audit/v1/keeper/query_host_reports.go @@ -13,7 +13,7 @@ import ( "google.golang.org/grpc/status" ) -func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReportsRequest) (*types.QuerySelfReportsResponse, error) { +func (q queryServer) HostReports(ctx context.Context, req *types.QueryHostReportsRequest) (*types.QueryHostReportsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -28,12 +28,12 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport var store prefix.Store if useEpochFilter { - store = prefix.NewStore(storeAdapter, types.SelfReportIndexKey(req.SupernodeAccount, req.EpochId)) + store = prefix.NewStore(storeAdapter, types.HostReportIndexKey(req.SupernodeAccount, req.EpochId)) } else { - store = prefix.NewStore(storeAdapter, types.SelfReportIndexPrefix(req.SupernodeAccount)) + store = prefix.NewStore(storeAdapter, types.HostReportIndexPrefix(req.SupernodeAccount)) } - var reports []types.SelfReport + var reports []types.HostReportEntry pagination := req.Pagination if pagination == nil { @@ -46,7 +46,7 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport epochID = req.EpochId } else { if len(key) != 8 { - return status.Error(codes.Internal, "invalid self report index key") + return status.Error(codes.Internal, "invalid host report index key") } epochID = binary.BigEndian.Uint64(key) } @@ -55,10 +55,10 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport if !found { return nil } - reports = append(reports, types.SelfReport{ + reports = append(reports, types.HostReportEntry{ EpochId: r.EpochId, ReportHeight: r.ReportHeight, - SelfReport: r.SelfReport, + HostReport: r.HostReport, }) return nil }) @@ -66,7 +66,7 @@ func (q queryServer) SelfReports(ctx context.Context, req *types.QuerySelfReport return nil, status.Error(codes.Internal, err.Error()) } - return &types.QuerySelfReportsResponse{ + return &types.QueryHostReportsResponse{ Reports: reports, Pagination: pageRes, }, nil diff --git a/x/audit/v1/keeper/query_supernode_reports.go b/x/audit/v1/keeper/query_storage_challenge_reports.go similarity index 77% rename from x/audit/v1/keeper/query_supernode_reports.go rename to x/audit/v1/keeper/query_storage_challenge_reports.go index 4be6f37..5be3551 100644 --- a/x/audit/v1/keeper/query_supernode_reports.go +++ b/x/audit/v1/keeper/query_storage_challenge_reports.go @@ -13,7 +13,7 @@ import ( "google.golang.org/grpc/status" ) -func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySupernodeReportsRequest) (*types.QuerySupernodeReportsResponse, error) { +func (q queryServer) StorageChallengeReports(ctx context.Context, req *types.QueryStorageChallengeReportsRequest) (*types.QueryStorageChallengeReportsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -27,12 +27,12 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper var store prefix.Store useEpochFilter := req.FilterByEpochId || req.EpochId != 0 if useEpochFilter { - store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexEpochPrefix(req.SupernodeAccount, req.EpochId)) + store = prefix.NewStore(storeAdapter, types.StorageChallengeReportIndexEpochPrefix(req.SupernodeAccount, req.EpochId)) } else { - store = prefix.NewStore(storeAdapter, types.SupernodeReportIndexPrefix(req.SupernodeAccount)) + store = prefix.NewStore(storeAdapter, types.StorageChallengeReportIndexPrefix(req.SupernodeAccount)) } - var reports []types.SupernodeReport + var reports []types.StorageChallengeReport pagination := req.Pagination if pagination == nil { @@ -66,7 +66,7 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper } var portStates []types.PortState - for _, obs := range r.PeerObservations { + for _, obs := range r.StorageChallengeObservations { if obs == nil { continue } @@ -82,7 +82,7 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper return nil } - reports = append(reports, types.SupernodeReport{ + reports = append(reports, types.StorageChallengeReport{ ReporterSupernodeAccount: reporter, EpochId: r.EpochId, ReportHeight: r.ReportHeight, @@ -94,7 +94,7 @@ func (q queryServer) SupernodeReports(ctx context.Context, req *types.QuerySuper return nil, status.Error(codes.Internal, err.Error()) } - return &types.QuerySupernodeReportsResponse{ + return &types.QueryStorageChallengeReportsResponse{ Reports: reports, Pagination: pageRes, }, nil diff --git a/x/audit/v1/keeper/state.go b/x/audit/v1/keeper/state.go index 6ae5131..ea31897 100644 --- a/x/audit/v1/keeper/state.go +++ b/x/audit/v1/keeper/state.go @@ -11,18 +11,18 @@ func (k Keeper) HasReport(ctx sdk.Context, epochID uint64, reporterSupernodeAcco return store.Has(types.ReportKey(epochID, reporterSupernodeAccount)) } -func (k Keeper) GetReport(ctx sdk.Context, epochID uint64, reporterSupernodeAccount string) (types.AuditReport, bool) { +func (k Keeper) GetReport(ctx sdk.Context, epochID uint64, reporterSupernodeAccount string) (types.EpochReport, bool) { store := k.kvStore(ctx) bz := store.Get(types.ReportKey(epochID, reporterSupernodeAccount)) if bz == nil { - return types.AuditReport{}, false + return types.EpochReport{}, false } - var r types.AuditReport + var r types.EpochReport k.cdc.MustUnmarshal(bz, &r) return r, true } -func (k Keeper) SetReport(ctx sdk.Context, r types.AuditReport) error { +func (k Keeper) SetReport(ctx sdk.Context, r types.EpochReport) error { store := k.kvStore(ctx) bz, err := k.cdc.Marshal(&r) if err != nil { @@ -37,12 +37,12 @@ func (k Keeper) SetReportIndex(ctx sdk.Context, epochID uint64, reporterSupernod store.Set(types.ReportIndexKey(reporterSupernodeAccount, epochID), []byte{1}) } -func (k Keeper) SetSupernodeReportIndex(ctx sdk.Context, supernodeAccount string, epochID uint64, reporterSupernodeAccount string) { +func (k Keeper) SetStorageChallengeReportIndex(ctx sdk.Context, supernodeAccount string, epochID uint64, reporterSupernodeAccount string) { store := k.kvStore(ctx) - store.Set(types.SupernodeReportIndexKey(supernodeAccount, epochID, reporterSupernodeAccount), []byte{1}) + store.Set(types.StorageChallengeReportIndexKey(supernodeAccount, epochID, reporterSupernodeAccount), []byte{1}) } -func (k Keeper) SetSelfReportIndex(ctx sdk.Context, epochID uint64, reporterSupernodeAccount string) { +func (k Keeper) SetHostReportIndex(ctx sdk.Context, epochID uint64, reporterSupernodeAccount string) { store := k.kvStore(ctx) - store.Set(types.SelfReportIndexKey(reporterSupernodeAccount, epochID), []byte{1}) + store.Set(types.HostReportIndexKey(reporterSupernodeAccount, epochID), []byte{1}) } diff --git a/x/audit/v1/keeper/storage_challenge_deterministic.go b/x/audit/v1/keeper/storage_challenge_deterministic.go index 000dcb1..77a6f6e 100644 --- a/x/audit/v1/keeper/storage_challenge_deterministic.go +++ b/x/audit/v1/keeper/storage_challenge_deterministic.go @@ -3,7 +3,6 @@ package keeper import ( "bytes" "encoding/hex" - "fmt" "sort" "strconv" @@ -83,10 +82,3 @@ func maxInt(a, b int) int { } return b } - -func mustLowerHex32(b []byte) string { - if len(b) != 32 { - panic(fmt.Sprintf("expected 32 bytes, got %d", len(b))) - } - return hex.EncodeToString(b) -} diff --git a/x/audit/v1/keeper/storage_challenge_evidence_test.go b/x/audit/v1/keeper/storage_challenge_evidence_test.go index b868610..bda60e4 100644 --- a/x/audit/v1/keeper/storage_challenge_evidence_test.go +++ b/x/audit/v1/keeper/storage_challenge_evidence_test.go @@ -14,7 +14,6 @@ func TestCreateEvidence_StorageChallengeFailure_ChallengerPolicy(t *testing.T) { params := types.DefaultParams() params.ScEnabled = true - params.ScEvidenceSubmitterMustBeChallenger = true params.ScChallengersPerEpoch = 2 require.NoError(t, f.keeper.SetParams(f.ctx, params)) diff --git a/x/audit/v1/module/autocli.go b/x/audit/v1/module/autocli.go index ccb7551..fb66545 100644 --- a/x/audit/v1/module/autocli.go +++ b/x/audit/v1/module/autocli.go @@ -40,27 +40,27 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { Short: "Query current audit epoch boundaries", }, { - RpcMethod: "AuditReport", - Use: "audit-report [epoch-id] [supernode-account]", - Short: "Query an audit report by epoch and reporter", + RpcMethod: "EpochReport", + Use: "epoch-report [epoch-id] [supernode-account]", + Short: "Query an epoch report by epoch and reporter", PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "epoch_id"}, {ProtoField: "supernode_account"}}, }, { - RpcMethod: "AuditReportsByReporter", - Use: "audit-reports-by-reporter [supernode-account]", - Short: "List audit reports submitted by a reporter", + RpcMethod: "EpochReportsByReporter", + Use: "epoch-reports-by-reporter [supernode-account]", + Short: "List epoch reports submitted by a reporter", PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "supernode_account"}}, }, { - RpcMethod: "SupernodeReports", - Use: "supernode-reports [supernode-account]", - Short: "List reports that include observations about a supernode", + RpcMethod: "StorageChallengeReports", + Use: "storage-challenge-reports [supernode-account]", + Short: "List reports that include storage challenge observations about a supernode", PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "supernode_account"}}, }, { - RpcMethod: "SelfReports", - Use: "self-reports [supernode-account]", - Short: "List self-reports submitted by a supernode across epochs", + RpcMethod: "HostReports", + Use: "host-reports [supernode-account]", + Short: "List host reports submitted by a supernode across epochs", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ {ProtoField: "supernode_account"}, }, @@ -77,10 +77,10 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { Skip: true, }, { - RpcMethod: "SubmitAuditReport", - Use: "submit-audit-report [epoch-id] [self-report-json]", - Short: "Submit an audit report (peer observations encoded in JSON via flags)", - PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "epoch_id"}, {ProtoField: "self_report"}}, + RpcMethod: "SubmitEpochReport", + Use: "submit-epoch-report [epoch-id] [host-report-json]", + Short: "Submit an epoch report (storage challenge observations encoded in JSON via flags)", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "epoch_id"}, {ProtoField: "host_report"}}, }, { RpcMethod: "SubmitEvidence", diff --git a/x/audit/v1/types/audit.pb.go b/x/audit/v1/types/audit.pb.go index 052a1f5..9102fcb 100644 --- a/x/audit/v1/types/audit.pb.go +++ b/x/audit/v1/types/audit.pb.go @@ -54,7 +54,8 @@ func (PortState) EnumDescriptor() ([]byte, []int) { return fileDescriptor_0613fff850c07858, []int{0} } -type AuditSelfReport struct { +// HostReport is the Supernode's self-reported host metrics and counters for an epoch. +type HostReport struct { CpuUsagePercent float64 `protobuf:"fixed64,1,opt,name=cpu_usage_percent,json=cpuUsagePercent,proto3" json:"cpu_usage_percent,omitempty"` MemUsagePercent float64 `protobuf:"fixed64,2,opt,name=mem_usage_percent,json=memUsagePercent,proto3" json:"mem_usage_percent,omitempty"` DiskUsagePercent float64 `protobuf:"fixed64,3,opt,name=disk_usage_percent,json=diskUsagePercent,proto3" json:"disk_usage_percent,omitempty"` @@ -62,18 +63,18 @@ type AuditSelfReport struct { FailedActionsCount uint32 `protobuf:"varint,5,opt,name=failed_actions_count,json=failedActionsCount,proto3" json:"failed_actions_count,omitempty"` } -func (m *AuditSelfReport) Reset() { *m = AuditSelfReport{} } -func (m *AuditSelfReport) String() string { return proto.CompactTextString(m) } -func (*AuditSelfReport) ProtoMessage() {} -func (*AuditSelfReport) Descriptor() ([]byte, []int) { +func (m *HostReport) Reset() { *m = HostReport{} } +func (m *HostReport) String() string { return proto.CompactTextString(m) } +func (*HostReport) ProtoMessage() {} +func (*HostReport) Descriptor() ([]byte, []int) { return fileDescriptor_0613fff850c07858, []int{0} } -func (m *AuditSelfReport) XXX_Unmarshal(b []byte) error { +func (m *HostReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *AuditSelfReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *HostReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_AuditSelfReport.Marshal(b, m, deterministic) + return xxx_messageInfo_HostReport.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -83,71 +84,72 @@ func (m *AuditSelfReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, err return b[:n], nil } } -func (m *AuditSelfReport) XXX_Merge(src proto.Message) { - xxx_messageInfo_AuditSelfReport.Merge(m, src) +func (m *HostReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostReport.Merge(m, src) } -func (m *AuditSelfReport) XXX_Size() int { +func (m *HostReport) XXX_Size() int { return m.Size() } -func (m *AuditSelfReport) XXX_DiscardUnknown() { - xxx_messageInfo_AuditSelfReport.DiscardUnknown(m) +func (m *HostReport) XXX_DiscardUnknown() { + xxx_messageInfo_HostReport.DiscardUnknown(m) } -var xxx_messageInfo_AuditSelfReport proto.InternalMessageInfo +var xxx_messageInfo_HostReport proto.InternalMessageInfo -func (m *AuditSelfReport) GetCpuUsagePercent() float64 { +func (m *HostReport) GetCpuUsagePercent() float64 { if m != nil { return m.CpuUsagePercent } return 0 } -func (m *AuditSelfReport) GetMemUsagePercent() float64 { +func (m *HostReport) GetMemUsagePercent() float64 { if m != nil { return m.MemUsagePercent } return 0 } -func (m *AuditSelfReport) GetDiskUsagePercent() float64 { +func (m *HostReport) GetDiskUsagePercent() float64 { if m != nil { return m.DiskUsagePercent } return 0 } -func (m *AuditSelfReport) GetInboundPortStates() []PortState { +func (m *HostReport) GetInboundPortStates() []PortState { if m != nil { return m.InboundPortStates } return nil } -func (m *AuditSelfReport) GetFailedActionsCount() uint32 { +func (m *HostReport) GetFailedActionsCount() uint32 { if m != nil { return m.FailedActionsCount } return 0 } -type AuditPeerObservation struct { +// StorageChallengeObservation is a prober's reachability observation about an assigned target. +type StorageChallengeObservation struct { TargetSupernodeAccount string `protobuf:"bytes,1,opt,name=target_supernode_account,json=targetSupernodeAccount,proto3" json:"target_supernode_account,omitempty"` // port_states[i] refers to required_open_ports[i] for the epoch. PortStates []PortState `protobuf:"varint,2,rep,packed,name=port_states,json=portStates,proto3,enum=lumera.audit.v1.PortState" json:"port_states,omitempty"` } -func (m *AuditPeerObservation) Reset() { *m = AuditPeerObservation{} } -func (m *AuditPeerObservation) String() string { return proto.CompactTextString(m) } -func (*AuditPeerObservation) ProtoMessage() {} -func (*AuditPeerObservation) Descriptor() ([]byte, []int) { +func (m *StorageChallengeObservation) Reset() { *m = StorageChallengeObservation{} } +func (m *StorageChallengeObservation) String() string { return proto.CompactTextString(m) } +func (*StorageChallengeObservation) ProtoMessage() {} +func (*StorageChallengeObservation) Descriptor() ([]byte, []int) { return fileDescriptor_0613fff850c07858, []int{1} } -func (m *AuditPeerObservation) XXX_Unmarshal(b []byte) error { +func (m *StorageChallengeObservation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *AuditPeerObservation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *StorageChallengeObservation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_AuditPeerObservation.Marshal(b, m, deterministic) + return xxx_messageInfo_StorageChallengeObservation.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -157,52 +159,53 @@ func (m *AuditPeerObservation) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *AuditPeerObservation) XXX_Merge(src proto.Message) { - xxx_messageInfo_AuditPeerObservation.Merge(m, src) +func (m *StorageChallengeObservation) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageChallengeObservation.Merge(m, src) } -func (m *AuditPeerObservation) XXX_Size() int { +func (m *StorageChallengeObservation) XXX_Size() int { return m.Size() } -func (m *AuditPeerObservation) XXX_DiscardUnknown() { - xxx_messageInfo_AuditPeerObservation.DiscardUnknown(m) +func (m *StorageChallengeObservation) XXX_DiscardUnknown() { + xxx_messageInfo_StorageChallengeObservation.DiscardUnknown(m) } -var xxx_messageInfo_AuditPeerObservation proto.InternalMessageInfo +var xxx_messageInfo_StorageChallengeObservation proto.InternalMessageInfo -func (m *AuditPeerObservation) GetTargetSupernodeAccount() string { +func (m *StorageChallengeObservation) GetTargetSupernodeAccount() string { if m != nil { return m.TargetSupernodeAccount } return "" } -func (m *AuditPeerObservation) GetPortStates() []PortState { +func (m *StorageChallengeObservation) GetPortStates() []PortState { if m != nil { return m.PortStates } return nil } -type AuditReport struct { - SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` - ReportHeight int64 `protobuf:"varint,3,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` - SelfReport AuditSelfReport `protobuf:"bytes,4,opt,name=self_report,json=selfReport,proto3" json:"self_report"` - PeerObservations []*AuditPeerObservation `protobuf:"bytes,5,rep,name=peer_observations,json=peerObservations,proto3" json:"peer_observations,omitempty"` +// EpochReport is a single per-epoch report submitted by a Supernode. +type EpochReport struct { + SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + ReportHeight int64 `protobuf:"varint,3,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` + HostReport HostReport `protobuf:"bytes,4,opt,name=host_report,json=hostReport,proto3" json:"host_report"` + StorageChallengeObservations []*StorageChallengeObservation `protobuf:"bytes,5,rep,name=storage_challenge_observations,json=storageChallengeObservations,proto3" json:"storage_challenge_observations,omitempty"` } -func (m *AuditReport) Reset() { *m = AuditReport{} } -func (m *AuditReport) String() string { return proto.CompactTextString(m) } -func (*AuditReport) ProtoMessage() {} -func (*AuditReport) Descriptor() ([]byte, []int) { +func (m *EpochReport) Reset() { *m = EpochReport{} } +func (m *EpochReport) String() string { return proto.CompactTextString(m) } +func (*EpochReport) ProtoMessage() {} +func (*EpochReport) Descriptor() ([]byte, []int) { return fileDescriptor_0613fff850c07858, []int{2} } -func (m *AuditReport) XXX_Unmarshal(b []byte) error { +func (m *EpochReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *AuditReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *EpochReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_AuditReport.Marshal(b, m, deterministic) + return xxx_messageInfo_EpochReport.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -212,103 +215,103 @@ func (m *AuditReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) return b[:n], nil } } -func (m *AuditReport) XXX_Merge(src proto.Message) { - xxx_messageInfo_AuditReport.Merge(m, src) +func (m *EpochReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_EpochReport.Merge(m, src) } -func (m *AuditReport) XXX_Size() int { +func (m *EpochReport) XXX_Size() int { return m.Size() } -func (m *AuditReport) XXX_DiscardUnknown() { - xxx_messageInfo_AuditReport.DiscardUnknown(m) +func (m *EpochReport) XXX_DiscardUnknown() { + xxx_messageInfo_EpochReport.DiscardUnknown(m) } -var xxx_messageInfo_AuditReport proto.InternalMessageInfo +var xxx_messageInfo_EpochReport proto.InternalMessageInfo -func (m *AuditReport) GetSupernodeAccount() string { +func (m *EpochReport) GetSupernodeAccount() string { if m != nil { return m.SupernodeAccount } return "" } -func (m *AuditReport) GetEpochId() uint64 { +func (m *EpochReport) GetEpochId() uint64 { if m != nil { return m.EpochId } return 0 } -func (m *AuditReport) GetReportHeight() int64 { +func (m *EpochReport) GetReportHeight() int64 { if m != nil { return m.ReportHeight } return 0 } -func (m *AuditReport) GetSelfReport() AuditSelfReport { +func (m *EpochReport) GetHostReport() HostReport { if m != nil { - return m.SelfReport + return m.HostReport } - return AuditSelfReport{} + return HostReport{} } -func (m *AuditReport) GetPeerObservations() []*AuditPeerObservation { +func (m *EpochReport) GetStorageChallengeObservations() []*StorageChallengeObservation { if m != nil { - return m.PeerObservations + return m.StorageChallengeObservations } return nil } func init() { proto.RegisterEnum("lumera.audit.v1.PortState", PortState_name, PortState_value) - proto.RegisterType((*AuditSelfReport)(nil), "lumera.audit.v1.AuditSelfReport") - proto.RegisterType((*AuditPeerObservation)(nil), "lumera.audit.v1.AuditPeerObservation") - proto.RegisterType((*AuditReport)(nil), "lumera.audit.v1.AuditReport") + proto.RegisterType((*HostReport)(nil), "lumera.audit.v1.HostReport") + proto.RegisterType((*StorageChallengeObservation)(nil), "lumera.audit.v1.StorageChallengeObservation") + proto.RegisterType((*EpochReport)(nil), "lumera.audit.v1.EpochReport") } func init() { proto.RegisterFile("lumera/audit/v1/audit.proto", fileDescriptor_0613fff850c07858) } var fileDescriptor_0613fff850c07858 = []byte{ - // 563 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x4d, 0x8f, 0xd2, 0x4e, - 0x1c, 0xc7, 0x29, 0xb0, 0xff, 0xbf, 0x3b, 0xb8, 0xd2, 0xce, 0xe2, 0xda, 0x65, 0x93, 0xda, 0x60, - 0x4c, 0x08, 0x51, 0x70, 0xf1, 0xe8, 0xa9, 0xac, 0xc4, 0xf5, 0x21, 0x94, 0xb4, 0x10, 0x13, 0x2f, - 0x93, 0xd2, 0x0e, 0xa5, 0x91, 0x76, 0x9a, 0x99, 0x29, 0xd1, 0x77, 0xe1, 0xc5, 0x37, 0xe1, 0x79, - 0x5f, 0xc4, 0x1e, 0x37, 0x9e, 0x3c, 0x19, 0x03, 0x6f, 0xc4, 0xb4, 0x83, 0x3c, 0x54, 0x13, 0x13, - 0x2f, 0xcd, 0xcc, 0xe7, 0xfb, 0xfd, 0x4d, 0x7f, 0x0f, 0x33, 0xe0, 0x6c, 0x9e, 0x84, 0x98, 0x3a, - 0x1d, 0x27, 0xf1, 0x02, 0xde, 0x59, 0x9c, 0x8b, 0x45, 0x3b, 0xa6, 0x84, 0x13, 0x58, 0x15, 0x62, - 0x5b, 0xb0, 0xc5, 0x79, 0x5d, 0x71, 0xc2, 0x20, 0x22, 0x9d, 0xec, 0x2b, 0x3c, 0xf5, 0x53, 0x97, - 0xb0, 0x90, 0x30, 0x94, 0xed, 0x3a, 0x62, 0xb3, 0x96, 0x6a, 0x3e, 0xf1, 0x89, 0xe0, 0xe9, 0x4a, - 0xd0, 0xc6, 0xe7, 0x22, 0xa8, 0x1a, 0xe9, 0x81, 0x36, 0x9e, 0x4f, 0x2d, 0x1c, 0x13, 0xca, 0x61, - 0x0b, 0x28, 0x6e, 0x9c, 0xa0, 0x84, 0x39, 0x3e, 0x46, 0x31, 0xa6, 0x2e, 0x8e, 0xb8, 0x2a, 0xe9, - 0x52, 0x53, 0xb2, 0xaa, 0x6e, 0x9c, 0x8c, 0x53, 0x3e, 0x14, 0x38, 0xf5, 0x86, 0x38, 0xcc, 0x79, - 0x8b, 0xc2, 0x1b, 0xe2, 0x70, 0xcf, 0xfb, 0x08, 0x40, 0x2f, 0x60, 0xef, 0x73, 0xe6, 0x52, 0x66, - 0x96, 0x53, 0x65, 0xcf, 0xfd, 0x0a, 0x1c, 0x07, 0xd1, 0x84, 0x24, 0x91, 0x87, 0xd2, 0xac, 0x10, - 0xe3, 0x0e, 0xc7, 0x4c, 0x2d, 0xeb, 0xa5, 0xe6, 0x9d, 0x6e, 0xbd, 0x9d, 0x6b, 0x46, 0x7b, 0x48, - 0x28, 0xb7, 0x53, 0x8b, 0xa5, 0xac, 0xc3, 0x36, 0x84, 0xc1, 0x27, 0xa0, 0x36, 0x75, 0x82, 0x39, - 0xf6, 0x90, 0xe3, 0xf2, 0x80, 0x44, 0x0c, 0xb9, 0x24, 0x89, 0xb8, 0x7a, 0xa0, 0x4b, 0xcd, 0x23, - 0x0b, 0x0a, 0xcd, 0x10, 0xd2, 0x45, 0xaa, 0x34, 0xbe, 0x48, 0xa0, 0x96, 0xf5, 0x65, 0x88, 0x31, - 0x35, 0x27, 0x0c, 0xd3, 0x85, 0x93, 0xca, 0x70, 0x0c, 0x54, 0xee, 0x50, 0x1f, 0x73, 0xc4, 0x92, - 0x18, 0xd3, 0x88, 0x78, 0x18, 0x39, 0xae, 0x38, 0x2e, 0xed, 0xd1, 0x61, 0xef, 0xec, 0xeb, 0xd5, - 0xe3, 0x7b, 0xeb, 0xd6, 0x1b, 0xae, 0x6b, 0x78, 0x1e, 0xc5, 0x8c, 0xd9, 0x9c, 0x06, 0x91, 0x6f, - 0x9d, 0x88, 0x60, 0xfb, 0x57, 0xac, 0x21, 0x42, 0xe1, 0x33, 0x50, 0xd9, 0xad, 0xb2, 0xf8, 0xd7, - 0x2a, 0x41, 0xbc, 0x29, 0xaf, 0x71, 0x55, 0x04, 0x95, 0x2c, 0xd9, 0xf5, 0x00, 0x2f, 0x81, 0xf2, - 0x4f, 0xc9, 0xc9, 0x2c, 0x9f, 0xd6, 0x29, 0xb8, 0x85, 0x63, 0xe2, 0xce, 0x50, 0xe0, 0x65, 0x53, - 0x2d, 0x5b, 0xff, 0x67, 0xfb, 0x97, 0x1e, 0x7c, 0x00, 0x8e, 0x68, 0xf6, 0x3b, 0x34, 0xc3, 0x81, - 0x3f, 0x13, 0x83, 0x2c, 0x59, 0xb7, 0x05, 0xbc, 0xcc, 0x18, 0x7c, 0x01, 0x2a, 0x0c, 0xcf, 0xa7, - 0x48, 0x40, 0xb5, 0xac, 0x4b, 0xcd, 0x4a, 0x57, 0xff, 0xad, 0xac, 0xdc, 0x0d, 0xec, 0x95, 0xaf, - 0xbf, 0xdf, 0x2f, 0x58, 0x80, 0x6d, 0xef, 0xa4, 0x05, 0x94, 0x18, 0x63, 0x8a, 0xc8, 0x76, 0x14, - 0x4c, 0x3d, 0xd0, 0x4b, 0xcd, 0x4a, 0xf7, 0xe1, 0x9f, 0x8f, 0xcb, 0x0d, 0xce, 0x92, 0xe3, 0x7d, - 0xc0, 0x5a, 0x26, 0x38, 0xdc, 0xf4, 0x13, 0x9e, 0x00, 0x38, 0x34, 0xad, 0x11, 0xb2, 0x47, 0xc6, - 0xa8, 0x8f, 0xc6, 0x83, 0xd7, 0x03, 0xf3, 0xed, 0x40, 0x2e, 0xc0, 0x63, 0x50, 0xdd, 0xe1, 0xe6, - 0xb0, 0x3f, 0x90, 0x25, 0x78, 0x17, 0x28, 0x3b, 0xf0, 0xe2, 0x8d, 0x69, 0xf7, 0x9f, 0xcb, 0xc5, - 0x5e, 0xeb, 0x7a, 0xa9, 0x49, 0x37, 0x4b, 0x4d, 0xfa, 0xb1, 0xd4, 0xa4, 0x4f, 0x2b, 0xad, 0x70, - 0xb3, 0xd2, 0x0a, 0xdf, 0x56, 0x5a, 0xe1, 0x9d, 0xfc, 0x61, 0xfb, 0xa6, 0xf9, 0xc7, 0x18, 0xb3, - 0xc9, 0x7f, 0xd9, 0xfb, 0x7b, 0xfa, 0x33, 0x00, 0x00, 0xff, 0xff, 0xa2, 0x5b, 0x6a, 0x87, 0xf3, - 0x03, 0x00, 0x00, + // 569 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xdd, 0x8e, 0xd2, 0x40, + 0x14, 0xa6, 0xc0, 0xaa, 0x3b, 0xb8, 0x52, 0x66, 0xd7, 0xb5, 0x0b, 0xa6, 0x12, 0xbc, 0x21, 0x64, + 0x05, 0x17, 0x2f, 0xbd, 0x02, 0x24, 0xc1, 0x9f, 0x50, 0xd2, 0x42, 0x4c, 0xbc, 0x99, 0x0c, 0xed, + 0xd8, 0x36, 0xd2, 0x4e, 0x33, 0x33, 0x25, 0xfa, 0x16, 0xfb, 0x2a, 0x26, 0x3e, 0xc4, 0xde, 0xb9, + 0xf1, 0xca, 0x2b, 0x63, 0xe0, 0x45, 0x4c, 0x3b, 0x2c, 0xb0, 0x6c, 0xd4, 0x64, 0x6f, 0x9a, 0x39, + 0xdf, 0xf7, 0x9d, 0xd3, 0x73, 0xce, 0x37, 0x03, 0x2a, 0xb3, 0x38, 0x20, 0x0c, 0xb7, 0x70, 0xec, + 0xf8, 0xa2, 0x35, 0x3f, 0x93, 0x87, 0x66, 0xc4, 0xa8, 0xa0, 0xb0, 0x28, 0xc9, 0xa6, 0xc4, 0xe6, + 0x67, 0xe5, 0x12, 0x0e, 0xfc, 0x90, 0xb6, 0xd2, 0xaf, 0xd4, 0x94, 0x4f, 0x6c, 0xca, 0x03, 0xca, + 0x51, 0x1a, 0xb5, 0x64, 0xb0, 0xa2, 0x8e, 0x5c, 0xea, 0x52, 0x89, 0x27, 0x27, 0x89, 0xd6, 0xce, + 0xb3, 0x00, 0x0c, 0x28, 0x17, 0x26, 0x89, 0x28, 0x13, 0xb0, 0x01, 0x4a, 0x76, 0x14, 0xa3, 0x98, + 0x63, 0x97, 0xa0, 0x88, 0x30, 0x9b, 0x84, 0x42, 0x53, 0xaa, 0x4a, 0x5d, 0x31, 0x8b, 0x76, 0x14, + 0x4f, 0x12, 0x7c, 0x24, 0xe1, 0x44, 0x1b, 0x90, 0x60, 0x47, 0x9b, 0x95, 0xda, 0x80, 0x04, 0xd7, + 0xb4, 0xa7, 0x00, 0x3a, 0x3e, 0xff, 0xb4, 0x23, 0xce, 0xa5, 0x62, 0x35, 0x61, 0xae, 0xa9, 0xdf, + 0x80, 0x43, 0x3f, 0x9c, 0xd2, 0x38, 0x74, 0x50, 0xd2, 0x15, 0xe2, 0x02, 0x0b, 0xc2, 0xb5, 0x7c, + 0x35, 0x57, 0x7f, 0xd0, 0x2e, 0x37, 0x77, 0xf6, 0xd0, 0x1c, 0x51, 0x26, 0xac, 0x44, 0x62, 0x96, + 0x56, 0x69, 0x6b, 0x84, 0xc3, 0xe7, 0xe0, 0xe8, 0x23, 0xf6, 0x67, 0xc4, 0x41, 0xd8, 0x16, 0x3e, + 0x0d, 0x39, 0xb2, 0x69, 0x1c, 0x0a, 0x6d, 0xaf, 0xaa, 0xd4, 0x0f, 0x4c, 0x28, 0xb9, 0x8e, 0xa4, + 0x7a, 0x09, 0x53, 0xfb, 0xaa, 0x80, 0x8a, 0x25, 0x28, 0xc3, 0x2e, 0xe9, 0x79, 0x78, 0x36, 0x23, + 0xa1, 0x4b, 0x8c, 0x29, 0x27, 0x6c, 0x8e, 0x13, 0x15, 0x9c, 0x00, 0x4d, 0x60, 0xe6, 0x12, 0x81, + 0x78, 0x1c, 0x11, 0x16, 0x52, 0x87, 0x20, 0x6c, 0xcb, 0xaa, 0xc9, 0xaa, 0xf6, 0xbb, 0x95, 0x1f, + 0xdf, 0x9e, 0x3d, 0x5a, 0x2d, 0xbf, 0x63, 0xdb, 0x1d, 0xc7, 0x61, 0x84, 0x73, 0x4b, 0x30, 0x3f, + 0x74, 0xcd, 0x63, 0x99, 0x6c, 0x5d, 0xe5, 0x76, 0x64, 0x2a, 0x7c, 0x09, 0x0a, 0xdb, 0xc3, 0x66, + 0xff, 0x3b, 0x2c, 0x88, 0xd6, 0x53, 0xd6, 0xbe, 0x67, 0x41, 0xa1, 0x1f, 0x51, 0xdb, 0x5b, 0xf9, + 0x38, 0x00, 0xa5, 0x5b, 0x35, 0xa7, 0xf2, 0xdd, 0xb6, 0x4e, 0xc0, 0x3d, 0x92, 0x14, 0x46, 0xbe, + 0x93, 0x9a, 0x9b, 0x37, 0xef, 0xa6, 0xf1, 0x6b, 0x07, 0x3e, 0x05, 0x07, 0x2c, 0xfd, 0x1d, 0xf2, + 0x88, 0xef, 0x7a, 0xd2, 0xcf, 0x9c, 0x79, 0x5f, 0x82, 0x83, 0x14, 0x83, 0x5d, 0x50, 0xf0, 0x28, + 0x17, 0x48, 0x82, 0x5a, 0xbe, 0xaa, 0xd4, 0x0b, 0xed, 0xca, 0x8d, 0xb1, 0x36, 0x77, 0xb0, 0x9b, + 0xbf, 0xf8, 0xf5, 0x24, 0x63, 0x02, 0x6f, 0x73, 0x2b, 0x19, 0xd0, 0xb9, 0x34, 0x04, 0xd9, 0x57, + 0x8e, 0x20, 0xba, 0xb1, 0x84, 0x6b, 0x7b, 0xd5, 0x5c, 0xbd, 0xd0, 0x3e, 0xbd, 0x51, 0xf6, 0x1f, + 0x3e, 0x9a, 0x8f, 0xf9, 0xdf, 0x49, 0xde, 0x30, 0xc0, 0xfe, 0x7a, 0xd5, 0xf0, 0x18, 0xc0, 0x91, + 0x61, 0x8e, 0x91, 0x35, 0xee, 0x8c, 0xfb, 0x68, 0x32, 0x7c, 0x3b, 0x34, 0xde, 0x0f, 0xd5, 0x0c, + 0x3c, 0x04, 0xc5, 0x2d, 0xdc, 0x18, 0xf5, 0x87, 0xaa, 0x02, 0x1f, 0x82, 0xd2, 0x16, 0xd8, 0x7b, + 0x67, 0x58, 0xfd, 0x57, 0x6a, 0xb6, 0xdb, 0xb8, 0x58, 0xe8, 0xca, 0xe5, 0x42, 0x57, 0x7e, 0x2f, + 0x74, 0xe5, 0x7c, 0xa9, 0x67, 0x2e, 0x97, 0x7a, 0xe6, 0xe7, 0x52, 0xcf, 0x7c, 0x50, 0x3f, 0x6f, + 0x1e, 0xbc, 0xf8, 0x12, 0x11, 0x3e, 0xbd, 0x93, 0x3e, 0xce, 0x17, 0x7f, 0x02, 0x00, 0x00, 0xff, + 0xff, 0x2e, 0xff, 0x1c, 0xe8, 0x10, 0x04, 0x00, 0x00, } -func (m *AuditSelfReport) Marshal() (dAtA []byte, err error) { +func (m *HostReport) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -318,12 +321,12 @@ func (m *AuditSelfReport) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AuditSelfReport) MarshalTo(dAtA []byte) (int, error) { +func (m *HostReport) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AuditSelfReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *HostReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -372,7 +375,7 @@ func (m *AuditSelfReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *AuditPeerObservation) Marshal() (dAtA []byte, err error) { +func (m *StorageChallengeObservation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -382,12 +385,12 @@ func (m *AuditPeerObservation) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AuditPeerObservation) MarshalTo(dAtA []byte) (int, error) { +func (m *StorageChallengeObservation) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AuditPeerObservation) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *StorageChallengeObservation) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -420,7 +423,7 @@ func (m *AuditPeerObservation) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *AuditReport) Marshal() (dAtA []byte, err error) { +func (m *EpochReport) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -430,20 +433,20 @@ func (m *AuditReport) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AuditReport) MarshalTo(dAtA []byte) (int, error) { +func (m *EpochReport) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *EpochReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.PeerObservations) > 0 { - for iNdEx := len(m.PeerObservations) - 1; iNdEx >= 0; iNdEx-- { + if len(m.StorageChallengeObservations) > 0 { + for iNdEx := len(m.StorageChallengeObservations) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.PeerObservations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.StorageChallengeObservations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -455,7 +458,7 @@ func (m *AuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } { - size, err := m.SelfReport.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.HostReport.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -495,7 +498,7 @@ func encodeVarintAudit(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *AuditSelfReport) Size() (n int) { +func (m *HostReport) Size() (n int) { if m == nil { return 0 } @@ -523,7 +526,7 @@ func (m *AuditSelfReport) Size() (n int) { return n } -func (m *AuditPeerObservation) Size() (n int) { +func (m *StorageChallengeObservation) Size() (n int) { if m == nil { return 0 } @@ -543,7 +546,7 @@ func (m *AuditPeerObservation) Size() (n int) { return n } -func (m *AuditReport) Size() (n int) { +func (m *EpochReport) Size() (n int) { if m == nil { return 0 } @@ -559,10 +562,10 @@ func (m *AuditReport) Size() (n int) { if m.ReportHeight != 0 { n += 1 + sovAudit(uint64(m.ReportHeight)) } - l = m.SelfReport.Size() + l = m.HostReport.Size() n += 1 + l + sovAudit(uint64(l)) - if len(m.PeerObservations) > 0 { - for _, e := range m.PeerObservations { + if len(m.StorageChallengeObservations) > 0 { + for _, e := range m.StorageChallengeObservations { l = e.Size() n += 1 + l + sovAudit(uint64(l)) } @@ -576,7 +579,7 @@ func sovAudit(x uint64) (n int) { func sozAudit(x uint64) (n int) { return sovAudit(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *AuditSelfReport) Unmarshal(dAtA []byte) error { +func (m *HostReport) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -599,10 +602,10 @@ func (m *AuditSelfReport) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AuditSelfReport: wiretype end group for non-group") + return fmt.Errorf("proto: HostReport: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AuditSelfReport: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: HostReport: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -747,7 +750,7 @@ func (m *AuditSelfReport) Unmarshal(dAtA []byte) error { } return nil } -func (m *AuditPeerObservation) Unmarshal(dAtA []byte) error { +func (m *StorageChallengeObservation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -770,10 +773,10 @@ func (m *AuditPeerObservation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AuditPeerObservation: wiretype end group for non-group") + return fmt.Errorf("proto: StorageChallengeObservation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AuditPeerObservation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: StorageChallengeObservation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -898,7 +901,7 @@ func (m *AuditPeerObservation) Unmarshal(dAtA []byte) error { } return nil } -func (m *AuditReport) Unmarshal(dAtA []byte) error { +func (m *EpochReport) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -921,10 +924,10 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AuditReport: wiretype end group for non-group") + return fmt.Errorf("proto: EpochReport: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AuditReport: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EpochReport: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -999,7 +1002,7 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { } case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SelfReport", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HostReport", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1026,13 +1029,13 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SelfReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.HostReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerObservations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StorageChallengeObservations", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1059,8 +1062,8 @@ func (m *AuditReport) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PeerObservations = append(m.PeerObservations, &AuditPeerObservation{}) - if err := m.PeerObservations[len(m.PeerObservations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.StorageChallengeObservations = append(m.StorageChallengeObservations, &StorageChallengeObservation{}) + if err := m.StorageChallengeObservations[len(m.StorageChallengeObservations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/audit/v1/types/codec.go b/x/audit/v1/types/codec.go index f7e975e..abdb3a7 100644 --- a/x/audit/v1/types/codec.go +++ b/x/audit/v1/types/codec.go @@ -9,7 +9,7 @@ import ( func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgUpdateParams{}, - &MsgSubmitAuditReport{}, + &MsgSubmitEpochReport{}, &MsgSubmitEvidence{}, ) diff --git a/x/audit/v1/types/evidence_metadata.pb.go b/x/audit/v1/types/evidence_metadata.pb.go index afab9f6..f9b25de 100644 --- a/x/audit/v1/types/evidence_metadata.pb.go +++ b/x/audit/v1/types/evidence_metadata.pb.go @@ -173,7 +173,8 @@ func (m *ActionFinalizationNotInTop10EvidenceMetadata) GetTop_10ValidatorAddress // StorageChallengeFailureEvidenceMetadata is metadata for a storage challenge failure submitted by a challenger. type StorageChallengeFailureEvidenceMetadata struct { EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` - // challenger_supernode_account must be the tx signer for evidence submission. + // challenger_supernode_account must match the tx signer (MsgSubmitEvidence.creator). + // The keeper validates challenger authorization deterministically from the epoch anchor. ChallengerSupernodeAccount string `protobuf:"bytes,2,opt,name=challenger_supernode_account,json=challengerSupernodeAccount,proto3" json:"challenger_supernode_account,omitempty"` // challenged_supernode_account should match Evidence.subject_address. ChallengedSupernodeAccount string `protobuf:"bytes,3,opt,name=challenged_supernode_account,json=challengedSupernodeAccount,proto3" json:"challenged_supernode_account,omitempty"` diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go index c2e1088..85c0616 100644 --- a/x/audit/v1/types/keys.go +++ b/x/audit/v1/types/keys.go @@ -29,8 +29,8 @@ var ( // - EpochAnchorKey: "ea/" + u64be(epoch_id) // - ReportKey: "r/" + u64be(epoch_id) + reporter_supernode_account // - ReportIndexKey: "ri/" + reporter_supernode_account + "/" + u64be(epoch_id) - // - SupernodeReportIndexKey: "sr/" + supernode_account + "/" + u64be(epoch_id) + "/" + reporter_supernode_account - // - SelfReportIndexKey: "ss/" + reporter_supernode_account + "/" + u64be(epoch_id) + // - StorageChallengeReportIndexKey: "sc/" + supernode_account + "/" + u64be(epoch_id) + "/" + reporter_supernode_account + // - HostReportIndexKey: "hr/" + reporter_supernode_account + "/" + u64be(epoch_id) // // Examples (shown as pseudo strings; the u64be bytes will appear as non-printable in raw dumps): // - EpochAnchorKey(1) => "ea/" + u64be(1) @@ -40,13 +40,13 @@ var ( reportIndexPrefix = []byte("ri/") - // supernodeReportIndexPrefix indexes reports that include an observation for a given supernode. - // Format: "sr/" + supernode_account + "/" + u64be(epoch_id) + "/" + reporter_supernode_account - supernodeReportIndexPrefix = []byte("sr/") + // storageChallengeReportIndexPrefix indexes reports that include a storage-challenge observation for a given supernode. + // Format: "sc/" + supernode_account + "/" + u64be(epoch_id) + "/" + reporter_supernode_account + storageChallengeReportIndexPrefix = []byte("sc/") - // selfReportIndexPrefix indexes all submitted reports (for listing self reports across reporters/epochs). - // Format: "ss/" + reporter_supernode_account + "/" + u64be(epoch_id) - selfReportIndexPrefix = []byte("ss/") + // hostReportIndexPrefix indexes all submitted reports (for listing host reports across epochs for a reporter). + // Format: "hr/" + reporter_supernode_account + "/" + u64be(epoch_id) + hostReportIndexPrefix = []byte("hr/") // Evidence: // - NextEvidenceIDKey: "ev/next_id" -> 8 bytes u64be(next_evidence_id) @@ -81,7 +81,35 @@ func EpochAnchorPrefix() []byte { return epochAnchorPrefix } -// ReportKey returns the store key for the AuditReport identified by (epochID, reporterSupernodeAccount). +// ReportPrefix returns the root prefix for epoch report keys. +// +// Format: "r/" + u64be(epoch_id) + reporter_supernode_account +func ReportPrefix() []byte { + return reportPrefix +} + +// ReportIndexRootPrefix returns the root prefix for report index keys. +// +// Format: "ri/" + reporter_supernode_account + "/" + u64be(epoch_id) +func ReportIndexRootPrefix() []byte { + return reportIndexPrefix +} + +// StorageChallengeReportIndexRootPrefix returns the root prefix for storage-challenge report index keys. +// +// Format: "sc/" + supernode_account + "/" + u64be(epoch_id) + "/" + reporter_supernode_account +func StorageChallengeReportIndexRootPrefix() []byte { + return storageChallengeReportIndexPrefix +} + +// HostReportIndexRootPrefix returns the root prefix for host report index keys. +// +// Format: "hr/" + reporter_supernode_account + "/" + u64be(epoch_id) +func HostReportIndexRootPrefix() []byte { + return hostReportIndexPrefix +} + +// ReportKey returns the store key for the EpochReport identified by (epochID, reporterSupernodeAccount). func ReportKey(epochID uint64, reporterSupernodeAccount string) []byte { key := make([]byte, 0, len(reportPrefix)+8+len(reporterSupernodeAccount)) // "r/" + u64be(epoch_id) + reporter key = append(key, reportPrefix...) // "r/" @@ -110,54 +138,54 @@ func ReportIndexPrefix(reporterSupernodeAccount string) []byte { return key } -// SupernodeReportIndexKey returns the store key for an index entry identified by (supernodeAccount, epochID, reporterSupernodeAccount). +// StorageChallengeReportIndexKey returns the store key for an index entry identified by (supernodeAccount, epochID, reporterSupernodeAccount). // The value is empty; the key exists to allow querying reports about a given supernode without scanning all reports. -func SupernodeReportIndexKey(supernodeAccount string, epochID uint64, reporterSupernodeAccount string) []byte { - key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1+8+1+len(reporterSupernodeAccount)) // "sr/" + supernode + "/" + u64be(epoch_id) + "/" + reporter - key = append(key, supernodeReportIndexPrefix...) // "sr/" - key = append(key, supernodeAccount...) // supernode (bech32) - key = append(key, '/') // separator - key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) - key = append(key, '/') // separator - key = append(key, reporterSupernodeAccount...) // reporter (bech32) +func StorageChallengeReportIndexKey(supernodeAccount string, epochID uint64, reporterSupernodeAccount string) []byte { + key := make([]byte, 0, len(storageChallengeReportIndexPrefix)+len(supernodeAccount)+1+8+1+len(reporterSupernodeAccount)) // "sc/" + supernode + "/" + u64be(epoch_id) + "/" + reporter + key = append(key, storageChallengeReportIndexPrefix...) // "sc/" + key = append(key, supernodeAccount...) // supernode (bech32) + key = append(key, '/') // separator + key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) + key = append(key, '/') // separator + key = append(key, reporterSupernodeAccount...) // reporter (bech32) return key } -// SupernodeReportIndexPrefix returns the prefix under which index keys are stored for a given supernode. -func SupernodeReportIndexPrefix(supernodeAccount string) []byte { - key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1) // "sr/" + supernode + "/" - key = append(key, supernodeReportIndexPrefix...) // "sr/" - key = append(key, supernodeAccount...) // supernode (bech32) - key = append(key, '/') // separator +// StorageChallengeReportIndexPrefix returns the prefix under which index keys are stored for a given supernode. +func StorageChallengeReportIndexPrefix(supernodeAccount string) []byte { + key := make([]byte, 0, len(storageChallengeReportIndexPrefix)+len(supernodeAccount)+1) // "sc/" + supernode + "/" + key = append(key, storageChallengeReportIndexPrefix...) // "sc/" + key = append(key, supernodeAccount...) // supernode (bech32) + key = append(key, '/') // separator return key } -// SupernodeReportIndexEpochPrefix returns the prefix under which index keys are stored for a given (supernodeAccount, epochID). -func SupernodeReportIndexEpochPrefix(supernodeAccount string, epochID uint64) []byte { - key := make([]byte, 0, len(supernodeReportIndexPrefix)+len(supernodeAccount)+1+8+1) // "sr/" + supernode + "/" + u64be(epoch_id) + "/" - key = append(key, supernodeReportIndexPrefix...) // "sr/" - key = append(key, supernodeAccount...) // supernode (bech32) - key = append(key, '/') // separator - key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) - key = append(key, '/') // separator +// StorageChallengeReportIndexEpochPrefix returns the prefix under which index keys are stored for a given (supernodeAccount, epochID). +func StorageChallengeReportIndexEpochPrefix(supernodeAccount string, epochID uint64) []byte { + key := make([]byte, 0, len(storageChallengeReportIndexPrefix)+len(supernodeAccount)+1+8+1) // "sc/" + supernode + "/" + u64be(epoch_id) + "/" + key = append(key, storageChallengeReportIndexPrefix...) // "sc/" + key = append(key, supernodeAccount...) // supernode (bech32) + key = append(key, '/') // separator + key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) + key = append(key, '/') // separator return key } -// SelfReportIndexKey returns the store key for an index entry identified by (reporterSupernodeAccount, epochID). -// The value is empty; the key exists to allow listing a supernode's self reports across epochs without scanning all report keys. -func SelfReportIndexKey(reporterSupernodeAccount string, epochID uint64) []byte { - key := make([]byte, 0, len(selfReportIndexPrefix)+len(reporterSupernodeAccount)+1+8) // "ss/" + reporter + "/" + u64be(epoch_id) - key = append(key, selfReportIndexPrefix...) // "ss/" +// HostReportIndexKey returns the store key for an index entry identified by (reporterSupernodeAccount, epochID). +// The value is empty; the key exists to allow listing a reporter's host reports across epochs without scanning all report keys. +func HostReportIndexKey(reporterSupernodeAccount string, epochID uint64) []byte { + key := make([]byte, 0, len(hostReportIndexPrefix)+len(reporterSupernodeAccount)+1+8) // "hr/" + reporter + "/" + u64be(epoch_id) + key = append(key, hostReportIndexPrefix...) // "hr/" key = append(key, reporterSupernodeAccount...) // reporter (bech32) key = append(key, '/') // separator key = binary.BigEndian.AppendUint64(key, epochID) // u64be(epoch_id) return key } -// SelfReportIndexPrefix returns the prefix under which self report index keys are stored for a given reporter. -func SelfReportIndexPrefix(reporterSupernodeAccount string) []byte { - key := make([]byte, 0, len(selfReportIndexPrefix)+len(reporterSupernodeAccount)+1) // "ss/" + reporter + "/" - key = append(key, selfReportIndexPrefix...) // "ss/" +// HostReportIndexPrefix returns the prefix under which host report index keys are stored for a given reporter. +func HostReportIndexPrefix(reporterSupernodeAccount string) []byte { + key := make([]byte, 0, len(hostReportIndexPrefix)+len(reporterSupernodeAccount)+1) // "hr/" + reporter + "/" + key = append(key, hostReportIndexPrefix...) // "hr/" key = append(key, reporterSupernodeAccount...) // reporter (bech32) key = append(key, '/') // separator return key diff --git a/x/audit/v1/types/params.go b/x/audit/v1/types/params.go index cc102dd..a6339cd 100644 --- a/x/audit/v1/types/params.go +++ b/x/audit/v1/types/params.go @@ -2,6 +2,7 @@ package types import ( "fmt" + "math" "sort" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -30,55 +31,65 @@ var ( KeyActionFinalizationRecoveryEpochs = []byte("ActionFinalizationRecoveryEpochs") KeyActionFinalizationRecoveryMaxTotalBadEvidences = []byte("ActionFinalizationRecoveryMaxTotalBadEvidences") - KeyScEnabled = []byte("ScEnabled") - KeyScChallengersPerEpoch = []byte("ScChallengersPerEpoch") - KeyScFilesPerChallenger = []byte("ScFilesPerChallenger") - KeyScReplicaCount = []byte("ScReplicaCount") - KeyScObserverThreshold = []byte("ScObserverThreshold") - KeyScMinSliceBytes = []byte("ScMinSliceBytes") - KeyScMaxSliceBytes = []byte("ScMaxSliceBytes") - KeyScResponseTimeoutMs = []byte("ScResponseTimeoutMs") - KeyScAffirmationTimeoutMs = []byte("ScAffirmationTimeoutMs") - KeyScEvidenceMaxBytes = []byte("ScEvidenceMaxBytes") - KeyScCandidateKeysLookbackEpochs = []byte("ScCandidateKeysLookbackEpochs") - KeyScStartJitterMs = []byte("ScStartJitterMs") - KeyScEvidenceSubmitterMustBeChallenger = []byte("ScEvidenceSubmitterMustBeChallenger") + KeyScEnabled = []byte("ScEnabled") + KeyScChallengersPerEpoch = []byte("ScChallengersPerEpoch") ) var ( - DefaultEpochLengthBlocks = uint64(400) - DefaultEpochZeroHeight = uint64(1) - DefaultPeerQuorumReports = uint32(3) - DefaultMinProbeTargetsPerEpoch = uint32(3) - DefaultMaxProbeTargetsPerEpoch = uint32(5) - DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} - DefaultMinCpuFreePercent = uint32(0) - DefaultMinMemFreePercent = uint32(0) - DefaultMinDiskFreePercent = uint32(0) - DefaultConsecutiveEpochsToPostpone = uint32(1) - DefaultKeepLastEpochEntries = uint64(200) + DefaultEpochLengthBlocks = uint64(400) + // DefaultEpochZeroHeight is a placeholder used for genesis-based initialization. + // For module activation on an already-running chain, the upgrade handler must set + // epoch_zero_height dynamically to the upgrade block height. + DefaultEpochZeroHeight = uint64(1) + + // DefaultPeerQuorumReports is the desired average number of peer observations per target per epoch. + // This indirectly drives how many targets each prober must observe in an epoch. + DefaultPeerQuorumReports = uint32(3) + + // DefaultMinProbeTargetsPerEpoch clamps the per-prober target assignment to a minimum. + DefaultMinProbeTargetsPerEpoch = uint32(3) + + // DefaultMaxProbeTargetsPerEpoch clamps the per-prober target assignment to a maximum. + DefaultMaxProbeTargetsPerEpoch = uint32(5) + + // DefaultRequiredOpenPorts is the ordered list of ports that probers must check and report for assigned targets. + // The index in peer observations corresponds to the index in this list. + DefaultRequiredOpenPorts = []uint32{4444, 4445, 8002} + + // DefaultMin*FreePercent are minimum required free-capacity thresholds derived from self reports. + // A value of 0 disables that resource-based postponement. + DefaultMinCpuFreePercent = uint32(0) + DefaultMinMemFreePercent = uint32(0) + DefaultMinDiskFreePercent = uint32(0) + + // DefaultConsecutiveEpochsToPostpone is the lookback window for postponement decisions that rely on + // consecutive-epoch streaks (missing reports and peer port closures). + DefaultConsecutiveEpochsToPostpone = uint32(1) + + // DefaultKeepLastEpochEntries is the retention window for epoch-scoped state (anchors, reports, indices, + // evidence epoch counters). It must be >= the maximum configured lookback windows. + DefaultKeepLastEpochEntries = uint64(200) + + // DefaultPeerPortPostponeThresholdPercent is the percentage of peer reporters that must report a required + // port as CLOSED to treat that port as CLOSED for the epoch. 100 means unanimous. DefaultPeerPortPostponeThresholdPercent = uint32(100) + // DefaultActionFinalization* are action-finalization evidence-based postponement thresholds. DefaultActionFinalizationSignatureFailureEvidencesPerEpoch = uint32(1) DefaultActionFinalizationSignatureFailureConsecutiveEpochs = uint32(1) DefaultActionFinalizationNotInTop10EvidencesPerEpoch = uint32(1) DefaultActionFinalizationNotInTop10ConsecutiveEpochs = uint32(1) - DefaultActionFinalizationRecoveryEpochs = uint32(1) - DefaultActionFinalizationRecoveryMaxTotalBadEvidences = uint32(1) - - DefaultScEnabled = true - DefaultScChallengersPerEpoch = uint32(0) // 0 means auto - DefaultScFilesPerChallenger = uint32(2) - DefaultScReplicaCount = uint32(5) - DefaultScObserverThreshold = uint32(2) - DefaultScMinSliceBytes = uint64(1024) - DefaultScMaxSliceBytes = uint64(65536) - DefaultScResponseTimeoutMs = uint64(30000) - DefaultScAffirmationTimeoutMs = uint64(30000) - DefaultScEvidenceMaxBytes = uint64(65536) - DefaultScCandidateKeysLookbackEpochs = uint32(1) - DefaultScStartJitterMs = uint64(60000) - DefaultScEvidenceSubmitterMustBeChallenger = true + + // DefaultActionFinalizationRecovery* define the action-finalization recovery window. + DefaultActionFinalizationRecoveryEpochs = uint32(1) + DefaultActionFinalizationRecoveryMaxTotalBadEvidences = uint32(1) + + // DefaultScEnabled is the storage challenge feature gate (supernode-side execution and chain-side evidence validation). + DefaultScEnabled = true + + // DefaultScChallengersPerEpoch is the number of challengers selected per epoch from the anchored ACTIVE set. + // A value of 0 means "auto" (implementation-defined default). + DefaultScChallengersPerEpoch = uint32(0) // 0 means auto ) // Params notes @@ -122,17 +133,6 @@ func NewParams( actionFinalizationRecoveryMaxTotalBadEvidences uint32, scEnabled bool, scChallengersPerEpoch uint32, - scFilesPerChallenger uint32, - scReplicaCount uint32, - scObserverThreshold uint32, - scMinSliceBytes uint64, - scMaxSliceBytes uint64, - scResponseTimeoutMs uint64, - scAffirmationTimeoutMs uint64, - scEvidenceMaxBytes uint64, - scCandidateKeysLookbackEpochs uint32, - scStartJitterMs uint64, - scEvidenceSubmitterMustBeChallenger bool, ) Params { return Params{ EpochLengthBlocks: epochLengthBlocks, @@ -155,19 +155,8 @@ func NewParams( ActionFinalizationRecoveryEpochs: actionFinalizationRecoveryEpochs, ActionFinalizationRecoveryMaxTotalBadEvidences: actionFinalizationRecoveryMaxTotalBadEvidences, - ScEnabled: scEnabled, - ScChallengersPerEpoch: scChallengersPerEpoch, - ScFilesPerChallenger: scFilesPerChallenger, - ScReplicaCount: scReplicaCount, - ScObserverThreshold: scObserverThreshold, - ScMinSliceBytes: scMinSliceBytes, - ScMaxSliceBytes: scMaxSliceBytes, - ScResponseTimeoutMs: scResponseTimeoutMs, - ScAffirmationTimeoutMs: scAffirmationTimeoutMs, - ScEvidenceMaxBytes: scEvidenceMaxBytes, - ScCandidateKeysLookbackEpochs: scCandidateKeysLookbackEpochs, - ScStartJitterMs: scStartJitterMs, - ScEvidenceSubmitterMustBeChallenger: scEvidenceSubmitterMustBeChallenger, + ScEnabled: scEnabled, + ScChallengersPerEpoch: scChallengersPerEpoch, } } @@ -193,17 +182,6 @@ func DefaultParams() Params { DefaultActionFinalizationRecoveryMaxTotalBadEvidences, DefaultScEnabled, DefaultScChallengersPerEpoch, - DefaultScFilesPerChallenger, - DefaultScReplicaCount, - DefaultScObserverThreshold, - DefaultScMinSliceBytes, - DefaultScMaxSliceBytes, - DefaultScResponseTimeoutMs, - DefaultScAffirmationTimeoutMs, - DefaultScEvidenceMaxBytes, - DefaultScCandidateKeysLookbackEpochs, - DefaultScStartJitterMs, - DefaultScEvidenceSubmitterMustBeChallenger, ) } @@ -254,37 +232,6 @@ func (p Params) WithDefaults() Params { p.ActionFinalizationRecoveryMaxTotalBadEvidences = DefaultActionFinalizationRecoveryMaxTotalBadEvidences } - if p.ScFilesPerChallenger == 0 { - p.ScFilesPerChallenger = DefaultScFilesPerChallenger - } - if p.ScReplicaCount == 0 { - p.ScReplicaCount = DefaultScReplicaCount - } - if p.ScObserverThreshold == 0 { - p.ScObserverThreshold = DefaultScObserverThreshold - } - if p.ScMinSliceBytes == 0 { - p.ScMinSliceBytes = DefaultScMinSliceBytes - } - if p.ScMaxSliceBytes == 0 { - p.ScMaxSliceBytes = DefaultScMaxSliceBytes - } - if p.ScResponseTimeoutMs == 0 { - p.ScResponseTimeoutMs = DefaultScResponseTimeoutMs - } - if p.ScAffirmationTimeoutMs == 0 { - p.ScAffirmationTimeoutMs = DefaultScAffirmationTimeoutMs - } - if p.ScEvidenceMaxBytes == 0 { - p.ScEvidenceMaxBytes = DefaultScEvidenceMaxBytes - } - if p.ScCandidateKeysLookbackEpochs == 0 { - p.ScCandidateKeysLookbackEpochs = DefaultScCandidateKeysLookbackEpochs - } - if p.ScStartJitterMs == 0 { - p.ScStartJitterMs = DefaultScStartJitterMs - } - return p } @@ -312,17 +259,6 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyScEnabled, &p.ScEnabled, validateBool), paramtypes.NewParamSetPair(KeyScChallengersPerEpoch, &p.ScChallengersPerEpoch, validateUint32), - paramtypes.NewParamSetPair(KeyScFilesPerChallenger, &p.ScFilesPerChallenger, validateUint32), - paramtypes.NewParamSetPair(KeyScReplicaCount, &p.ScReplicaCount, validateUint32), - paramtypes.NewParamSetPair(KeyScObserverThreshold, &p.ScObserverThreshold, validateUint32), - paramtypes.NewParamSetPair(KeyScMinSliceBytes, &p.ScMinSliceBytes, validateUint64), - paramtypes.NewParamSetPair(KeyScMaxSliceBytes, &p.ScMaxSliceBytes, validateUint64), - paramtypes.NewParamSetPair(KeyScResponseTimeoutMs, &p.ScResponseTimeoutMs, validateUint64), - paramtypes.NewParamSetPair(KeyScAffirmationTimeoutMs, &p.ScAffirmationTimeoutMs, validateUint64), - paramtypes.NewParamSetPair(KeyScEvidenceMaxBytes, &p.ScEvidenceMaxBytes, validateUint64), - paramtypes.NewParamSetPair(KeyScCandidateKeysLookbackEpochs, &p.ScCandidateKeysLookbackEpochs, validateUint32), - paramtypes.NewParamSetPair(KeyScStartJitterMs, &p.ScStartJitterMs, validateUint64), - paramtypes.NewParamSetPair(KeyScEvidenceSubmitterMustBeChallenger, &p.ScEvidenceSubmitterMustBeChallenger, validateBool), } } @@ -335,6 +271,14 @@ func (p Params) Validate() error { if p.EpochZeroHeight == 0 { return fmt.Errorf("epoch_zero_height must be > 0") } + // Epoch math currently operates on int64 heights. Guard against values that would overflow + // when converted (epoch_zero_height and epoch_length_blocks are uint64 on-chain). + if p.EpochLengthBlocks > uint64(math.MaxInt64) { + return fmt.Errorf("epoch_length_blocks must be <= %d", int64(math.MaxInt64)) + } + if p.EpochZeroHeight > uint64(math.MaxInt64) { + return fmt.Errorf("epoch_zero_height must be <= %d", int64(math.MaxInt64)) + } if p.PeerQuorumReports == 0 { return fmt.Errorf("peer_quorum_reports must be > 0") } @@ -399,39 +343,6 @@ func (p Params) Validate() error { return fmt.Errorf("action_finalization_recovery_max_total_bad_evidences must be > 0") } - if p.ScEnabled { - if p.ScFilesPerChallenger == 0 { - return fmt.Errorf("sc_files_per_challenger must be > 0") - } - if p.ScReplicaCount == 0 { - return fmt.Errorf("sc_replica_count must be > 0") - } - if p.ScObserverThreshold == 0 { - return fmt.Errorf("sc_observer_threshold must be > 0") - } - if p.ScObserverThreshold > p.ScReplicaCount { - return fmt.Errorf("sc_observer_threshold must be <= sc_replica_count") - } - if p.ScMinSliceBytes == 0 || p.ScMaxSliceBytes == 0 { - return fmt.Errorf("sc_min_slice_bytes and sc_max_slice_bytes must be > 0") - } - if p.ScMinSliceBytes > p.ScMaxSliceBytes { - return fmt.Errorf("sc_min_slice_bytes must be <= sc_max_slice_bytes") - } - if p.ScResponseTimeoutMs == 0 { - return fmt.Errorf("sc_response_timeout_ms must be > 0") - } - if p.ScAffirmationTimeoutMs == 0 { - return fmt.Errorf("sc_affirmation_timeout_ms must be > 0") - } - if p.ScEvidenceMaxBytes == 0 { - return fmt.Errorf("sc_evidence_max_bytes must be > 0") - } - if p.ScCandidateKeysLookbackEpochs == 0 { - return fmt.Errorf("sc_candidate_keys_lookback_epochs must be > 0") - } - } - ports := append([]uint32(nil), p.RequiredOpenPorts...) sort.Slice(ports, func(i, j int) bool { return ports[i] < ports[j] }) for i := 1; i < len(ports); i++ { diff --git a/x/audit/v1/types/params.pb.go b/x/audit/v1/types/params.pb.go index 75d0315..96246a1 100644 --- a/x/audit/v1/types/params.pb.go +++ b/x/audit/v1/types/params.pb.go @@ -43,7 +43,7 @@ type Params struct { // Number of consecutive epochs a required port must be reported CLOSED by peers // at or above peer_port_postpone_threshold_percent before postponing the supernode. ConsecutiveEpochsToPostpone uint32 `protobuf:"varint,10,opt,name=consecutive_epochs_to_postpone,json=consecutiveEpochsToPostpone,proto3" json:"consecutive_epochs_to_postpone,omitempty"` - // How many completed epochs to keep in state for epoch-scoped data like AuditReport + // How many completed epochs to keep in state for epoch-scoped data like EpochReport // and related indices. Pruning runs at epoch end. KeepLastEpochEntries uint64 `protobuf:"varint,11,opt,name=keep_last_epoch_entries,json=keepLastEpochEntries,proto3" json:"keep_last_epoch_entries,omitempty"` // Minimum percent (1-100) of peer reports that must report a required port as CLOSED @@ -71,19 +71,8 @@ type Params struct { // Recovery happens ONLY IF total_bad < this value. ActionFinalizationRecoveryMaxTotalBadEvidences uint32 `protobuf:"varint,18,opt,name=action_finalization_recovery_max_total_bad_evidences,json=actionFinalizationRecoveryMaxTotalBadEvidences,proto3" json:"action_finalization_recovery_max_total_bad_evidences,omitempty"` // Storage Challenge (SC) params. - ScEnabled bool `protobuf:"varint,19,opt,name=sc_enabled,json=scEnabled,proto3" json:"sc_enabled,omitempty"` - ScChallengersPerEpoch uint32 `protobuf:"varint,20,opt,name=sc_challengers_per_epoch,json=scChallengersPerEpoch,proto3" json:"sc_challengers_per_epoch,omitempty"` - ScFilesPerChallenger uint32 `protobuf:"varint,21,opt,name=sc_files_per_challenger,json=scFilesPerChallenger,proto3" json:"sc_files_per_challenger,omitempty"` - ScReplicaCount uint32 `protobuf:"varint,22,opt,name=sc_replica_count,json=scReplicaCount,proto3" json:"sc_replica_count,omitempty"` - ScObserverThreshold uint32 `protobuf:"varint,23,opt,name=sc_observer_threshold,json=scObserverThreshold,proto3" json:"sc_observer_threshold,omitempty"` - ScMinSliceBytes uint64 `protobuf:"varint,24,opt,name=sc_min_slice_bytes,json=scMinSliceBytes,proto3" json:"sc_min_slice_bytes,omitempty"` - ScMaxSliceBytes uint64 `protobuf:"varint,25,opt,name=sc_max_slice_bytes,json=scMaxSliceBytes,proto3" json:"sc_max_slice_bytes,omitempty"` - ScResponseTimeoutMs uint64 `protobuf:"varint,26,opt,name=sc_response_timeout_ms,json=scResponseTimeoutMs,proto3" json:"sc_response_timeout_ms,omitempty"` - ScAffirmationTimeoutMs uint64 `protobuf:"varint,27,opt,name=sc_affirmation_timeout_ms,json=scAffirmationTimeoutMs,proto3" json:"sc_affirmation_timeout_ms,omitempty"` - ScEvidenceMaxBytes uint64 `protobuf:"varint,28,opt,name=sc_evidence_max_bytes,json=scEvidenceMaxBytes,proto3" json:"sc_evidence_max_bytes,omitempty"` - ScCandidateKeysLookbackEpochs uint32 `protobuf:"varint,29,opt,name=sc_candidate_keys_lookback_epochs,json=scCandidateKeysLookbackEpochs,proto3" json:"sc_candidate_keys_lookback_epochs,omitempty"` - ScStartJitterMs uint64 `protobuf:"varint,30,opt,name=sc_start_jitter_ms,json=scStartJitterMs,proto3" json:"sc_start_jitter_ms,omitempty"` - ScEvidenceSubmitterMustBeChallenger bool `protobuf:"varint,31,opt,name=sc_evidence_submitter_must_be_challenger,json=scEvidenceSubmitterMustBeChallenger,proto3" json:"sc_evidence_submitter_must_be_challenger,omitempty"` + ScEnabled bool `protobuf:"varint,19,opt,name=sc_enabled,json=scEnabled,proto3" json:"sc_enabled,omitempty"` + ScChallengersPerEpoch uint32 `protobuf:"varint,20,opt,name=sc_challengers_per_epoch,json=scChallengersPerEpoch,proto3" json:"sc_challengers_per_epoch,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -259,83 +248,6 @@ func (m *Params) GetScChallengersPerEpoch() uint32 { return 0 } -func (m *Params) GetScFilesPerChallenger() uint32 { - if m != nil { - return m.ScFilesPerChallenger - } - return 0 -} - -func (m *Params) GetScReplicaCount() uint32 { - if m != nil { - return m.ScReplicaCount - } - return 0 -} - -func (m *Params) GetScObserverThreshold() uint32 { - if m != nil { - return m.ScObserverThreshold - } - return 0 -} - -func (m *Params) GetScMinSliceBytes() uint64 { - if m != nil { - return m.ScMinSliceBytes - } - return 0 -} - -func (m *Params) GetScMaxSliceBytes() uint64 { - if m != nil { - return m.ScMaxSliceBytes - } - return 0 -} - -func (m *Params) GetScResponseTimeoutMs() uint64 { - if m != nil { - return m.ScResponseTimeoutMs - } - return 0 -} - -func (m *Params) GetScAffirmationTimeoutMs() uint64 { - if m != nil { - return m.ScAffirmationTimeoutMs - } - return 0 -} - -func (m *Params) GetScEvidenceMaxBytes() uint64 { - if m != nil { - return m.ScEvidenceMaxBytes - } - return 0 -} - -func (m *Params) GetScCandidateKeysLookbackEpochs() uint32 { - if m != nil { - return m.ScCandidateKeysLookbackEpochs - } - return 0 -} - -func (m *Params) GetScStartJitterMs() uint64 { - if m != nil { - return m.ScStartJitterMs - } - return 0 -} - -func (m *Params) GetScEvidenceSubmitterMustBeChallenger() bool { - if m != nil { - return m.ScEvidenceSubmitterMustBeChallenger - } - return false -} - func init() { proto.RegisterType((*Params)(nil), "lumera.audit.v1.Params") } @@ -343,70 +255,52 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/params.proto", fileDescriptor_3788ca0fc7eb9d86) } var fileDescriptor_3788ca0fc7eb9d86 = []byte{ - // 993 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xcd, 0x72, 0x1b, 0x45, - 0x10, 0xb6, 0x88, 0x31, 0xc9, 0x40, 0x62, 0x7b, 0xfd, 0xb7, 0xb1, 0x63, 0xc5, 0x10, 0x0e, 0xae, - 0x50, 0x48, 0x18, 0x93, 0x82, 0x50, 0x5c, 0xb0, 0xb0, 0x2b, 0x80, 0x95, 0x08, 0x59, 0x5c, 0x72, - 0x99, 0x1a, 0x8d, 0x5a, 0xd2, 0x44, 0xbb, 0x33, 0x9b, 0xe9, 0x59, 0x95, 0x9c, 0xa7, 0xe0, 0x11, - 0x78, 0x1c, 0x8e, 0x39, 0x72, 0xa4, 0x6c, 0x0e, 0x3c, 0x06, 0x35, 0x3d, 0x5a, 0x49, 0x8e, 0x95, - 0x4a, 0x2e, 0xf6, 0xaa, 0xbf, 0xef, 0xeb, 0xfe, 0xba, 0x7b, 0x76, 0x6a, 0xd9, 0xbd, 0x24, 0x4f, - 0xc1, 0x8a, 0xaa, 0xc8, 0x3b, 0xca, 0x55, 0x87, 0x07, 0xd5, 0x4c, 0x58, 0x91, 0x62, 0x25, 0xb3, - 0xc6, 0x99, 0x68, 0x39, 0xa0, 0x15, 0x42, 0x2b, 0xc3, 0x83, 0xed, 0x55, 0x91, 0x2a, 0x6d, 0xaa, - 0xf4, 0x37, 0x70, 0xb6, 0xd7, 0x7b, 0xa6, 0x67, 0xe8, 0xb1, 0xea, 0x9f, 0x42, 0xf4, 0xb3, 0x7f, - 0x97, 0xd9, 0x52, 0x83, 0x52, 0x45, 0x15, 0xb6, 0x06, 0x99, 0x91, 0x7d, 0x9e, 0x80, 0xee, 0xb9, - 0x3e, 0x6f, 0x27, 0x46, 0x0e, 0x30, 0x2e, 0xed, 0x95, 0xf6, 0x17, 0x9b, 0xab, 0x04, 0x9d, 0x12, - 0x72, 0x44, 0x40, 0xf4, 0x90, 0x85, 0x20, 0x7f, 0x05, 0xd6, 0xf0, 0x3e, 0xa8, 0x5e, 0xdf, 0xc5, - 0x1f, 0x10, 0x7b, 0x99, 0x80, 0xe7, 0x60, 0xcd, 0x13, 0x0a, 0xfb, 0xdc, 0x19, 0x80, 0xe5, 0x2f, - 0x73, 0x63, 0xf3, 0x94, 0x5b, 0xc8, 0x8c, 0x75, 0x18, 0xdf, 0xd8, 0x2b, 0xed, 0xdf, 0x6e, 0xae, - 0x7a, 0xe8, 0x37, 0x42, 0x9a, 0x01, 0x88, 0x7e, 0x60, 0x3b, 0xa9, 0xd2, 0x3c, 0xb3, 0xa6, 0x0d, - 0xdc, 0x09, 0xdb, 0x03, 0x87, 0x3c, 0x03, 0xcb, 0x29, 0x71, 0xbc, 0x48, 0xba, 0xad, 0x54, 0xe9, - 0x86, 0x67, 0xb4, 0x02, 0xa1, 0x01, 0xf6, 0xd8, 0xc3, 0xa4, 0x16, 0xa3, 0xb7, 0xaa, 0x3f, 0x1c, - 0xab, 0xc5, 0x68, 0xae, 0xba, 0xc2, 0xd6, 0x2c, 0xbc, 0xcc, 0x95, 0x85, 0x0e, 0x37, 0x19, 0x68, - 0x1e, 0xbc, 0x2e, 0xed, 0xdd, 0xf0, 0x5e, 0x0b, 0xe8, 0x59, 0x06, 0xba, 0x41, 0x5e, 0xab, 0x6c, - 0xdd, 0x7b, 0x95, 0x59, 0xce, 0xbb, 0x16, 0xc0, 0x17, 0x92, 0xa0, 0x5d, 0xfc, 0x51, 0x68, 0x2e, - 0x55, 0xba, 0x96, 0xe5, 0x27, 0x16, 0xa0, 0x11, 0x80, 0x42, 0x90, 0x42, 0x7a, 0x55, 0x70, 0x73, - 0x22, 0xa8, 0x43, 0x3a, 0x2b, 0x38, 0x60, 0x1b, 0x5e, 0xd0, 0x51, 0x38, 0xb8, 0xaa, 0xb8, 0x45, - 0x8a, 0x28, 0x55, 0xfa, 0x27, 0x85, 0x83, 0x59, 0x49, 0x8d, 0x95, 0xa5, 0xd1, 0x08, 0x32, 0x77, - 0x6a, 0x08, 0xa1, 0x71, 0xe4, 0xce, 0xf0, 0xcc, 0xa0, 0xcb, 0x8c, 0x86, 0x98, 0x91, 0x76, 0x67, - 0x86, 0x45, 0xed, 0x63, 0xcb, 0x34, 0xc6, 0x94, 0xe8, 0x11, 0xdb, 0x1a, 0x00, 0x64, 0x3c, 0x11, - 0xe8, 0x42, 0x0a, 0x0e, 0xda, 0x59, 0x05, 0x18, 0x7f, 0x4c, 0x7b, 0x5e, 0xf7, 0xf0, 0xa9, 0x40, - 0x47, 0xd2, 0xe3, 0x80, 0x45, 0x4f, 0xd9, 0xe7, 0xb4, 0x6c, 0x3f, 0xb7, 0x49, 0x3d, 0xee, 0xfa, - 0x16, 0xb0, 0x6f, 0x92, 0xce, 0xc4, 0xfd, 0x27, 0xe4, 0x60, 0xcf, 0x73, 0xfd, 0x24, 0x8b, 0xb2, - 0xad, 0x82, 0x58, 0xf4, 0x32, 0x64, 0x8f, 0x85, 0x74, 0xca, 0x68, 0xde, 0x55, 0x5a, 0x24, 0xea, - 0x95, 0xa0, 0x1f, 0xa8, 0x7a, 0x5a, 0xb8, 0xdc, 0x02, 0xef, 0x0a, 0x95, 0xf8, 0xff, 0x30, 0x54, - 0x1d, 0xd0, 0x12, 0x66, 0x97, 0x7d, 0x9b, 0x8a, 0x1c, 0x86, 0x04, 0x27, 0x33, 0xfa, 0xb3, 0x42, - 0x7e, 0x12, 0xd4, 0xc7, 0x85, 0x78, 0x72, 0x10, 0x72, 0xf6, 0xdd, 0xfb, 0xd5, 0xbd, 0x3e, 0xe9, - 0xf8, 0xce, 0xfb, 0x96, 0xad, 0xbd, 0x39, 0xff, 0x68, 0xc0, 0xbe, 0x99, 0x57, 0x56, 0x1b, 0xc7, - 0x95, 0xe6, 0xce, 0x64, 0x07, 0x5f, 0xcd, 0xed, 0x74, 0x99, 0x4a, 0x7e, 0x79, 0xbd, 0xe4, 0x53, - 0xe3, 0x7e, 0xd6, 0x2d, 0xaf, 0xbb, 0xde, 0xe3, 0x0b, 0x76, 0xf8, 0xce, 0x62, 0x73, 0xda, 0x5b, - 0x79, 0x77, 0xad, 0xeb, 0x8d, 0xd5, 0xd9, 0x83, 0x79, 0xb5, 0x2c, 0x48, 0x33, 0x04, 0x7b, 0x5e, - 0xe4, 0x5e, 0x0d, 0xc7, 0xe2, 0x7a, 0xee, 0xe6, 0x98, 0x38, 0x4e, 0x97, 0xcc, 0x9f, 0xd3, 0x24, - 0x9d, 0xbf, 0x02, 0x9c, 0x71, 0x22, 0xe1, 0x6d, 0xd1, 0x99, 0x4e, 0x2c, 0x8e, 0x28, 0x7f, 0xe5, - 0xed, 0xf9, 0xeb, 0x62, 0xd4, 0xf2, 0xba, 0x23, 0xd1, 0x99, 0x0c, 0x2c, 0xda, 0x65, 0x0c, 0x25, - 0x07, 0x2d, 0xda, 0x09, 0x74, 0xe2, 0xb5, 0xbd, 0xd2, 0xfe, 0xcd, 0xe6, 0x2d, 0x94, 0xc7, 0x21, - 0x10, 0x7d, 0xcb, 0x62, 0x94, 0x5c, 0xf6, 0x45, 0xe2, 0x6f, 0x4f, 0xb0, 0xb3, 0x8b, 0x59, 0xa7, - 0x82, 0x1b, 0x28, 0x6b, 0x53, 0x78, 0xb2, 0x80, 0x47, 0x6c, 0x0b, 0x25, 0xef, 0xaa, 0x64, 0xbc, - 0xcb, 0x69, 0x8a, 0x78, 0x83, 0x74, 0xeb, 0x28, 0x4f, 0x3c, 0xda, 0x00, 0x3b, 0xd5, 0x47, 0xfb, - 0x6c, 0x05, 0xa5, 0xbf, 0x47, 0x13, 0x25, 0x05, 0x97, 0x26, 0xd7, 0x2e, 0xde, 0x24, 0xfe, 0x1d, - 0x94, 0xcd, 0x10, 0xae, 0xf9, 0x68, 0xf4, 0x35, 0xdb, 0x40, 0xc9, 0x4d, 0x1b, 0xc1, 0x0e, 0xc1, - 0x4e, 0x5f, 0xc3, 0x78, 0x8b, 0xe8, 0x6b, 0x28, 0x9f, 0x8d, 0xb1, 0xc9, 0x8b, 0x17, 0x7d, 0xc1, - 0x22, 0x94, 0xdc, 0xdf, 0x39, 0x98, 0x28, 0x09, 0xbc, 0x7d, 0xee, 0x00, 0xe3, 0x38, 0xdc, 0xed, - 0x28, 0xeb, 0x4a, 0x9f, 0xf9, 0xf8, 0x91, 0x0f, 0x17, 0x64, 0x31, 0xba, 0x42, 0xbe, 0x3b, 0x21, - 0x8b, 0xd1, 0x0c, 0xf9, 0x90, 0x6d, 0x92, 0x6f, 0xcc, 0xfc, 0xf1, 0xe0, 0x4e, 0xa5, 0x60, 0x72, - 0xc7, 0x53, 0x8c, 0xb7, 0x49, 0xb0, 0xe6, 0xdd, 0x07, 0xb0, 0x15, 0xb0, 0x3a, 0x46, 0x8f, 0xd9, - 0x5d, 0x94, 0x5c, 0x74, 0xbb, 0xca, 0xa6, 0x61, 0xc9, 0x33, 0xba, 0x1d, 0xd2, 0x6d, 0xa2, 0xfc, - 0x71, 0x8a, 0x4f, 0xa5, 0x07, 0xd4, 0x7d, 0xb1, 0x7c, 0x72, 0x19, 0xfc, 0xdd, 0x23, 0x59, 0x84, - 0xb2, 0x58, 0x71, 0x5d, 0x8c, 0x82, 0xc5, 0x27, 0xec, 0x53, 0xbf, 0x4a, 0xa1, 0x3b, 0xaa, 0x23, - 0x1c, 0xf0, 0x01, 0x9c, 0x23, 0x4f, 0x8c, 0x19, 0xb4, 0x85, 0x1c, 0x14, 0x87, 0x74, 0x97, 0x86, - 0xb7, 0x8b, 0xb2, 0x56, 0xf0, 0x7e, 0x85, 0x73, 0x3c, 0x1d, 0xb3, 0xc6, 0x27, 0x34, 0x4c, 0x06, - 0x9d, 0xb0, 0x8e, 0xbf, 0x50, 0xce, 0x81, 0xf5, 0x86, 0xcb, 0xc5, 0x64, 0xce, 0x3c, 0xf0, 0x0b, - 0xc5, 0xeb, 0x18, 0xfd, 0xce, 0xf6, 0x67, 0x9d, 0x62, 0xde, 0x4e, 0xc7, 0x92, 0x1c, 0x1d, 0x6f, - 0xc3, 0xec, 0xc9, 0xb8, 0x4f, 0xc7, 0xef, 0xc1, 0xd4, 0xfc, 0x59, 0xc1, 0xae, 0xe7, 0xe8, 0x8e, - 0x60, 0x7a, 0x50, 0xbe, 0x5f, 0xfc, 0xef, 0xcf, 0xfb, 0xa5, 0xa3, 0x87, 0x7f, 0x5d, 0x94, 0x4b, - 0xaf, 0x2f, 0xca, 0xa5, 0x7f, 0x2e, 0xca, 0xa5, 0x3f, 0x2e, 0xcb, 0x0b, 0xaf, 0x2f, 0xcb, 0x0b, - 0x7f, 0x5f, 0x96, 0x17, 0x9e, 0xaf, 0x8c, 0xa6, 0xdf, 0x14, 0xee, 0x3c, 0x03, 0x6c, 0x2f, 0xd1, - 0x97, 0xc1, 0xe1, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x24, 0x0a, 0xa4, 0x48, 0x73, 0x08, 0x00, - 0x00, + // 715 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x4f, 0x4f, 0x13, 0x41, + 0x18, 0xc6, 0x59, 0x41, 0x84, 0x41, 0x84, 0x2e, 0x25, 0x6c, 0x40, 0x6b, 0xa3, 0x1e, 0x08, 0x89, + 0xad, 0x0d, 0x1a, 0xff, 0xc4, 0x13, 0xb5, 0x44, 0x13, 0xc0, 0x5a, 0x7b, 0xe2, 0x32, 0x99, 0xee, + 0xbe, 0xb4, 0x63, 0x77, 0x67, 0x86, 0x99, 0xd9, 0xa6, 0x70, 0xf6, 0x03, 0xf8, 0x11, 0xfc, 0x38, + 0x1e, 0x39, 0x7a, 0x34, 0x70, 0xf1, 0x63, 0x98, 0x99, 0xe9, 0x96, 0x62, 0x4b, 0xe0, 0xd2, 0xee, + 0xce, 0xf3, 0xfe, 0x9e, 0x67, 0xde, 0x77, 0x36, 0x83, 0x1e, 0xc6, 0x69, 0x02, 0x92, 0x94, 0x49, + 0x1a, 0x51, 0x5d, 0xee, 0x55, 0xca, 0x82, 0x48, 0x92, 0xa8, 0x92, 0x90, 0x5c, 0x73, 0x7f, 0xc9, + 0xa9, 0x25, 0xab, 0x96, 0x7a, 0x95, 0xf5, 0x1c, 0x49, 0x28, 0xe3, 0x65, 0xfb, 0xeb, 0x6a, 0xd6, + 0xf3, 0x6d, 0xde, 0xe6, 0xf6, 0xb1, 0x6c, 0x9e, 0xdc, 0xea, 0x93, 0xef, 0x0b, 0x68, 0xb6, 0x6e, + 0xad, 0xfc, 0x12, 0x5a, 0x01, 0xc1, 0xc3, 0x0e, 0x8e, 0x81, 0xb5, 0x75, 0x07, 0xb7, 0x62, 0x1e, + 0x76, 0x55, 0xe0, 0x15, 0xbd, 0xcd, 0x99, 0x46, 0xce, 0x4a, 0x7b, 0x56, 0xd9, 0xb1, 0x82, 0xbf, + 0x85, 0xdc, 0x22, 0x3e, 0x05, 0xc9, 0x71, 0x07, 0x68, 0xbb, 0xa3, 0x83, 0x3b, 0xb6, 0x7a, 0xc9, + 0x0a, 0x87, 0x20, 0xf9, 0x47, 0xbb, 0x6c, 0xbc, 0x05, 0x80, 0xc4, 0xc7, 0x29, 0x97, 0x69, 0x82, + 0x25, 0x08, 0x2e, 0xb5, 0x0a, 0xa6, 0x8b, 0xde, 0xe6, 0x62, 0x23, 0x67, 0xa4, 0x2f, 0x56, 0x69, + 0x38, 0xc1, 0x7f, 0x8f, 0x36, 0x12, 0xca, 0xb0, 0x90, 0xbc, 0x05, 0x58, 0x13, 0xd9, 0x06, 0xad, + 0xb0, 0x00, 0x89, 0xad, 0x71, 0x30, 0x63, 0xb9, 0xb5, 0x84, 0xb2, 0xba, 0xa9, 0x68, 0xba, 0x82, + 0x3a, 0xc8, 0x9a, 0x91, 0x2d, 0x4d, 0xfa, 0xd7, 0xd2, 0x77, 0x07, 0x34, 0xe9, 0x4f, 0xa4, 0x4b, + 0x68, 0x45, 0xc2, 0x71, 0x4a, 0x25, 0x44, 0x98, 0x0b, 0x60, 0xd8, 0xed, 0x75, 0xb6, 0x38, 0x6d, + 0xf6, 0x9a, 0x49, 0x9f, 0x05, 0xb0, 0xba, 0xdd, 0x6b, 0x19, 0xe5, 0xcd, 0x5e, 0x43, 0x91, 0xe2, + 0x23, 0x09, 0x60, 0x82, 0x42, 0x60, 0x3a, 0xb8, 0xe7, 0x9a, 0x4b, 0x28, 0xab, 0x8a, 0x74, 0x57, + 0x02, 0xd4, 0x9d, 0x90, 0x01, 0x09, 0x24, 0x57, 0x81, 0xb9, 0x21, 0xb0, 0x0f, 0xc9, 0x28, 0x50, + 0x41, 0xab, 0x06, 0x88, 0xa8, 0xea, 0x5e, 0x25, 0xe6, 0x2d, 0xe1, 0x27, 0x94, 0x7d, 0xa0, 0xaa, + 0x3b, 0x8a, 0x54, 0x51, 0x21, 0xe4, 0x4c, 0x41, 0x98, 0x6a, 0xda, 0x03, 0xd7, 0xb8, 0xc2, 0x9a, + 0x63, 0xc1, 0x95, 0x16, 0x9c, 0x41, 0x80, 0x2c, 0xbb, 0x31, 0x52, 0x65, 0xdb, 0x57, 0x4d, 0x5e, + 0x1f, 0x94, 0xf8, 0xaf, 0xd0, 0x5a, 0x17, 0x40, 0xe0, 0x98, 0x28, 0xed, 0x2c, 0x30, 0x30, 0x2d, + 0x29, 0xa8, 0x60, 0xc1, 0x9e, 0x73, 0xde, 0xc8, 0x7b, 0x44, 0x69, 0x8b, 0xd6, 0x9c, 0xe6, 0x1f, + 0xa0, 0x67, 0xf6, 0xb0, 0xcd, 0xdc, 0x86, 0x79, 0x58, 0x77, 0x24, 0xa8, 0x0e, 0x8f, 0xa3, 0xe1, + 0xee, 0xef, 0xdb, 0x1d, 0x14, 0x4d, 0xad, 0x99, 0x64, 0x16, 0xdb, 0xcc, 0x0a, 0xb3, 0x5e, 0x7a, + 0xe8, 0x2d, 0x09, 0x35, 0xe5, 0x0c, 0x1f, 0x51, 0x46, 0x62, 0x7a, 0x4a, 0xec, 0x8b, 0xa2, 0x6d, + 0x46, 0x74, 0x2a, 0x01, 0x1f, 0x11, 0x1a, 0x9b, 0x7f, 0xe8, 0xd1, 0x08, 0x58, 0x08, 0xa3, 0x87, + 0xbd, 0x68, 0x43, 0xb6, 0x9d, 0xc1, 0xee, 0x08, 0xff, 0x35, 0xc3, 0x77, 0x1d, 0x5d, 0xcb, 0xe0, + 0xe1, 0x87, 0x90, 0xa2, 0x37, 0xb7, 0xcb, 0x1d, 0x9f, 0x74, 0xf0, 0xe0, 0xb6, 0xb1, 0xd5, 0xff, + 0xe7, 0xef, 0x77, 0xd1, 0xcb, 0x49, 0xb1, 0x8c, 0x6b, 0x4c, 0x19, 0xd6, 0x5c, 0x54, 0x5e, 0x4c, + 0xec, 0x74, 0xc9, 0x46, 0x3e, 0x1f, 0x8f, 0x3c, 0xe0, 0xfa, 0x13, 0x6b, 0x1a, 0x6e, 0xbc, 0xc7, + 0x6f, 0x68, 0xfb, 0xc6, 0xb0, 0x09, 0xed, 0x2d, 0xdf, 0x9c, 0x35, 0xde, 0xd8, 0x3e, 0x7a, 0x3a, + 0x29, 0x4b, 0x42, 0xc8, 0x7b, 0x20, 0x4f, 0x32, 0xef, 0x9c, 0xfb, 0x2c, 0xc6, 0xbd, 0x1b, 0x83, + 0xc2, 0x81, 0x5d, 0x3c, 0x79, 0x4e, 0x43, 0x3b, 0x73, 0x05, 0x68, 0xae, 0x49, 0x8c, 0x5b, 0x24, + 0xba, 0x9c, 0x58, 0xe0, 0x5b, 0xff, 0xd2, 0xf5, 0xfe, 0xfb, 0xa4, 0xdf, 0x34, 0xdc, 0x0e, 0x89, + 0x86, 0x03, 0xf3, 0x1f, 0x21, 0xa4, 0x42, 0x0c, 0x8c, 0xb4, 0x62, 0x88, 0x82, 0x95, 0xa2, 0xb7, + 0x39, 0xd7, 0x98, 0x57, 0x61, 0xcd, 0x2d, 0xf8, 0xaf, 0x51, 0xa0, 0x42, 0x1c, 0x76, 0x48, 0x6c, + 0x6e, 0x4f, 0x90, 0xa3, 0x07, 0x93, 0xb7, 0x81, 0xab, 0x2a, 0xac, 0x5e, 0xca, 0xd9, 0x01, 0xbc, + 0x9b, 0xf9, 0xfb, 0xf3, 0xb1, 0xb7, 0xb3, 0xf5, 0xeb, 0xbc, 0xe0, 0x9d, 0x9d, 0x17, 0xbc, 0x3f, + 0xe7, 0x05, 0xef, 0xc7, 0x45, 0x61, 0xea, 0xec, 0xa2, 0x30, 0xf5, 0xfb, 0xa2, 0x30, 0x75, 0xb8, + 0xdc, 0xbf, 0xbc, 0xf3, 0xf5, 0x89, 0x00, 0xd5, 0x9a, 0xb5, 0x37, 0xf7, 0xf6, 0xbf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xf4, 0x64, 0xdc, 0x58, 0x13, 0x06, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -493,39 +387,6 @@ func (this *Params) Equal(that interface{}) bool { if this.ScChallengersPerEpoch != that1.ScChallengersPerEpoch { return false } - if this.ScFilesPerChallenger != that1.ScFilesPerChallenger { - return false - } - if this.ScReplicaCount != that1.ScReplicaCount { - return false - } - if this.ScObserverThreshold != that1.ScObserverThreshold { - return false - } - if this.ScMinSliceBytes != that1.ScMinSliceBytes { - return false - } - if this.ScMaxSliceBytes != that1.ScMaxSliceBytes { - return false - } - if this.ScResponseTimeoutMs != that1.ScResponseTimeoutMs { - return false - } - if this.ScAffirmationTimeoutMs != that1.ScAffirmationTimeoutMs { - return false - } - if this.ScEvidenceMaxBytes != that1.ScEvidenceMaxBytes { - return false - } - if this.ScCandidateKeysLookbackEpochs != that1.ScCandidateKeysLookbackEpochs { - return false - } - if this.ScStartJitterMs != that1.ScStartJitterMs { - return false - } - if this.ScEvidenceSubmitterMustBeChallenger != that1.ScEvidenceSubmitterMustBeChallenger { - return false - } return true } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -548,88 +409,6 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.ScEvidenceSubmitterMustBeChallenger { - i-- - if m.ScEvidenceSubmitterMustBeChallenger { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xf8 - } - if m.ScStartJitterMs != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScStartJitterMs)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xf0 - } - if m.ScCandidateKeysLookbackEpochs != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScCandidateKeysLookbackEpochs)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xe8 - } - if m.ScEvidenceMaxBytes != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScEvidenceMaxBytes)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xe0 - } - if m.ScAffirmationTimeoutMs != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScAffirmationTimeoutMs)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xd8 - } - if m.ScResponseTimeoutMs != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScResponseTimeoutMs)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xd0 - } - if m.ScMaxSliceBytes != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScMaxSliceBytes)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xc8 - } - if m.ScMinSliceBytes != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScMinSliceBytes)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xc0 - } - if m.ScObserverThreshold != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScObserverThreshold)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xb8 - } - if m.ScReplicaCount != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScReplicaCount)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xb0 - } - if m.ScFilesPerChallenger != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.ScFilesPerChallenger)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xa8 - } if m.ScChallengersPerEpoch != 0 { i = encodeVarintParams(dAtA, i, uint64(m.ScChallengersPerEpoch)) i-- @@ -842,39 +621,6 @@ func (m *Params) Size() (n int) { if m.ScChallengersPerEpoch != 0 { n += 2 + sovParams(uint64(m.ScChallengersPerEpoch)) } - if m.ScFilesPerChallenger != 0 { - n += 2 + sovParams(uint64(m.ScFilesPerChallenger)) - } - if m.ScReplicaCount != 0 { - n += 2 + sovParams(uint64(m.ScReplicaCount)) - } - if m.ScObserverThreshold != 0 { - n += 2 + sovParams(uint64(m.ScObserverThreshold)) - } - if m.ScMinSliceBytes != 0 { - n += 2 + sovParams(uint64(m.ScMinSliceBytes)) - } - if m.ScMaxSliceBytes != 0 { - n += 2 + sovParams(uint64(m.ScMaxSliceBytes)) - } - if m.ScResponseTimeoutMs != 0 { - n += 2 + sovParams(uint64(m.ScResponseTimeoutMs)) - } - if m.ScAffirmationTimeoutMs != 0 { - n += 2 + sovParams(uint64(m.ScAffirmationTimeoutMs)) - } - if m.ScEvidenceMaxBytes != 0 { - n += 2 + sovParams(uint64(m.ScEvidenceMaxBytes)) - } - if m.ScCandidateKeysLookbackEpochs != 0 { - n += 2 + sovParams(uint64(m.ScCandidateKeysLookbackEpochs)) - } - if m.ScStartJitterMs != 0 { - n += 2 + sovParams(uint64(m.ScStartJitterMs)) - } - if m.ScEvidenceSubmitterMustBeChallenger { - n += 3 - } return n } @@ -1351,216 +1097,6 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } - case 21: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScFilesPerChallenger", wireType) - } - m.ScFilesPerChallenger = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScFilesPerChallenger |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 22: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScReplicaCount", wireType) - } - m.ScReplicaCount = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScReplicaCount |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 23: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScObserverThreshold", wireType) - } - m.ScObserverThreshold = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScObserverThreshold |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 24: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScMinSliceBytes", wireType) - } - m.ScMinSliceBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScMinSliceBytes |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 25: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScMaxSliceBytes", wireType) - } - m.ScMaxSliceBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScMaxSliceBytes |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 26: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScResponseTimeoutMs", wireType) - } - m.ScResponseTimeoutMs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScResponseTimeoutMs |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 27: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScAffirmationTimeoutMs", wireType) - } - m.ScAffirmationTimeoutMs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScAffirmationTimeoutMs |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 28: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScEvidenceMaxBytes", wireType) - } - m.ScEvidenceMaxBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScEvidenceMaxBytes |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 29: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScCandidateKeysLookbackEpochs", wireType) - } - m.ScCandidateKeysLookbackEpochs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScCandidateKeysLookbackEpochs |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 30: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScStartJitterMs", wireType) - } - m.ScStartJitterMs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ScStartJitterMs |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 31: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScEvidenceSubmitterMustBeChallenger", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ScEvidenceSubmitterMustBeChallenger = bool(v != 0) default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) diff --git a/x/audit/v1/types/query.pb.go b/x/audit/v1/types/query.pb.go index fc7e883..1792184 100644 --- a/x/audit/v1/types/query.pb.go +++ b/x/audit/v1/types/query.pb.go @@ -800,23 +800,23 @@ func (m *QueryAssignedTargetsResponse) GetTargetSupernodeAccounts() []string { return nil } -type QueryAuditReportRequest struct { +type QueryEpochReportRequest struct { EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` SupernodeAccount string `protobuf:"bytes,2,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` } -func (m *QueryAuditReportRequest) Reset() { *m = QueryAuditReportRequest{} } -func (m *QueryAuditReportRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAuditReportRequest) ProtoMessage() {} -func (*QueryAuditReportRequest) Descriptor() ([]byte, []int) { +func (m *QueryEpochReportRequest) Reset() { *m = QueryEpochReportRequest{} } +func (m *QueryEpochReportRequest) String() string { return proto.CompactTextString(m) } +func (*QueryEpochReportRequest) ProtoMessage() {} +func (*QueryEpochReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{16} } -func (m *QueryAuditReportRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryEpochReportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAuditReportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryEpochReportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAuditReportRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryEpochReportRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -826,48 +826,48 @@ func (m *QueryAuditReportRequest) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryAuditReportRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAuditReportRequest.Merge(m, src) +func (m *QueryEpochReportRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEpochReportRequest.Merge(m, src) } -func (m *QueryAuditReportRequest) XXX_Size() int { +func (m *QueryEpochReportRequest) XXX_Size() int { return m.Size() } -func (m *QueryAuditReportRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAuditReportRequest.DiscardUnknown(m) +func (m *QueryEpochReportRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEpochReportRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAuditReportRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryEpochReportRequest proto.InternalMessageInfo -func (m *QueryAuditReportRequest) GetEpochId() uint64 { +func (m *QueryEpochReportRequest) GetEpochId() uint64 { if m != nil { return m.EpochId } return 0 } -func (m *QueryAuditReportRequest) GetSupernodeAccount() string { +func (m *QueryEpochReportRequest) GetSupernodeAccount() string { if m != nil { return m.SupernodeAccount } return "" } -type QueryAuditReportResponse struct { - Report AuditReport `protobuf:"bytes,1,opt,name=report,proto3" json:"report"` +type QueryEpochReportResponse struct { + Report EpochReport `protobuf:"bytes,1,opt,name=report,proto3" json:"report"` } -func (m *QueryAuditReportResponse) Reset() { *m = QueryAuditReportResponse{} } -func (m *QueryAuditReportResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAuditReportResponse) ProtoMessage() {} -func (*QueryAuditReportResponse) Descriptor() ([]byte, []int) { +func (m *QueryEpochReportResponse) Reset() { *m = QueryEpochReportResponse{} } +func (m *QueryEpochReportResponse) String() string { return proto.CompactTextString(m) } +func (*QueryEpochReportResponse) ProtoMessage() {} +func (*QueryEpochReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{17} } -func (m *QueryAuditReportResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryEpochReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAuditReportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryEpochReportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAuditReportResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryEpochReportResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -877,44 +877,44 @@ func (m *QueryAuditReportResponse) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *QueryAuditReportResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAuditReportResponse.Merge(m, src) +func (m *QueryEpochReportResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEpochReportResponse.Merge(m, src) } -func (m *QueryAuditReportResponse) XXX_Size() int { +func (m *QueryEpochReportResponse) XXX_Size() int { return m.Size() } -func (m *QueryAuditReportResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAuditReportResponse.DiscardUnknown(m) +func (m *QueryEpochReportResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEpochReportResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAuditReportResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryEpochReportResponse proto.InternalMessageInfo -func (m *QueryAuditReportResponse) GetReport() AuditReport { +func (m *QueryEpochReportResponse) GetReport() EpochReport { if m != nil { return m.Report } - return AuditReport{} + return EpochReport{} } -type QueryAuditReportsByReporterRequest struct { +type QueryEpochReportsByReporterRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` FilterByEpochId bool `protobuf:"varint,4,opt,name=filter_by_epoch_id,json=filterByEpochId,proto3" json:"filter_by_epoch_id,omitempty"` } -func (m *QueryAuditReportsByReporterRequest) Reset() { *m = QueryAuditReportsByReporterRequest{} } -func (m *QueryAuditReportsByReporterRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAuditReportsByReporterRequest) ProtoMessage() {} -func (*QueryAuditReportsByReporterRequest) Descriptor() ([]byte, []int) { +func (m *QueryEpochReportsByReporterRequest) Reset() { *m = QueryEpochReportsByReporterRequest{} } +func (m *QueryEpochReportsByReporterRequest) String() string { return proto.CompactTextString(m) } +func (*QueryEpochReportsByReporterRequest) ProtoMessage() {} +func (*QueryEpochReportsByReporterRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{18} } -func (m *QueryAuditReportsByReporterRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryEpochReportsByReporterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAuditReportsByReporterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryEpochReportsByReporterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAuditReportsByReporterRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryEpochReportsByReporterRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -924,63 +924,63 @@ func (m *QueryAuditReportsByReporterRequest) XXX_Marshal(b []byte, deterministic return b[:n], nil } } -func (m *QueryAuditReportsByReporterRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAuditReportsByReporterRequest.Merge(m, src) +func (m *QueryEpochReportsByReporterRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEpochReportsByReporterRequest.Merge(m, src) } -func (m *QueryAuditReportsByReporterRequest) XXX_Size() int { +func (m *QueryEpochReportsByReporterRequest) XXX_Size() int { return m.Size() } -func (m *QueryAuditReportsByReporterRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAuditReportsByReporterRequest.DiscardUnknown(m) +func (m *QueryEpochReportsByReporterRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEpochReportsByReporterRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAuditReportsByReporterRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryEpochReportsByReporterRequest proto.InternalMessageInfo -func (m *QueryAuditReportsByReporterRequest) GetSupernodeAccount() string { +func (m *QueryEpochReportsByReporterRequest) GetSupernodeAccount() string { if m != nil { return m.SupernodeAccount } return "" } -func (m *QueryAuditReportsByReporterRequest) GetEpochId() uint64 { +func (m *QueryEpochReportsByReporterRequest) GetEpochId() uint64 { if m != nil { return m.EpochId } return 0 } -func (m *QueryAuditReportsByReporterRequest) GetPagination() *query.PageRequest { +func (m *QueryEpochReportsByReporterRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -func (m *QueryAuditReportsByReporterRequest) GetFilterByEpochId() bool { +func (m *QueryEpochReportsByReporterRequest) GetFilterByEpochId() bool { if m != nil { return m.FilterByEpochId } return false } -type QueryAuditReportsByReporterResponse struct { - Reports []AuditReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` +type QueryEpochReportsByReporterResponse struct { + Reports []EpochReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAuditReportsByReporterResponse) Reset() { *m = QueryAuditReportsByReporterResponse{} } -func (m *QueryAuditReportsByReporterResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAuditReportsByReporterResponse) ProtoMessage() {} -func (*QueryAuditReportsByReporterResponse) Descriptor() ([]byte, []int) { +func (m *QueryEpochReportsByReporterResponse) Reset() { *m = QueryEpochReportsByReporterResponse{} } +func (m *QueryEpochReportsByReporterResponse) String() string { return proto.CompactTextString(m) } +func (*QueryEpochReportsByReporterResponse) ProtoMessage() {} +func (*QueryEpochReportsByReporterResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{19} } -func (m *QueryAuditReportsByReporterResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryEpochReportsByReporterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAuditReportsByReporterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryEpochReportsByReporterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAuditReportsByReporterResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryEpochReportsByReporterResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -990,51 +990,51 @@ func (m *QueryAuditReportsByReporterResponse) XXX_Marshal(b []byte, deterministi return b[:n], nil } } -func (m *QueryAuditReportsByReporterResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAuditReportsByReporterResponse.Merge(m, src) +func (m *QueryEpochReportsByReporterResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEpochReportsByReporterResponse.Merge(m, src) } -func (m *QueryAuditReportsByReporterResponse) XXX_Size() int { +func (m *QueryEpochReportsByReporterResponse) XXX_Size() int { return m.Size() } -func (m *QueryAuditReportsByReporterResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAuditReportsByReporterResponse.DiscardUnknown(m) +func (m *QueryEpochReportsByReporterResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEpochReportsByReporterResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAuditReportsByReporterResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryEpochReportsByReporterResponse proto.InternalMessageInfo -func (m *QueryAuditReportsByReporterResponse) GetReports() []AuditReport { +func (m *QueryEpochReportsByReporterResponse) GetReports() []EpochReport { if m != nil { return m.Reports } return nil } -func (m *QueryAuditReportsByReporterResponse) GetPagination() *query.PageResponse { +func (m *QueryEpochReportsByReporterResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } return nil } -type QuerySupernodeReportsRequest struct { +type QueryStorageChallengeReportsRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` FilterByEpochId bool `protobuf:"varint,4,opt,name=filter_by_epoch_id,json=filterByEpochId,proto3" json:"filter_by_epoch_id,omitempty"` } -func (m *QuerySupernodeReportsRequest) Reset() { *m = QuerySupernodeReportsRequest{} } -func (m *QuerySupernodeReportsRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySupernodeReportsRequest) ProtoMessage() {} -func (*QuerySupernodeReportsRequest) Descriptor() ([]byte, []int) { +func (m *QueryStorageChallengeReportsRequest) Reset() { *m = QueryStorageChallengeReportsRequest{} } +func (m *QueryStorageChallengeReportsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryStorageChallengeReportsRequest) ProtoMessage() {} +func (*QueryStorageChallengeReportsRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{20} } -func (m *QuerySupernodeReportsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryStorageChallengeReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QuerySupernodeReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStorageChallengeReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QuerySupernodeReportsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStorageChallengeReportsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1044,65 +1044,65 @@ func (m *QuerySupernodeReportsRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QuerySupernodeReportsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySupernodeReportsRequest.Merge(m, src) +func (m *QueryStorageChallengeReportsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStorageChallengeReportsRequest.Merge(m, src) } -func (m *QuerySupernodeReportsRequest) XXX_Size() int { +func (m *QueryStorageChallengeReportsRequest) XXX_Size() int { return m.Size() } -func (m *QuerySupernodeReportsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySupernodeReportsRequest.DiscardUnknown(m) +func (m *QueryStorageChallengeReportsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStorageChallengeReportsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QuerySupernodeReportsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryStorageChallengeReportsRequest proto.InternalMessageInfo -func (m *QuerySupernodeReportsRequest) GetSupernodeAccount() string { +func (m *QueryStorageChallengeReportsRequest) GetSupernodeAccount() string { if m != nil { return m.SupernodeAccount } return "" } -func (m *QuerySupernodeReportsRequest) GetEpochId() uint64 { +func (m *QueryStorageChallengeReportsRequest) GetEpochId() uint64 { if m != nil { return m.EpochId } return 0 } -func (m *QuerySupernodeReportsRequest) GetPagination() *query.PageRequest { +func (m *QueryStorageChallengeReportsRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -func (m *QuerySupernodeReportsRequest) GetFilterByEpochId() bool { +func (m *QueryStorageChallengeReportsRequest) GetFilterByEpochId() bool { if m != nil { return m.FilterByEpochId } return false } -type SupernodeReport struct { +type StorageChallengeReport struct { ReporterSupernodeAccount string `protobuf:"bytes,1,opt,name=reporter_supernode_account,json=reporterSupernodeAccount,proto3" json:"reporter_supernode_account,omitempty"` EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` ReportHeight int64 `protobuf:"varint,3,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` PortStates []PortState `protobuf:"varint,4,rep,packed,name=port_states,json=portStates,proto3,enum=lumera.audit.v1.PortState" json:"port_states,omitempty"` } -func (m *SupernodeReport) Reset() { *m = SupernodeReport{} } -func (m *SupernodeReport) String() string { return proto.CompactTextString(m) } -func (*SupernodeReport) ProtoMessage() {} -func (*SupernodeReport) Descriptor() ([]byte, []int) { +func (m *StorageChallengeReport) Reset() { *m = StorageChallengeReport{} } +func (m *StorageChallengeReport) String() string { return proto.CompactTextString(m) } +func (*StorageChallengeReport) ProtoMessage() {} +func (*StorageChallengeReport) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{21} } -func (m *SupernodeReport) XXX_Unmarshal(b []byte) error { +func (m *StorageChallengeReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *SupernodeReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *StorageChallengeReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_SupernodeReport.Marshal(b, m, deterministic) + return xxx_messageInfo_StorageChallengeReport.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1112,63 +1112,63 @@ func (m *SupernodeReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, err return b[:n], nil } } -func (m *SupernodeReport) XXX_Merge(src proto.Message) { - xxx_messageInfo_SupernodeReport.Merge(m, src) +func (m *StorageChallengeReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageChallengeReport.Merge(m, src) } -func (m *SupernodeReport) XXX_Size() int { +func (m *StorageChallengeReport) XXX_Size() int { return m.Size() } -func (m *SupernodeReport) XXX_DiscardUnknown() { - xxx_messageInfo_SupernodeReport.DiscardUnknown(m) +func (m *StorageChallengeReport) XXX_DiscardUnknown() { + xxx_messageInfo_StorageChallengeReport.DiscardUnknown(m) } -var xxx_messageInfo_SupernodeReport proto.InternalMessageInfo +var xxx_messageInfo_StorageChallengeReport proto.InternalMessageInfo -func (m *SupernodeReport) GetReporterSupernodeAccount() string { +func (m *StorageChallengeReport) GetReporterSupernodeAccount() string { if m != nil { return m.ReporterSupernodeAccount } return "" } -func (m *SupernodeReport) GetEpochId() uint64 { +func (m *StorageChallengeReport) GetEpochId() uint64 { if m != nil { return m.EpochId } return 0 } -func (m *SupernodeReport) GetReportHeight() int64 { +func (m *StorageChallengeReport) GetReportHeight() int64 { if m != nil { return m.ReportHeight } return 0 } -func (m *SupernodeReport) GetPortStates() []PortState { +func (m *StorageChallengeReport) GetPortStates() []PortState { if m != nil { return m.PortStates } return nil } -type QuerySupernodeReportsResponse struct { - Reports []SupernodeReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryStorageChallengeReportsResponse struct { + Reports []StorageChallengeReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QuerySupernodeReportsResponse) Reset() { *m = QuerySupernodeReportsResponse{} } -func (m *QuerySupernodeReportsResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySupernodeReportsResponse) ProtoMessage() {} -func (*QuerySupernodeReportsResponse) Descriptor() ([]byte, []int) { +func (m *QueryStorageChallengeReportsResponse) Reset() { *m = QueryStorageChallengeReportsResponse{} } +func (m *QueryStorageChallengeReportsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryStorageChallengeReportsResponse) ProtoMessage() {} +func (*QueryStorageChallengeReportsResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{22} } -func (m *QuerySupernodeReportsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryStorageChallengeReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QuerySupernodeReportsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStorageChallengeReportsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QuerySupernodeReportsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStorageChallengeReportsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1178,51 +1178,51 @@ func (m *QuerySupernodeReportsResponse) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } -func (m *QuerySupernodeReportsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySupernodeReportsResponse.Merge(m, src) +func (m *QueryStorageChallengeReportsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStorageChallengeReportsResponse.Merge(m, src) } -func (m *QuerySupernodeReportsResponse) XXX_Size() int { +func (m *QueryStorageChallengeReportsResponse) XXX_Size() int { return m.Size() } -func (m *QuerySupernodeReportsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySupernodeReportsResponse.DiscardUnknown(m) +func (m *QueryStorageChallengeReportsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStorageChallengeReportsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QuerySupernodeReportsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryStorageChallengeReportsResponse proto.InternalMessageInfo -func (m *QuerySupernodeReportsResponse) GetReports() []SupernodeReport { +func (m *QueryStorageChallengeReportsResponse) GetReports() []StorageChallengeReport { if m != nil { return m.Reports } return nil } -func (m *QuerySupernodeReportsResponse) GetPagination() *query.PageResponse { +func (m *QueryStorageChallengeReportsResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } return nil } -type QuerySelfReportsRequest struct { +type QueryHostReportsRequest struct { SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` FilterByEpochId bool `protobuf:"varint,4,opt,name=filter_by_epoch_id,json=filterByEpochId,proto3" json:"filter_by_epoch_id,omitempty"` } -func (m *QuerySelfReportsRequest) Reset() { *m = QuerySelfReportsRequest{} } -func (m *QuerySelfReportsRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySelfReportsRequest) ProtoMessage() {} -func (*QuerySelfReportsRequest) Descriptor() ([]byte, []int) { +func (m *QueryHostReportsRequest) Reset() { *m = QueryHostReportsRequest{} } +func (m *QueryHostReportsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryHostReportsRequest) ProtoMessage() {} +func (*QueryHostReportsRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{23} } -func (m *QuerySelfReportsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryHostReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QuerySelfReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryHostReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QuerySelfReportsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryHostReportsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1232,64 +1232,64 @@ func (m *QuerySelfReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QuerySelfReportsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySelfReportsRequest.Merge(m, src) +func (m *QueryHostReportsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHostReportsRequest.Merge(m, src) } -func (m *QuerySelfReportsRequest) XXX_Size() int { +func (m *QueryHostReportsRequest) XXX_Size() int { return m.Size() } -func (m *QuerySelfReportsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySelfReportsRequest.DiscardUnknown(m) +func (m *QueryHostReportsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHostReportsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QuerySelfReportsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryHostReportsRequest proto.InternalMessageInfo -func (m *QuerySelfReportsRequest) GetSupernodeAccount() string { +func (m *QueryHostReportsRequest) GetSupernodeAccount() string { if m != nil { return m.SupernodeAccount } return "" } -func (m *QuerySelfReportsRequest) GetEpochId() uint64 { +func (m *QueryHostReportsRequest) GetEpochId() uint64 { if m != nil { return m.EpochId } return 0 } -func (m *QuerySelfReportsRequest) GetPagination() *query.PageRequest { +func (m *QueryHostReportsRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -func (m *QuerySelfReportsRequest) GetFilterByEpochId() bool { +func (m *QueryHostReportsRequest) GetFilterByEpochId() bool { if m != nil { return m.FilterByEpochId } return false } -type SelfReport struct { - EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` - ReportHeight int64 `protobuf:"varint,2,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` - SelfReport AuditSelfReport `protobuf:"bytes,3,opt,name=self_report,json=selfReport,proto3" json:"self_report"` +type HostReportEntry struct { + EpochId uint64 `protobuf:"varint,1,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + ReportHeight int64 `protobuf:"varint,2,opt,name=report_height,json=reportHeight,proto3" json:"report_height,omitempty"` + HostReport HostReport `protobuf:"bytes,3,opt,name=host_report,json=hostReport,proto3" json:"host_report"` } -func (m *SelfReport) Reset() { *m = SelfReport{} } -func (m *SelfReport) String() string { return proto.CompactTextString(m) } -func (*SelfReport) ProtoMessage() {} -func (*SelfReport) Descriptor() ([]byte, []int) { +func (m *HostReportEntry) Reset() { *m = HostReportEntry{} } +func (m *HostReportEntry) String() string { return proto.CompactTextString(m) } +func (*HostReportEntry) ProtoMessage() {} +func (*HostReportEntry) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{24} } -func (m *SelfReport) XXX_Unmarshal(b []byte) error { +func (m *HostReportEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *SelfReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *HostReportEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_SelfReport.Marshal(b, m, deterministic) + return xxx_messageInfo_HostReportEntry.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1299,56 +1299,56 @@ func (m *SelfReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *SelfReport) XXX_Merge(src proto.Message) { - xxx_messageInfo_SelfReport.Merge(m, src) +func (m *HostReportEntry) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostReportEntry.Merge(m, src) } -func (m *SelfReport) XXX_Size() int { +func (m *HostReportEntry) XXX_Size() int { return m.Size() } -func (m *SelfReport) XXX_DiscardUnknown() { - xxx_messageInfo_SelfReport.DiscardUnknown(m) +func (m *HostReportEntry) XXX_DiscardUnknown() { + xxx_messageInfo_HostReportEntry.DiscardUnknown(m) } -var xxx_messageInfo_SelfReport proto.InternalMessageInfo +var xxx_messageInfo_HostReportEntry proto.InternalMessageInfo -func (m *SelfReport) GetEpochId() uint64 { +func (m *HostReportEntry) GetEpochId() uint64 { if m != nil { return m.EpochId } return 0 } -func (m *SelfReport) GetReportHeight() int64 { +func (m *HostReportEntry) GetReportHeight() int64 { if m != nil { return m.ReportHeight } return 0 } -func (m *SelfReport) GetSelfReport() AuditSelfReport { +func (m *HostReportEntry) GetHostReport() HostReport { if m != nil { - return m.SelfReport + return m.HostReport } - return AuditSelfReport{} + return HostReport{} } -type QuerySelfReportsResponse struct { - Reports []SelfReport `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` +type QueryHostReportsResponse struct { + Reports []HostReportEntry `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QuerySelfReportsResponse) Reset() { *m = QuerySelfReportsResponse{} } -func (m *QuerySelfReportsResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySelfReportsResponse) ProtoMessage() {} -func (*QuerySelfReportsResponse) Descriptor() ([]byte, []int) { +func (m *QueryHostReportsResponse) Reset() { *m = QueryHostReportsResponse{} } +func (m *QueryHostReportsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryHostReportsResponse) ProtoMessage() {} +func (*QueryHostReportsResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e98945621bbc9485, []int{25} } -func (m *QuerySelfReportsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryHostReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QuerySelfReportsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryHostReportsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QuerySelfReportsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryHostReportsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1358,26 +1358,26 @@ func (m *QuerySelfReportsResponse) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *QuerySelfReportsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySelfReportsResponse.Merge(m, src) +func (m *QueryHostReportsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHostReportsResponse.Merge(m, src) } -func (m *QuerySelfReportsResponse) XXX_Size() int { +func (m *QueryHostReportsResponse) XXX_Size() int { return m.Size() } -func (m *QuerySelfReportsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySelfReportsResponse.DiscardUnknown(m) +func (m *QueryHostReportsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHostReportsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QuerySelfReportsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryHostReportsResponse proto.InternalMessageInfo -func (m *QuerySelfReportsResponse) GetReports() []SelfReport { +func (m *QueryHostReportsResponse) GetReports() []HostReportEntry { if m != nil { return m.Reports } return nil } -func (m *QuerySelfReportsResponse) GetPagination() *query.PageResponse { +func (m *QueryHostReportsResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } @@ -1401,116 +1401,116 @@ func init() { proto.RegisterType((*QueryCurrentEpochAnchorResponse)(nil), "lumera.audit.v1.QueryCurrentEpochAnchorResponse") proto.RegisterType((*QueryAssignedTargetsRequest)(nil), "lumera.audit.v1.QueryAssignedTargetsRequest") proto.RegisterType((*QueryAssignedTargetsResponse)(nil), "lumera.audit.v1.QueryAssignedTargetsResponse") - proto.RegisterType((*QueryAuditReportRequest)(nil), "lumera.audit.v1.QueryAuditReportRequest") - proto.RegisterType((*QueryAuditReportResponse)(nil), "lumera.audit.v1.QueryAuditReportResponse") - proto.RegisterType((*QueryAuditReportsByReporterRequest)(nil), "lumera.audit.v1.QueryAuditReportsByReporterRequest") - proto.RegisterType((*QueryAuditReportsByReporterResponse)(nil), "lumera.audit.v1.QueryAuditReportsByReporterResponse") - proto.RegisterType((*QuerySupernodeReportsRequest)(nil), "lumera.audit.v1.QuerySupernodeReportsRequest") - proto.RegisterType((*SupernodeReport)(nil), "lumera.audit.v1.SupernodeReport") - proto.RegisterType((*QuerySupernodeReportsResponse)(nil), "lumera.audit.v1.QuerySupernodeReportsResponse") - proto.RegisterType((*QuerySelfReportsRequest)(nil), "lumera.audit.v1.QuerySelfReportsRequest") - proto.RegisterType((*SelfReport)(nil), "lumera.audit.v1.SelfReport") - proto.RegisterType((*QuerySelfReportsResponse)(nil), "lumera.audit.v1.QuerySelfReportsResponse") + proto.RegisterType((*QueryEpochReportRequest)(nil), "lumera.audit.v1.QueryEpochReportRequest") + proto.RegisterType((*QueryEpochReportResponse)(nil), "lumera.audit.v1.QueryEpochReportResponse") + proto.RegisterType((*QueryEpochReportsByReporterRequest)(nil), "lumera.audit.v1.QueryEpochReportsByReporterRequest") + proto.RegisterType((*QueryEpochReportsByReporterResponse)(nil), "lumera.audit.v1.QueryEpochReportsByReporterResponse") + proto.RegisterType((*QueryStorageChallengeReportsRequest)(nil), "lumera.audit.v1.QueryStorageChallengeReportsRequest") + proto.RegisterType((*StorageChallengeReport)(nil), "lumera.audit.v1.StorageChallengeReport") + proto.RegisterType((*QueryStorageChallengeReportsResponse)(nil), "lumera.audit.v1.QueryStorageChallengeReportsResponse") + proto.RegisterType((*QueryHostReportsRequest)(nil), "lumera.audit.v1.QueryHostReportsRequest") + proto.RegisterType((*HostReportEntry)(nil), "lumera.audit.v1.HostReportEntry") + proto.RegisterType((*QueryHostReportsResponse)(nil), "lumera.audit.v1.QueryHostReportsResponse") } func init() { proto.RegisterFile("lumera/audit/v1/query.proto", fileDescriptor_e98945621bbc9485) } var fileDescriptor_e98945621bbc9485 = []byte{ - // 1489 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x5d, 0x68, 0x1c, 0xd5, - 0x17, 0xcf, 0xcd, 0xe6, 0xdf, 0x26, 0x67, 0xdb, 0x26, 0xb9, 0x2d, 0xff, 0x6c, 0x36, 0x75, 0x1b, - 0xa6, 0x52, 0xd3, 0xd8, 0xec, 0x98, 0xb6, 0xd6, 0x8f, 0x96, 0xda, 0x5d, 0x4d, 0xdb, 0x60, 0x4b, - 0xd3, 0x5d, 0x3f, 0x50, 0x28, 0xc3, 0x64, 0xe7, 0x76, 0x33, 0x92, 0xcc, 0x4c, 0xe7, 0xce, 0x06, - 0x43, 0x88, 0x0f, 0xf6, 0x5d, 0x04, 0xf1, 0xcd, 0x07, 0x41, 0x2a, 0x22, 0x05, 0x7d, 0xa8, 0x88, - 0xe0, 0x83, 0xe0, 0x4b, 0x1f, 0x4b, 0x7d, 0x11, 0x1f, 0x44, 0x5a, 0x41, 0x7c, 0x13, 0x7c, 0xf1, - 0x41, 0x44, 0xe6, 0x7e, 0xec, 0x7c, 0x67, 0x36, 0x25, 0x8a, 0xe8, 0x4b, 0x98, 0x3d, 0x1f, 0x77, - 0x7e, 0xe7, 0x9c, 0xdf, 0x3d, 0x73, 0x4e, 0x60, 0x62, 0xb9, 0xb3, 0x42, 0x5c, 0x5d, 0xd5, 0x3b, - 0x86, 0xe9, 0xa9, 0xab, 0xb3, 0xea, 0xb5, 0x0e, 0x71, 0xd7, 0xaa, 0x8e, 0x6b, 0x7b, 0x36, 0x1e, - 0xe6, 0xca, 0x2a, 0x53, 0x56, 0x57, 0x67, 0xcb, 0xa3, 0xfa, 0x8a, 0x69, 0xd9, 0x2a, 0xfb, 0xcb, - 0x6d, 0xca, 0xfb, 0xda, 0x76, 0xdb, 0x66, 0x8f, 0xaa, 0xff, 0x24, 0xa4, 0xfb, 0xdb, 0xb6, 0xdd, - 0x5e, 0x26, 0xaa, 0xee, 0x98, 0xaa, 0x6e, 0x59, 0xb6, 0xa7, 0x7b, 0xa6, 0x6d, 0x51, 0xa1, 0x1d, - 0x6f, 0xd9, 0x74, 0xc5, 0xa6, 0x1a, 0x77, 0xe3, 0x3f, 0x84, 0x6a, 0x9a, 0xff, 0x52, 0x17, 0x75, - 0x4a, 0x38, 0x16, 0x75, 0x75, 0x76, 0x91, 0x78, 0xfa, 0xac, 0xea, 0xe8, 0x6d, 0xd3, 0x62, 0xe7, - 0xc8, 0x97, 0xc4, 0xb1, 0x3b, 0xba, 0xab, 0xaf, 0xc8, 0x93, 0x12, 0x91, 0xf1, 0x28, 0xb8, 0xb2, - 0x12, 0x57, 0x92, 0x55, 0xd3, 0x20, 0x56, 0x8b, 0x64, 0x39, 0x13, 0xc7, 0x6e, 0x2d, 0x71, 0xa5, - 0xb2, 0x0f, 0xf0, 0x65, 0x1f, 0xd9, 0x02, 0x7b, 0x5d, 0x83, 0x5c, 0xeb, 0x10, 0xea, 0x29, 0x97, - 0x61, 0x6f, 0x44, 0x4a, 0x1d, 0xdb, 0xa2, 0x04, 0x3f, 0x0d, 0x3b, 0x38, 0xac, 0x12, 0x9a, 0x44, - 0x53, 0xc5, 0xa3, 0x63, 0xd5, 0x58, 0x52, 0xab, 0xdc, 0xa1, 0x3e, 0x74, 0xfb, 0xfb, 0x03, 0x7d, - 0x1f, 0xfd, 0xf4, 0xe9, 0x34, 0x6a, 0x08, 0x0f, 0xe5, 0x24, 0x94, 0xd8, 0x91, 0x73, 0x02, 0x5c, - 0x7d, 0x6d, 0xde, 0x10, 0xaf, 0xc3, 0x07, 0xa0, 0x28, 0x31, 0x6b, 0xa6, 0xc1, 0x0e, 0x1f, 0x68, - 0x80, 0x14, 0xcd, 0x1b, 0xca, 0x15, 0x18, 0x4f, 0x71, 0x16, 0xa8, 0xce, 0xc0, 0xa0, 0x34, 0x15, - 0xb8, 0xc6, 0x13, 0xb8, 0xba, 0x8e, 0x21, 0x64, 0x5d, 0x2f, 0xe5, 0x63, 0x04, 0x0f, 0xc5, 0xce, - 0x6f, 0x76, 0x16, 0x5f, 0x23, 0x2d, 0x4f, 0x22, 0xac, 0xc1, 0x30, 0xe5, 0x12, 0x4d, 0x37, 0x0c, - 0x97, 0x50, 0x9e, 0x82, 0xa1, 0x7a, 0xe9, 0xee, 0xad, 0x99, 0x7d, 0xa2, 0xea, 0x35, 0xae, 0x69, - 0x7a, 0xae, 0x69, 0xb5, 0x1b, 0x7b, 0x84, 0x83, 0x90, 0xe2, 0xb3, 0x00, 0x41, 0xd5, 0x4b, 0xfd, - 0x0c, 0xe8, 0xa1, 0xaa, 0x70, 0xf5, 0x29, 0x52, 0xe5, 0x74, 0x15, 0x14, 0xa9, 0x2e, 0xe8, 0x6d, - 0x22, 0x5e, 0xdf, 0x08, 0x79, 0x2a, 0x1f, 0x22, 0xa8, 0x64, 0x81, 0x15, 0x19, 0x39, 0x19, 0xc9, - 0x48, 0x61, 0xf3, 0x8c, 0x0c, 0xf8, 0x19, 0x09, 0x92, 0x81, 0xcf, 0xa5, 0xe0, 0x7c, 0x24, 0x17, - 0x27, 0x7f, 0x73, 0x04, 0xe8, 0x75, 0x04, 0xfb, 0x63, 0x40, 0x6b, 0x2d, 0x5f, 0x23, 0x93, 0x3a, - 0x01, 0x43, 0x3a, 0x13, 0xc8, 0xa2, 0x0f, 0x35, 0x06, 0xb9, 0x60, 0xde, 0xd8, 0xb6, 0x74, 0xdd, - 0x48, 0xd6, 0x56, 0xa2, 0xf8, 0x47, 0x65, 0xab, 0x2c, 0xee, 0xc7, 0xb3, 0x1d, 0xd7, 0x25, 0x96, - 0x37, 0xe7, 0xdf, 0x51, 0x79, 0x1d, 0xdf, 0x42, 0x82, 0xff, 0x51, 0xa5, 0xc0, 0x3f, 0x0e, 0x83, - 0xec, 0x46, 0x07, 0x57, 0x67, 0x27, 0xfb, 0x3d, 0x6f, 0xe0, 0x23, 0x80, 0xb9, 0x8a, 0x7a, 0xba, - 0xeb, 0x69, 0x4b, 0xc4, 0x6c, 0x2f, 0x79, 0x0c, 0x65, 0xa1, 0x31, 0xc2, 0x34, 0x4d, 0x5f, 0x71, - 0x9e, 0xc9, 0xf1, 0x14, 0x70, 0x99, 0x46, 0x2c, 0x43, 0xda, 0x16, 0x98, 0xed, 0x1e, 0x26, 0x9f, - 0xb3, 0x0c, 0x6e, 0xa9, 0x1c, 0x87, 0x31, 0x9e, 0x53, 0x5f, 0x5c, 0xb3, 0x5a, 0x4b, 0xb6, 0x2b, - 0x8b, 0x9a, 0x8d, 0x46, 0x79, 0x49, 0xb6, 0x80, 0xb0, 0x57, 0xd0, 0x5a, 0x74, 0x26, 0x11, 0x57, - 0x78, 0x7f, 0xb2, 0x04, 0x81, 0x97, 0xa8, 0x82, 0xf0, 0x50, 0x26, 0xc5, 0x85, 0x08, 0x67, 0x27, - 0x02, 0x4a, 0xb9, 0x02, 0x07, 0x32, 0x2d, 0xb6, 0x01, 0xc0, 0x27, 0x08, 0x26, 0xd8, 0xf9, 0x35, - 0x4a, 0xcd, 0xb6, 0x45, 0x8c, 0x17, 0x74, 0xb7, 0x4d, 0x3c, 0xd9, 0x4e, 0xf1, 0x79, 0x18, 0xa5, - 0x1d, 0x87, 0xb8, 0x96, 0x6d, 0x10, 0x4d, 0x6f, 0xb5, 0xec, 0x8e, 0xe5, 0x89, 0xfe, 0x31, 0x71, - 0xf7, 0xd6, 0xcc, 0x98, 0xec, 0x1f, 0xad, 0x56, 0xb4, 0x85, 0x8c, 0x74, 0xbd, 0x6a, 0xdc, 0x29, - 0x92, 0xdd, 0xfe, 0x68, 0xad, 0x1f, 0x05, 0x7c, 0xd5, 0x5c, 0xf6, 0x88, 0xab, 0x2d, 0xae, 0x69, - 0x5d, 0x23, 0xbf, 0x7e, 0x83, 0x8d, 0x61, 0xae, 0xa9, 0xf3, 0xd4, 0xcf, 0x1b, 0xca, 0x2f, 0xf2, - 0x6e, 0x26, 0x10, 0x6f, 0x37, 0xa9, 0xaa, 0xb0, 0xd7, 0x25, 0xd7, 0x3a, 0xa6, 0x4b, 0x0c, 0xcd, - 0x76, 0x88, 0xa5, 0x39, 0xb6, 0xeb, 0xd1, 0x52, 0x61, 0xb2, 0x30, 0xb5, 0xbb, 0x31, 0x2a, 0x55, - 0x97, 0x1c, 0x62, 0x2d, 0xf8, 0x0a, 0xfc, 0x32, 0x8c, 0x7b, 0x0c, 0x8b, 0x96, 0x48, 0x19, 0x2d, - 0x0d, 0x4c, 0x16, 0xf2, 0x72, 0x36, 0xc6, 0xbd, 0x9b, 0xb1, 0xcc, 0x51, 0xe5, 0x0d, 0xc1, 0xd9, - 0x9a, 0x5f, 0xcf, 0x06, 0xf1, 0x61, 0xe4, 0x73, 0x36, 0xbd, 0x74, 0xfd, 0x0f, 0x50, 0xba, 0x2e, - 0xfb, 0x23, 0xef, 0x0f, 0xc8, 0xe7, 0x32, 0x49, 0x26, 0xf9, 0x42, 0x5e, 0x92, 0x7c, 0xdc, 0x43, - 0xf9, 0x03, 0x81, 0x12, 0x3f, 0x98, 0xd6, 0xd7, 0xf8, 0x03, 0x71, 0xff, 0x56, 0x0e, 0x46, 0x9b, - 0x76, 0xe1, 0x41, 0x9b, 0x76, 0x06, 0x97, 0x07, 0xd2, 0xb9, 0x7c, 0x13, 0xc1, 0xc1, 0x4d, 0x13, - 0x20, 0x92, 0x7c, 0x0a, 0x76, 0xf2, 0x94, 0x51, 0xd1, 0xe6, 0x7b, 0xc9, 0xb2, 0x74, 0xd9, 0xbe, - 0x46, 0xff, 0x9b, 0xbc, 0x7a, 0x5d, 0x8a, 0x0a, 0xc8, 0xff, 0xfe, 0x4a, 0xfd, 0x8c, 0x60, 0x38, - 0x16, 0x35, 0x7e, 0x05, 0xca, 0xae, 0xa8, 0x94, 0xf6, 0x40, 0x61, 0x97, 0xa4, 0x7b, 0x73, 0x0b, - 0xe1, 0x1f, 0x84, 0xdd, 0xdc, 0x2d, 0xfa, 0x9d, 0xdb, 0xc5, 0x85, 0xa2, 0x75, 0x9d, 0x84, 0x22, - 0x33, 0xa1, 0x9e, 0xee, 0x11, 0xde, 0x7c, 0xf6, 0x1c, 0x2d, 0x27, 0x67, 0x5e, 0xdb, 0xf5, 0x9a, - 0xbe, 0x49, 0x03, 0x1c, 0xf9, 0x48, 0x83, 0x99, 0x32, 0x59, 0xe6, 0xee, 0xdc, 0x1a, 0xe3, 0xe3, - 0x64, 0xe2, 0xe8, 0x98, 0xef, 0x5f, 0xc6, 0xc9, 0x5f, 0x91, 0x68, 0x8e, 0x4d, 0xb2, 0x7c, 0xf5, - 0x3f, 0x43, 0xc7, 0x77, 0x11, 0x40, 0x10, 0xf0, 0x66, 0x5f, 0x81, 0x04, 0x5d, 0xfa, 0x53, 0xe8, - 0x72, 0x0e, 0x8a, 0x94, 0x2c, 0x5f, 0xd5, 0x44, 0x27, 0xe7, 0x41, 0x4c, 0xa6, 0xf7, 0x98, 0xe0, - 0xb5, 0xa2, 0xa6, 0x40, 0xbb, 0x12, 0xe5, 0x7d, 0x24, 0x3e, 0x15, 0x91, 0x6a, 0x74, 0xa7, 0xd5, - 0x18, 0x6b, 0x26, 0x92, 0xac, 0x89, 0x1f, 0xbe, 0xed, 0x84, 0x39, 0xfa, 0xfb, 0x08, 0xfc, 0x8f, - 0x41, 0xc4, 0xd7, 0x11, 0xec, 0xe0, 0x5b, 0x1f, 0x3e, 0x98, 0x40, 0x92, 0x5c, 0x2d, 0xcb, 0x0f, - 0x6f, 0x6e, 0xc4, 0xdf, 0xa5, 0x54, 0xdf, 0xfc, 0xe6, 0xc7, 0x77, 0xfa, 0xa7, 0xf0, 0x21, 0xf5, - 0x02, 0xb3, 0x5e, 0xf0, 0x97, 0xd5, 0x96, 0xbd, 0xac, 0xa6, 0xaf, 0xc9, 0xf8, 0x06, 0x82, 0x5d, - 0xe1, 0xe5, 0x10, 0x1f, 0x4e, 0x7f, 0x4d, 0xca, 0xf6, 0x59, 0x9e, 0xee, 0xc5, 0x54, 0xe0, 0x3a, - 0xcd, 0x70, 0x3d, 0x89, 0x4f, 0xe4, 0xe1, 0x92, 0x0b, 0x82, 0xba, 0x1e, 0xda, 0x6c, 0x37, 0xf0, - 0xd7, 0x08, 0x46, 0x13, 0x7b, 0x1b, 0xae, 0xe6, 0x21, 0x88, 0x6e, 0xa3, 0x65, 0xb5, 0x67, 0x7b, - 0x01, 0xfb, 0x22, 0x83, 0x7d, 0x0e, 0xcf, 0xf5, 0x0c, 0x7b, 0x71, 0x4d, 0x13, 0xfb, 0xab, 0xba, - 0x1e, 0xdb, 0x7c, 0x37, 0xf0, 0x17, 0x08, 0x46, 0xe2, 0xeb, 0x14, 0x9e, 0xc9, 0x03, 0x15, 0x59, - 0xfe, 0xca, 0xd5, 0x5e, 0xcd, 0x45, 0x08, 0x67, 0x59, 0x08, 0x67, 0xf0, 0xe9, 0xad, 0x84, 0xc0, - 0xb7, 0x49, 0x75, 0xbd, 0xbb, 0x66, 0x6e, 0xe0, 0xf7, 0x10, 0xec, 0x0a, 0xaf, 0x01, 0x59, 0x4c, - 0x49, 0xd9, 0xc3, 0xb2, 0x98, 0x92, 0xb6, 0x95, 0x29, 0x8f, 0x33, 0xbc, 0x2a, 0x9e, 0xc9, 0xc3, - 0xdb, 0xe2, 0xde, 0xbc, 0x5b, 0xe1, 0x0f, 0x10, 0x14, 0x43, 0x8b, 0x06, 0x9e, 0xca, 0x48, 0x53, - 0x62, 0xc7, 0x29, 0x1f, 0xee, 0xc1, 0x52, 0x60, 0x7b, 0x86, 0x61, 0x7b, 0x0a, 0x3f, 0x91, 0x9b, - 0x4b, 0xd6, 0x0f, 0xf9, 0x96, 0xa3, 0xae, 0xcb, 0xee, 0xb8, 0x81, 0x3f, 0x43, 0x80, 0x93, 0xbb, - 0x14, 0x56, 0xf3, 0xf3, 0x13, 0xc5, 0xfc, 0x58, 0xef, 0x0e, 0x02, 0xfa, 0x29, 0x06, 0xfd, 0x04, - 0x3e, 0xbe, 0xa5, 0xb4, 0x8a, 0x10, 0xf0, 0x97, 0x08, 0x86, 0x63, 0x1b, 0x0f, 0x3e, 0x92, 0x8e, - 0x21, 0x7d, 0x95, 0x2b, 0xcf, 0xf4, 0x68, 0x2d, 0xe0, 0x5e, 0x60, 0x70, 0xcf, 0xe2, 0xe7, 0xf2, - 0xe0, 0xea, 0xe2, 0x00, 0x8d, 0xaf, 0x2f, 0xd4, 0xbf, 0x75, 0xb1, 0x8f, 0xee, 0x06, 0xfe, 0x1c, - 0x41, 0x31, 0x34, 0xa2, 0x66, 0x91, 0x23, 0xb9, 0xe1, 0x64, 0x91, 0x23, 0x65, 0x17, 0x51, 0x9a, - 0x0c, 0xf2, 0x45, 0xfc, 0x7c, 0x2e, 0x64, 0xff, 0x41, 0x7c, 0xed, 0x42, 0xe4, 0x48, 0x45, 0xfe, - 0x1d, 0x82, 0xff, 0xa7, 0x8f, 0xe7, 0xf8, 0x58, 0x2e, 0xb4, 0xe4, 0x36, 0x53, 0x3e, 0xbe, 0x35, - 0x27, 0x11, 0xda, 0x8b, 0x2c, 0xb4, 0x4b, 0xf8, 0xe2, 0x56, 0x42, 0xa3, 0xfe, 0x28, 0x21, 0x67, - 0xcc, 0xd4, 0xe0, 0xbe, 0x42, 0x30, 0x12, 0x9f, 0xf2, 0xb2, 0xda, 0x61, 0xc6, 0xd0, 0x9f, 0xd5, - 0x0e, 0xb3, 0x86, 0xc7, 0xde, 0x3b, 0x7a, 0x80, 0x57, 0x84, 0x93, 0x1a, 0xc2, 0x4d, 0x04, 0xc5, - 0xd0, 0xb4, 0x91, 0xc5, 0xac, 0xe4, 0x78, 0x98, 0xc5, 0xac, 0x94, 0xd1, 0x45, 0x39, 0xcf, 0x30, - 0xd7, 0xf1, 0x99, 0x5c, 0xcc, 0xc1, 0x18, 0x95, 0x0a, 0xb7, 0x3e, 0x7d, 0xfb, 0x5e, 0x05, 0xdd, - 0xb9, 0x57, 0x41, 0x3f, 0xdc, 0xab, 0xa0, 0xb7, 0xef, 0x57, 0xfa, 0xee, 0xdc, 0xaf, 0xf4, 0x7d, - 0x7b, 0xbf, 0xd2, 0xf7, 0xea, 0xc8, 0xeb, 0xc1, 0x31, 0xde, 0x9a, 0x43, 0xe8, 0xe2, 0x0e, 0xf6, - 0x8f, 0xee, 0x63, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x34, 0xd0, 0xc3, 0x1e, 0x18, 0x00, - 0x00, + // 1500 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4d, 0x68, 0x5c, 0x55, + 0x14, 0xce, 0xcd, 0xc4, 0x36, 0x39, 0x69, 0x9b, 0xe4, 0xb6, 0x34, 0x93, 0x97, 0x3a, 0x0d, 0xaf, + 0xa5, 0x4d, 0x63, 0x33, 0xcf, 0xf4, 0xcf, 0x9f, 0x96, 0xda, 0x4c, 0x4d, 0x9b, 0x60, 0x4b, 0xd3, + 0x19, 0x7f, 0x50, 0x28, 0x8f, 0x97, 0xf7, 0xae, 0x33, 0x23, 0xc9, 0x7b, 0xd3, 0x77, 0xef, 0x04, + 0x87, 0x10, 0x17, 0x76, 0x2f, 0x82, 0xb8, 0x10, 0xdc, 0x49, 0x45, 0xa4, 0xa0, 0x8b, 0x8a, 0x0a, + 0xee, 0xdc, 0x74, 0x59, 0xea, 0x46, 0x04, 0x45, 0x5a, 0xc1, 0x6d, 0xc1, 0xbd, 0xca, 0xbb, 0x3f, + 0x33, 0xf3, 0x7e, 0xe6, 0xaf, 0xa4, 0x22, 0xba, 0x09, 0x33, 0xf7, 0x9c, 0x73, 0xef, 0x77, 0xce, + 0xf9, 0xee, 0x99, 0xfb, 0x05, 0x26, 0x57, 0xab, 0x6b, 0xc4, 0xb7, 0x0c, 0xab, 0xea, 0x94, 0x99, + 0xb1, 0x3e, 0x67, 0x5c, 0xaf, 0x12, 0xbf, 0x96, 0xad, 0xf8, 0x1e, 0xf3, 0xf0, 0x88, 0x30, 0x66, + 0xb9, 0x31, 0xbb, 0x3e, 0xa7, 0x8d, 0x59, 0x6b, 0x65, 0xd7, 0x33, 0xf8, 0x5f, 0xe1, 0xa3, 0xed, + 0x29, 0x7a, 0x45, 0x8f, 0x7f, 0x34, 0x82, 0x4f, 0x72, 0x75, 0x5f, 0xd1, 0xf3, 0x8a, 0xab, 0xc4, + 0xb0, 0x2a, 0x65, 0xc3, 0x72, 0x5d, 0x8f, 0x59, 0xac, 0xec, 0xb9, 0x54, 0x5a, 0x27, 0x6c, 0x8f, + 0xae, 0x79, 0xd4, 0x14, 0x61, 0xe2, 0x8b, 0x34, 0xcd, 0x88, 0x6f, 0xc6, 0x8a, 0x45, 0x89, 0xc0, + 0x62, 0xac, 0xcf, 0xad, 0x10, 0x66, 0xcd, 0x19, 0x15, 0xab, 0x58, 0x76, 0xf9, 0x3e, 0xea, 0x90, + 0x28, 0xf6, 0x8a, 0xe5, 0x5b, 0x6b, 0x6a, 0xa7, 0x58, 0x66, 0x22, 0x0b, 0x61, 0xcc, 0x44, 0x8d, + 0x64, 0xbd, 0xec, 0x10, 0xd7, 0x26, 0xad, 0x82, 0x49, 0xc5, 0xb3, 0x4b, 0xc2, 0xa8, 0xef, 0x01, + 0x7c, 0x35, 0x40, 0xb6, 0xcc, 0x8f, 0xcb, 0x93, 0xeb, 0x55, 0x42, 0x99, 0x7e, 0x15, 0x76, 0x87, + 0x56, 0x69, 0xc5, 0x73, 0x29, 0xc1, 0xcf, 0xc3, 0x36, 0x01, 0x2b, 0x8d, 0xa6, 0xd0, 0xf4, 0xf0, + 0xb1, 0xf1, 0x6c, 0xa4, 0xa8, 0x59, 0x11, 0x90, 0x1b, 0xba, 0xf3, 0xcb, 0xfe, 0xbe, 0xcf, 0x7e, + 0xff, 0x72, 0x06, 0xe5, 0x65, 0x84, 0x7e, 0x1a, 0xd2, 0x7c, 0xcb, 0x05, 0x09, 0x2e, 0x57, 0x5b, + 0x72, 0xe4, 0x71, 0x78, 0x3f, 0x0c, 0x2b, 0xcc, 0x66, 0xd9, 0xe1, 0x9b, 0x0f, 0xe4, 0x41, 0x2d, + 0x2d, 0x39, 0xfa, 0x35, 0x98, 0x48, 0x08, 0x96, 0xa8, 0xce, 0xc1, 0xa0, 0x72, 0x95, 0xb8, 0x26, + 0x62, 0xb8, 0xea, 0x81, 0x4d, 0xc8, 0xea, 0x51, 0xfa, 0xe7, 0x08, 0x9e, 0x8c, 0xec, 0x5f, 0xa8, + 0xae, 0xbc, 0x45, 0x6c, 0xa6, 0x10, 0xce, 0xc3, 0x08, 0x15, 0x2b, 0xa6, 0xe5, 0x38, 0x3e, 0xa1, + 0xa2, 0x04, 0x43, 0xb9, 0xf4, 0xbd, 0xdb, 0xb3, 0x7b, 0x64, 0xd7, 0xe7, 0x85, 0xa5, 0xc0, 0xfc, + 0xb2, 0x5b, 0xcc, 0xef, 0x92, 0x01, 0x72, 0x15, 0x5f, 0x00, 0x68, 0x74, 0x3d, 0xdd, 0xcf, 0x81, + 0x1e, 0xca, 0xca, 0xd0, 0x80, 0x22, 0x59, 0x41, 0x57, 0x49, 0x91, 0xec, 0xb2, 0x55, 0x24, 0xf2, + 0xf8, 0x7c, 0x53, 0xa4, 0xfe, 0x29, 0x82, 0x4c, 0x2b, 0xb0, 0xb2, 0x22, 0xa7, 0x43, 0x15, 0x49, + 0xb5, 0xaf, 0xc8, 0x40, 0x50, 0x91, 0x46, 0x31, 0xf0, 0xc5, 0x04, 0x9c, 0x87, 0x3b, 0xe2, 0x14, + 0x27, 0x87, 0x80, 0xde, 0x40, 0xb0, 0x2f, 0x02, 0x74, 0xde, 0x0e, 0x2c, 0xaa, 0xa8, 0x93, 0x30, + 0x64, 0xf1, 0x05, 0xd5, 0xf4, 0xa1, 0xfc, 0xa0, 0x58, 0x58, 0x72, 0xb6, 0xac, 0x5c, 0x37, 0xe3, + 0xbd, 0x55, 0x28, 0xfe, 0x55, 0xd5, 0xd2, 0xe4, 0xfd, 0x38, 0x5f, 0xf5, 0x7d, 0xe2, 0xb2, 0x85, + 0xe0, 0x8e, 0xaa, 0xeb, 0xf8, 0x1e, 0x92, 0xfc, 0x0f, 0x1b, 0x25, 0xfe, 0x09, 0x18, 0xe4, 0x37, + 0xba, 0x71, 0x75, 0xb6, 0xf3, 0xef, 0x4b, 0x0e, 0x3e, 0x0a, 0x58, 0x98, 0x28, 0xb3, 0x7c, 0x66, + 0x96, 0x48, 0xb9, 0x58, 0x62, 0x1c, 0x65, 0x2a, 0x3f, 0xca, 0x2d, 0x85, 0xc0, 0xb0, 0xc8, 0xd7, + 0xf1, 0x34, 0x88, 0x35, 0x93, 0xb8, 0x8e, 0xf2, 0x4d, 0x71, 0xdf, 0x5d, 0x7c, 0x7d, 0xc1, 0x75, + 0x84, 0xa7, 0x7e, 0x02, 0xc6, 0x45, 0x4d, 0x83, 0xe5, 0x79, 0xd7, 0x2e, 0x79, 0xbe, 0x6a, 0x6a, + 0x6b, 0x34, 0xfa, 0xab, 0x6a, 0x04, 0x34, 0x47, 0x35, 0x46, 0x8b, 0xc5, 0x57, 0xe4, 0x15, 0xde, + 0x17, 0x6f, 0x41, 0x23, 0x4a, 0x76, 0x41, 0x46, 0xe8, 0x53, 0xf2, 0x42, 0x34, 0x57, 0x27, 0x04, + 0x4a, 0xbf, 0x06, 0xfb, 0x5b, 0x7a, 0x6c, 0x01, 0x80, 0x2f, 0x10, 0x4c, 0xf2, 0xfd, 0xe7, 0x29, + 0x2d, 0x17, 0x5d, 0xe2, 0xbc, 0x6c, 0xf9, 0x45, 0xc2, 0xd4, 0x38, 0xc5, 0x8b, 0x30, 0x46, 0xab, + 0x15, 0xe2, 0xbb, 0x9e, 0x43, 0x4c, 0xcb, 0xb6, 0xbd, 0xaa, 0xcb, 0xe4, 0xfc, 0x98, 0xbc, 0x77, + 0x7b, 0x76, 0x5c, 0xcd, 0x0f, 0xdb, 0x0e, 0x8f, 0x90, 0xd1, 0x7a, 0xd4, 0xbc, 0x08, 0x0a, 0x55, + 0xb7, 0x3f, 0xdc, 0xeb, 0xa7, 0x00, 0xbf, 0x59, 0x5e, 0x65, 0xc4, 0x37, 0x57, 0x6a, 0x66, 0xdd, + 0x29, 0xe8, 0xdf, 0x60, 0x7e, 0x44, 0x58, 0x72, 0xa2, 0xf4, 0x4b, 0x8e, 0xfe, 0x50, 0xdd, 0xcd, + 0x18, 0xe2, 0xad, 0x26, 0x55, 0x16, 0x76, 0xfb, 0xe4, 0x7a, 0xb5, 0xec, 0x13, 0xc7, 0xf4, 0x2a, + 0xc4, 0x35, 0x2b, 0x9e, 0xcf, 0x68, 0x3a, 0x35, 0x95, 0x9a, 0xde, 0x99, 0x1f, 0x53, 0xa6, 0x2b, + 0x15, 0xe2, 0x2e, 0x07, 0x06, 0xfc, 0x1a, 0x4c, 0x30, 0x8e, 0xc5, 0x8c, 0x95, 0x8c, 0xa6, 0x07, + 0xa6, 0x52, 0x9d, 0x6a, 0x36, 0x2e, 0xa2, 0x0b, 0x91, 0xca, 0x51, 0xfd, 0x9d, 0x66, 0xce, 0xe6, + 0x49, 0x00, 0xa3, 0x33, 0x67, 0x93, 0x5b, 0xd7, 0xff, 0x08, 0xad, 0x0b, 0xb3, 0x5f, 0x9d, 0xdf, + 0x20, 0x9f, 0xcf, 0x57, 0xda, 0x93, 0x4f, 0x44, 0x29, 0xf2, 0x89, 0x08, 0xfd, 0x4f, 0x04, 0x7a, + 0x74, 0x63, 0x9a, 0xab, 0x89, 0x0f, 0xc4, 0xff, 0x47, 0x39, 0x18, 0x1e, 0xda, 0xa9, 0x47, 0x1d, + 0xda, 0x2d, 0xb8, 0x3c, 0x90, 0xcc, 0xe5, 0x5b, 0x08, 0x0e, 0xb4, 0x2d, 0x80, 0x2c, 0xf2, 0x19, + 0xd8, 0x2e, 0x4a, 0x46, 0xe5, 0x98, 0xef, 0xa6, 0xca, 0x2a, 0x64, 0xeb, 0x06, 0xfd, 0x5f, 0x0a, + 0x6e, 0x81, 0x79, 0xbe, 0x55, 0x24, 0xe7, 0x4b, 0xd6, 0xea, 0x2a, 0x71, 0x03, 0x6f, 0x7e, 0xd2, + 0x7f, 0xbf, 0x61, 0x0f, 0x11, 0xec, 0x4d, 0x4e, 0x1e, 0xbf, 0x0e, 0x9a, 0x2f, 0xfb, 0x66, 0x3e, + 0x52, 0xf6, 0x69, 0x15, 0x5e, 0xe8, 0xa1, 0x0a, 0x07, 0x60, 0xa7, 0x08, 0x0b, 0xff, 0xea, 0xed, + 0x10, 0x8b, 0x72, 0x90, 0x9d, 0x86, 0x61, 0xee, 0x42, 0x99, 0xc5, 0x88, 0x18, 0x45, 0xbb, 0x8e, + 0x69, 0xf1, 0x17, 0xb0, 0xe7, 0xb3, 0x42, 0xe0, 0x92, 0x87, 0x8a, 0xfa, 0x48, 0xf5, 0x6f, 0x10, + 0x1c, 0x6c, 0xdf, 0x74, 0x49, 0xd2, 0x8b, 0x51, 0x92, 0x1e, 0x8e, 0x9d, 0x90, 0xbc, 0xc5, 0x63, + 0xe3, 0xeb, 0x1f, 0x48, 0x0e, 0xce, 0x45, 0x8f, 0xb2, 0xff, 0x0d, 0x47, 0x3f, 0x44, 0x30, 0xd2, + 0x48, 0x78, 0xc1, 0x65, 0x7e, 0xad, 0xdd, 0xcf, 0x44, 0x8c, 0x41, 0xfd, 0x09, 0x0c, 0xca, 0xc1, + 0x70, 0xc9, 0xa3, 0xcc, 0x94, 0xa3, 0x5e, 0x64, 0x32, 0x19, 0xeb, 0x6f, 0xe3, 0x58, 0xd9, 0x53, + 0x28, 0xd5, 0x57, 0x82, 0xe7, 0x6c, 0x3a, 0xde, 0x8d, 0xba, 0x12, 0x8a, 0x90, 0x67, 0xaa, 0xcd, + 0xe6, 0x3c, 0xa7, 0xc7, 0xc5, 0x9a, 0x63, 0x1f, 0x8d, 0xc1, 0x13, 0x1c, 0x27, 0xbe, 0x81, 0x60, + 0x9b, 0x90, 0x85, 0xf8, 0x40, 0x0c, 0x4e, 0x5c, 0x7b, 0x6a, 0x07, 0xdb, 0x3b, 0x89, 0xb3, 0xf4, + 0xec, 0xbb, 0x3f, 0xfc, 0xf6, 0x41, 0xff, 0x34, 0x3e, 0x64, 0x5c, 0xe2, 0xde, 0xcb, 0x81, 0x9a, + 0xb5, 0xbd, 0x55, 0x23, 0x59, 0x47, 0xe3, 0x9b, 0x08, 0x76, 0x34, 0xab, 0x47, 0x7c, 0x24, 0xf9, + 0x98, 0x04, 0x79, 0xaa, 0xcd, 0x74, 0xe3, 0x2a, 0x71, 0x9d, 0xe5, 0xb8, 0x9e, 0xc5, 0xa7, 0x3a, + 0xe1, 0x52, 0x0a, 0xc2, 0xd8, 0x68, 0x92, 0xbe, 0x9b, 0xf8, 0x7b, 0x04, 0x63, 0x31, 0x61, 0x87, + 0xb3, 0x9d, 0x10, 0x84, 0xe5, 0xaa, 0x66, 0x74, 0xed, 0x2f, 0x61, 0x5f, 0xe6, 0xb0, 0x2f, 0xe2, + 0x85, 0xae, 0x61, 0xaf, 0xd4, 0x4c, 0x29, 0x70, 0x8d, 0x8d, 0x88, 0x34, 0xde, 0xc4, 0xdf, 0x22, + 0x18, 0x8d, 0xea, 0x2d, 0x3c, 0xdb, 0x09, 0x54, 0x48, 0x1d, 0x6a, 0xd9, 0x6e, 0xdd, 0x65, 0x0a, + 0x17, 0x78, 0x0a, 0xe7, 0xf0, 0xd9, 0x5e, 0x52, 0x10, 0x72, 0xd3, 0xd8, 0xa8, 0xeb, 0xd0, 0x4d, + 0xfc, 0x31, 0x82, 0x1d, 0xcd, 0x3a, 0xa1, 0x15, 0x53, 0x12, 0x84, 0x5a, 0x2b, 0xa6, 0x24, 0xc9, + 0x36, 0xfd, 0x24, 0xc7, 0x6b, 0xe0, 0xd9, 0x4e, 0x78, 0x6d, 0x11, 0x2d, 0x46, 0x16, 0xfe, 0x04, + 0xc1, 0x70, 0x93, 0x12, 0xc1, 0xd3, 0x2d, 0xca, 0x14, 0x13, 0x41, 0xda, 0x91, 0x2e, 0x3c, 0x25, + 0xb6, 0x17, 0x38, 0xb6, 0xe7, 0xf0, 0x33, 0x1d, 0x6b, 0xc9, 0xe7, 0xa1, 0x90, 0x41, 0xc6, 0x86, + 0x9a, 0x8e, 0x9b, 0xf8, 0x2b, 0x04, 0x38, 0x2e, 0xb6, 0xb0, 0xd1, 0xb9, 0x3e, 0x61, 0xcc, 0x4f, + 0x77, 0x1f, 0x20, 0xa1, 0x9f, 0xe1, 0xd0, 0x4f, 0xe1, 0x13, 0x3d, 0x95, 0x55, 0xa6, 0x80, 0xbf, + 0x43, 0x30, 0x12, 0x91, 0x44, 0xf8, 0x68, 0x32, 0x86, 0x64, 0xad, 0xa7, 0xcd, 0x76, 0xe9, 0x2d, + 0xe1, 0x5e, 0xe2, 0x70, 0x2f, 0xe0, 0x17, 0x3b, 0xc1, 0xb5, 0xe4, 0x06, 0xa6, 0xd0, 0x37, 0x34, + 0xb8, 0x75, 0x91, 0x5f, 0xde, 0x4d, 0xfc, 0xb5, 0x22, 0x87, 0x7c, 0x4e, 0xb5, 0x23, 0x47, 0x48, + 0x02, 0xb5, 0x25, 0x47, 0x58, 0xac, 0xe8, 0x05, 0x0e, 0xf9, 0x32, 0x7e, 0xa9, 0x3b, 0x72, 0x88, + 0x9f, 0x96, 0x26, 0x72, 0x24, 0x22, 0xff, 0x09, 0xc1, 0xde, 0xe4, 0xf7, 0x3b, 0x3e, 0xde, 0x11, + 0x5a, 0x5c, 0xee, 0x68, 0x27, 0x7a, 0x0b, 0x92, 0xa9, 0xbd, 0xc2, 0x53, 0xbb, 0x82, 0x2f, 0xf7, + 0x92, 0x1a, 0x0d, 0xde, 0x13, 0xea, 0xd9, 0x99, 0x98, 0xdc, 0xcf, 0x08, 0xc6, 0x5b, 0x3c, 0xfc, + 0x70, 0x0b, 0xa0, 0xed, 0xc5, 0x81, 0x76, 0xb2, 0xc7, 0xa8, 0x5e, 0xf3, 0xa3, 0x62, 0x23, 0xd3, + 0x56, 0x3b, 0xa9, 0x5c, 0x13, 0xf3, 0xbb, 0x85, 0x60, 0xb8, 0xe9, 0x3d, 0xd2, 0x8a, 0x76, 0xf1, + 0x07, 0x64, 0x2b, 0xda, 0x25, 0x3c, 0x6e, 0xf4, 0x45, 0x8e, 0x3d, 0x87, 0xcf, 0x75, 0xc2, 0xde, + 0xf4, 0xc6, 0x4a, 0x84, 0x9b, 0x9b, 0xb9, 0x73, 0x3f, 0x83, 0xee, 0xde, 0xcf, 0xa0, 0x5f, 0xef, + 0x67, 0xd0, 0xfb, 0x0f, 0x32, 0x7d, 0x77, 0x1f, 0x64, 0xfa, 0x7e, 0x7c, 0x90, 0xe9, 0x7b, 0x63, + 0xf4, 0xed, 0xc6, 0x36, 0xac, 0x56, 0x21, 0x74, 0x65, 0x1b, 0xff, 0x37, 0xf9, 0xf1, 0xbf, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x07, 0xb6, 0x06, 0x74, 0x5c, 0x18, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1542,12 +1542,14 @@ type QueryClient interface { // AssignedTargets returns the prober -> targets assignment for a given supernode_account. // If filter_by_epoch_id is false, it returns the assignments for the current epoch. AssignedTargets(ctx context.Context, in *QueryAssignedTargetsRequest, opts ...grpc.CallOption) (*QueryAssignedTargetsResponse, error) - AuditReport(ctx context.Context, in *QueryAuditReportRequest, opts ...grpc.CallOption) (*QueryAuditReportResponse, error) - AuditReportsByReporter(ctx context.Context, in *QueryAuditReportsByReporterRequest, opts ...grpc.CallOption) (*QueryAuditReportsByReporterResponse, error) - // SupernodeReports returns all reports that include observations about the given supernode_account. - SupernodeReports(ctx context.Context, in *QuerySupernodeReportsRequest, opts ...grpc.CallOption) (*QuerySupernodeReportsResponse, error) - // SelfReports returns self-reports submitted by the given supernode_account across epochs. - SelfReports(ctx context.Context, in *QuerySelfReportsRequest, opts ...grpc.CallOption) (*QuerySelfReportsResponse, error) + // EpochReport returns the submitted epoch report for (epoch_id, supernode_account). + EpochReport(ctx context.Context, in *QueryEpochReportRequest, opts ...grpc.CallOption) (*QueryEpochReportResponse, error) + // EpochReportsByReporter returns epoch reports submitted by the given reporter across epochs. + EpochReportsByReporter(ctx context.Context, in *QueryEpochReportsByReporterRequest, opts ...grpc.CallOption) (*QueryEpochReportsByReporterResponse, error) + // StorageChallengeReports returns all reports that include storage-challenge observations about the given supernode_account. + StorageChallengeReports(ctx context.Context, in *QueryStorageChallengeReportsRequest, opts ...grpc.CallOption) (*QueryStorageChallengeReportsResponse, error) + // HostReports returns host reports submitted by the given supernode_account across epochs. + HostReports(ctx context.Context, in *QueryHostReportsRequest, opts ...grpc.CallOption) (*QueryHostReportsResponse, error) } type queryClient struct { @@ -1630,36 +1632,36 @@ func (c *queryClient) AssignedTargets(ctx context.Context, in *QueryAssignedTarg return out, nil } -func (c *queryClient) AuditReport(ctx context.Context, in *QueryAuditReportRequest, opts ...grpc.CallOption) (*QueryAuditReportResponse, error) { - out := new(QueryAuditReportResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/AuditReport", in, out, opts...) +func (c *queryClient) EpochReport(ctx context.Context, in *QueryEpochReportRequest, opts ...grpc.CallOption) (*QueryEpochReportResponse, error) { + out := new(QueryEpochReportResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/EpochReport", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) AuditReportsByReporter(ctx context.Context, in *QueryAuditReportsByReporterRequest, opts ...grpc.CallOption) (*QueryAuditReportsByReporterResponse, error) { - out := new(QueryAuditReportsByReporterResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/AuditReportsByReporter", in, out, opts...) +func (c *queryClient) EpochReportsByReporter(ctx context.Context, in *QueryEpochReportsByReporterRequest, opts ...grpc.CallOption) (*QueryEpochReportsByReporterResponse, error) { + out := new(QueryEpochReportsByReporterResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/EpochReportsByReporter", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) SupernodeReports(ctx context.Context, in *QuerySupernodeReportsRequest, opts ...grpc.CallOption) (*QuerySupernodeReportsResponse, error) { - out := new(QuerySupernodeReportsResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/SupernodeReports", in, out, opts...) +func (c *queryClient) StorageChallengeReports(ctx context.Context, in *QueryStorageChallengeReportsRequest, opts ...grpc.CallOption) (*QueryStorageChallengeReportsResponse, error) { + out := new(QueryStorageChallengeReportsResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/StorageChallengeReports", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) SelfReports(ctx context.Context, in *QuerySelfReportsRequest, opts ...grpc.CallOption) (*QuerySelfReportsResponse, error) { - out := new(QuerySelfReportsResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/SelfReports", in, out, opts...) +func (c *queryClient) HostReports(ctx context.Context, in *QueryHostReportsRequest, opts ...grpc.CallOption) (*QueryHostReportsResponse, error) { + out := new(QueryHostReportsResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Query/HostReports", in, out, opts...) if err != nil { return nil, err } @@ -1685,12 +1687,14 @@ type QueryServer interface { // AssignedTargets returns the prober -> targets assignment for a given supernode_account. // If filter_by_epoch_id is false, it returns the assignments for the current epoch. AssignedTargets(context.Context, *QueryAssignedTargetsRequest) (*QueryAssignedTargetsResponse, error) - AuditReport(context.Context, *QueryAuditReportRequest) (*QueryAuditReportResponse, error) - AuditReportsByReporter(context.Context, *QueryAuditReportsByReporterRequest) (*QueryAuditReportsByReporterResponse, error) - // SupernodeReports returns all reports that include observations about the given supernode_account. - SupernodeReports(context.Context, *QuerySupernodeReportsRequest) (*QuerySupernodeReportsResponse, error) - // SelfReports returns self-reports submitted by the given supernode_account across epochs. - SelfReports(context.Context, *QuerySelfReportsRequest) (*QuerySelfReportsResponse, error) + // EpochReport returns the submitted epoch report for (epoch_id, supernode_account). + EpochReport(context.Context, *QueryEpochReportRequest) (*QueryEpochReportResponse, error) + // EpochReportsByReporter returns epoch reports submitted by the given reporter across epochs. + EpochReportsByReporter(context.Context, *QueryEpochReportsByReporterRequest) (*QueryEpochReportsByReporterResponse, error) + // StorageChallengeReports returns all reports that include storage-challenge observations about the given supernode_account. + StorageChallengeReports(context.Context, *QueryStorageChallengeReportsRequest) (*QueryStorageChallengeReportsResponse, error) + // HostReports returns host reports submitted by the given supernode_account across epochs. + HostReports(context.Context, *QueryHostReportsRequest) (*QueryHostReportsResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -1721,17 +1725,17 @@ func (*UnimplementedQueryServer) CurrentEpochAnchor(ctx context.Context, req *Qu func (*UnimplementedQueryServer) AssignedTargets(ctx context.Context, req *QueryAssignedTargetsRequest) (*QueryAssignedTargetsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AssignedTargets not implemented") } -func (*UnimplementedQueryServer) AuditReport(ctx context.Context, req *QueryAuditReportRequest) (*QueryAuditReportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AuditReport not implemented") +func (*UnimplementedQueryServer) EpochReport(ctx context.Context, req *QueryEpochReportRequest) (*QueryEpochReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EpochReport not implemented") } -func (*UnimplementedQueryServer) AuditReportsByReporter(ctx context.Context, req *QueryAuditReportsByReporterRequest) (*QueryAuditReportsByReporterResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AuditReportsByReporter not implemented") +func (*UnimplementedQueryServer) EpochReportsByReporter(ctx context.Context, req *QueryEpochReportsByReporterRequest) (*QueryEpochReportsByReporterResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EpochReportsByReporter not implemented") } -func (*UnimplementedQueryServer) SupernodeReports(ctx context.Context, req *QuerySupernodeReportsRequest) (*QuerySupernodeReportsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SupernodeReports not implemented") +func (*UnimplementedQueryServer) StorageChallengeReports(ctx context.Context, req *QueryStorageChallengeReportsRequest) (*QueryStorageChallengeReportsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StorageChallengeReports not implemented") } -func (*UnimplementedQueryServer) SelfReports(ctx context.Context, req *QuerySelfReportsRequest) (*QuerySelfReportsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SelfReports not implemented") +func (*UnimplementedQueryServer) HostReports(ctx context.Context, req *QueryHostReportsRequest) (*QueryHostReportsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HostReports not implemented") } func RegisterQueryServer(s grpc1.Server, srv QueryServer) { @@ -1882,74 +1886,74 @@ func _Query_AssignedTargets_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } -func _Query_AuditReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAuditReportRequest) +func _Query_EpochReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEpochReportRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).AuditReport(ctx, in) + return srv.(QueryServer).EpochReport(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/AuditReport", + FullMethod: "/lumera.audit.v1.Query/EpochReport", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AuditReport(ctx, req.(*QueryAuditReportRequest)) + return srv.(QueryServer).EpochReport(ctx, req.(*QueryEpochReportRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_AuditReportsByReporter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAuditReportsByReporterRequest) +func _Query_EpochReportsByReporter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEpochReportsByReporterRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).AuditReportsByReporter(ctx, in) + return srv.(QueryServer).EpochReportsByReporter(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/AuditReportsByReporter", + FullMethod: "/lumera.audit.v1.Query/EpochReportsByReporter", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AuditReportsByReporter(ctx, req.(*QueryAuditReportsByReporterRequest)) + return srv.(QueryServer).EpochReportsByReporter(ctx, req.(*QueryEpochReportsByReporterRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_SupernodeReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySupernodeReportsRequest) +func _Query_StorageChallengeReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryStorageChallengeReportsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).SupernodeReports(ctx, in) + return srv.(QueryServer).StorageChallengeReports(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/SupernodeReports", + FullMethod: "/lumera.audit.v1.Query/StorageChallengeReports", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).SupernodeReports(ctx, req.(*QuerySupernodeReportsRequest)) + return srv.(QueryServer).StorageChallengeReports(ctx, req.(*QueryStorageChallengeReportsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_SelfReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySelfReportsRequest) +func _Query_HostReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryHostReportsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).SelfReports(ctx, in) + return srv.(QueryServer).HostReports(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Query/SelfReports", + FullMethod: "/lumera.audit.v1.Query/HostReports", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).SelfReports(ctx, req.(*QuerySelfReportsRequest)) + return srv.(QueryServer).HostReports(ctx, req.(*QueryHostReportsRequest)) } return interceptor(ctx, in, info, handler) } @@ -1992,20 +1996,20 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_AssignedTargets_Handler, }, { - MethodName: "AuditReport", - Handler: _Query_AuditReport_Handler, + MethodName: "EpochReport", + Handler: _Query_EpochReport_Handler, }, { - MethodName: "AuditReportsByReporter", - Handler: _Query_AuditReportsByReporter_Handler, + MethodName: "EpochReportsByReporter", + Handler: _Query_EpochReportsByReporter_Handler, }, { - MethodName: "SupernodeReports", - Handler: _Query_SupernodeReports_Handler, + MethodName: "StorageChallengeReports", + Handler: _Query_StorageChallengeReports_Handler, }, { - MethodName: "SelfReports", - Handler: _Query_SelfReports_Handler, + MethodName: "HostReports", + Handler: _Query_HostReports_Handler, }, }, Streams: []grpc.StreamDesc{}, @@ -2594,7 +2598,7 @@ func (m *QueryAssignedTargetsResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryAuditReportRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryEpochReportRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2604,12 +2608,12 @@ func (m *QueryAuditReportRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAuditReportRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEpochReportRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEpochReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2629,7 +2633,7 @@ func (m *QueryAuditReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryAuditReportResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryEpochReportResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2639,12 +2643,12 @@ func (m *QueryAuditReportResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAuditReportResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEpochReportResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEpochReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2662,7 +2666,7 @@ func (m *QueryAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *QueryAuditReportsByReporterRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryEpochReportsByReporterRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2672,12 +2676,12 @@ func (m *QueryAuditReportsByReporterRequest) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryAuditReportsByReporterRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEpochReportsByReporterRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEpochReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2719,7 +2723,7 @@ func (m *QueryAuditReportsByReporterRequest) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } -func (m *QueryAuditReportsByReporterResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryEpochReportsByReporterResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2729,12 +2733,12 @@ func (m *QueryAuditReportsByReporterResponse) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryAuditReportsByReporterResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryEpochReportsByReporterResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAuditReportsByReporterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryEpochReportsByReporterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2768,7 +2772,7 @@ func (m *QueryAuditReportsByReporterResponse) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *QuerySupernodeReportsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryStorageChallengeReportsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2778,12 +2782,12 @@ func (m *QuerySupernodeReportsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QuerySupernodeReportsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStorageChallengeReportsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QuerySupernodeReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStorageChallengeReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2825,7 +2829,7 @@ func (m *QuerySupernodeReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *SupernodeReport) Marshal() (dAtA []byte, err error) { +func (m *StorageChallengeReport) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2835,12 +2839,12 @@ func (m *SupernodeReport) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *SupernodeReport) MarshalTo(dAtA []byte) (int, error) { +func (m *StorageChallengeReport) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *SupernodeReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *StorageChallengeReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2883,7 +2887,7 @@ func (m *SupernodeReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QuerySupernodeReportsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryStorageChallengeReportsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2893,12 +2897,12 @@ func (m *QuerySupernodeReportsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QuerySupernodeReportsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStorageChallengeReportsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QuerySupernodeReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStorageChallengeReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2932,7 +2936,7 @@ func (m *QuerySupernodeReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QuerySelfReportsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryHostReportsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2942,12 +2946,12 @@ func (m *QuerySelfReportsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QuerySelfReportsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryHostReportsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QuerySelfReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryHostReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2989,7 +2993,7 @@ func (m *QuerySelfReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *SelfReport) Marshal() (dAtA []byte, err error) { +func (m *HostReportEntry) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2999,18 +3003,18 @@ func (m *SelfReport) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *SelfReport) MarshalTo(dAtA []byte) (int, error) { +func (m *HostReportEntry) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *SelfReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *HostReportEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.SelfReport.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.HostReport.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3032,7 +3036,7 @@ func (m *SelfReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QuerySelfReportsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryHostReportsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3042,12 +3046,12 @@ func (m *QuerySelfReportsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QuerySelfReportsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryHostReportsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QuerySelfReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryHostReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3324,7 +3328,7 @@ func (m *QueryAssignedTargetsResponse) Size() (n int) { return n } -func (m *QueryAuditReportRequest) Size() (n int) { +func (m *QueryEpochReportRequest) Size() (n int) { if m == nil { return 0 } @@ -3340,7 +3344,7 @@ func (m *QueryAuditReportRequest) Size() (n int) { return n } -func (m *QueryAuditReportResponse) Size() (n int) { +func (m *QueryEpochReportResponse) Size() (n int) { if m == nil { return 0 } @@ -3351,7 +3355,7 @@ func (m *QueryAuditReportResponse) Size() (n int) { return n } -func (m *QueryAuditReportsByReporterRequest) Size() (n int) { +func (m *QueryEpochReportsByReporterRequest) Size() (n int) { if m == nil { return 0 } @@ -3374,7 +3378,7 @@ func (m *QueryAuditReportsByReporterRequest) Size() (n int) { return n } -func (m *QueryAuditReportsByReporterResponse) Size() (n int) { +func (m *QueryEpochReportsByReporterResponse) Size() (n int) { if m == nil { return 0 } @@ -3393,7 +3397,7 @@ func (m *QueryAuditReportsByReporterResponse) Size() (n int) { return n } -func (m *QuerySupernodeReportsRequest) Size() (n int) { +func (m *QueryStorageChallengeReportsRequest) Size() (n int) { if m == nil { return 0 } @@ -3416,7 +3420,7 @@ func (m *QuerySupernodeReportsRequest) Size() (n int) { return n } -func (m *SupernodeReport) Size() (n int) { +func (m *StorageChallengeReport) Size() (n int) { if m == nil { return 0 } @@ -3442,7 +3446,7 @@ func (m *SupernodeReport) Size() (n int) { return n } -func (m *QuerySupernodeReportsResponse) Size() (n int) { +func (m *QueryStorageChallengeReportsResponse) Size() (n int) { if m == nil { return 0 } @@ -3461,7 +3465,7 @@ func (m *QuerySupernodeReportsResponse) Size() (n int) { return n } -func (m *QuerySelfReportsRequest) Size() (n int) { +func (m *QueryHostReportsRequest) Size() (n int) { if m == nil { return 0 } @@ -3484,7 +3488,7 @@ func (m *QuerySelfReportsRequest) Size() (n int) { return n } -func (m *SelfReport) Size() (n int) { +func (m *HostReportEntry) Size() (n int) { if m == nil { return 0 } @@ -3496,12 +3500,12 @@ func (m *SelfReport) Size() (n int) { if m.ReportHeight != 0 { n += 1 + sovQuery(uint64(m.ReportHeight)) } - l = m.SelfReport.Size() + l = m.HostReport.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QuerySelfReportsResponse) Size() (n int) { +func (m *QueryHostReportsResponse) Size() (n int) { if m == nil { return 0 } @@ -5046,7 +5050,7 @@ func (m *QueryAssignedTargetsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAuditReportRequest) Unmarshal(dAtA []byte) error { +func (m *QueryEpochReportRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5069,10 +5073,10 @@ func (m *QueryAuditReportRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAuditReportRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEpochReportRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAuditReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEpochReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5147,7 +5151,7 @@ func (m *QueryAuditReportRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAuditReportResponse) Unmarshal(dAtA []byte) error { +func (m *QueryEpochReportResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5170,10 +5174,10 @@ func (m *QueryAuditReportResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAuditReportResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEpochReportResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAuditReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEpochReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5230,7 +5234,7 @@ func (m *QueryAuditReportResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAuditReportsByReporterRequest) Unmarshal(dAtA []byte) error { +func (m *QueryEpochReportsByReporterRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5253,10 +5257,10 @@ func (m *QueryAuditReportsByReporterRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAuditReportsByReporterRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEpochReportsByReporterRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAuditReportsByReporterRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEpochReportsByReporterRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5387,7 +5391,7 @@ func (m *QueryAuditReportsByReporterRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAuditReportsByReporterResponse) Unmarshal(dAtA []byte) error { +func (m *QueryEpochReportsByReporterResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5410,10 +5414,10 @@ func (m *QueryAuditReportsByReporterResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAuditReportsByReporterResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryEpochReportsByReporterResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAuditReportsByReporterResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryEpochReportsByReporterResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5445,7 +5449,7 @@ func (m *QueryAuditReportsByReporterResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Reports = append(m.Reports, AuditReport{}) + m.Reports = append(m.Reports, EpochReport{}) if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -5507,7 +5511,7 @@ func (m *QueryAuditReportsByReporterResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QuerySupernodeReportsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryStorageChallengeReportsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5530,10 +5534,10 @@ func (m *QuerySupernodeReportsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QuerySupernodeReportsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryStorageChallengeReportsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySupernodeReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryStorageChallengeReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5664,7 +5668,7 @@ func (m *QuerySupernodeReportsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *SupernodeReport) Unmarshal(dAtA []byte) error { +func (m *StorageChallengeReport) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5687,10 +5691,10 @@ func (m *SupernodeReport) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SupernodeReport: wiretype end group for non-group") + return fmt.Errorf("proto: StorageChallengeReport: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SupernodeReport: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: StorageChallengeReport: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5853,7 +5857,7 @@ func (m *SupernodeReport) Unmarshal(dAtA []byte) error { } return nil } -func (m *QuerySupernodeReportsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryStorageChallengeReportsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5876,10 +5880,10 @@ func (m *QuerySupernodeReportsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QuerySupernodeReportsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryStorageChallengeReportsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySupernodeReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryStorageChallengeReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5911,7 +5915,7 @@ func (m *QuerySupernodeReportsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Reports = append(m.Reports, SupernodeReport{}) + m.Reports = append(m.Reports, StorageChallengeReport{}) if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -5973,7 +5977,7 @@ func (m *QuerySupernodeReportsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryHostReportsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5996,10 +6000,10 @@ func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QuerySelfReportsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryHostReportsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySelfReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryHostReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6130,7 +6134,7 @@ func (m *QuerySelfReportsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *SelfReport) Unmarshal(dAtA []byte) error { +func (m *HostReportEntry) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6153,10 +6157,10 @@ func (m *SelfReport) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SelfReport: wiretype end group for non-group") + return fmt.Errorf("proto: HostReportEntry: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SelfReport: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: HostReportEntry: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6199,7 +6203,7 @@ func (m *SelfReport) Unmarshal(dAtA []byte) error { } case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SelfReport", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HostReport", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6226,7 +6230,7 @@ func (m *SelfReport) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SelfReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.HostReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -6251,7 +6255,7 @@ func (m *SelfReport) Unmarshal(dAtA []byte) error { } return nil } -func (m *QuerySelfReportsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryHostReportsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6274,10 +6278,10 @@ func (m *QuerySelfReportsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QuerySelfReportsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryHostReportsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySelfReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryHostReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6309,7 +6313,7 @@ func (m *QuerySelfReportsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Reports = append(m.Reports, SelfReport{}) + m.Reports = append(m.Reports, HostReportEntry{}) if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/x/audit/v1/types/query.pb.gw.go b/x/audit/v1/types/query.pb.gw.go index 92607ef..c6d74dd 100644 --- a/x/audit/v1/types/query.pb.gw.go +++ b/x/audit/v1/types/query.pb.gw.go @@ -411,8 +411,8 @@ func local_request_Query_AssignedTargets_0(ctx context.Context, marshaler runtim } -func request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAuditReportRequest +func request_Query_EpochReport_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEpochReportRequest var metadata runtime.ServerMetadata var ( @@ -444,13 +444,13 @@ func request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Marshale return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) } - msg, err := client.AuditReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.EpochReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAuditReportRequest +func local_request_Query_EpochReport_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEpochReportRequest var metadata runtime.ServerMetadata var ( @@ -482,17 +482,17 @@ func local_request_Query_AuditReport_0(ctx context.Context, marshaler runtime.Ma return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "supernode_account", err) } - msg, err := server.AuditReport(ctx, &protoReq) + msg, err := server.EpochReport(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_AuditReportsByReporter_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_EpochReportsByReporter_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_AuditReportsByReporter_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAuditReportsByReporterRequest +func request_Query_EpochReportsByReporter_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEpochReportsByReporterRequest var metadata runtime.ServerMetadata var ( @@ -516,17 +516,17 @@ func request_Query_AuditReportsByReporter_0(ctx context.Context, marshaler runti if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AuditReportsByReporter_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EpochReportsByReporter_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.AuditReportsByReporter(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.EpochReportsByReporter(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_AuditReportsByReporter_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAuditReportsByReporterRequest +func local_request_Query_EpochReportsByReporter_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEpochReportsByReporterRequest var metadata runtime.ServerMetadata var ( @@ -550,21 +550,21 @@ func local_request_Query_AuditReportsByReporter_0(ctx context.Context, marshaler if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AuditReportsByReporter_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EpochReportsByReporter_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.AuditReportsByReporter(ctx, &protoReq) + msg, err := server.EpochReportsByReporter(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_SupernodeReports_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_StorageChallengeReports_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_SupernodeReports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySupernodeReportsRequest +func request_Query_StorageChallengeReports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryStorageChallengeReportsRequest var metadata runtime.ServerMetadata var ( @@ -588,17 +588,17 @@ func request_Query_SupernodeReports_0(ctx context.Context, marshaler runtime.Mar if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SupernodeReports_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_StorageChallengeReports_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.SupernodeReports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.StorageChallengeReports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_SupernodeReports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySupernodeReportsRequest +func local_request_Query_StorageChallengeReports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryStorageChallengeReportsRequest var metadata runtime.ServerMetadata var ( @@ -622,21 +622,21 @@ func local_request_Query_SupernodeReports_0(ctx context.Context, marshaler runti if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SupernodeReports_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_StorageChallengeReports_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.SupernodeReports(ctx, &protoReq) + msg, err := server.StorageChallengeReports(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_SelfReports_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_HostReports_0 = &utilities.DoubleArray{Encoding: map[string]int{"supernode_account": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_SelfReports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySelfReportsRequest +func request_Query_HostReports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryHostReportsRequest var metadata runtime.ServerMetadata var ( @@ -660,17 +660,17 @@ func request_Query_SelfReports_0(ctx context.Context, marshaler runtime.Marshale if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SelfReports_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_HostReports_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.SelfReports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.HostReports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_SelfReports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySelfReportsRequest +func local_request_Query_HostReports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryHostReportsRequest var metadata runtime.ServerMetadata var ( @@ -694,11 +694,11 @@ func local_request_Query_SelfReports_0(ctx context.Context, marshaler runtime.Ma if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SelfReports_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_HostReports_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.SelfReports(ctx, &protoReq) + msg, err := server.HostReports(ctx, &protoReq) return msg, metadata, err } @@ -893,7 +893,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_AuditReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_EpochReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -904,7 +904,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_AuditReport_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_EpochReport_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 { @@ -912,11 +912,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_AuditReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_EpochReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_AuditReportsByReporter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_EpochReportsByReporter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -927,7 +927,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_AuditReportsByReporter_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_EpochReportsByReporter_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 { @@ -935,11 +935,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_AuditReportsByReporter_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_EpochReportsByReporter_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_SupernodeReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_StorageChallengeReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -950,7 +950,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_SupernodeReports_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_StorageChallengeReports_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 { @@ -958,11 +958,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_SupernodeReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_StorageChallengeReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_SelfReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_HostReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -973,7 +973,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_SelfReports_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_HostReports_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 { @@ -981,7 +981,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_SelfReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_HostReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1186,7 +1186,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_AuditReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_EpochReport_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) @@ -1195,18 +1195,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_AuditReport_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_EpochReport_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_AuditReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_EpochReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_AuditReportsByReporter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_EpochReportsByReporter_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) @@ -1215,18 +1215,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_AuditReportsByReporter_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_EpochReportsByReporter_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_AuditReportsByReporter_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_EpochReportsByReporter_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_SupernodeReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_StorageChallengeReports_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) @@ -1235,18 +1235,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_SupernodeReports_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_StorageChallengeReports_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_SupernodeReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_StorageChallengeReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_SelfReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_HostReports_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) @@ -1255,14 +1255,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_SelfReports_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_HostReports_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_SelfReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_HostReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1286,13 +1286,13 @@ var ( pattern_Query_AssignedTargets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "assigned_targets", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AuditReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_report", "epoch_id", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EpochReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"LumeraProtocol", "lumera", "audit", "v1", "epoch_report", "epoch_id", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AuditReportsByReporter_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "audit_reports_by_reporter", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EpochReportsByReporter_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "epoch_reports_by_reporter", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_SupernodeReports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "supernode_reports", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_StorageChallengeReports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "storage_challenge_reports", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_SelfReports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "self_reports", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_HostReports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"LumeraProtocol", "lumera", "audit", "v1", "host_reports", "supernode_account"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -1312,11 +1312,11 @@ var ( forward_Query_AssignedTargets_0 = runtime.ForwardResponseMessage - forward_Query_AuditReport_0 = runtime.ForwardResponseMessage + forward_Query_EpochReport_0 = runtime.ForwardResponseMessage - forward_Query_AuditReportsByReporter_0 = runtime.ForwardResponseMessage + forward_Query_EpochReportsByReporter_0 = runtime.ForwardResponseMessage - forward_Query_SupernodeReports_0 = runtime.ForwardResponseMessage + forward_Query_StorageChallengeReports_0 = runtime.ForwardResponseMessage - forward_Query_SelfReports_0 = runtime.ForwardResponseMessage + forward_Query_HostReports_0 = runtime.ForwardResponseMessage ) diff --git a/x/audit/v1/types/tx.pb.go b/x/audit/v1/types/tx.pb.go index db5c4c1..6784b86 100644 --- a/x/audit/v1/types/tx.pb.go +++ b/x/audit/v1/types/tx.pb.go @@ -119,25 +119,26 @@ func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo -type MsgSubmitAuditReport struct { - SupernodeAccount string `protobuf:"bytes,1,opt,name=supernode_account,json=supernodeAccount,proto3" json:"supernode_account,omitempty"` - EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` - SelfReport AuditSelfReport `protobuf:"bytes,3,opt,name=self_report,json=selfReport,proto3" json:"self_report"` - PeerObservations []*AuditPeerObservation `protobuf:"bytes,4,rep,name=peer_observations,json=peerObservations,proto3" json:"peer_observations,omitempty"` -} - -func (m *MsgSubmitAuditReport) Reset() { *m = MsgSubmitAuditReport{} } -func (m *MsgSubmitAuditReport) String() string { return proto.CompactTextString(m) } -func (*MsgSubmitAuditReport) ProtoMessage() {} -func (*MsgSubmitAuditReport) Descriptor() ([]byte, []int) { +type MsgSubmitEpochReport struct { + // creator is the transaction signer. + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + EpochId uint64 `protobuf:"varint,2,opt,name=epoch_id,json=epochId,proto3" json:"epoch_id,omitempty"` + HostReport HostReport `protobuf:"bytes,3,opt,name=host_report,json=hostReport,proto3" json:"host_report"` + StorageChallengeObservations []*StorageChallengeObservation `protobuf:"bytes,4,rep,name=storage_challenge_observations,json=storageChallengeObservations,proto3" json:"storage_challenge_observations,omitempty"` +} + +func (m *MsgSubmitEpochReport) Reset() { *m = MsgSubmitEpochReport{} } +func (m *MsgSubmitEpochReport) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitEpochReport) ProtoMessage() {} +func (*MsgSubmitEpochReport) Descriptor() ([]byte, []int) { return fileDescriptor_4b5ba410ad359f63, []int{2} } -func (m *MsgSubmitAuditReport) XXX_Unmarshal(b []byte) error { +func (m *MsgSubmitEpochReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgSubmitAuditReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgSubmitEpochReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgSubmitAuditReport.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgSubmitEpochReport.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -147,61 +148,61 @@ func (m *MsgSubmitAuditReport) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *MsgSubmitAuditReport) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSubmitAuditReport.Merge(m, src) +func (m *MsgSubmitEpochReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitEpochReport.Merge(m, src) } -func (m *MsgSubmitAuditReport) XXX_Size() int { +func (m *MsgSubmitEpochReport) XXX_Size() int { return m.Size() } -func (m *MsgSubmitAuditReport) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSubmitAuditReport.DiscardUnknown(m) +func (m *MsgSubmitEpochReport) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitEpochReport.DiscardUnknown(m) } -var xxx_messageInfo_MsgSubmitAuditReport proto.InternalMessageInfo +var xxx_messageInfo_MsgSubmitEpochReport proto.InternalMessageInfo -func (m *MsgSubmitAuditReport) GetSupernodeAccount() string { +func (m *MsgSubmitEpochReport) GetCreator() string { if m != nil { - return m.SupernodeAccount + return m.Creator } return "" } -func (m *MsgSubmitAuditReport) GetEpochId() uint64 { +func (m *MsgSubmitEpochReport) GetEpochId() uint64 { if m != nil { return m.EpochId } return 0 } -func (m *MsgSubmitAuditReport) GetSelfReport() AuditSelfReport { +func (m *MsgSubmitEpochReport) GetHostReport() HostReport { if m != nil { - return m.SelfReport + return m.HostReport } - return AuditSelfReport{} + return HostReport{} } -func (m *MsgSubmitAuditReport) GetPeerObservations() []*AuditPeerObservation { +func (m *MsgSubmitEpochReport) GetStorageChallengeObservations() []*StorageChallengeObservation { if m != nil { - return m.PeerObservations + return m.StorageChallengeObservations } return nil } -type MsgSubmitAuditReportResponse struct { +type MsgSubmitEpochReportResponse struct { } -func (m *MsgSubmitAuditReportResponse) Reset() { *m = MsgSubmitAuditReportResponse{} } -func (m *MsgSubmitAuditReportResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSubmitAuditReportResponse) ProtoMessage() {} -func (*MsgSubmitAuditReportResponse) Descriptor() ([]byte, []int) { +func (m *MsgSubmitEpochReportResponse) Reset() { *m = MsgSubmitEpochReportResponse{} } +func (m *MsgSubmitEpochReportResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitEpochReportResponse) ProtoMessage() {} +func (*MsgSubmitEpochReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor_4b5ba410ad359f63, []int{3} } -func (m *MsgSubmitAuditReportResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgSubmitEpochReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgSubmitAuditReportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgSubmitEpochReportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgSubmitAuditReportResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgSubmitEpochReportResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -211,17 +212,17 @@ func (m *MsgSubmitAuditReportResponse) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *MsgSubmitAuditReportResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSubmitAuditReportResponse.Merge(m, src) +func (m *MsgSubmitEpochReportResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitEpochReportResponse.Merge(m, src) } -func (m *MsgSubmitAuditReportResponse) XXX_Size() int { +func (m *MsgSubmitEpochReportResponse) XXX_Size() int { return m.Size() } -func (m *MsgSubmitAuditReportResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSubmitAuditReportResponse.DiscardUnknown(m) +func (m *MsgSubmitEpochReportResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitEpochReportResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgSubmitAuditReportResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgSubmitEpochReportResponse proto.InternalMessageInfo type MsgSubmitEvidence struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` @@ -348,8 +349,8 @@ func (m *MsgSubmitEvidenceResponse) GetEvidenceId() uint64 { func init() { proto.RegisterType((*MsgUpdateParams)(nil), "lumera.audit.v1.MsgUpdateParams") proto.RegisterType((*MsgUpdateParamsResponse)(nil), "lumera.audit.v1.MsgUpdateParamsResponse") - proto.RegisterType((*MsgSubmitAuditReport)(nil), "lumera.audit.v1.MsgSubmitAuditReport") - proto.RegisterType((*MsgSubmitAuditReportResponse)(nil), "lumera.audit.v1.MsgSubmitAuditReportResponse") + proto.RegisterType((*MsgSubmitEpochReport)(nil), "lumera.audit.v1.MsgSubmitEpochReport") + proto.RegisterType((*MsgSubmitEpochReportResponse)(nil), "lumera.audit.v1.MsgSubmitEpochReportResponse") proto.RegisterType((*MsgSubmitEvidence)(nil), "lumera.audit.v1.MsgSubmitEvidence") proto.RegisterType((*MsgSubmitEvidenceResponse)(nil), "lumera.audit.v1.MsgSubmitEvidenceResponse") } @@ -357,50 +358,48 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/tx.proto", fileDescriptor_4b5ba410ad359f63) } var fileDescriptor_4b5ba410ad359f63 = []byte{ - // 680 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x3f, 0x4f, 0xdb, 0x4e, - 0x18, 0x8e, 0x43, 0xf8, 0x93, 0x0b, 0x3f, 0x20, 0x27, 0xf4, 0x8b, 0x63, 0xa8, 0x49, 0x23, 0x21, - 0x45, 0x91, 0x48, 0x44, 0x5a, 0x75, 0x88, 0xba, 0x24, 0x52, 0xd5, 0x32, 0xa0, 0x22, 0xd3, 0x2e, - 0x2c, 0xee, 0xc5, 0x3e, 0x8c, 0x2b, 0xec, 0xb3, 0xee, 0xce, 0x11, 0x6c, 0x55, 0xc7, 0x4e, 0x5d, - 0xfa, 0x1d, 0x3a, 0x66, 0xa0, 0x53, 0xbf, 0x00, 0x23, 0x62, 0xea, 0x54, 0x55, 0x30, 0xf0, 0x35, - 0x2a, 0xdf, 0xd9, 0x0e, 0xd8, 0xb4, 0x74, 0x89, 0x7c, 0xef, 0xf3, 0xbc, 0xef, 0xfb, 0xbc, 0x4f, - 0xde, 0x3b, 0xa0, 0x1e, 0x87, 0x1e, 0xa6, 0xa8, 0x8b, 0x42, 0xdb, 0xe5, 0xdd, 0xf1, 0x76, 0x97, - 0x9f, 0x74, 0x02, 0x4a, 0x38, 0x81, 0xcb, 0x12, 0xe9, 0x08, 0xa4, 0x33, 0xde, 0xd6, 0xaa, 0xc8, - 0x73, 0x7d, 0xd2, 0x15, 0xbf, 0x92, 0xa3, 0xad, 0x3a, 0xc4, 0x21, 0xe2, 0xb3, 0x1b, 0x7d, 0xc5, - 0xd1, 0x9a, 0x45, 0x98, 0x47, 0x58, 0xd7, 0x63, 0x4e, 0x54, 0xd1, 0x63, 0x4e, 0x0c, 0xd4, 0x25, - 0x60, 0xca, 0x0c, 0x79, 0x88, 0xa1, 0xb5, 0xac, 0x0e, 0xd9, 0x56, 0x82, 0xeb, 0x59, 0x30, 0x40, - 0x14, 0x79, 0x49, 0xaa, 0x9e, 0x45, 0xf1, 0xd8, 0xb5, 0xb1, 0x6f, 0x61, 0x89, 0x37, 0xbf, 0x2b, - 0x60, 0x79, 0x97, 0x39, 0x6f, 0x03, 0x1b, 0x71, 0xbc, 0x27, 0x32, 0xe1, 0x33, 0x50, 0x46, 0x21, - 0x3f, 0x22, 0xd4, 0xe5, 0xa7, 0xaa, 0xd2, 0x50, 0x5a, 0xe5, 0xa1, 0x7a, 0x79, 0xb6, 0xb5, 0x1a, - 0x6b, 0x1a, 0xd8, 0x36, 0xc5, 0x8c, 0xed, 0x73, 0xea, 0xfa, 0x8e, 0x31, 0xa5, 0xc2, 0x3e, 0x98, - 0x93, 0xbd, 0xd5, 0x62, 0x43, 0x69, 0x55, 0x7a, 0xb5, 0x4e, 0xc6, 0xa5, 0x8e, 0x6c, 0x30, 0x2c, - 0x9f, 0xff, 0xdc, 0x28, 0x7c, 0xbd, 0x99, 0xb4, 0x15, 0x23, 0xce, 0xe8, 0x3f, 0xfd, 0x78, 0x33, - 0x69, 0x4f, 0x6b, 0x7d, 0xba, 0x99, 0xb4, 0x1f, 0xc7, 0xd2, 0x4f, 0xa6, 0xe2, 0x33, 0x4a, 0x9b, - 0x75, 0x50, 0xcb, 0x84, 0x0c, 0xcc, 0x02, 0xe2, 0x33, 0xdc, 0x9c, 0x14, 0xc1, 0xea, 0x2e, 0x73, - 0xf6, 0xc3, 0x91, 0xe7, 0xf2, 0x41, 0x54, 0xc0, 0xc0, 0x01, 0xa1, 0x1c, 0xbe, 0x02, 0x55, 0x16, - 0x06, 0x98, 0xfa, 0xc4, 0xc6, 0x26, 0xb2, 0x2c, 0x12, 0xfa, 0x3c, 0x9e, 0x72, 0xed, 0xf2, 0x6c, - 0xab, 0x96, 0x4c, 0x69, 0x59, 0x77, 0x07, 0x5d, 0x49, 0xb3, 0x06, 0x32, 0x09, 0xd6, 0xc1, 0x02, - 0x0e, 0x88, 0x75, 0x64, 0xba, 0xb6, 0x98, 0xb8, 0x64, 0xcc, 0x8b, 0xf3, 0x8e, 0x0d, 0x5f, 0x82, - 0x0a, 0xc3, 0xc7, 0x87, 0x26, 0x15, 0x3d, 0xd5, 0x19, 0xe1, 0x47, 0x23, 0xe7, 0x87, 0xd0, 0xb5, - 0x8f, 0x8f, 0x0f, 0xa5, 0xb6, 0x61, 0x29, 0x32, 0xc6, 0x00, 0x2c, 0x8d, 0x40, 0x03, 0x54, 0x03, - 0x8c, 0xa9, 0x49, 0x46, 0x0c, 0xd3, 0x31, 0xe2, 0x2e, 0xf1, 0x99, 0x5a, 0x6a, 0xcc, 0xb4, 0x2a, - 0xbd, 0xcd, 0xfb, 0xcb, 0xed, 0x61, 0x4c, 0x5f, 0x4f, 0xd9, 0xc6, 0x4a, 0x70, 0x37, 0xc0, 0xfa, - 0xff, 0x47, 0x5e, 0xe7, 0x4d, 0x68, 0xea, 0x60, 0xfd, 0x3e, 0xc7, 0x52, 0x4b, 0xbf, 0x14, 0x41, - 0x35, 0x25, 0xbc, 0x88, 0xf7, 0x08, 0xf6, 0xc0, 0xbc, 0x45, 0x31, 0xe2, 0x84, 0x3e, 0xb8, 0x2b, - 0x09, 0x11, 0x0e, 0xc0, 0x32, 0x0b, 0x47, 0xef, 0xb1, 0xc5, 0x4d, 0x24, 0x19, 0xc2, 0xc0, 0xbf, - 0xe5, 0x2e, 0xc5, 0x09, 0x71, 0x14, 0x0e, 0xc1, 0x7f, 0xc9, 0x2a, 0x9b, 0xfc, 0x34, 0xc0, 0xc2, - 0xe3, 0xa5, 0xde, 0xa3, 0x9c, 0x29, 0x89, 0xd0, 0x37, 0xa7, 0x01, 0x36, 0x16, 0xf1, 0xad, 0x13, - 0x5c, 0x03, 0x65, 0x64, 0x45, 0x9e, 0x44, 0xff, 0x60, 0x29, 0x12, 0x60, 0x2c, 0xc8, 0xc0, 0x8e, - 0x0d, 0x35, 0xb0, 0xe0, 0x61, 0x8e, 0x6c, 0xc4, 0x91, 0x3a, 0x2b, 0xb1, 0xe4, 0xdc, 0x5f, 0x8c, - 0x1c, 0x4c, 0xa6, 0x69, 0x3e, 0x07, 0xf5, 0x9c, 0x2d, 0x89, 0x69, 0x70, 0x03, 0x54, 0x52, 0x9d, - 0xae, 0x2d, 0x2c, 0x2a, 0x19, 0x20, 0x09, 0xed, 0xd8, 0xbd, 0x6f, 0x45, 0x30, 0xb3, 0xcb, 0x1c, - 0x78, 0x00, 0x16, 0xef, 0xdc, 0xc2, 0xfc, 0xb6, 0x64, 0x56, 0x5d, 0x6b, 0x3d, 0xc4, 0x48, 0x45, - 0xb8, 0xa0, 0x9a, 0xbf, 0x08, 0x9b, 0xf7, 0xa5, 0xe7, 0x68, 0xda, 0xd6, 0x3f, 0xd1, 0xd2, 0x56, - 0xef, 0xc0, 0x52, 0x66, 0x41, 0x9a, 0x7f, 0x2e, 0x90, 0x70, 0xb4, 0xf6, 0xc3, 0x9c, 0xa4, 0x83, - 0x36, 0xfb, 0x21, 0x7a, 0x39, 0x86, 0xed, 0xf3, 0x2b, 0x5d, 0xb9, 0xb8, 0xd2, 0x95, 0x5f, 0x57, - 0xba, 0xf2, 0xf9, 0x5a, 0x2f, 0x5c, 0x5c, 0xeb, 0x85, 0x1f, 0xd7, 0x7a, 0xe1, 0x60, 0xe5, 0xd6, - 0x8b, 0x11, 0xad, 0x06, 0x1b, 0xcd, 0x89, 0xc7, 0xee, 0xc9, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xc9, 0x60, 0xac, 0x15, 0xd1, 0x05, 0x00, 0x00, + // 652 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xbf, 0x6f, 0xd3, 0x40, + 0x14, 0x8e, 0xd3, 0xf4, 0x47, 0x5e, 0x4a, 0x4b, 0x4f, 0x95, 0xea, 0xb8, 0xc5, 0x0d, 0x91, 0x90, + 0xa2, 0x88, 0x26, 0x6a, 0x40, 0x0c, 0x15, 0x4b, 0x8d, 0x90, 0xe8, 0x50, 0x81, 0x5c, 0x58, 0xba, + 0x98, 0x8b, 0x7d, 0x72, 0x8c, 0x6a, 0x9f, 0x75, 0x77, 0x89, 0xda, 0x0d, 0x31, 0x32, 0xb1, 0xf0, + 0x3f, 0x20, 0xb1, 0x74, 0x80, 0x89, 0x7f, 0xa0, 0x63, 0xc5, 0xc4, 0x84, 0x50, 0x3b, 0xf4, 0xdf, + 0x40, 0xbe, 0xb3, 0x93, 0x62, 0x97, 0x16, 0xb1, 0x44, 0xbe, 0xf7, 0x7d, 0xdf, 0xbb, 0xef, 0x7d, + 0x79, 0x36, 0xe8, 0x07, 0xc3, 0x90, 0x30, 0xdc, 0xc5, 0x43, 0x2f, 0x10, 0xdd, 0xd1, 0x66, 0x57, + 0x1c, 0x76, 0x62, 0x46, 0x05, 0x45, 0x8b, 0x0a, 0xe9, 0x48, 0xa4, 0x33, 0xda, 0x34, 0x96, 0x70, + 0x18, 0x44, 0xb4, 0x2b, 0x7f, 0x15, 0xc7, 0x58, 0xf6, 0xa9, 0x4f, 0xe5, 0x63, 0x37, 0x79, 0x4a, + 0xab, 0x2b, 0x2e, 0xe5, 0x21, 0xe5, 0xdd, 0x90, 0xfb, 0x49, 0xc7, 0x90, 0xfb, 0x29, 0x50, 0x57, + 0x80, 0xa3, 0x14, 0xea, 0x90, 0x42, 0xab, 0x79, 0x1f, 0xea, 0x5a, 0x05, 0xae, 0xe5, 0xc1, 0x18, + 0x33, 0x1c, 0x66, 0x52, 0x33, 0x8f, 0x92, 0x51, 0xe0, 0x91, 0xc8, 0x25, 0x0a, 0x6f, 0x7e, 0xd3, + 0x60, 0x71, 0x97, 0xfb, 0xaf, 0x62, 0x0f, 0x0b, 0xf2, 0x42, 0x2a, 0xd1, 0x23, 0xa8, 0xe2, 0xa1, + 0x18, 0x50, 0x16, 0x88, 0x23, 0x5d, 0x6b, 0x68, 0xad, 0xaa, 0xa5, 0x7f, 0xff, 0xb2, 0xb1, 0x9c, + 0x7a, 0xda, 0xf6, 0x3c, 0x46, 0x38, 0xdf, 0x13, 0x2c, 0x88, 0x7c, 0x7b, 0x42, 0x45, 0x5b, 0x30, + 0xa3, 0xee, 0xd6, 0xcb, 0x0d, 0xad, 0x55, 0xeb, 0xad, 0x74, 0x72, 0x29, 0x75, 0xd4, 0x05, 0x56, + 0xf5, 0xe4, 0xe7, 0x7a, 0xe9, 0xd3, 0xc5, 0x71, 0x5b, 0xb3, 0x53, 0xc5, 0xd6, 0xc3, 0x77, 0x17, + 0xc7, 0xed, 0x49, 0xaf, 0xf7, 0x17, 0xc7, 0xed, 0xbb, 0xa9, 0xf5, 0xc3, 0x89, 0xf9, 0x9c, 0xd3, + 0x66, 0x1d, 0x56, 0x72, 0x25, 0x9b, 0xf0, 0x98, 0x46, 0x9c, 0x34, 0x3f, 0x97, 0x61, 0x79, 0x97, + 0xfb, 0x7b, 0xc3, 0x7e, 0x18, 0x88, 0xa7, 0x31, 0x75, 0x07, 0x36, 0x89, 0x29, 0x13, 0xa8, 0x07, + 0xb3, 0x2e, 0x23, 0x58, 0x50, 0x76, 0xe3, 0x6c, 0x19, 0x11, 0xd5, 0x61, 0x8e, 0x24, 0x2d, 0x9c, + 0xc0, 0x93, 0xb3, 0x55, 0xec, 0x59, 0x79, 0xde, 0xf1, 0x90, 0x05, 0xb5, 0x01, 0xe5, 0xc2, 0x61, + 0xb2, 0xbb, 0x3e, 0x25, 0x27, 0x5f, 0x2d, 0x4c, 0xfe, 0x8c, 0x72, 0xa1, 0x0c, 0x58, 0x95, 0x64, + 0x7a, 0x1b, 0x06, 0xe3, 0x0a, 0x62, 0x60, 0x72, 0x41, 0x19, 0xf6, 0x89, 0xe3, 0x0e, 0xf0, 0xc1, + 0x01, 0x89, 0x7c, 0xe2, 0xd0, 0x3e, 0x27, 0x6c, 0x84, 0x45, 0x40, 0x23, 0xae, 0x57, 0x1a, 0x53, + 0xad, 0x5a, 0xef, 0x7e, 0xa1, 0xed, 0x9e, 0x92, 0x3d, 0xc9, 0x54, 0xcf, 0x27, 0x22, 0x7b, 0x8d, + 0xff, 0x1d, 0xe4, 0x5b, 0xf3, 0x49, 0xe0, 0xd9, 0x80, 0x4d, 0x13, 0xd6, 0xae, 0x0a, 0x6b, 0x9c, + 0xe6, 0xc7, 0x32, 0x2c, 0x4d, 0x08, 0xe9, 0x0a, 0xfd, 0x57, 0x94, 0xdb, 0xb0, 0xc8, 0x87, 0xfd, + 0x37, 0xc4, 0x15, 0x0e, 0x56, 0x0c, 0x99, 0xe8, 0x75, 0xda, 0x85, 0x54, 0x90, 0x56, 0x91, 0x05, + 0xb7, 0xb2, 0x2d, 0x76, 0xc4, 0x51, 0x4c, 0x64, 0xe8, 0x0b, 0xbd, 0x3b, 0x85, 0x74, 0x32, 0xa3, + 0x2f, 0x8f, 0x62, 0x62, 0xcf, 0x93, 0x4b, 0x27, 0xb4, 0x0a, 0x55, 0xec, 0x26, 0x49, 0x24, 0x7f, + 0x69, 0x25, 0x31, 0x60, 0xcf, 0xa9, 0xc2, 0x8e, 0x87, 0x0c, 0x98, 0x0b, 0x89, 0xc0, 0x1e, 0x16, + 0x58, 0x9f, 0x56, 0x58, 0x76, 0xce, 0xe5, 0xf6, 0x18, 0xea, 0x85, 0x58, 0xb2, 0xd0, 0xd0, 0x3a, + 0xd4, 0xc6, 0x3e, 0x03, 0x4f, 0x46, 0x54, 0xb1, 0x21, 0x2b, 0xed, 0x78, 0xbd, 0xaf, 0x65, 0x98, + 0xda, 0xe5, 0x3e, 0xda, 0x87, 0xf9, 0x3f, 0x5e, 0xc0, 0x46, 0x61, 0x92, 0xdc, 0x96, 0x1b, 0xad, + 0x9b, 0x18, 0x63, 0x13, 0x01, 0x2c, 0x15, 0xdf, 0x81, 0x7b, 0x57, 0xc9, 0x0b, 0x34, 0x63, 0xe3, + 0x9f, 0x68, 0xe3, 0xab, 0x5e, 0xc3, 0x42, 0x6e, 0x41, 0x9a, 0xd7, 0x34, 0x48, 0x39, 0x46, 0xfb, + 0x66, 0x4e, 0x76, 0x83, 0x31, 0xfd, 0x36, 0xf9, 0x68, 0x58, 0xed, 0x93, 0x33, 0x53, 0x3b, 0x3d, + 0x33, 0xb5, 0x5f, 0x67, 0xa6, 0xf6, 0xe1, 0xdc, 0x2c, 0x9d, 0x9e, 0x9b, 0xa5, 0x1f, 0xe7, 0x66, + 0x69, 0xff, 0xf6, 0xa5, 0x8f, 0x45, 0xb2, 0x1a, 0xbc, 0x3f, 0x23, 0xbf, 0x73, 0x0f, 0x7e, 0x07, + 0x00, 0x00, 0xff, 0xff, 0x08, 0x61, 0x98, 0x8b, 0xcc, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -418,7 +417,7 @@ type MsgClient interface { // UpdateParams defines a (governance) operation for updating the module // parameters. The authority defaults to the x/gov module account. UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) - SubmitAuditReport(ctx context.Context, in *MsgSubmitAuditReport, opts ...grpc.CallOption) (*MsgSubmitAuditReportResponse, error) + SubmitEpochReport(ctx context.Context, in *MsgSubmitEpochReport, opts ...grpc.CallOption) (*MsgSubmitEpochReportResponse, error) // SubmitEvidence defines the SubmitEvidence RPC. SubmitEvidence(ctx context.Context, in *MsgSubmitEvidence, opts ...grpc.CallOption) (*MsgSubmitEvidenceResponse, error) } @@ -440,9 +439,9 @@ func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts return out, nil } -func (c *msgClient) SubmitAuditReport(ctx context.Context, in *MsgSubmitAuditReport, opts ...grpc.CallOption) (*MsgSubmitAuditReportResponse, error) { - out := new(MsgSubmitAuditReportResponse) - err := c.cc.Invoke(ctx, "/lumera.audit.v1.Msg/SubmitAuditReport", in, out, opts...) +func (c *msgClient) SubmitEpochReport(ctx context.Context, in *MsgSubmitEpochReport, opts ...grpc.CallOption) (*MsgSubmitEpochReportResponse, error) { + out := new(MsgSubmitEpochReportResponse) + err := c.cc.Invoke(ctx, "/lumera.audit.v1.Msg/SubmitEpochReport", in, out, opts...) if err != nil { return nil, err } @@ -463,7 +462,7 @@ type MsgServer interface { // UpdateParams defines a (governance) operation for updating the module // parameters. The authority defaults to the x/gov module account. UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) - SubmitAuditReport(context.Context, *MsgSubmitAuditReport) (*MsgSubmitAuditReportResponse, error) + SubmitEpochReport(context.Context, *MsgSubmitEpochReport) (*MsgSubmitEpochReportResponse, error) // SubmitEvidence defines the SubmitEvidence RPC. SubmitEvidence(context.Context, *MsgSubmitEvidence) (*MsgSubmitEvidenceResponse, error) } @@ -475,8 +474,8 @@ type UnimplementedMsgServer struct { func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") } -func (*UnimplementedMsgServer) SubmitAuditReport(ctx context.Context, req *MsgSubmitAuditReport) (*MsgSubmitAuditReportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SubmitAuditReport not implemented") +func (*UnimplementedMsgServer) SubmitEpochReport(ctx context.Context, req *MsgSubmitEpochReport) (*MsgSubmitEpochReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SubmitEpochReport not implemented") } func (*UnimplementedMsgServer) SubmitEvidence(ctx context.Context, req *MsgSubmitEvidence) (*MsgSubmitEvidenceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitEvidence not implemented") @@ -504,20 +503,20 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } -func _Msg_SubmitAuditReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSubmitAuditReport) +func _Msg_SubmitEpochReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSubmitEpochReport) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).SubmitAuditReport(ctx, in) + return srv.(MsgServer).SubmitEpochReport(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/lumera.audit.v1.Msg/SubmitAuditReport", + FullMethod: "/lumera.audit.v1.Msg/SubmitEpochReport", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SubmitAuditReport(ctx, req.(*MsgSubmitAuditReport)) + return srv.(MsgServer).SubmitEpochReport(ctx, req.(*MsgSubmitEpochReport)) } return interceptor(ctx, in, info, handler) } @@ -550,8 +549,8 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ Handler: _Msg_UpdateParams_Handler, }, { - MethodName: "SubmitAuditReport", - Handler: _Msg_SubmitAuditReport_Handler, + MethodName: "SubmitEpochReport", + Handler: _Msg_SubmitEpochReport_Handler, }, { MethodName: "SubmitEvidence", @@ -625,7 +624,7 @@ func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *MsgSubmitAuditReport) Marshal() (dAtA []byte, err error) { +func (m *MsgSubmitEpochReport) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -635,20 +634,20 @@ func (m *MsgSubmitAuditReport) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgSubmitAuditReport) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgSubmitEpochReport) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgSubmitAuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgSubmitEpochReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.PeerObservations) > 0 { - for iNdEx := len(m.PeerObservations) - 1; iNdEx >= 0; iNdEx-- { + if len(m.StorageChallengeObservations) > 0 { + for iNdEx := len(m.StorageChallengeObservations) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.PeerObservations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.StorageChallengeObservations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -660,7 +659,7 @@ func (m *MsgSubmitAuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } { - size, err := m.SelfReport.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.HostReport.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -674,17 +673,17 @@ func (m *MsgSubmitAuditReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x10 } - if len(m.SupernodeAccount) > 0 { - i -= len(m.SupernodeAccount) - copy(dAtA[i:], m.SupernodeAccount) - i = encodeVarintTx(dAtA, i, uint64(len(m.SupernodeAccount))) + 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 *MsgSubmitAuditReportResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgSubmitEpochReportResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -694,12 +693,12 @@ func (m *MsgSubmitAuditReportResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgSubmitAuditReportResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgSubmitEpochReportResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgSubmitAuditReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgSubmitEpochReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -826,23 +825,23 @@ func (m *MsgUpdateParamsResponse) Size() (n int) { return n } -func (m *MsgSubmitAuditReport) Size() (n int) { +func (m *MsgSubmitEpochReport) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.SupernodeAccount) + l = len(m.Creator) if l > 0 { n += 1 + l + sovTx(uint64(l)) } if m.EpochId != 0 { n += 1 + sovTx(uint64(m.EpochId)) } - l = m.SelfReport.Size() + l = m.HostReport.Size() n += 1 + l + sovTx(uint64(l)) - if len(m.PeerObservations) > 0 { - for _, e := range m.PeerObservations { + if len(m.StorageChallengeObservations) > 0 { + for _, e := range m.StorageChallengeObservations { l = e.Size() n += 1 + l + sovTx(uint64(l)) } @@ -850,7 +849,7 @@ func (m *MsgSubmitAuditReport) Size() (n int) { return n } -func (m *MsgSubmitAuditReportResponse) Size() (n int) { +func (m *MsgSubmitEpochReportResponse) Size() (n int) { if m == nil { return 0 } @@ -1070,7 +1069,7 @@ func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { +func (m *MsgSubmitEpochReport) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1093,15 +1092,15 @@ func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgSubmitAuditReport: wiretype end group for non-group") + return fmt.Errorf("proto: MsgSubmitEpochReport: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSubmitAuditReport: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgSubmitEpochReport: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SupernodeAccount", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1129,7 +1128,7 @@ func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.SupernodeAccount = string(dAtA[iNdEx:postIndex]) + m.Creator = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 0 { @@ -1152,7 +1151,7 @@ func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { } case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SelfReport", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HostReport", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1179,13 +1178,13 @@ func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SelfReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.HostReport.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerObservations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StorageChallengeObservations", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1212,8 +1211,8 @@ func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PeerObservations = append(m.PeerObservations, &AuditPeerObservation{}) - if err := m.PeerObservations[len(m.PeerObservations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.StorageChallengeObservations = append(m.StorageChallengeObservations, &StorageChallengeObservation{}) + if err := m.StorageChallengeObservations[len(m.StorageChallengeObservations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1238,7 +1237,7 @@ func (m *MsgSubmitAuditReport) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgSubmitAuditReportResponse) Unmarshal(dAtA []byte) error { +func (m *MsgSubmitEpochReportResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1261,10 +1260,10 @@ func (m *MsgSubmitAuditReportResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgSubmitAuditReportResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgSubmitEpochReportResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSubmitAuditReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgSubmitEpochReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: From 7f5ffd470bf58e908c215b88c6805d46141df338 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 11 Feb 2026 11:58:29 +0500 Subject: [PATCH 15/18] audit : fixes --- x/audit/v1/keeper/epoch_anchor.go | 8 +++- x/audit/v1/keeper/epoch_params_snapshot.go | 41 ++++++++++++++++++++ x/audit/v1/keeper/msg_submit_epoch_report.go | 11 +++++- x/audit/v1/keeper/prune.go | 5 +++ x/audit/v1/keeper/query_assigned_targets.go | 11 +++++- x/audit/v1/types/keys.go | 16 ++++++++ 6 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 x/audit/v1/keeper/epoch_params_snapshot.go diff --git a/x/audit/v1/keeper/epoch_anchor.go b/x/audit/v1/keeper/epoch_anchor.go index a2252dd..017c6d7 100644 --- a/x/audit/v1/keeper/epoch_anchor.go +++ b/x/audit/v1/keeper/epoch_anchor.go @@ -95,7 +95,13 @@ func (k Keeper) CreateEpochAnchorIfNeeded(ctx sdk.Context, epochID uint64, epoch TargetsSetCommitment: targetCommit, } - return k.SetEpochAnchor(ctx, anchor) + if err := k.SetEpochAnchor(ctx, anchor); err != nil { + return err + } + + // Snapshot assignment/gating-related params at epoch start so queries and report validation + // can remain stable within an epoch even if governance updates params mid-epoch. + return k.CreateEpochParamsSnapshotIfNeeded(ctx, epochID, params) } func deriveEpochSeed(ctx sdk.Context, epochID uint64, epochStartHeight int64) ([]byte, error) { diff --git a/x/audit/v1/keeper/epoch_params_snapshot.go b/x/audit/v1/keeper/epoch_params_snapshot.go new file mode 100644 index 0000000..26520c0 --- /dev/null +++ b/x/audit/v1/keeper/epoch_params_snapshot.go @@ -0,0 +1,41 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/LumeraProtocol/lumera/x/audit/v1/types" +) + +// GetEpochParamsSnapshot returns the per-epoch params snapshot for the given epoch ID. +// Snapshots are created at epoch start alongside the EpochAnchor and are intended to keep +// assignment/gating stable within an epoch even if governance changes params mid-epoch. +func (k Keeper) GetEpochParamsSnapshot(ctx sdk.Context, epochID uint64) (types.Params, bool) { + store := k.kvStore(ctx) + bz := store.Get(types.EpochParamsSnapshotKey(epochID)) + if bz == nil { + return types.Params{}, false + } + var p types.Params + k.cdc.MustUnmarshal(bz, &p) + return p, true +} + +func (k Keeper) SetEpochParamsSnapshot(ctx sdk.Context, epochID uint64, params types.Params) error { + store := k.kvStore(ctx) + bz, err := k.cdc.Marshal(¶ms) + if err != nil { + return err + } + store.Set(types.EpochParamsSnapshotKey(epochID), bz) + return nil +} + +func (k Keeper) CreateEpochParamsSnapshotIfNeeded(ctx sdk.Context, epochID uint64, params types.Params) error { + store := k.kvStore(ctx) + key := types.EpochParamsSnapshotKey(epochID) + if bz := store.Get(key); bz != nil { + return nil + } + return k.SetEpochParamsSnapshot(ctx, epochID, params.WithDefaults()) +} + diff --git a/x/audit/v1/keeper/msg_submit_epoch_report.go b/x/audit/v1/keeper/msg_submit_epoch_report.go index e0e95fd..6a14cff 100644 --- a/x/audit/v1/keeper/msg_submit_epoch_report.go +++ b/x/audit/v1/keeper/msg_submit_epoch_report.go @@ -47,7 +47,14 @@ func (m msgServer) SubmitEpochReport(ctx context.Context, req *types.MsgSubmitEp reporterAccount := req.Creator - allowedTargetsList, isProber, err := computeAuditPeerTargetsForReporter(¶ms, anchor.ActiveSupernodeAccounts, anchor.TargetSupernodeAccounts, anchor.Seed, reporterAccount) + // Keep assignment/gating stable within the epoch by using the params snapshot captured + // at epoch start (when available). Fallback to current params for backward compatibility. + assignParams := params + if snap, ok := m.GetEpochParamsSnapshot(sdkCtx, req.EpochId); ok { + assignParams = snap.WithDefaults() + } + + allowedTargetsList, isProber, err := computeAuditPeerTargetsForReporter(&assignParams, anchor.ActiveSupernodeAccounts, anchor.TargetSupernodeAccounts, anchor.Seed, reporterAccount) if err != nil { return nil, err } @@ -56,7 +63,7 @@ func (m msgServer) SubmitEpochReport(ctx context.Context, req *types.MsgSubmitEp allowedTargets[t] = struct{}{} } - requiredPortsLen := len(params.RequiredOpenPorts) + requiredPortsLen := len(assignParams.RequiredOpenPorts) // Host report port states are persisted on-chain. To prevent state bloat and keep the // semantics clear, allow either: // - an empty list (unknown/unreported), or diff --git a/x/audit/v1/keeper/prune.go b/x/audit/v1/keeper/prune.go index 32d16df..d969392 100644 --- a/x/audit/v1/keeper/prune.go +++ b/x/audit/v1/keeper/prune.go @@ -30,6 +30,11 @@ func (k Keeper) PruneOldEpochs(ctx sdk.Context, currentEpochID uint64, params ty return err } + // Epoch params snapshots: eps/ + if err := prunePrefixByWindowIDLeadingU64(store, types.EpochParamsSnapshotPrefix(), minKeepEpochID); err != nil { + return err + } + // Reports: r/ if err := prunePrefixByWindowIDLeadingU64(store, types.ReportPrefix(), minKeepEpochID); err != nil { return err diff --git a/x/audit/v1/keeper/query_assigned_targets.go b/x/audit/v1/keeper/query_assigned_targets.go index c562a0f..63cd3f0 100644 --- a/x/audit/v1/keeper/query_assigned_targets.go +++ b/x/audit/v1/keeper/query_assigned_targets.go @@ -53,7 +53,14 @@ func (q queryServer) AssignedTargets(ctx context.Context, req *types.QueryAssign return nil, status.Error(codes.NotFound, "epoch anchor not found") } - targets, _, err := computeAuditPeerTargetsForReporter(¶ms, anchor.ActiveSupernodeAccounts, anchor.TargetSupernodeAccounts, anchor.Seed, req.SupernodeAccount) + // Keep assignment stable within the epoch by using the params snapshot captured at epoch start + // (when available). Fallback to current params for backward compatibility. + assignParams := params + if snap, ok := q.k.GetEpochParamsSnapshot(sdkCtx, epochID); ok { + assignParams = snap.WithDefaults() + } + + targets, _, err := computeAuditPeerTargetsForReporter(&assignParams, anchor.ActiveSupernodeAccounts, anchor.TargetSupernodeAccounts, anchor.Seed, req.SupernodeAccount) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -61,7 +68,7 @@ func (q queryServer) AssignedTargets(ctx context.Context, req *types.QueryAssign return &types.QueryAssignedTargetsResponse{ EpochId: epochID, EpochStartHeight: epochStart, - RequiredOpenPorts: append([]uint32(nil), params.RequiredOpenPorts...), + RequiredOpenPorts: append([]uint32(nil), assignParams.RequiredOpenPorts...), TargetSupernodeAccounts: targets, }, nil } diff --git a/x/audit/v1/types/keys.go b/x/audit/v1/types/keys.go index 85c0616..e8dd7b2 100644 --- a/x/audit/v1/types/keys.go +++ b/x/audit/v1/types/keys.go @@ -27,6 +27,7 @@ var ( // // Formats: // - EpochAnchorKey: "ea/" + u64be(epoch_id) + // - EpochParamsSnapshotKey: "eps/" + u64be(epoch_id) // - ReportKey: "r/" + u64be(epoch_id) + reporter_supernode_account // - ReportIndexKey: "ri/" + reporter_supernode_account + "/" + u64be(epoch_id) // - StorageChallengeReportIndexKey: "sc/" + supernode_account + "/" + u64be(epoch_id) + "/" + reporter_supernode_account @@ -36,6 +37,9 @@ var ( // - EpochAnchorKey(1) => "ea/" + u64be(1) // - ReportKey(1, "") => "r/" + u64be(1) + "" epochAnchorPrefix = []byte("ea/") + // epochParamsSnapshotPrefix stores a per-epoch snapshot of assignment/gating-related params. + // Format: "eps/" + u64be(epoch_id) + epochParamsSnapshotPrefix = []byte("eps/") reportPrefix = []byte("r/") reportIndexPrefix = []byte("ri/") @@ -81,6 +85,18 @@ func EpochAnchorPrefix() []byte { return epochAnchorPrefix } +// EpochParamsSnapshotKey returns the store key for the per-epoch params snapshot identified by epochID. +func EpochParamsSnapshotKey(epochID uint64) []byte { + key := make([]byte, 0, len(epochParamsSnapshotPrefix)+8) // "eps/" + u64be(epoch_id) + key = append(key, epochParamsSnapshotPrefix...) + key = binary.BigEndian.AppendUint64(key, epochID) + return key +} + +func EpochParamsSnapshotPrefix() []byte { + return epochParamsSnapshotPrefix +} + // ReportPrefix returns the root prefix for epoch report keys. // // Format: "r/" + u64be(epoch_id) + reporter_supernode_account From 68a2e786cc5c1b15d46430393b9d2b386ed14e05 Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 11 Feb 2026 13:59:02 +0500 Subject: [PATCH 16/18] audit: add cascade failure evidence type --- proto/lumera/audit/v1/evidence.proto | 3 + proto/lumera/audit/v1/evidence_metadata.proto | 17 + x/audit/v1/keeper/evidence.go | 7 + x/audit/v1/keeper/evidence_test.go | 81 ++++ x/audit/v1/types/evidence.pb.go | 65 +-- x/audit/v1/types/evidence_metadata.pb.go | 395 ++++++++++++++++-- 6 files changed, 508 insertions(+), 60 deletions(-) diff --git a/proto/lumera/audit/v1/evidence.proto b/proto/lumera/audit/v1/evidence.proto index b880844..14fde9a 100644 --- a/proto/lumera/audit/v1/evidence.proto +++ b/proto/lumera/audit/v1/evidence.proto @@ -18,6 +18,9 @@ enum EvidenceType { // storage challenge failure evidence submitted by the deterministic challenger. EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE = 4; + + // client-observed cascade flow failure (upload/download). + EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE = 5; } // Evidence is a stable outer record that stores evidence about an audited subject. diff --git a/proto/lumera/audit/v1/evidence_metadata.proto b/proto/lumera/audit/v1/evidence_metadata.proto index 15f7205..dc5ff63 100644 --- a/proto/lumera/audit/v1/evidence_metadata.proto +++ b/proto/lumera/audit/v1/evidence_metadata.proto @@ -48,3 +48,20 @@ message StorageChallengeFailureEvidenceMetadata { // transcript_hash is a hash commitment to the off-chain transcript (hex-encoded blake3-256). string transcript_hash = 7; } + +// CascadeClientFailureEvidenceMetadata is metadata for client-observed failures +message CascadeClientFailureEvidenceMetadata { + // flow is a short discriminator for the failed flow segment. + // Example values: UPLOAD, DOWNLOAD. + string flow = 1; + + // reporter_component identifies the emitting component. + // Example values: sn-api-server, sdk-go, sdk-js. + string reporter_component = 2; + + // target_supernode_account is the implicated supernode account, when known. + string target_supernode_account = 3 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + + // details is free-form diagnostic text (e.g. full error traces). + string details = 4; +} diff --git a/x/audit/v1/keeper/evidence.go b/x/audit/v1/keeper/evidence.go index 50ab48c..5e75fa5 100644 --- a/x/audit/v1/keeper/evidence.go +++ b/x/audit/v1/keeper/evidence.go @@ -203,6 +203,13 @@ func marshalEvidenceMetadataJSON(evidenceType types.EvidenceType, metadataJSON s } return gogoproto.Marshal(&m) + case types.EvidenceType_EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE: + var m types.CascadeClientFailureEvidenceMetadata + if err := u.Unmarshal(strings.NewReader(metadataJSON), &m); err != nil { + return nil, fmt.Errorf("unmarshal CascadeClientFailureEvidenceMetadata: %w", err) + } + return gogoproto.Marshal(&m) + default: return nil, fmt.Errorf("unsupported evidence_type: %s", evidenceType.String()) } diff --git a/x/audit/v1/keeper/evidence_test.go b/x/audit/v1/keeper/evidence_test.go index ba2de23..a69652e 100644 --- a/x/audit/v1/keeper/evidence_test.go +++ b/x/audit/v1/keeper/evidence_test.go @@ -1,6 +1,7 @@ package keeper_test import ( + "bytes" "encoding/json" "testing" @@ -8,6 +9,7 @@ import ( "github.com/LumeraProtocol/lumera/x/audit/v1/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + gogoproto "github.com/cosmos/gogoproto/proto" "github.com/stretchr/testify/require" ) @@ -66,3 +68,82 @@ func TestSubmitEvidenceAndQueries(t *testing.T) { require.Len(t, gotByAction.Evidence, 1) require.Equal(t, respID, gotByAction.Evidence[0].EvidenceId) } + +func TestSubmitEvidenceAndQueries_CascadeClientFailure(t *testing.T) { + f := initFixture(t) + + ms := keeper.NewMsgServerImpl(f.keeper) + qs := keeper.NewQueryServerImpl(f.keeper) + + reporter, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x11}, 20)) + require.NoError(t, err) + subject, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x22}, 20)) + require.NoError(t, err) + target, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x33}, 20)) + require.NoError(t, err) + + meta := types.CascadeClientFailureEvidenceMetadata{ + Flow: "UPLOAD", + ReporterComponent: "sn-api-server", + TargetSupernodeAccount: target, + Details: "context deadline exceeded while streaming upload; full stack trace here", + } + metaBz, err := json.Marshal(meta) + require.NoError(t, err) + + resp, err := ms.SubmitEvidence(f.ctx, &types.MsgSubmitEvidence{ + Creator: reporter, + SubjectAddress: subject, + EvidenceType: types.EvidenceType_EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE, + ActionId: "action-cascade-1", + Metadata: string(metaBz), + }) + require.NoError(t, err) + require.Equal(t, uint64(1), resp.EvidenceId) + + gotByID, err := qs.EvidenceById(f.ctx, &types.QueryEvidenceByIdRequest{EvidenceId: resp.EvidenceId}) + require.NoError(t, err) + require.Equal(t, resp.EvidenceId, gotByID.Evidence.EvidenceId) + require.Equal(t, subject, gotByID.Evidence.SubjectAddress) + require.Equal(t, reporter, gotByID.Evidence.ReporterAddress) + require.Equal(t, "action-cascade-1", gotByID.Evidence.ActionId) + require.Equal(t, types.EvidenceType_EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE, gotByID.Evidence.EvidenceType) + + var gotMeta types.CascadeClientFailureEvidenceMetadata + err = gogoproto.Unmarshal(gotByID.Evidence.Metadata, &gotMeta) + require.NoError(t, err) + require.Equal(t, meta.Flow, gotMeta.Flow) + require.Equal(t, meta.ReporterComponent, gotMeta.ReporterComponent) + require.Equal(t, meta.TargetSupernodeAccount, gotMeta.TargetSupernodeAccount) + require.Equal(t, meta.Details, gotMeta.Details) + + gotBySubject, err := qs.EvidenceBySubject(f.ctx, &types.QueryEvidenceBySubjectRequest{SubjectAddress: subject}) + require.NoError(t, err) + require.Len(t, gotBySubject.Evidence, 1) + require.Equal(t, resp.EvidenceId, gotBySubject.Evidence[0].EvidenceId) + + gotByAction, err := qs.EvidenceByAction(f.ctx, &types.QueryEvidenceByActionRequest{ActionId: "action-cascade-1"}) + require.NoError(t, err) + require.Len(t, gotByAction.Evidence, 1) + require.Equal(t, resp.EvidenceId, gotByAction.Evidence[0].EvidenceId) +} + +func TestCreateEvidence_CascadeClientFailure_InvalidMetadata(t *testing.T) { + f := initFixture(t) + + reporter, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x11}, 20)) + require.NoError(t, err) + subject, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x22}, 20)) + require.NoError(t, err) + + _, err = f.keeper.CreateEvidence( + f.ctx, + reporter, + subject, + "action-cascade-1", + types.EvidenceType_EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE, + `{"flow":`, + ) + require.Error(t, err) + require.Contains(t, err.Error(), types.ErrInvalidMetadata.Error()) +} diff --git a/x/audit/v1/types/evidence.pb.go b/x/audit/v1/types/evidence.pb.go index 34afba8..5fffa31 100644 --- a/x/audit/v1/types/evidence.pb.go +++ b/x/audit/v1/types/evidence.pb.go @@ -34,6 +34,8 @@ const ( EvidenceType_EVIDENCE_TYPE_ACTION_EXPIRED EvidenceType = 3 // storage challenge failure evidence submitted by the deterministic challenger. EvidenceType_EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE EvidenceType = 4 + // client-observed cascade flow failure (upload/download). + EvidenceType_EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE EvidenceType = 5 ) var EvidenceType_name = map[int32]string{ @@ -42,6 +44,7 @@ var EvidenceType_name = map[int32]string{ 2: "EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10", 3: "EVIDENCE_TYPE_ACTION_EXPIRED", 4: "EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE", + 5: "EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE", } var EvidenceType_value = map[string]int32{ @@ -50,6 +53,7 @@ var EvidenceType_value = map[string]int32{ "EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10": 2, "EVIDENCE_TYPE_ACTION_EXPIRED": 3, "EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE": 4, + "EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE": 5, } func (x EvidenceType) String() string { @@ -169,36 +173,37 @@ func init() { func init() { proto.RegisterFile("lumera/audit/v1/evidence.proto", fileDescriptor_449f638e48abdbaa) } var fileDescriptor_449f638e48abdbaa = []byte{ - // 450 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x41, 0x6f, 0x12, 0x41, - 0x14, 0x66, 0x28, 0x56, 0x3a, 0x22, 0x6c, 0x26, 0x1e, 0xb6, 0xd5, 0xae, 0x1b, 0x2f, 0x25, 0x35, - 0xee, 0x8a, 0x1c, 0x3c, 0x0f, 0xcb, 0x40, 0x27, 0x21, 0x03, 0x19, 0x16, 0xa3, 0xbd, 0x4c, 0xb6, - 0xcc, 0xa4, 0x5d, 0x23, 0x2c, 0xd9, 0x1d, 0x88, 0xfd, 0x17, 0xfe, 0x18, 0x7f, 0x84, 0xc7, 0xc6, - 0x93, 0xde, 0x0c, 0xdc, 0xfc, 0x15, 0x86, 0x5d, 0x96, 0xb6, 0xa6, 0x09, 0xc7, 0xef, 0xfb, 0xde, - 0xf7, 0xcd, 0x7b, 0x6f, 0x1e, 0xb4, 0xbe, 0xcc, 0x27, 0x2a, 0x0e, 0xdc, 0x60, 0x2e, 0x43, 0xed, - 0x2e, 0x1a, 0xae, 0x5a, 0x84, 0x52, 0x4d, 0xc7, 0xca, 0x99, 0xc5, 0x91, 0x8e, 0x50, 0x2d, 0xd3, - 0x9d, 0x54, 0x77, 0x16, 0x8d, 0xa3, 0xc3, 0x71, 0x94, 0x4c, 0xa2, 0x44, 0xa4, 0xb2, 0x9b, 0x81, - 0xac, 0xf6, 0xd5, 0xef, 0x22, 0x2c, 0x93, 0x8d, 0x1d, 0xbd, 0x84, 0x4f, 0xf2, 0x28, 0x11, 0x4a, - 0x13, 0xd8, 0xa0, 0x5e, 0xe2, 0x30, 0xa7, 0xa8, 0x44, 0x18, 0xd6, 0x92, 0xf9, 0xc5, 0x67, 0x35, - 0xd6, 0x22, 0x90, 0x32, 0x56, 0x49, 0x62, 0x16, 0x6d, 0x50, 0x3f, 0x68, 0x99, 0x3f, 0xbf, 0xbf, - 0x79, 0xb6, 0x09, 0xc6, 0x99, 0x32, 0xd4, 0x71, 0x38, 0xbd, 0xe4, 0xd5, 0x8d, 0x61, 0xc3, 0x22, - 0x0f, 0x1a, 0xb1, 0x9a, 0x45, 0xb1, 0x56, 0xf1, 0x36, 0x63, 0x6f, 0x47, 0x46, 0x2d, 0x77, 0xe4, - 0x21, 0xcf, 0xe1, 0x41, 0x30, 0xd6, 0x61, 0x34, 0x5d, 0xb7, 0x59, 0x5a, 0xbb, 0x79, 0x39, 0x23, - 0xa8, 0x44, 0x2d, 0xf8, 0x74, 0x3b, 0x85, 0xbe, 0x9e, 0x29, 0xf3, 0x91, 0x0d, 0xea, 0xd5, 0x77, - 0xc7, 0xce, 0x7f, 0x6b, 0x71, 0xf2, 0xb9, 0xfd, 0xeb, 0x99, 0xe2, 0x15, 0x75, 0x07, 0xa1, 0x23, - 0x58, 0x9e, 0x28, 0x1d, 0xc8, 0x40, 0x07, 0xe6, 0xbe, 0x0d, 0xea, 0x15, 0xbe, 0xc5, 0xe8, 0x04, - 0xe6, 0xfd, 0x48, 0x71, 0xa5, 0xc2, 0xcb, 0x2b, 0x6d, 0x3e, 0x4e, 0x37, 0x55, 0xcd, 0xe9, 0xb3, - 0x94, 0x3d, 0xfd, 0x0b, 0x60, 0xe5, 0xee, 0x1b, 0xe8, 0x18, 0x1e, 0x92, 0x0f, 0xb4, 0x4d, 0x98, - 0x47, 0x84, 0xff, 0x69, 0x40, 0xc4, 0x88, 0x0d, 0x07, 0xc4, 0xa3, 0x1d, 0x4a, 0xda, 0x46, 0x01, - 0xbd, 0x87, 0xcd, 0xfb, 0x32, 0xf6, 0x7c, 0xda, 0x67, 0xa2, 0x43, 0x19, 0xee, 0xd1, 0x73, 0x9c, - 0x82, 0x21, 0xed, 0x32, 0xec, 0x8f, 0x38, 0x11, 0x1d, 0x4c, 0x7b, 0x23, 0x4e, 0x0c, 0x80, 0x9a, - 0xd0, 0xdd, 0x6d, 0x64, 0x7d, 0x5f, 0x50, 0x26, 0xfc, 0xfe, 0x40, 0x34, 0xde, 0x1a, 0x45, 0x64, - 0xc3, 0x17, 0x0f, 0x9a, 0xc8, 0xc7, 0x01, 0xe5, 0xa4, 0x6d, 0xec, 0xa1, 0xd7, 0xf0, 0xe4, 0x7e, - 0xc5, 0xd0, 0xef, 0x73, 0xdc, 0x25, 0xc2, 0x3b, 0xc3, 0xbd, 0x1e, 0x61, 0xdd, 0xdb, 0x1e, 0x4a, - 0xad, 0xd3, 0x1f, 0x4b, 0x0b, 0xdc, 0x2c, 0x2d, 0xf0, 0x67, 0x69, 0x81, 0x6f, 0x2b, 0xab, 0x70, - 0xb3, 0xb2, 0x0a, 0xbf, 0x56, 0x56, 0xe1, 0xdc, 0xf8, 0x7a, 0x7b, 0xa9, 0xeb, 0xff, 0x48, 0x2e, - 0xf6, 0xd3, 0xdb, 0x6b, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x77, 0xc3, 0x17, 0x57, 0xc9, 0x02, - 0x00, 0x00, + // 467 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x6e, 0xd3, 0x30, + 0x18, 0x6f, 0xba, 0x6e, 0x74, 0xa6, 0xb4, 0x91, 0xc5, 0x21, 0x1b, 0x2c, 0x44, 0x08, 0x69, 0xd1, + 0x10, 0x09, 0xa5, 0x07, 0xce, 0x6e, 0xea, 0x76, 0x96, 0xa2, 0xb4, 0x72, 0x52, 0x04, 0xbb, 0x58, + 0x59, 0x6d, 0x6d, 0x41, 0xb4, 0xa9, 0x12, 0xb7, 0x62, 0x6f, 0xc1, 0x81, 0x47, 0xe1, 0x21, 0x38, + 0x4e, 0x9c, 0xe0, 0x86, 0xda, 0x17, 0x41, 0x4d, 0x9a, 0x6e, 0x45, 0x93, 0x7a, 0xfc, 0xfd, 0xcd, + 0xe7, 0x2f, 0x1f, 0xd0, 0xbf, 0xcc, 0xc6, 0x22, 0x09, 0xed, 0x70, 0xc6, 0x23, 0x69, 0xcf, 0x9b, + 0xb6, 0x98, 0x47, 0x5c, 0x4c, 0x46, 0xc2, 0x9a, 0x26, 0xb1, 0x8c, 0x61, 0x23, 0xd7, 0xad, 0x4c, + 0xb7, 0xe6, 0xcd, 0xe3, 0xa3, 0x51, 0x9c, 0x8e, 0xe3, 0x94, 0x65, 0xb2, 0x9d, 0x83, 0xdc, 0xfb, + 0xf2, 0x4f, 0x19, 0x54, 0xf1, 0x3a, 0x0e, 0x5f, 0x80, 0xc7, 0x45, 0x15, 0x8b, 0xb8, 0xa6, 0x18, + 0x8a, 0x59, 0xa1, 0xa0, 0xa0, 0x08, 0x87, 0x08, 0x34, 0xd2, 0xd9, 0xe5, 0x67, 0x31, 0x92, 0x2c, + 0xe4, 0x3c, 0x11, 0x69, 0xaa, 0x95, 0x0d, 0xc5, 0x3c, 0x6c, 0x6b, 0xbf, 0x7e, 0xbc, 0x79, 0xba, + 0x2e, 0x46, 0xb9, 0xe2, 0xcb, 0x24, 0x9a, 0x5c, 0xd1, 0xfa, 0x3a, 0xb0, 0x66, 0xa1, 0x03, 0xd4, + 0x44, 0x4c, 0xe3, 0x44, 0x8a, 0x64, 0xd3, 0xb1, 0xb7, 0xa3, 0xa3, 0x51, 0x24, 0x8a, 0x92, 0x67, + 0xe0, 0x30, 0x1c, 0xc9, 0x28, 0x9e, 0xac, 0xc6, 0xac, 0xac, 0xd2, 0xb4, 0x9a, 0x13, 0x84, 0xc3, + 0x36, 0x78, 0xb2, 0x79, 0x85, 0xbc, 0x99, 0x0a, 0x6d, 0xdf, 0x50, 0xcc, 0xfa, 0xbb, 0x13, 0xeb, + 0xbf, 0xb5, 0x58, 0xc5, 0xbb, 0x83, 0x9b, 0xa9, 0xa0, 0x35, 0x71, 0x0f, 0xc1, 0x63, 0x50, 0x1d, + 0x0b, 0x19, 0xf2, 0x50, 0x86, 0xda, 0x81, 0xa1, 0x98, 0x35, 0xba, 0xc1, 0xf0, 0x14, 0x14, 0xf3, + 0x70, 0x76, 0x2d, 0xa2, 0xab, 0x6b, 0xa9, 0x3d, 0xca, 0x36, 0x55, 0x2f, 0xe8, 0xf3, 0x8c, 0x3d, + 0xfb, 0x5e, 0x06, 0xb5, 0xfb, 0xdf, 0x80, 0x27, 0xe0, 0x08, 0x7f, 0x20, 0x1d, 0xec, 0x39, 0x98, + 0x05, 0x9f, 0x06, 0x98, 0x0d, 0x3d, 0x7f, 0x80, 0x1d, 0xd2, 0x25, 0xb8, 0xa3, 0x96, 0xe0, 0x7b, + 0xd0, 0xda, 0x96, 0x91, 0x13, 0x90, 0xbe, 0xc7, 0xba, 0xc4, 0x43, 0x2e, 0xb9, 0x40, 0x19, 0xf0, + 0x49, 0xcf, 0x43, 0xc1, 0x90, 0x62, 0xd6, 0x45, 0xc4, 0x1d, 0x52, 0xac, 0x2a, 0xb0, 0x05, 0xec, + 0xdd, 0x41, 0xaf, 0x1f, 0x30, 0xe2, 0xb1, 0xa0, 0x3f, 0x60, 0xcd, 0xb7, 0x6a, 0x19, 0x1a, 0xe0, + 0xf9, 0x83, 0x21, 0xfc, 0x71, 0x40, 0x28, 0xee, 0xa8, 0x7b, 0xf0, 0x35, 0x38, 0xdd, 0x76, 0xf8, + 0x41, 0x9f, 0xa2, 0x1e, 0x66, 0xce, 0x39, 0x72, 0x5d, 0xec, 0xf5, 0xee, 0x66, 0xa8, 0x40, 0x13, + 0xbc, 0xda, 0x36, 0x3b, 0xc8, 0x77, 0x50, 0x07, 0x33, 0xc7, 0x25, 0xd8, 0x0b, 0x36, 0xce, 0xfd, + 0xf6, 0xd9, 0xcf, 0x85, 0xae, 0xdc, 0x2e, 0x74, 0xe5, 0xef, 0x42, 0x57, 0xbe, 0x2d, 0xf5, 0xd2, + 0xed, 0x52, 0x2f, 0xfd, 0x5e, 0xea, 0xa5, 0x0b, 0xf5, 0xeb, 0xdd, 0x4d, 0xaf, 0xfe, 0x5c, 0x7a, + 0x79, 0x90, 0x5d, 0x69, 0xeb, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x48, 0x43, 0x20, 0xf3, + 0x02, 0x00, 0x00, } func (m *Evidence) Marshal() (dAtA []byte, err error) { diff --git a/x/audit/v1/types/evidence_metadata.pb.go b/x/audit/v1/types/evidence_metadata.pb.go index f9b25de..3eb4938 100644 --- a/x/audit/v1/types/evidence_metadata.pb.go +++ b/x/audit/v1/types/evidence_metadata.pb.go @@ -272,11 +272,87 @@ func (m *StorageChallengeFailureEvidenceMetadata) GetTranscriptHash() string { return "" } +// CascadeClientFailureEvidenceMetadata is metadata for client-observed failures +type CascadeClientFailureEvidenceMetadata struct { + // flow is a short discriminator for the failed flow segment. + // Example values: UPLOAD, DOWNLOAD. + Flow string `protobuf:"bytes,1,opt,name=flow,proto3" json:"flow,omitempty"` + // reporter_component identifies the emitting component. + // Example values: sn-api-server, sdk-go, sdk-js. + ReporterComponent string `protobuf:"bytes,2,opt,name=reporter_component,json=reporterComponent,proto3" json:"reporter_component,omitempty"` + // target_supernode_account is the implicated supernode account, when known. + TargetSupernodeAccount string `protobuf:"bytes,3,opt,name=target_supernode_account,json=targetSupernodeAccount,proto3" json:"target_supernode_account,omitempty"` + // details is free-form diagnostic text (e.g. full error traces). + Details string `protobuf:"bytes,4,opt,name=details,proto3" json:"details,omitempty"` +} + +func (m *CascadeClientFailureEvidenceMetadata) Reset() { *m = CascadeClientFailureEvidenceMetadata{} } +func (m *CascadeClientFailureEvidenceMetadata) String() string { return proto.CompactTextString(m) } +func (*CascadeClientFailureEvidenceMetadata) ProtoMessage() {} +func (*CascadeClientFailureEvidenceMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_09b57e4c2349ab91, []int{4} +} +func (m *CascadeClientFailureEvidenceMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CascadeClientFailureEvidenceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CascadeClientFailureEvidenceMetadata.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 *CascadeClientFailureEvidenceMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_CascadeClientFailureEvidenceMetadata.Merge(m, src) +} +func (m *CascadeClientFailureEvidenceMetadata) XXX_Size() int { + return m.Size() +} +func (m *CascadeClientFailureEvidenceMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_CascadeClientFailureEvidenceMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_CascadeClientFailureEvidenceMetadata proto.InternalMessageInfo + +func (m *CascadeClientFailureEvidenceMetadata) GetFlow() string { + if m != nil { + return m.Flow + } + return "" +} + +func (m *CascadeClientFailureEvidenceMetadata) GetReporterComponent() string { + if m != nil { + return m.ReporterComponent + } + return "" +} + +func (m *CascadeClientFailureEvidenceMetadata) GetTargetSupernodeAccount() string { + if m != nil { + return m.TargetSupernodeAccount + } + return "" +} + +func (m *CascadeClientFailureEvidenceMetadata) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + func init() { proto.RegisterType((*ActionExpiredEvidenceMetadata)(nil), "lumera.audit.v1.ActionExpiredEvidenceMetadata") proto.RegisterType((*ActionFinalizationSignatureFailureEvidenceMetadata)(nil), "lumera.audit.v1.ActionFinalizationSignatureFailureEvidenceMetadata") proto.RegisterType((*ActionFinalizationNotInTop10EvidenceMetadata)(nil), "lumera.audit.v1.ActionFinalizationNotInTop10EvidenceMetadata") proto.RegisterType((*StorageChallengeFailureEvidenceMetadata)(nil), "lumera.audit.v1.StorageChallengeFailureEvidenceMetadata") + proto.RegisterType((*CascadeClientFailureEvidenceMetadata)(nil), "lumera.audit.v1.CascadeClientFailureEvidenceMetadata") } func init() { @@ -284,36 +360,41 @@ func init() { } var fileDescriptor_09b57e4c2349ab91 = []byte{ - // 455 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x93, 0xcd, 0x6e, 0x13, 0x31, - 0x14, 0x85, 0x63, 0x52, 0x1a, 0x6a, 0x10, 0x45, 0xd9, 0x74, 0x1a, 0xe8, 0x28, 0xed, 0x26, 0x11, - 0xa2, 0x49, 0x03, 0x4f, 0x90, 0xa0, 0x56, 0x44, 0x08, 0x16, 0x49, 0xc5, 0x02, 0x09, 0xac, 0x8b, - 0x7d, 0x9b, 0xb1, 0x98, 0xd8, 0x96, 0xed, 0x89, 0x3a, 0x6c, 0x78, 0x01, 0x84, 0x58, 0xf0, 0x28, - 0x7d, 0x08, 0x96, 0x55, 0x57, 0x2c, 0x51, 0xf2, 0x22, 0x68, 0x7e, 0xd2, 0xa8, 0x14, 0x16, 0x6c, - 0xba, 0x9b, 0x7b, 0xcf, 0x39, 0xdf, 0x1c, 0x5b, 0x32, 0x6d, 0xc5, 0xc9, 0x14, 0x2d, 0x74, 0x21, - 0x11, 0xd2, 0x77, 0x67, 0xbd, 0x2e, 0xce, 0xa4, 0x40, 0xc5, 0x91, 0x4d, 0xd1, 0x83, 0x00, 0x0f, - 0x1d, 0x63, 0xb5, 0xd7, 0xf5, 0xcd, 0xc2, 0xd8, 0xc9, 0x8d, 0x9d, 0x59, 0xaf, 0xb1, 0xcd, 0xb5, - 0x9b, 0x6a, 0xc7, 0x72, 0xb9, 0x5b, 0x0c, 0x85, 0x77, 0xef, 0x33, 0xdd, 0xe9, 0x73, 0x2f, 0xb5, - 0x3a, 0x3c, 0x35, 0xd2, 0xa2, 0x38, 0x2c, 0x99, 0xaf, 0x4a, 0x64, 0xfd, 0x3d, 0x6d, 0x78, 0x6d, - 0x58, 0xef, 0x80, 0xcd, 0x20, 0x96, 0x02, 0xbc, 0xb6, 0x0c, 0x84, 0xb0, 0xe8, 0x1c, 0xba, 0x80, - 0x34, 0xab, 0xed, 0x8d, 0xc1, 0xee, 0xc5, 0xd9, 0xfe, 0x4e, 0x89, 0x7d, 0xb3, 0x74, 0xf5, 0x0b, - 0xd3, 0xd8, 0x5b, 0xa9, 0x26, 0xa3, 0x2d, 0xaf, 0x4d, 0xef, 0xe0, 0x4f, 0x11, 0xdd, 0xde, 0x77, - 0x42, 0x9f, 0x16, 0x0d, 0x8e, 0xa4, 0x82, 0x58, 0x7e, 0x82, 0xec, 0x7b, 0x2c, 0x27, 0x0a, 0x7c, - 0x62, 0xf1, 0x08, 0x64, 0x9c, 0x58, 0xbc, 0xf1, 0x5a, 0x5f, 0x09, 0x7d, 0x72, 0xbd, 0xd6, 0x6b, - 0xed, 0x87, 0xea, 0x38, 0x8b, 0xdc, 0x78, 0xa1, 0x2f, 0x55, 0xda, 0x1a, 0x7b, 0x6d, 0x61, 0x82, - 0xcf, 0x23, 0x88, 0x63, 0x54, 0x93, 0x7f, 0x5e, 0xce, 0x36, 0xbd, 0x83, 0x46, 0xf3, 0x88, 0x49, - 0x11, 0x90, 0x26, 0x69, 0xaf, 0x8d, 0x6a, 0xf9, 0x3c, 0x14, 0xf5, 0x77, 0xf4, 0x11, 0x5f, 0xc6, - 0x2d, 0x73, 0x89, 0x41, 0xab, 0xb4, 0x40, 0x06, 0x9c, 0xeb, 0x44, 0xf9, 0xe0, 0x56, 0x93, 0xb4, - 0x37, 0x06, 0x0f, 0x2f, 0xce, 0xf6, 0xb7, 0xca, 0xa2, 0x7d, 0xce, 0xaf, 0x56, 0x6c, 0xac, 0x00, - 0xe3, 0x65, 0xbe, 0x5f, 0xc4, 0xaf, 0xe0, 0xc5, 0x5f, 0xf0, 0xd5, 0xff, 0xc1, 0x8b, 0x6b, 0xf8, - 0x5d, 0x7a, 0xef, 0x52, 0xcd, 0x0e, 0xb7, 0x96, 0xe1, 0x46, 0x77, 0x2f, 0x77, 0x43, 0x91, 0x9d, - 0xfd, 0x44, 0xc6, 0xc8, 0x3e, 0x62, 0x1a, 0xdc, 0xce, 0xe5, 0x5a, 0x36, 0xbf, 0xc4, 0x34, 0x4b, - 0x9f, 0x14, 0x37, 0xc6, 0x7c, 0x6a, 0x30, 0x58, 0x2f, 0xd2, 0xe5, 0xee, 0x38, 0x35, 0x58, 0x6f, - 0xd1, 0x4d, 0x6f, 0x41, 0x39, 0x6e, 0xa5, 0xf1, 0x2c, 0x02, 0x17, 0x05, 0xb5, 0xdc, 0x75, 0x7f, - 0xb5, 0x7e, 0x01, 0x2e, 0x1a, 0x3c, 0xfe, 0x31, 0x0f, 0xc9, 0xf9, 0x3c, 0x24, 0xbf, 0xe6, 0x21, - 0xf9, 0xb6, 0x08, 0x2b, 0xe7, 0x8b, 0xb0, 0xf2, 0x73, 0x11, 0x56, 0xde, 0x3e, 0x38, 0x5d, 0xbd, - 0xd0, 0xec, 0x37, 0xee, 0xc3, 0x7a, 0xfe, 0xd4, 0x9e, 0xfd, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xb3, - 0x76, 0x69, 0x56, 0xc1, 0x03, 0x00, 0x00, + // 529 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xcd, 0x6e, 0x52, 0x41, + 0x14, 0xe6, 0x0a, 0x16, 0x19, 0x8d, 0xd5, 0xbb, 0xb0, 0xb7, 0x68, 0x6f, 0x28, 0x31, 0x81, 0x18, + 0x81, 0xa2, 0x4f, 0x00, 0xa4, 0x8d, 0xc4, 0xe8, 0x02, 0xaa, 0x0b, 0x13, 0x9d, 0x8c, 0x33, 0x07, + 0x98, 0x78, 0x99, 0x99, 0xcc, 0xcc, 0xc5, 0xe2, 0xc6, 0x17, 0x30, 0xc6, 0x85, 0x8f, 0xd2, 0x87, + 0x70, 0xd9, 0x74, 0x65, 0x5c, 0x19, 0x78, 0x11, 0x73, 0xff, 0x4a, 0x2a, 0x76, 0x61, 0x17, 0xdd, + 0xcd, 0x39, 0xdf, 0x4f, 0xbe, 0xf9, 0x26, 0x19, 0x54, 0x0b, 0xc2, 0x29, 0x68, 0xd2, 0x22, 0x21, + 0xe3, 0xb6, 0x35, 0x6b, 0xb7, 0x60, 0xc6, 0x19, 0x08, 0x0a, 0x78, 0x0a, 0x96, 0x30, 0x62, 0x49, + 0x53, 0x69, 0x69, 0xa5, 0xbb, 0x99, 0x10, 0x9b, 0x31, 0xb1, 0x39, 0x6b, 0x97, 0xb7, 0xa9, 0x34, + 0x53, 0x69, 0x70, 0x0c, 0xb7, 0x92, 0x21, 0xe1, 0x56, 0x3f, 0xa3, 0x9d, 0x0e, 0xb5, 0x5c, 0x8a, + 0xfd, 0x23, 0xc5, 0x35, 0xb0, 0xfd, 0xd4, 0xf3, 0x45, 0x6a, 0xe9, 0xbe, 0x43, 0x65, 0x2b, 0x15, + 0x6e, 0xef, 0xe1, 0x19, 0x09, 0x38, 0x23, 0x56, 0x6a, 0x4c, 0x18, 0xd3, 0x60, 0x0c, 0x18, 0xcf, + 0xa9, 0xe4, 0xeb, 0xa5, 0xee, 0xee, 0xe9, 0x71, 0x63, 0x27, 0xb5, 0x7d, 0x9d, 0xb1, 0x3a, 0x09, + 0x69, 0x68, 0x35, 0x17, 0xe3, 0xc1, 0x96, 0x95, 0xaa, 0xbd, 0xf7, 0x37, 0x08, 0xa6, 0xfa, 0xdd, + 0x41, 0x4f, 0x92, 0x04, 0x07, 0x5c, 0x90, 0x80, 0x7f, 0x22, 0xd1, 0x79, 0xc8, 0xc7, 0x82, 0xd8, + 0x50, 0xc3, 0x01, 0xe1, 0x41, 0xa8, 0xe1, 0xca, 0x63, 0x7d, 0x75, 0xd0, 0xe3, 0xf5, 0x58, 0x2f, + 0xa5, 0xed, 0x8b, 0xc3, 0x48, 0x72, 0xe5, 0x81, 0xbe, 0xe4, 0x51, 0x6d, 0x68, 0xa5, 0x26, 0x63, + 0xe8, 0x4d, 0x48, 0x10, 0x80, 0x18, 0x5f, 0x58, 0xce, 0x36, 0xba, 0x01, 0x4a, 0xd2, 0x09, 0xe6, + 0xcc, 0x73, 0x2a, 0x4e, 0xbd, 0x30, 0x28, 0xc6, 0x73, 0x9f, 0xb9, 0x6f, 0xd1, 0x03, 0x9a, 0xc9, + 0x35, 0x36, 0xa1, 0x02, 0x2d, 0x24, 0x03, 0x4c, 0x28, 0x95, 0xa1, 0xb0, 0xde, 0xb5, 0x8a, 0x53, + 0x2f, 0x75, 0xef, 0x9f, 0x1e, 0x37, 0xb6, 0xd2, 0xa0, 0x1d, 0x4a, 0xcf, 0x47, 0x2c, 0xaf, 0x0c, + 0x86, 0x99, 0xbe, 0x93, 0xc8, 0xcf, 0xd9, 0xb3, 0x7f, 0xd8, 0xe7, 0xff, 0xc7, 0x9e, 0xad, 0xd9, + 0xef, 0xa2, 0x5b, 0x67, 0x68, 0x74, 0xb9, 0x42, 0x64, 0x37, 0xb8, 0x79, 0xb6, 0xeb, 0xb3, 0xe8, + 0xee, 0x23, 0x1e, 0x00, 0xfe, 0x00, 0x73, 0xef, 0x7a, 0x0c, 0x17, 0xa3, 0xf9, 0x39, 0xcc, 0x23, + 0xf5, 0x28, 0x69, 0x0c, 0xdb, 0xb9, 0x02, 0x6f, 0x23, 0x51, 0xa7, 0xbb, 0xc3, 0xb9, 0x02, 0xb7, + 0x86, 0x36, 0xad, 0x26, 0xc2, 0x50, 0xcd, 0x95, 0xc5, 0x13, 0x62, 0x26, 0x5e, 0x31, 0x66, 0xdd, + 0x5e, 0xad, 0x9f, 0x11, 0x33, 0xa9, 0xfe, 0x72, 0xd0, 0xc3, 0x1e, 0x31, 0x94, 0x30, 0xe8, 0x05, + 0x1c, 0x84, 0xbd, 0xe8, 0x2d, 0x5c, 0x54, 0x18, 0x05, 0xf2, 0x63, 0xfc, 0x0e, 0xa5, 0x41, 0x7c, + 0x76, 0x1b, 0xc8, 0xd5, 0xa0, 0xa4, 0xb6, 0xa0, 0x31, 0x95, 0x53, 0x25, 0x05, 0x64, 0xd5, 0x0f, + 0xee, 0x66, 0x48, 0x2f, 0x03, 0xdc, 0x57, 0xc8, 0xb3, 0x44, 0x8f, 0xc1, 0x5e, 0xae, 0xd0, 0x7b, + 0x89, 0x78, 0xad, 0x4c, 0x0f, 0x15, 0x19, 0x58, 0xc2, 0x03, 0x93, 0xf6, 0x98, 0x8d, 0xdd, 0x47, + 0x3f, 0x16, 0xbe, 0x73, 0xb2, 0xf0, 0x9d, 0xdf, 0x0b, 0xdf, 0xf9, 0xb6, 0xf4, 0x73, 0x27, 0x4b, + 0x3f, 0xf7, 0x73, 0xe9, 0xe7, 0xde, 0xdc, 0x39, 0x5a, 0x7d, 0x3f, 0x51, 0x87, 0xe6, 0xfd, 0x46, + 0xfc, 0x8f, 0x3c, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xed, 0x26, 0x22, 0x9e, 0x04, 0x00, + 0x00, } func (m *ActionExpiredEvidenceMetadata) Marshal() (dAtA []byte, err error) { @@ -482,6 +563,57 @@ func (m *StorageChallengeFailureEvidenceMetadata) MarshalToSizedBuffer(dAtA []by return len(dAtA) - i, nil } +func (m *CascadeClientFailureEvidenceMetadata) 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 *CascadeClientFailureEvidenceMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CascadeClientFailureEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Details) > 0 { + i -= len(m.Details) + copy(dAtA[i:], m.Details) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Details))) + i-- + dAtA[i] = 0x22 + } + if len(m.TargetSupernodeAccount) > 0 { + i -= len(m.TargetSupernodeAccount) + copy(dAtA[i:], m.TargetSupernodeAccount) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.TargetSupernodeAccount))) + i-- + dAtA[i] = 0x1a + } + if len(m.ReporterComponent) > 0 { + i -= len(m.ReporterComponent) + copy(dAtA[i:], m.ReporterComponent) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ReporterComponent))) + i-- + dAtA[i] = 0x12 + } + if len(m.Flow) > 0 { + i -= len(m.Flow) + copy(dAtA[i:], m.Flow) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Flow))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintEvidenceMetadata(dAtA []byte, offset int, v uint64) int { offset -= sovEvidenceMetadata(v) base := offset @@ -574,6 +706,31 @@ func (m *StorageChallengeFailureEvidenceMetadata) Size() (n int) { return n } +func (m *CascadeClientFailureEvidenceMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Flow) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.ReporterComponent) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.TargetSupernodeAccount) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + l = len(m.Details) + if l > 0 { + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } + return n +} + func sovEvidenceMetadata(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -1087,6 +1244,184 @@ func (m *StorageChallengeFailureEvidenceMetadata) Unmarshal(dAtA []byte) error { } return nil } +func (m *CascadeClientFailureEvidenceMetadata) 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 ErrIntOverflowEvidenceMetadata + } + 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: CascadeClientFailureEvidenceMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CascadeClientFailureEvidenceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Flow", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Flow = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReporterComponent", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ReporterComponent = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetSupernodeAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetSupernodeAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + 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 ErrInvalidLengthEvidenceMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Details = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvidenceMetadata(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipEvidenceMetadata(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From 98e932af540a5580fdfb31541dad07d2ccedad8b Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 11 Feb 2026 15:39:02 +0500 Subject: [PATCH 17/18] fix audit tests --- docs/static/openapi.yml | 2 +- .../audit_host_requirements_bypass_test.go | 37 +++--- ...udit_host_requirements_enforcement_test.go | 31 ++--- ...audit_postponed_reporter_self_only_test.go | 50 ++------ .../audit_recovery_enforcement_test.go | 113 ++++++++++-------- x/action/v1/keeper/abci_test.go | 2 + x/action/v1/keeper/expiration_test.go | 49 ++++++-- 7 files changed, 144 insertions(+), 140 deletions(-) diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index 6d45f50..aeb1215 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1 +1 @@ -{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}":{"get":{"tags":["Query"],"summary":"AssignedTargets returns the prober -\u003e targets assignment for a given supernode_account.\nIf filter_by_epoch_id is false, it returns the assignments for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_AssignedTargets","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAssignedTargetsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch":{"get":{"tags":["Query"],"summary":"CurrentEpoch returns the current derived epoch boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpoch","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch_anchor":{"get":{"tags":["Query"],"summary":"CurrentEpochAnchor returns the persisted epoch anchor for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpochAnchor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_anchor/{epoch_id}":{"get":{"tags":["Query"],"summary":"EpochAnchor returns the persisted epoch anchor for the given epoch_id.","operationId":"GithubComLumeraProtocollumeraQuery_EpochAnchor","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_report/{epoch_id}/{supernode_account}":{"get":{"tags":["Query"],"summary":"EpochReport returns the submitted epoch report for (epoch_id, supernode_account).","operationId":"GithubComLumeraProtocollumeraQuery_EpochReport","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"summary":"EpochReportsByReporter returns epoch reports submitted by the given reporter across epochs.","operationId":"GithubComLumeraProtocollumeraQuery_EpochReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_action/{action_id}":{"get":{"tags":["Query"],"summary":"EvidenceByAction queries evidence records by action id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceByAction","parameters":[{"type":"string","name":"action_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_subject/{subject_address}":{"get":{"tags":["Query"],"summary":"EvidenceBySubject queries evidence records by subject address.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceBySubject","parameters":[{"type":"string","name":"subject_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceBySubjectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/{evidence_id}":{"get":{"tags":["Query"],"summary":"EvidenceById queries a single evidence record by id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceById","parameters":[{"type":"string","format":"uint64","name":"evidence_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByIdResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/host_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"HostReports returns host reports submitted by the given supernode_account across epochs.","operationId":"GithubComLumeraProtocollumeraQuery_HostReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryHostReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin14","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/storage_challenge_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"StorageChallengeReports returns all reports that include storage-challenge observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_StorageChallengeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryStorageChallengeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin19","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin24","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin32","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the x/auth module\nparameters. The authority defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","operationId":"UpgradeMsg_Exec","parameters":[{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Grant":{"post":{"tags":["Msg"],"summary":"Grant grants the provided authorization to the grantee on the granter's\naccount with the provided expiration time. If there is already a grant\nfor the given (granter, grantee, Authorization) triple, then the grant\nwill be overwritten.","operationId":"UpgradeMsg_Grant","parameters":[{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Revoke":{"post":{"tags":["Msg"],"summary":"Revoke revokes any authorization corresponding to the provided method name on the\ngranter's account that has been granted to the grantee.","operationId":"UpgradeMsg_Revoke","parameters":[{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.autocli.v1.Query/AppOptions":{"post":{"tags":["Query"],"summary":"AppOptions returns the autocli options for all of the modules in an app.","operationId":"UpgradeQuery_AppOptions","parameters":[{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/MultiSend":{"post":{"tags":["Msg"],"summary":"MultiSend defines a method for sending coins from some accounts to other accounts.","operationId":"UpgradeMsg_MultiSend","parameters":[{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method for sending coins from one account to another account.","operationId":"UpgradeMsg_Send","parameters":[{"description":"MsgSend represents a message to send coins from one account to another.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/SetSendEnabled":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"SetSendEnabled is a governance operation for setting the SendEnabled flag\non any number of Denoms. Only the entries to add or update should be\nincluded. Entries that already exist in the store, but that aren't\nincluded in this message, will be left unchanged.","operationId":"UpgradeMsg_SetSendEnabled","parameters":[{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabled"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin53","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/AuthorizeCircuitBreaker":{"post":{"tags":["Msg"],"summary":"AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another\naccount's circuit breaker permissions.","operationId":"UpgradeMsg_AuthorizeCircuitBreaker","parameters":[{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/ResetCircuitBreaker":{"post":{"tags":["Msg"],"summary":"ResetCircuitBreaker resumes processing of Msg's in the state machine that\nhave been been paused using TripCircuitBreaker.","operationId":"UpgradeMsg_ResetCircuitBreaker","parameters":[{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/TripCircuitBreaker":{"post":{"tags":["Msg"],"summary":"TripCircuitBreaker pauses processing of Msg's in the state machine.","operationId":"UpgradeMsg_TripCircuitBreaker","parameters":[{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.consensus.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin66","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin68","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/VerifyInvariant":{"post":{"tags":["Msg"],"summary":"VerifyInvariant defines a method to verify a particular invariant.","operationId":"UpgradeMsg_VerifyInvariant","parameters":[{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/distribution module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"UpgradeMsg_CommunityPoolSpend","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/DepositValidatorRewardsPool":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"UpgradeMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"UpgradeMsg_FundCommunityPool","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress":{"post":{"tags":["Msg"],"summary":"SetWithdrawAddress defines a method to change the withdraw address\nfor a delegator (or validator self-delegation).","operationId":"UpgradeMsg_SetWithdrawAddress","parameters":[{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin79","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward":{"post":{"tags":["Msg"],"summary":"WithdrawDelegatorReward defines a method to withdraw rewards of delegator\nfrom a single validator.","operationId":"UpgradeMsg_WithdrawDelegatorReward","parameters":[{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission":{"post":{"tags":["Msg"],"summary":"WithdrawValidatorCommission defines a method to withdraw the\nfull commission to the validator address.","operationId":"UpgradeMsg_WithdrawValidatorCommission","parameters":[{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evidence.v1beta1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or\ncounterfactual signing.","operationId":"UpgradeMsg_SubmitEvidence","parameters":[{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/GrantAllowance":{"post":{"tags":["Msg"],"summary":"GrantAllowance grants fee allowance to the grantee on the granter's\naccount with the provided expiration time.","operationId":"UpgradeMsg_GrantAllowance","parameters":[{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/PruneAllowances":{"post":{"description":"Since cosmos-sdk 0.50","tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"UpgradeMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowances"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/RevokeAllowance":{"post":{"tags":["Msg"],"summary":"RevokeAllowance revokes any fee allowance of granter's account that\nhas been granted to the grantee.","operationId":"UpgradeMsg_RevokeAllowance","parameters":[{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/CancelProposal":{"post":{"description":"Since: cosmos-sdk 0.50","tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"UpgradeMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"UpgradeMsg_Deposit","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/ExecLegacyContent":{"post":{"tags":["Msg"],"summary":"ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal\nto execute a legacy content-based proposal.","operationId":"UpgradeMsg_ExecLegacyContent","parameters":[{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContent"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given the messages.","operationId":"UpgradeMsg_SubmitProposal","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"UpgradeMsg_UpdateParamsMixin92","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"UpgradeMsg_Vote","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"UpgradeMsg_VoteWeighted","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"UpgradeMsg_DepositMixin96","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given a content.","operationId":"UpgradeMsg_SubmitProposalMixin96","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"UpgradeMsg_VoteMixin96","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/VoteWeighted":{"post":{"description":"Since: cosmos-sdk 0.43","tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"UpgradeMsg_VoteWeightedMixin96","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroup":{"post":{"tags":["Msg"],"summary":"CreateGroup creates a new group with an admin account address, a list of members and some optional metadata.","operationId":"UpgradeMsg_CreateGroup","parameters":[{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupPolicy creates a new group policy using given DecisionPolicy.","operationId":"UpgradeMsg_CreateGroupPolicy","parameters":[{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupWithPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupWithPolicy creates a new group with policy.","operationId":"UpgradeMsg_CreateGroupWithPolicy","parameters":[{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec executes a proposal.","operationId":"UpgradeMsg_ExecMixin100","parameters":[{"description":"MsgExec is the Msg/Exec request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/LeaveGroup":{"post":{"tags":["Msg"],"summary":"LeaveGroup allows a group member to leave the group.","operationId":"UpgradeMsg_LeaveGroup","parameters":[{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal submits a new proposal.","operationId":"UpgradeMsg_SubmitProposalMixin100","parameters":[{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupAdmin updates the group admin with given group id and previous admin address.","operationId":"UpgradeMsg_UpdateGroupAdmin","parameters":[{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMembers":{"post":{"tags":["Msg"],"summary":"UpdateGroupMembers updates the group members with given group id and admin address.","operationId":"UpgradeMsg_UpdateGroupMembers","parameters":[{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembers"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupMetadata updates the group metadata with given group id and admin address.","operationId":"UpgradeMsg_UpdateGroupMetadata","parameters":[{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyAdmin updates a group policy admin.","operationId":"UpgradeMsg_UpdateGroupPolicyAdmin","parameters":[{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyDecisionPolicy":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated.","operationId":"UpgradeMsg_UpdateGroupPolicyDecisionPolicy","parameters":[{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyMetadata updates a group policy metadata.","operationId":"UpgradeMsg_UpdateGroupPolicyMetadata","parameters":[{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote allows a voter to vote on a proposal.","operationId":"UpgradeMsg_VoteMixin100","parameters":[{"description":"MsgVote is the Msg/Vote request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/WithdrawProposal":{"post":{"tags":["Msg"],"summary":"WithdrawProposal withdraws a proposal.","operationId":"UpgradeMsg_WithdrawProposal","parameters":[{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.mint.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/mint module\nparameters. The authority is defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParamsMixin105","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.nft.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method to send a nft from one account to another account.","operationId":"UpgradeMsg_SendMixin111","parameters":[{"description":"MsgSend represents a message to send a nft from one account to another account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/Unjail":{"post":{"tags":["Msg"],"summary":"Unjail defines a method for unjailing a jailed validator, thus returning\nthem into the bonded validator set, so they can begin receiving provisions\nand rewards again.","operationId":"UpgradeMsg_Unjail","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjail"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjailResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/UpdateParams":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/slashing module\nparameters. The authority defaults to the x/gov module account.","operationId":"UpgradeMsg_UpdateParamsMixin118","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/BeginRedelegate":{"post":{"tags":["Msg"],"summary":"BeginRedelegate defines a method for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","operationId":"UpgradeMsg_BeginRedelegate","parameters":[{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"UpgradeMsg_CancelUnbondingDelegation","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegation"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CreateValidator":{"post":{"tags":["Msg"],"summary":"CreateValidator defines a method for creating a new validator.","operationId":"UpgradeMsg_CreateValidator","parameters":[{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Delegate":{"post":{"tags":["Msg"],"summary":"Delegate defines a method for performing a delegation of coins\nfrom a delegator to a validator.","operationId":"UpgradeMsg_Delegate","parameters":[{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/EditValidator":{"post":{"tags":["Msg"],"summary":"EditValidator defines a method for editing an existing validator.","operationId":"UpgradeMsg_EditValidator","parameters":[{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Undelegate":{"post":{"tags":["Msg"],"summary":"Undelegate defines a method for performing an undelegation from a\ndelegate and a validator.","operationId":"UpgradeMsg_Undelegate","parameters":[{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines an operation for updating the x/staking module\nparameters.\nSince: cosmos-sdk 0.47","operationId":"UpgradeMsg_UpdateParamsMixin123","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenCommit":{"post":{"tags":["ABCIListenerService"],"summary":"ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit","operationId":"UpgradeABCIListenerService_ListenCommit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenFinalizeBlock":{"post":{"tags":["ABCIListenerService"],"summary":"ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock","operationId":"UpgradeABCIListenerService_ListenFinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/CancelUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"UpgradeMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"UpgradeMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"UpgradeMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount":{"post":{"description":"Since: cosmos-sdk 0.46","tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"UpgradeMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreateVestingAccount":{"post":{"tags":["Msg"],"summary":"CreateVestingAccount defines a method that enables creating a vesting\naccount.","operationId":"UpgradeMsg_CreateVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/account_info/{address}":{"get":{"description":"Since: cosmos-sdk 0.47","tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"UpgradeQuery_AccountInfo","parameters":[{"type":"string","description":"address is the account address string.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.43","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"UpgradeQuery_Accounts","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account details based on address.","operationId":"UpgradeQuery_Account","parameters":[{"type":"string","description":"address defines the address to query for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/address_by_id/{id}":{"get":{"description":"Since: cosmos-sdk 0.46.2","tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"UpgradeQuery_AccountAddressByID","parameters":[{"type":"string","format":"int64","description":"Deprecated, use account_id instead\n\nid is the account number of the address to be queried. This field\nshould have been an uint64 (like all account numbers), and will be\nupdated to uint64 in a future version of the auth query.","name":"id","in":"path","required":true},{"type":"string","format":"uint64","description":"account_id is the account number of the address to be queried.\n\nSince: cosmos-sdk 0.47","name":"account_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountAddressByIDResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"UpgradeQuery_Bech32Prefix","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.Bech32PrefixResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_bytes}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"UpgradeQuery_AddressBytesToString","parameters":[{"type":"string","format":"byte","name":"address_bytes","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressBytesToStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_string}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"UpgradeQuery_AddressStringToBytes","parameters":[{"type":"string","name":"address_string","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressStringToBytesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"UpgradeQuery_ModuleAccounts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts/{name}":{"get":{"tags":["Query"],"summary":"ModuleAccountByName returns the module account info by module name","operationId":"UpgradeQuery_ModuleAccountByName","parameters":[{"type":"string","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountByNameResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters.","operationId":"UpgradeQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants":{"get":{"tags":["Query"],"summary":"Returns list of `Authorization`, granted to the grantee by the granter.","operationId":"UpgradeQuery_Grants","parameters":[{"type":"string","name":"granter","in":"query"},{"type":"string","name":"grantee","in":"query"},{"type":"string","description":"Optional, msg_type_url, when set, will query only grants matching given msg type.","name":"msg_type_url","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/grantee/{grantee}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"UpgradeQuery_GranteeGrants","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranteeGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/granter/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"UpgradeQuery_GranterGrants","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranterGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"AllBalances queries the balance of all coins for a single account.","operationId":"UpgradeQuery_AllBalances","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"boolean","description":"resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.\n\nSince: cosmos-sdk 0.50","name":"resolve_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryAllBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}/by_denom":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a single coin for a single account.","operationId":"UpgradeQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners/{denom}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"UpgradeQuery_DenomOwners","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners_by_query":{"get":{"description":"Since: cosmos-sdk 0.50.3","tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"UpgradeQuery_DenomOwnersByQuery","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata":{"get":{"tags":["Query"],"summary":"DenomsMetadata queries the client metadata for all registered coin\ndenominations.","operationId":"UpgradeQuery_DenomsMetadata","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomsMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata/{denom}":{"get":{"tags":["Query"],"summary":"DenomMetadata queries the client metadata of a given coin denomination.","operationId":"UpgradeQuery_DenomMetadata","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata_by_query_string":{"get":{"tags":["Query"],"summary":"DenomMetadataByQueryString queries the client metadata of a given coin denomination.","operationId":"UpgradeQuery_DenomMetadataByQueryString","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/bank module.","operationId":"UpgradeQuery_ParamsMixin52","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/send_enabled":{"get":{"description":"This query only returns denominations that have specific SendEnabled settings.\nAny denomination that does not have a specific setting will use the default\nparams.default_send_enabled, and will not be returned by this query.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"UpgradeQuery_SendEnabled","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"denoms is the specific denoms you want look up. Leave empty to get all entries.","name":"denoms","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.46","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"UpgradeQuery_SpendableBalances","parameters":[{"type":"string","description":"address is the address to query spendable balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.\n\nSince: cosmos-sdk 0.47","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"UpgradeQuery_SpendableBalanceByDenom","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"TotalSupply queries the total supply of all coins.","operationId":"UpgradeQuery_TotalSupply","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryTotalSupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SupplyOf queries the supply of a single coin.","operationId":"UpgradeQuery_SupplyOf","parameters":[{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySupplyOfResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/config":{"get":{"tags":["Service"],"summary":"Config queries for the operator configuration.","operationId":"UpgradeService_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.ConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/status":{"get":{"tags":["Service"],"summary":"Status queries for the node status.","operationId":"UpgradeService_Status","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.StatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/authn":{"get":{"tags":["ReflectionService"],"summary":"GetAuthnDescriptor returns information on how to authenticate transactions in the application\nNOTE: this RPC is still experimental and might be subject to breaking changes or removal in\nfuture releases of the cosmos-sdk.","operationId":"UpgradeReflectionService_GetAuthnDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/chain":{"get":{"tags":["ReflectionService"],"summary":"GetChainDescriptor returns the description of the chain","operationId":"UpgradeReflectionService_GetChainDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/codec":{"get":{"tags":["ReflectionService"],"summary":"GetCodecDescriptor returns the descriptor of the codec of the application","operationId":"UpgradeReflectionService_GetCodecDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/configuration":{"get":{"tags":["ReflectionService"],"summary":"GetConfigurationDescriptor returns the descriptor for the sdk.Config of the application","operationId":"UpgradeReflectionService_GetConfigurationDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/query_services":{"get":{"tags":["ReflectionService"],"summary":"GetQueryServicesDescriptor returns the available gRPC queryable services of the application","operationId":"UpgradeReflectionService_GetQueryServicesDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/tx_descriptor":{"get":{"tags":["ReflectionService"],"summary":"GetTxDescriptor returns information on the used transaction object and available msgs that can be used","operationId":"UpgradeReflectionService_GetTxDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces":{"get":{"tags":["ReflectionService"],"summary":"ListAllInterfaces lists all the interfaces registered in the interface\nregistry.","operationId":"UpgradeReflectionService_ListAllInterfaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListAllInterfacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces/{interface_name}/implementations":{"get":{"tags":["ReflectionService"],"summary":"ListImplementations list all the concrete types that implement a given\ninterface.","operationId":"UpgradeReflectionService_ListImplementations","parameters":[{"type":"string","description":"interface_name defines the interface to query the implementations for.","name":"interface_name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListImplementationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/abci_query":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Service"],"summary":"ABCIQuery defines a query handler that supports ABCI queries directly to the\napplication, bypassing Tendermint completely. The ABCI query must contain\na valid and supported path, including app, custom, p2p, and store.","operationId":"UpgradeService_ABCIQuery","parameters":[{"type":"string","format":"byte","name":"data","in":"query"},{"type":"string","name":"path","in":"query"},{"type":"string","format":"int64","name":"height","in":"query"},{"type":"boolean","name":"prove","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ABCIQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/latest":{"get":{"tags":["Service"],"summary":"GetLatestBlock returns the latest block.","operationId":"UpgradeService_GetLatestBlock","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/{height}":{"get":{"tags":["Service"],"summary":"GetBlockByHeight queries block for given height.","operationId":"UpgradeService_GetBlockByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/node_info":{"get":{"tags":["Service"],"summary":"GetNodeInfo queries the current node info.","operationId":"UpgradeService_GetNodeInfo","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetNodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/syncing":{"get":{"tags":["Service"],"summary":"GetSyncing queries node syncing.","operationId":"UpgradeService_GetSyncing","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetSyncingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/latest":{"get":{"tags":["Service"],"summary":"GetLatestValidatorSet queries latest validator-set.","operationId":"UpgradeService_GetLatestValidatorSet","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/{height}":{"get":{"tags":["Service"],"summary":"GetValidatorSetByHeight queries validator-set at a given height.","operationId":"UpgradeService_GetValidatorSetByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"UpgradeQuery_AccountsMixin62","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"UpgradeQuery_AccountMixin62","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/disable_list":{"get":{"tags":["Query"],"summary":"DisabledList returns a list of disabled message urls","operationId":"UpgradeQuery_DisabledList","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.DisabledListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/consensus/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/consensus module.","operationId":"UpgradeQuery_ParamsMixin65","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"UpgradeQuery_CommunityPool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards":{"get":{"tags":["Query"],"summary":"DelegationTotalRewards queries the total rewards accrued by each\nvalidator.","operationId":"UpgradeQuery_DelegationTotalRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}":{"get":{"tags":["Query"],"summary":"DelegationRewards queries the total rewards accrued by a delegation.","operationId":"UpgradeQuery_DelegationRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true},{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators":{"get":{"tags":["Query"],"summary":"DelegatorValidators queries the validators of a delegator.","operationId":"UpgradeQuery_DelegatorValidators","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address":{"get":{"tags":["Query"],"summary":"DelegatorWithdrawAddress queries withdraw address of a delegator.","operationId":"UpgradeQuery_DelegatorWithdrawAddress","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries params of the distribution module.","operationId":"UpgradeQuery_ParamsMixin78","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}":{"get":{"tags":["Query"],"summary":"ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator","operationId":"UpgradeQuery_ValidatorDistributionInfo","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/commission":{"get":{"tags":["Query"],"summary":"ValidatorCommission queries accumulated commission for a validator.","operationId":"UpgradeQuery_ValidatorCommission","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards":{"get":{"tags":["Query"],"summary":"ValidatorOutstandingRewards queries rewards of a validator address.","operationId":"UpgradeQuery_ValidatorOutstandingRewards","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes":{"get":{"tags":["Query"],"summary":"ValidatorSlashes queries slash events of a validator.","operationId":"UpgradeQuery_ValidatorSlashes","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true},{"type":"string","format":"uint64","description":"starting_height defines the optional starting height to query the slashes.","name":"starting_height","in":"query"},{"type":"string","format":"uint64","description":"starting_height defines the optional ending height to query the slashes.","name":"ending_height","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorSlashesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence":{"get":{"tags":["Query"],"summary":"AllEvidence queries all evidence.","operationId":"UpgradeQuery_AllEvidence","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryAllEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence/{hash}":{"get":{"tags":["Query"],"summary":"Evidence queries evidence based on evidence hash.","operationId":"UpgradeQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.\n\nSince: cosmos-sdk 0.47","name":"hash","in":"path","required":true},{"type":"string","format":"byte","description":"evidence_hash defines the hash of the requested evidence.\nDeprecated: Use hash, a HEX encoded string, instead.","name":"evidence_hash","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}":{"get":{"tags":["Query"],"summary":"Allowance returns granted allwance to the grantee by the granter.","operationId":"UpgradeQuery_Allowance","parameters":[{"type":"string","description":"granter is the address of the user granting an allowance of their funds.","name":"granter","in":"path","required":true},{"type":"string","description":"grantee is the address of the user being granted an allowance of another user's funds.","name":"grantee","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowances/{grantee}":{"get":{"tags":["Query"],"summary":"Allowances returns all the grants for the given grantee address.","operationId":"UpgradeQuery_Allowances","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/issued/{granter}":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"UpgradeQuery_AllowancesByGranter","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/constitution":{"get":{"tags":["Query"],"summary":"Constitution queries the chain's constitution.","operationId":"UpgradeQuery_Constitution","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryConstitutionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"UpgradeQuery_ParamsMixin91","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"UpgradeQuery_Proposals","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"UpgradeQuery_Proposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"UpgradeQuery_Deposits","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositAddr.","operationId":"UpgradeQuery_Deposit","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"UpgradeQuery_TallyResult","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"UpgradeQuery_Votes","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"UpgradeQuery_Vote","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"UpgradeQuery_ParamsMixin95","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"UpgradeQuery_ProposalsMixin95","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"UpgradeQuery_ProposalMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"UpgradeQuery_DepositsMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositor address.","operationId":"UpgradeQuery_DepositMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"UpgradeQuery_TallyResultMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"UpgradeQuery_VotesMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"UpgradeQuery_VoteMixin95","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_info/{group_id}":{"get":{"tags":["Query"],"summary":"GroupInfo queries group info based on group id.","operationId":"UpgradeQuery_GroupInfo","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_members/{group_id}":{"get":{"tags":["Query"],"summary":"GroupMembers queries members of a group by group id.","operationId":"UpgradeQuery_GroupMembers","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByAdmin queries group policies by admin address.","operationId":"UpgradeQuery_GroupPoliciesByAdmin","parameters":[{"type":"string","description":"admin is the admin address of the group policy.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_group/{group_id}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByGroup queries group policies by group id.","operationId":"UpgradeQuery_GroupPoliciesByGroup","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group policy's group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policy_info/{address}":{"get":{"tags":["Query"],"summary":"GroupPolicyInfo queries group policy info based on account address of group policy.","operationId":"UpgradeQuery_GroupPolicyInfo","parameters":[{"type":"string","description":"address is the account address of the group policy.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPolicyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups":{"get":{"description":"Since: cosmos-sdk 0.47.1","tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"UpgradeQuery_Groups","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupsByAdmin queries groups by admin address.","operationId":"UpgradeQuery_GroupsByAdmin","parameters":[{"type":"string","description":"admin is the account address of a group's admin.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_member/{address}":{"get":{"tags":["Query"],"summary":"GroupsByMember queries groups by member address.","operationId":"UpgradeQuery_GroupsByMember","parameters":[{"type":"string","description":"address is the group member address.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByMemberResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries a proposal based on proposal id.","operationId":"UpgradeQuery_ProposalMixin99","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult returns the tally result of a proposal. If the proposal is\nstill in voting period, then this query computes the current tally state,\nwhich might not be final. On the other hand, if the proposal is final,\nthen it simply returns the `final_tally_result` state stored in the\nproposal itself.","operationId":"UpgradeQuery_TallyResultMixin99","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique id of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals_by_group_policy/{address}":{"get":{"tags":["Query"],"summary":"ProposalsByGroupPolicy queries proposals based on account address of group policy.","operationId":"UpgradeQuery_ProposalsByGroupPolicy","parameters":[{"type":"string","description":"address is the account address of the group policy related to proposals.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalsByGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}":{"get":{"tags":["Query"],"summary":"VoteByProposalVoter queries a vote by proposal id and voter.","operationId":"UpgradeQuery_VoteByProposalVoter","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVoteByProposalVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"VotesByProposal queries a vote by proposal id.","operationId":"UpgradeQuery_VotesByProposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_voter/{voter}":{"get":{"tags":["Query"],"summary":"VotesByVoter queries a vote by voter.","operationId":"UpgradeQuery_VotesByVoter","parameters":[{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/annual_provisions":{"get":{"tags":["Query"],"summary":"AnnualProvisions current minting annual provisions value.","operationId":"UpgradeQuery_AnnualProvisions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryAnnualProvisionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/inflation":{"get":{"tags":["Query"],"summary":"Inflation returns the current minting inflation value.","operationId":"UpgradeQuery_Inflation","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryInflationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of minting parameters.","operationId":"UpgradeQuery_ParamsMixin104","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/balance/{owner}/{class_id}":{"get":{"tags":["Query"],"summary":"Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721","operationId":"UpgradeQuery_BalanceMixin110","parameters":[{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"path","required":true},{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes":{"get":{"tags":["Query"],"summary":"Classes queries all NFT classes","operationId":"UpgradeQuery_Classes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes/{class_id}":{"get":{"tags":["Query"],"summary":"Class queries an NFT class based on its id","operationId":"UpgradeQuery_Class","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts":{"get":{"tags":["Query"],"summary":"NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in\nERC721Enumerable","operationId":"UpgradeQuery_NFTs","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"query"},{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"NFT queries an NFT based on its class and id.","operationId":"UpgradeQuery_NFT","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/owner/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721","operationId":"UpgradeQuery_Owner","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryOwnerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/supply/{class_id}":{"get":{"tags":["Query"],"summary":"Supply queries the number of NFTs from the given class, same as totalSupply of ERC721.","operationId":"UpgradeQuery_Supply","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QuerySupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries a specific parameter of a module, given its subspace and\nkey.","operationId":"UpgradeQuery_ParamsMixin113","parameters":[{"type":"string","description":"subspace defines the module to query the parameter for.","name":"subspace","in":"query"},{"type":"string","description":"key defines the key of the parameter in the subspace.","name":"key","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/subspaces":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"UpgradeQuery_Subspaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QuerySubspacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of slashing module","operationId":"UpgradeQuery_ParamsMixin116","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos":{"get":{"tags":["Query"],"summary":"SigningInfos queries signing info of all validators","operationId":"UpgradeQuery_SigningInfos","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos/{cons_address}":{"get":{"tags":["Query"],"summary":"SigningInfo queries the signing info of given cons address","operationId":"UpgradeQuery_SigningInfo","parameters":[{"type":"string","description":"cons_address is the address to query signing info of","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegations/{delegator_addr}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorDelegations queries all delegations of a given delegator address.","operationId":"UpgradeQuery_DelegatorDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Redelegations queries redelegations of given address.","operationId":"UpgradeQuery_Redelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"src_validator_addr defines the validator address to redelegate from.","name":"src_validator_addr","in":"query"},{"type":"string","description":"dst_validator_addr defines the validator address to redelegate to.","name":"dst_validator_addr","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryRedelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorUnbondingDelegations queries all unbonding delegations of a given\ndelegator address.","operationId":"UpgradeQuery_DelegatorUnbondingDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorValidators queries all validators info for given delegator\naddress.","operationId":"UpgradeQuery_DelegatorValidatorsMixin121","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"DelegatorValidator queries validator info for given delegator validator\npair.","operationId":"UpgradeQuery_DelegatorValidator","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/historical_info/{height}":{"get":{"tags":["Query"],"summary":"HistoricalInfo queries the historical info for given height.","operationId":"UpgradeQuery_HistoricalInfo","parameters":[{"type":"string","format":"int64","description":"height defines at which height to query the historical info.","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryHistoricalInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the staking parameters.","operationId":"UpgradeQuery_ParamsMixin121","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/pool":{"get":{"tags":["Query"],"summary":"Pool queries the pool info.","operationId":"UpgradeQuery_Pool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Validators queries all validators that match the given status.","operationId":"UpgradeQuery_Validators","parameters":[{"type":"string","description":"status enables to query for validators matching a given status.","name":"status","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"Validator queries validator info for given validator address.","operationId":"UpgradeQuery_Validator","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorDelegations queries delegate info for given validator.","operationId":"UpgradeQuery_ValidatorDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}":{"get":{"tags":["Query"],"summary":"Delegation queries delegate info for given validator delegator pair.","operationId":"UpgradeQuery_Delegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation":{"get":{"tags":["Query"],"summary":"UnbondingDelegation queries unbonding info for given validator delegator\npair.","operationId":"UpgradeQuery_UnbondingDelegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorUnbondingDelegations queries unbonding delegations of a validator.","operationId":"UpgradeQuery_ValidatorUnbondingDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"UpgradeService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"UpgradeService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"UpgradeService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode/amino":{"post":{"description":"Since: cosmos-sdk 0.47","tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"UpgradeService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/simulate":{"post":{"tags":["Service"],"summary":"Simulate simulates executing a transaction for estimating gas usage.","operationId":"UpgradeService_Simulate","parameters":[{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs":{"get":{"tags":["Service"],"summary":"GetTxsEvent fetches txs by event.","operationId":"UpgradeService_GetTxsEvent","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"events is the list of transaction event type.\nDeprecated post v0.47.x: use query instead, which should contain a valid\nevents query.","name":"events","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"],"type":"string","default":"ORDER_BY_UNSPECIFIED","description":" - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","name":"order_by","in":"query"},{"type":"string","format":"uint64","description":"page is the page number to query, starts at 1. If not provided, will\ndefault to first page.","name":"page","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"limit","in":"query"},{"type":"string","description":"query defines the transaction event query that is proxied to Tendermint's\nTxSearch RPC method. The query must be valid.\n\nSince cosmos-sdk 0.50","name":"query","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}},"post":{"tags":["Service"],"summary":"BroadcastTx broadcast transaction.","operationId":"UpgradeService_BroadcastTx","parameters":[{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/block/{height}":{"get":{"description":"Since: cosmos-sdk 0.45.2","tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"UpgradeService_GetBlockWithTxs","parameters":[{"type":"string","format":"int64","description":"height is the height of the block to query.","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetBlockWithTxsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/{hash}":{"get":{"tags":["Service"],"summary":"GetTx fetches a tx by hash.","operationId":"UpgradeService_GetTx","parameters":[{"type":"string","description":"hash is the tx hash to query, encoded as a hex string.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/applied_plan/{name}":{"get":{"tags":["Query"],"summary":"AppliedPlan queries a previously applied upgrade plan by its name.","operationId":"UpgradeQuery_AppliedPlan","parameters":[{"type":"string","description":"name is the name of the applied plan to query for.","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAppliedPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/authority":{"get":{"description":"Since: cosmos-sdk 0.46","tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"UpgradeQuery_Authority","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAuthorityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/current_plan":{"get":{"tags":["Query"],"summary":"CurrentPlan queries the current upgrade plan.","operationId":"UpgradeQuery_CurrentPlan","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryCurrentPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/module_versions":{"get":{"description":"Since: cosmos-sdk 0.43","tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"UpgradeQuery_ModuleVersions","parameters":[{"type":"string","description":"module_name is a field to query a specific module\nconsensus version from state. Leaving this empty will\nfetch the full list of module versions from state","name":"module_name","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryModuleVersionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries the consensus state that will serve\nas a trusted kernel for the next version of this chain. It will only be\nstored at the last height of this chain.\nUpgradedConsensusState RPC not supported with legacy querier\nThis rpc is deprecated now that IBC has its own replacement\n(https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)","operationId":"UpgradeQuery_UpgradedConsensusState","parameters":[{"type":"string","format":"int64","description":"last height of the current chain must be sent in request\nas this is the height under which next consensus state is stored","name":"last_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/AddCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"AddCodeUploadParamsAddresses defines a governance operation for\nadding addresses to code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_AddCodeUploadParamsAddresses","parameters":[{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ClearAdmin":{"post":{"tags":["Msg"],"summary":"ClearAdmin removes any admin stored for a smart contract","operationId":"WasmMsg_ClearAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgClearAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/ExecuteContract":{"post":{"tags":["Msg"],"summary":"Execute submits the given message data to a smart contract","operationId":"WasmMsg_ExecuteContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgExecuteContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract":{"post":{"tags":["Msg"],"summary":"InstantiateContract creates a new smart contract instance for the given\n code id.","operationId":"WasmMsg_InstantiateContract","parameters":[{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/InstantiateContract2":{"post":{"tags":["Msg"],"summary":"InstantiateContract2 creates a new smart contract instance for the given\n code id with a predictable address","operationId":"WasmMsg_InstantiateContract2","parameters":[{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgInstantiateContract2Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"Migrate runs a code upgrade/ downgrade for a smart contract","operationId":"WasmMsg_MigrateContract","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/PinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"PinCodes defines a governance operation for pinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_PinCodes","parameters":[{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgPinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/RemoveCodeUploadParamsAddresses":{"post":{"tags":["Msg"],"summary":"RemoveCodeUploadParamsAddresses defines a governance operation for\nremoving addresses from code upload params.\nThe authority is defined in the keeper.","operationId":"WasmMsg_RemoveCodeUploadParamsAddresses","parameters":[{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndInstantiateContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"StoreAndInstantiateContract defines a governance operation for storing\nand instantiating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndInstantiateContract","parameters":[{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreAndMigrateContract":{"post":{"description":"Since: 0.42","tags":["Msg"],"summary":"StoreAndMigrateContract defines a governance operation for storing\nand migrating the contract. The authority is defined in the keeper.","operationId":"WasmMsg_StoreAndMigrateContract","parameters":[{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode to submit Wasm code to the system","operationId":"WasmMsg_StoreCode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/SudoContract":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"SudoContract defines a governance operation for calling sudo\non a contract. The authority is defined in the keeper.","operationId":"WasmMsg_SudoContract","parameters":[{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgSudoContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UnpinCodes":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UnpinCodes defines a governance operation for unpinning a set of\ncode ids in the wasmvm cache. The authority is defined in the keeper.","operationId":"WasmMsg_UnpinCodes","parameters":[{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodes"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUnpinCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateAdmin":{"post":{"tags":["Msg"],"summary":"UpdateAdmin sets a new admin for a smart contract","operationId":"WasmMsg_UpdateAdmin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateContractLabel":{"post":{"description":"Since: 0.43","tags":["Msg"],"summary":"UpdateContractLabel sets a new label for a smart contract","operationId":"WasmMsg_UpdateContractLabel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateContractLabelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateInstantiateConfig":{"post":{"tags":["Msg"],"summary":"UpdateInstantiateConfig updates instantiate config for a smart contract","operationId":"WasmMsg_UpdateInstantiateConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm.wasm.v1.Msg/UpdateParams":{"post":{"description":"Since: 0.40","tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/wasm\nmodule parameters. The authority is defined in the keeper.","operationId":"WasmMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code":{"get":{"tags":["Query"],"summary":"Codes gets the metadata for all stored wasm codes","operationId":"WasmQuery_Codes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code-info/{code_id}":{"get":{"tags":["Query"],"summary":"CodeInfo gets the metadata for a single wasm code","operationId":"WasmQuery_CodeInfo","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}":{"get":{"tags":["Query"],"summary":"Code gets the binary code and metadata for a single wasm code","operationId":"WasmQuery_Code","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/code/{code_id}/contracts":{"get":{"tags":["Query"],"summary":"ContractsByCode lists all smart contracts for a code id","operationId":"WasmQuery_ContractsByCode","parameters":[{"type":"string","format":"uint64","description":"grpc-gateway_out does not support Go style CodeID","name":"code_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/params":{"get":{"tags":["Query"],"summary":"Params gets the module params","operationId":"WasmQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/codes/pinned":{"get":{"tags":["Query"],"summary":"PinnedCodes gets the pinned code ids","operationId":"WasmQuery_PinnedCodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryPinnedCodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/build_address":{"get":{"tags":["Query"],"summary":"BuildAddress builds a contract address","operationId":"WasmQuery_BuildAddress","parameters":[{"type":"string","description":"CodeHash is the hash of the code","name":"code_hash","in":"query"},{"type":"string","description":"CreatorAddress is the address of the contract instantiator","name":"creator_address","in":"query"},{"type":"string","description":"Salt is a hex encoded salt","name":"salt","in":"query"},{"type":"string","format":"byte","description":"InitArgs are optional json encoded init args to be used in contract address\nbuilding if provided","name":"init_args","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryBuildAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}":{"get":{"tags":["Query"],"summary":"ContractInfo gets the contract meta data","operationId":"WasmQuery_ContractInfo","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/history":{"get":{"tags":["Query"],"summary":"ContractHistory gets the contract code history","operationId":"WasmQuery_ContractHistory","parameters":[{"type":"string","description":"address is the address of the contract to query","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractHistoryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}":{"get":{"tags":["Query"],"summary":"RawContractState gets single key from the raw store data of a contract","operationId":"WasmQuery_RawContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryRawContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}":{"get":{"tags":["Query"],"summary":"SmartContractState get smart query result from the contract","operationId":"WasmQuery_SmartContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"QueryData contains the query data passed to the contract","name":"query_data","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QuerySmartContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contract/{address}/state":{"get":{"tags":["Query"],"summary":"AllContractState gets all raw store data for a single contract","operationId":"WasmQuery_AllContractState","parameters":[{"type":"string","description":"address is the address of the contract","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryAllContractStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/contracts/creator/{creator_address}":{"get":{"tags":["Query"],"summary":"ContractsByCreator gets the contracts by creator","operationId":"WasmQuery_ContractsByCreator","parameters":[{"type":"string","description":"CreatorAddress is the address of contract creator","name":"creator_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryContractsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmwasm/wasm/v1/wasm-limits-config":{"get":{"tags":["Query"],"summary":"WasmLimitsConfig gets the configured limits for static validation of Wasm\nfiles, encoded in JSON.","operationId":"WasmQuery_WasmLimitsConfig","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/RegisterInterchainAccount":{"post":{"tags":["Msg"],"summary":"RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount.","operationId":"ControllerMsg_RegisterInterchainAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/SendTx":{"post":{"tags":["Msg"],"summary":"SendTx defines a rpc handler for MsgSendTx.","operationId":"ControllerMsg_SendTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/ModuleQuerySafe":{"post":{"tags":["Msg"],"summary":"ModuleQuerySafe defines a rpc handler for MsgModuleQuerySafe.","operationId":"ControllerMsg_ModuleQuerySafe","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin160","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/Transfer":{"post":{"tags":["Msg"],"summary":"Transfer defines a rpc handler method for MsgTransfer.","operationId":"ControllerMsg_Transfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin171","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_Acknowledgement","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseConfirm":{"post":{"tags":["Msg"],"summary":"ChannelCloseConfirm defines a rpc handler method for\nMsgChannelCloseConfirm.","operationId":"ControllerMsg_ChannelCloseConfirm","parameters":[{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseInit":{"post":{"tags":["Msg"],"summary":"ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit.","operationId":"ControllerMsg_ChannelCloseInit","parameters":[{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenAck":{"post":{"tags":["Msg"],"summary":"ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck.","operationId":"ControllerMsg_ChannelOpenAck","parameters":[{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenConfirm":{"post":{"tags":["Msg"],"summary":"ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm.","operationId":"ControllerMsg_ChannelOpenConfirm","parameters":[{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenInit":{"post":{"tags":["Msg"],"summary":"ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit.","operationId":"ControllerMsg_ChannelOpenInit","parameters":[{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenTry":{"post":{"tags":["Msg"],"summary":"ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry.","operationId":"ControllerMsg_ChannelOpenTry","parameters":[{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacket","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_Timeout","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/TimeoutOnClose":{"post":{"tags":["Msg"],"summary":"TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose.","operationId":"ControllerMsg_TimeoutOnClose","parameters":[{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnCloseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_AcknowledgementMixin179","parameters":[{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacketMixin179","parameters":[{"description":"MsgRecvPacket receives an incoming IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/SendPacket":{"post":{"tags":["Msg"],"summary":"SendPacket defines a rpc handler method for MsgSendPacket.","operationId":"ControllerMsg_SendPacket","parameters":[{"description":"MsgSendPacket sends an outgoing IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_TimeoutMixin179","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/CreateClient":{"post":{"tags":["Msg"],"summary":"CreateClient defines a rpc handler method for MsgCreateClient.","operationId":"ControllerMsg_CreateClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/DeleteClientCreator":{"post":{"tags":["Msg"],"summary":"DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator.","operationId":"ControllerMsg_DeleteClientCreator","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/IBCSoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade.","operationId":"ControllerMsg_IBCSoftwareUpgrade","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/RecoverClient":{"post":{"tags":["Msg"],"summary":"RecoverClient defines a rpc handler method for MsgRecoverClient.","operationId":"ControllerMsg_RecoverClient","parameters":[{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/SubmitMisbehaviour":{"post":{"tags":["Msg"],"summary":"SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.","operationId":"ControllerMsg_SubmitMisbehaviour","parameters":[{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviour"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviourResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClient":{"post":{"tags":["Msg"],"summary":"UpdateClient defines a rpc handler method for MsgUpdateClient.","operationId":"ControllerMsg_UpdateClient","parameters":[{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClientParams":{"post":{"tags":["Msg"],"summary":"UpdateClientParams defines a rpc handler method for MsgUpdateParams.","operationId":"ControllerMsg_UpdateClientParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpgradeClient":{"post":{"tags":["Msg"],"summary":"UpgradeClient defines a rpc handler method for MsgUpgradeClient.","operationId":"ControllerMsg_UpgradeClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/RegisterCounterparty":{"post":{"tags":["Msg"],"summary":"RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty.","operationId":"ControllerMsg_RegisterCounterparty","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterparty"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterpartyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/UpdateClientConfig":{"post":{"tags":["Msg"],"summary":"UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig.","operationId":"ControllerMsg_UpdateClientConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenAck":{"post":{"tags":["Msg"],"summary":"ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck.","operationId":"ControllerMsg_ConnectionOpenAck","parameters":[{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenConfirm":{"post":{"tags":["Msg"],"summary":"ConnectionOpenConfirm defines a rpc handler method for\nMsgConnectionOpenConfirm.","operationId":"ControllerMsg_ConnectionOpenConfirm","parameters":[{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenInit":{"post":{"tags":["Msg"],"summary":"ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit.","operationId":"ControllerMsg_ConnectionOpenInit","parameters":[{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenTry":{"post":{"tags":["Msg"],"summary":"ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry.","operationId":"ControllerMsg_ConnectionOpenTry","parameters":[{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/UpdateConnectionParams":{"post":{"tags":["Msg"],"summary":"UpdateConnectionParams defines a rpc handler method for\nMsgUpdateParams.","operationId":"ControllerMsg_UpdateConnectionParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"MigrateContract defines a rpc handler method for MsgMigrateContract.","operationId":"ControllerMsg_MigrateContract","parameters":[{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/RemoveChecksum":{"post":{"tags":["Msg"],"summary":"RemoveChecksum defines a rpc handler method for MsgRemoveChecksum.","operationId":"ControllerMsg_RemoveChecksum","parameters":[{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode defines a rpc handler method for MsgStoreCode.","operationId":"ControllerMsg_StoreCode","parameters":[{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"InterchainAccount returns the interchain account address for a given owner address on a given connection","operationId":"ControllerQuery_InterchainAccount","parameters":[{"type":"string","name":"owner","in":"path","required":true},{"type":"string","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA controller submodule.","operationId":"ControllerQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/host/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA host submodule.","operationId":"ControllerQuery_ParamsMixin159","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address":{"get":{"tags":["Query"],"summary":"EscrowAddress returns the escrow address for a particular port and channel id.","operationId":"ControllerQuery_EscrowAddress","parameters":[{"type":"string","description":"unique channel identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"unique port identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryEscrowAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denom_hashes/{trace}":{"get":{"tags":["Query"],"summary":"DenomHash queries a denomination hash information.","operationId":"ControllerQuery_DenomHash","parameters":[{"pattern":".+","type":"string","description":"The denomination trace ([port_id]/[channel_id])+/[denom]","name":"trace","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomHashResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms":{"get":{"tags":["Query"],"summary":"Denoms queries all denominations","operationId":"ControllerQuery_Denoms","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms/{hash}":{"get":{"tags":["Query"],"summary":"Denom queries a denomination","operationId":"ControllerQuery_Denom","parameters":[{"pattern":".+","type":"string","description":"hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ibc-transfer module.","operationId":"ControllerQuery_ParamsMixin168","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/total_escrow/{denom}":{"get":{"tags":["Query"],"summary":"TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.","operationId":"ControllerQuery_TotalEscrowForDenom","parameters":[{"pattern":".+","type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels":{"get":{"tags":["Query"],"summary":"Channels queries all the IBC channels of a chain.","operationId":"ControllerQuery_Channels","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}":{"get":{"tags":["Query"],"summary":"Channel queries an IBC Channel.","operationId":"ControllerQuery_Channel","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state":{"get":{"tags":["Query"],"summary":"ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.","operationId":"ControllerQuery_ChannelClientState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ChannelConsensusState queries for the consensus state for the channel\nassociated with the provided channel identifiers.","operationId":"ControllerQuery_ChannelConsensusState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"revision number of the consensus state","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"revision height of the consensus state","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence":{"get":{"tags":["Query"],"summary":"NextSequenceReceive returns the next receive sequence for a given channel.","operationId":"ControllerQuery_NextSequenceReceive","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceReceiveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSend","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all the packet acknowledgements associated\nwith a channel.","operationId":"ControllerQuery_PacketAcknowledgements","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored packet acknowledgement hash.","operationId":"ControllerQuery_PacketAcknowledgement","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments returns all the packet commitments hashes associated\nwith a channel.","operationId":"ControllerQuery_PacketCommitments","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated\nwith a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcks","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a\nchannel and sequences.","operationId":"ControllerQuery_UnreceivedPackets","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"packet_commitment_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitment","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries if a given packet sequence has been received on the\nqueried chain","operationId":"ControllerQuery_PacketReceipt","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/connections/{connection}/channels":{"get":{"tags":["Query"],"summary":"ConnectionChannels queries all the channels associated with a connection\nend.","operationId":"ControllerQuery_ConnectionChannels","parameters":[{"type":"string","description":"connection unique identifier","name":"connection","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryConnectionChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSendMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all packet acknowledgements associated with a channel.","operationId":"ControllerQuery_PacketAcknowledgementsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored acknowledgement commitment hash.","operationId":"ControllerQuery_PacketAcknowledgementMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcksMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedPacketsMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries a stored packet receipt.","operationId":"ControllerQuery_PacketReceiptMixin178","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_creator/{client_id}":{"get":{"tags":["Query"],"summary":"ClientCreator queries the creator of a given client.","operationId":"ControllerQuery_ClientCreator","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states":{"get":{"tags":["Query"],"summary":"ClientStates queries all the IBC light clients of a chain.","operationId":"ControllerQuery_ClientStates","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states/{client_id}":{"get":{"tags":["Query"],"summary":"ClientState queries an IBC light client.","operationId":"ControllerQuery_ClientState","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_status/{client_id}":{"get":{"tags":["Query"],"summary":"Status queries the status of an IBC client.","operationId":"ControllerQuery_ClientStatus","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}":{"get":{"tags":["Query"],"summary":"ConsensusStates queries all the consensus state associated with a given\nclient.","operationId":"ControllerQuery_ConsensusStates","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/heights":{"get":{"tags":["Query"],"summary":"ConsensusStateHeights queries the height of every consensus states associated with a given client.","operationId":"ControllerQuery_ConsensusStateHeights","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateHeightsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConsensusState queries a consensus state associated with a client state at\na given height.","operationId":"ControllerQuery_ConsensusState","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision number","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision height","name":"revision_height","in":"path","required":true},{"type":"boolean","description":"latest_height overrides the height field and queries the latest stored\nConsensusState","name":"latest_height","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/params":{"get":{"tags":["Query"],"summary":"ClientParams queries all parameters of the ibc client submodule.","operationId":"ControllerQuery_ClientParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_client_states":{"get":{"tags":["Query"],"summary":"UpgradedClientState queries an Upgraded IBC light client.","operationId":"ControllerQuery_UpgradedClientState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_consensus_states":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries an Upgraded IBC consensus state.","operationId":"ControllerQuery_UpgradedConsensusState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/verify_membership":{"post":{"tags":["Query"],"summary":"VerifyMembership queries an IBC light client for proof verification of a value at a given key path.","operationId":"ControllerQuery_VerifyMembership","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/config/{client_id}":{"get":{"tags":["Query"],"summary":"Config queries the IBC client v2 configuration for a given client.","operationId":"ControllerQuery_Config","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/counterparty_info/{client_id}":{"get":{"tags":["Query"],"summary":"CounterpartyInfo queries an IBC light counter party info.","operationId":"ControllerQuery_CounterpartyInfo","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryCounterpartyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/client_connections/{client_id}":{"get":{"tags":["Query"],"summary":"ClientConnections queries the connection paths associated with a client\nstate.","operationId":"ControllerQuery_ClientConnections","parameters":[{"type":"string","description":"client identifier associated with a connection","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryClientConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections":{"get":{"tags":["Query"],"summary":"Connections queries all the IBC connections of a chain.","operationId":"ControllerQuery_Connections","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"Connection queries an IBC connection end.","operationId":"ControllerQuery_Connection","parameters":[{"type":"string","description":"connection unique identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/client_state":{"get":{"tags":["Query"],"summary":"ConnectionClientState queries the client state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionClientState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConnectionConsensusState queries the consensus state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionConsensusState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/params":{"get":{"tags":["Query"],"summary":"ConnectionParams queries all parameters of the ibc connection submodule.","operationId":"ControllerQuery_ConnectionParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums":{"get":{"tags":["Query"],"summary":"Get all Wasm checksums","operationId":"ControllerQuery_Checksums","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryChecksumsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums/{checksum}/code":{"get":{"tags":["Query"],"summary":"Get Wasm code for given checksum","operationId":"ControllerQuery_Code","parameters":[{"type":"string","description":"checksum is a hex encoded string of the code stored.","name":"checksum","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitEpochReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitEpochReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEpochReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEpochReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence defines the SubmitEvidence RPC.","operationId":"GithubComLumeraProtocollumeraMsg_SubmitEvidence","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin15","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin20","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin25","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin36","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ApplySnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestApplySnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/CheckTx":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_CheckTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCheckTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCheckTx"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Commit":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Commit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCommit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Echo":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Echo","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestEcho"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseEcho"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ExtendVote":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ExtendVote","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestExtendVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseExtendVote"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/FinalizeBlock":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_FinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Flush":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Flush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFlush"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFlush"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Info":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Info","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInfo"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInfo"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/InitChain":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_InitChain","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInitChain"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInitChain"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ListSnapshots":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ListSnapshots","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestListSnapshots"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseListSnapshots"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/LoadSnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_LoadSnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestLoadSnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseLoadSnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/OfferSnapshot":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_OfferSnapshot","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestOfferSnapshot"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/PrepareProposal":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_PrepareProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestPrepareProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponsePrepareProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ProcessProposal":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_ProcessProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestProcessProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Query":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_Query","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestQuery"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseQuery"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/VerifyVoteExtension":{"post":{"tags":["ABCI"],"operationId":"UpgradeABCI_VerifyVoteExtension","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestVerifyVoteExtension"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.auth.v1beta1.AddressBytesToStringResponse":{"description":"AddressBytesToStringResponse is the response type for AddressString rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address_bytes":{"type":"string","format":"byte"}}},"cosmos.auth.v1beta1.BaseAccount":{"description":"BaseAccount defines a base account type. It contains all the necessary fields\nfor basic account functionality. Any custom account type should extend this\ntype for additional functionality (e.g. vesting).","type":"object","properties":{"account_number":{"type":"string","format":"uint64"},"address":{"type":"string"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"sequence":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.Bech32PrefixResponse":{"description":"Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/auth parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.auth.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.auth.v1beta1.Params":{"description":"Params defines the parameters for the auth module.","type":"object","properties":{"max_memo_characters":{"type":"string","format":"uint64"},"sig_verify_cost_ed25519":{"type":"string","format":"uint64"},"sig_verify_cost_secp256k1":{"type":"string","format":"uint64"},"tx_sig_limit":{"type":"string","format":"uint64"},"tx_size_cost_per_byte":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.QueryAccountAddressByIDResponse":{"description":"Since: cosmos-sdk 0.46.2","type":"object","title":"QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method","properties":{"account_address":{"type":"string"}}},"cosmos.auth.v1beta1.QueryAccountInfoResponse":{"description":"QueryAccountInfoResponse is the Query/AccountInfo response type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"info":{"description":"info is the account info which is represented by BaseAccount.","$ref":"#/definitions/cosmos.auth.v1beta1.BaseAccount"}}},"cosmos.auth.v1beta1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"account":{"description":"account defines the account of the corresponding address.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryAccountsResponse":{"description":"QueryAccountsResponse is the response type for the Query/Accounts RPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"accounts":{"type":"array","title":"accounts are the existing accounts","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.auth.v1beta1.QueryModuleAccountByNameResponse":{"description":"QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method.","type":"object","properties":{"account":{"$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryModuleAccountsResponse":{"description":"QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.auth.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.authz.v1beta1.Grant":{"description":"Grant gives permissions to execute\nthe provide method with expiration time.","type":"object","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time","title":"time when the grant will expire and will be pruned. If null, then the grant\ndoesn't have a time expiration (other conditions in `authorization`\nmay apply to invalidate the grant)"}}},"cosmos.authz.v1beta1.GrantAuthorization":{"type":"object","title":"GrantAuthorization extends a grant with both the addresses of the grantee and granter.\nIt is used in genesis.proto and query.proto","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgExec":{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","type":"object","properties":{"grantee":{"type":"string"},"msgs":{"description":"Execute Msg.\nThe x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg))\ntriple and validate it.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.authz.v1beta1.MsgExecResponse":{"description":"MsgExecResponse defines the Msg/MsgExecResponse response type.","type":"object","properties":{"results":{"type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.authz.v1beta1.MsgGrant":{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","type":"object","properties":{"grant":{"$ref":"#/definitions/cosmos.authz.v1beta1.Grant"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgGrantResponse":{"description":"MsgGrantResponse defines the Msg/MsgGrant response type.","type":"object"},"cosmos.authz.v1beta1.MsgRevoke":{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","type":"object","properties":{"grantee":{"type":"string"},"granter":{"type":"string"},"msg_type_url":{"type":"string"}}},"cosmos.authz.v1beta1.MsgRevokeResponse":{"description":"MsgRevokeResponse defines the Msg/MsgRevokeResponse response type.","type":"object"},"cosmos.authz.v1beta1.QueryGranteeGrantsResponse":{"description":"QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted to the grantee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGranterGrantsResponse":{"description":"QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGrantsResponse":{"description":"QueryGrantsResponse is the response type for the Query/Authorizations RPC method.","type":"object","properties":{"grants":{"description":"authorizations is a list of grants granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.autocli.v1.AppOptionsRequest":{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","type":"object"},"cosmos.autocli.v1.AppOptionsResponse":{"description":"AppOptionsResponse is the RemoteInfoService/AppOptions response type.","type":"object","properties":{"module_options":{"description":"module_options is a map of module name to autocli module options.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ModuleOptions"}}}},"cosmos.autocli.v1.FlagOptions":{"description":"FlagOptions are options for flags generated from rpc request fields.\nBy default, all request fields are configured as flags based on the\nkebab-case name of the field. Fields can be turned into positional arguments\ninstead by using RpcCommandOptions.positional_args.","type":"object","properties":{"default_value":{"description":"default_value is the default value as text.","type":"string"},"deprecated":{"description":"deprecated is the usage text to show if this flag is deprecated.","type":"string"},"hidden":{"type":"boolean","title":"hidden hides the flag from help/usage text"},"name":{"description":"name is an alternate name to use for the field flag.","type":"string"},"shorthand":{"description":"shorthand is a one-letter abbreviated flag.","type":"string"},"shorthand_deprecated":{"description":"shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated.","type":"string"},"usage":{"description":"usage is the help message.","type":"string"}}},"cosmos.autocli.v1.ModuleOptions":{"description":"ModuleOptions describes the CLI options for a Cosmos SDK module.","type":"object","properties":{"query":{"description":"query describes the queries commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"},"tx":{"description":"tx describes the tx commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}},"cosmos.autocli.v1.PositionalArgDescriptor":{"description":"PositionalArgDescriptor describes a positional argument.","type":"object","properties":{"proto_field":{"description":"proto_field specifies the proto field to use as the positional arg. Any\nfields used as positional args will not have a flag generated.","type":"string"},"varargs":{"description":"varargs makes a positional parameter a varargs parameter. This can only be\napplied to last positional parameter and the proto_field must a repeated\nfield.","type":"boolean"}}},"cosmos.autocli.v1.RpcCommandOptions":{"description":"RpcCommandOptions specifies options for commands generated from protobuf\nrpc methods.","type":"object","properties":{"alias":{"description":"alias is an array of aliases that can be used instead of the first word in Use.","type":"array","items":{"type":"string"}},"deprecated":{"description":"deprecated defines, if this command is deprecated and should print this string when used.","type":"string"},"example":{"description":"example is examples of how to use the command.","type":"string"},"flag_options":{"description":"flag_options are options for flags generated from rpc request fields.\nBy default all request fields are configured as flags. They can\nalso be configured as positional args instead using positional_args.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.FlagOptions"}},"long":{"description":"long is the long message shown in the 'help \u003cthis-command\u003e' output.","type":"string"},"positional_args":{"description":"positional_args specifies positional arguments for the command.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.PositionalArgDescriptor"}},"rpc_method":{"description":"rpc_method is short name of the protobuf rpc method that this command is\ngenerated from.","type":"string"},"short":{"description":"short is the short description shown in the 'help' output.","type":"string"},"skip":{"description":"skip specifies whether to skip this rpc method when generating commands.","type":"boolean"},"suggest_for":{"description":"suggest_for is an array of command names for which this command will be suggested -\nsimilar to aliases but only suggests.","type":"array","items":{"type":"string"}},"use":{"description":"use is the one-line usage method. It also allows specifying an alternate\nname for the command as the first word of the usage text.\n\nBy default the name of an rpc command is the kebab-case short name of the\nrpc method.","type":"string"},"version":{"description":"version defines the version for this command. If this value is non-empty and the command does not\ndefine a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\nwill print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\ncommand does not define one.","type":"string"}}},"cosmos.autocli.v1.ServiceCommandDescriptor":{"description":"ServiceCommandDescriptor describes a CLI command based on a protobuf service.","type":"object","properties":{"rpc_command_options":{"description":"rpc_command_options are options for commands generated from rpc methods.\nIf no options are specified for a given rpc method on the service, a\ncommand will be generated for that method with the default options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.RpcCommandOptions"}},"service":{"description":"service is the fully qualified name of the protobuf service to build\nthe command from. It can be left empty if sub_commands are used instead\nwhich may be the case if a module provides multiple tx and/or query services.","type":"string"},"sub_commands":{"description":"sub_commands is a map of optional sub-commands for this command based on\ndifferent protobuf services. The map key is used as the name of the\nsub-command.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}}},"cosmos.bank.v1beta1.DenomOwner":{"description":"DenomOwner defines structure representing an account that owns or holds a\nparticular denominated token. It contains the account address and account\nbalance of the denominated token.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"address":{"description":"address defines the address that owns a particular denomination.","type":"string"},"balance":{"description":"balance is the balance of the denominated coin for an account.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.DenomUnit":{"description":"DenomUnit represents a struct that describes a given\ndenomination unit of the basic token.","type":"object","properties":{"aliases":{"type":"array","title":"aliases is a list of string aliases for the given denom","items":{"type":"string"}},"denom":{"description":"denom represents the string name of the given denom unit (e.g uatom).","type":"string"},"exponent":{"description":"exponent represents power of 10 exponent that one must\nraise the base_denom to in order to equal the given DenomUnit's denom\n1 denom = 10^exponent base_denom\n(e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\nexponent = 6, thus: 1 atom = 10^6 uatom).","type":"integer","format":"int64"}}},"cosmos.bank.v1beta1.Input":{"description":"Input models transaction input.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Metadata":{"description":"Metadata represents a struct that describes\na basic token.","type":"object","properties":{"base":{"description":"base represents the base denom (should be the DenomUnit with exponent = 0).","type":"string"},"denom_units":{"type":"array","title":"denom_units represents the list of DenomUnit's for a given coin","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomUnit"}},"description":{"type":"string"},"display":{"description":"display indicates the suggested denom that should be\ndisplayed in clients.","type":"string"},"name":{"description":"Since: cosmos-sdk 0.43","type":"string","title":"name defines the name of the token (eg: Cosmos Atom)"},"symbol":{"description":"symbol is the token symbol usually shown on exchanges (eg: ATOM). This can\nbe the same as the display.\n\nSince: cosmos-sdk 0.43","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"},"uri_hash":{"description":"URIHash is a sha256 hash of a document pointed by URI. It's used to verify that\nthe document didn't change. Optional.\n\nSince: cosmos-sdk 0.46","type":"string"}}},"cosmos.bank.v1beta1.MsgMultiSend":{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","type":"object","properties":{"inputs":{"description":"Inputs, despite being `repeated`, only allows one sender input. This is\nchecked in MsgMultiSend's ValidateBasic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Input"}},"outputs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Output"}}}},"cosmos.bank.v1beta1.MsgMultiSendResponse":{"description":"MsgMultiSendResponse defines the Msg/MultiSend response type.","type":"object"},"cosmos.bank.v1beta1.MsgSend":{"description":"MsgSend represents a message to send coins from one account to another.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.bank.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.bank.v1beta1.MsgSetSendEnabled":{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module.","type":"string"},"send_enabled":{"description":"send_enabled is the list of entries to add or update.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}},"use_default_for":{"description":"use_default_for is a list of denoms that should use the params.default_send_enabled value.\nDenoms listed here will have their SendEnabled entries deleted.\nIf a denom is included that doesn't have a SendEnabled entry,\nit will be ignored.","type":"array","items":{"type":"string"}}}},"cosmos.bank.v1beta1.MsgSetSendEnabledResponse":{"description":"MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/bank parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.bank.v1beta1.Output":{"description":"Output models transaction outputs.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Params":{"description":"Params defines the parameters for the bank module.","type":"object","properties":{"default_send_enabled":{"type":"boolean"},"send_enabled":{"description":"Deprecated: Use of SendEnabled in params is deprecated.\nFor genesis, use the newly added send_enabled field in the genesis object.\nStorage, lookup, and manipulation of this information is now in the keeper.\n\nAs of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QueryAllBalancesResponse":{"description":"QueryAllBalancesResponse is the response type for the Query/AllBalances RPC\nmethod.","type":"object","properties":{"balances":{"description":"balances is the balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse":{"description":"QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC\nmethod. Identical with QueryDenomMetadataResponse but receives denom as query string in request.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomMetadataResponse":{"description":"QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC\nmethod.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse":{"description":"QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query.\n\nSince: cosmos-sdk 0.50.3","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomOwnersResponse":{"description":"QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomsMetadataResponse":{"description":"QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC\nmethod.","type":"object","properties":{"metadatas":{"description":"metadata provides the client information for all the registered tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/bank parameters.","type":"object","properties":{"params":{"description":"params provides the parameters of the bank module.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.QuerySendEnabledResponse":{"description":"QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response. This field is only\npopulated if the denoms field in the request is empty.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"send_enabled":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse":{"description":"QuerySpendableBalanceByDenomResponse defines the gRPC response structure for\nquerying an account's spendable balance for a specific denom.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QuerySpendableBalancesResponse":{"description":"QuerySpendableBalancesResponse defines the gRPC response structure for querying\nan account's spendable balances.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"balances":{"description":"balances is the spendable balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QuerySupplyOfResponse":{"description":"QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method.","type":"object","properties":{"amount":{"description":"amount is the supply of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryTotalSupplyResponse":{"type":"object","title":"QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC\nmethod","properties":{"pagination":{"description":"pagination defines the pagination in the response.\n\nSince: cosmos-sdk 0.43","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supply":{"type":"array","title":"supply is the supply of the coins","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.SendEnabled":{"description":"SendEnabled maps coin denom to a send_enabled status (whether a denom is\nsendable).","type":"object","properties":{"denom":{"type":"string"},"enabled":{"type":"boolean"}}},"cosmos.base.abci.v1beta1.ABCIMessageLog":{"description":"ABCIMessageLog defines a structure containing an indexed tx ABCI message log.","type":"object","properties":{"events":{"description":"Events contains a slice of Event objects that were emitted during some\nexecution.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.StringEvent"}},"log":{"type":"string"},"msg_index":{"type":"integer","format":"int64"}}},"cosmos.base.abci.v1beta1.Attribute":{"description":"Attribute defines an attribute wrapper where the key and value are\nstrings instead of raw bytes.","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"cosmos.base.abci.v1beta1.GasInfo":{"description":"GasInfo defines tx execution gas context.","type":"object","properties":{"gas_used":{"description":"GasUsed is the amount of gas actually consumed.","type":"string","format":"uint64"},"gas_wanted":{"description":"GasWanted is the maximum units of work we allow this tx to perform.","type":"string","format":"uint64"}}},"cosmos.base.abci.v1beta1.Result":{"description":"Result is the union of ResponseFormat and ResponseCheckTx.","type":"object","properties":{"data":{"description":"Data is any data returned from message or handler execution. It MUST be\nlength prefixed in order to separate data from multiple message executions.\nDeprecated. This field is still populated, but prefer msg_response instead\nbecause it also contains the Msg response typeURL.","type":"string","format":"byte"},"events":{"description":"Events contains a slice of Event objects that were emitted during message\nor handler execution.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"log":{"description":"Log contains the log information from message or handler execution.","type":"string"},"msg_responses":{"description":"msg_responses contains the Msg handler responses type packed in Anys.\n\nSince: cosmos-sdk 0.46","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.base.abci.v1beta1.StringEvent":{"description":"StringEvent defines en Event object wrapper where all the attributes\ncontain key/value pairs that are strings instead of raw bytes.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.Attribute"}},"type":{"type":"string"}}},"cosmos.base.abci.v1beta1.TxResponse":{"description":"TxResponse defines a structure containing relevant tx data and metadata. The\ntags are stringified and the log is JSON decoded.","type":"object","properties":{"code":{"description":"Response code.","type":"integer","format":"int64"},"codespace":{"type":"string","title":"Namespace for the Code"},"data":{"description":"Result bytes, if any.","type":"string"},"events":{"description":"Events defines all the events emitted by processing a transaction. Note,\nthese events include those emitted by processing all the messages and those\nemitted from the ante. Whereas Logs contains the events, with\nadditional metadata, emitted only by processing the messages.\n\nSince: cosmos-sdk 0.42.11, 0.44.5, 0.45","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"description":"Amount of gas consumed by transaction.","type":"string","format":"int64"},"gas_wanted":{"description":"Amount of gas requested for transaction.","type":"string","format":"int64"},"height":{"type":"string","format":"int64","title":"The block height"},"info":{"description":"Additional information. May be non-deterministic.","type":"string"},"logs":{"description":"The output of the application's logger (typed). May be non-deterministic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.ABCIMessageLog"}},"raw_log":{"description":"The output of the application's logger (raw string). May be\nnon-deterministic.","type":"string"},"timestamp":{"description":"Time of the previous block. For heights \u003e 1, it's the weighted median of\nthe timestamps of the valid votes in the block.LastCommit. For height == 1,\nit's genesis time.","type":"string"},"tx":{"description":"The request transaction bytes.","$ref":"#/definitions/google.protobuf.Any"},"txhash":{"description":"The transaction hash.","type":"string"}}},"cosmos.base.node.v1beta1.ConfigResponse":{"description":"ConfigResponse defines the response structure for the Config gRPC query.","type":"object","properties":{"halt_height":{"type":"string","format":"uint64"},"minimum_gas_price":{"type":"string"},"pruning_interval":{"type":"string"},"pruning_keep_recent":{"type":"string"}}},"cosmos.base.node.v1beta1.StatusResponse":{"description":"StateResponse defines the response structure for the status of a node.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"app hash of the current block"},"earliest_store_height":{"type":"string","format":"uint64","title":"earliest block height available in the store"},"height":{"type":"string","format":"uint64","title":"current block height"},"timestamp":{"type":"string","format":"date-time","title":"block height timestamp"},"validator_hash":{"type":"string","format":"byte","title":"validator hash provided by the consensus header"}}},"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.reflection.v1beta1.ListAllInterfacesResponse":{"description":"ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC.","type":"object","properties":{"interface_names":{"description":"interface_names is an array of all the registered interfaces.","type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v1beta1.ListImplementationsResponse":{"description":"ListImplementationsResponse is the response type of the ListImplementations\nRPC.","type":"object","properties":{"implementation_message_names":{"type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v2alpha1.AuthnDescriptor":{"type":"object","title":"AuthnDescriptor provides information on how to sign transactions without relying\non the online RPCs GetTxMetadata and CombineUnsignedTxAndSignatures","properties":{"sign_modes":{"type":"array","title":"sign_modes defines the supported signature algorithm","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.SigningModeDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ChainDescriptor":{"type":"object","title":"ChainDescriptor describes chain information of the application","properties":{"id":{"type":"string","title":"id is the chain id"}}},"cosmos.base.reflection.v2alpha1.CodecDescriptor":{"type":"object","title":"CodecDescriptor describes the registered interfaces and provides metadata information on the types","properties":{"interfaces":{"type":"array","title":"interfaces is a list of the registerted interfaces descriptors","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ConfigurationDescriptor":{"type":"object","title":"ConfigurationDescriptor contains metadata information on the sdk.Config","properties":{"bech32_account_address_prefix":{"type":"string","title":"bech32_account_address_prefix is the account address prefix"}}},"cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse":{"type":"object","title":"GetAuthnDescriptorResponse is the response returned by the GetAuthnDescriptor RPC","properties":{"authn":{"title":"authn describes how to authenticate to the application when sending transactions","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.AuthnDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse":{"type":"object","title":"GetChainDescriptorResponse is the response returned by the GetChainDescriptor RPC","properties":{"chain":{"title":"chain describes application chain information","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ChainDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse":{"type":"object","title":"GetCodecDescriptorResponse is the response returned by the GetCodecDescriptor RPC","properties":{"codec":{"title":"codec describes the application codec such as registered interfaces and implementations","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.CodecDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse":{"type":"object","title":"GetConfigurationDescriptorResponse is the response returned by the GetConfigurationDescriptor RPC","properties":{"config":{"title":"config describes the application's sdk.Config","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ConfigurationDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse":{"type":"object","title":"GetQueryServicesDescriptorResponse is the response returned by the GetQueryServicesDescriptor RPC","properties":{"queries":{"title":"queries provides information on the available queryable services","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServicesDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse":{"type":"object","title":"GetTxDescriptorResponse is the response returned by the GetTxDescriptor RPC","properties":{"tx":{"title":"tx provides information on msgs that can be forwarded to the application\nalongside the accepted transaction protobuf type","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.TxDescriptor"}}},"cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor":{"type":"object","title":"InterfaceAcceptingMessageDescriptor describes a protobuf message which contains\nan interface represented as a google.protobuf.Any","properties":{"field_descriptor_names":{"type":"array","title":"field_descriptor_names is a list of the protobuf name (not fullname) of the field\nwhich contains the interface as google.protobuf.Any (the interface is the same, but\nit can be in multiple fields of the same proto message)","items":{"type":"string"}},"fullname":{"type":"string","title":"fullname is the protobuf fullname of the type containing the interface"}}},"cosmos.base.reflection.v2alpha1.InterfaceDescriptor":{"type":"object","title":"InterfaceDescriptor describes the implementation of an interface","properties":{"fullname":{"type":"string","title":"fullname is the name of the interface"},"interface_accepting_messages":{"type":"array","title":"interface_accepting_messages contains information regarding the proto messages which contain the interface as\ngoogle.protobuf.Any field","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor"}},"interface_implementers":{"type":"array","title":"interface_implementers is a list of the descriptors of the interface implementers","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor"}}}},"cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor":{"type":"object","title":"InterfaceImplementerDescriptor describes an interface implementer","properties":{"fullname":{"type":"string","title":"fullname is the protobuf queryable name of the interface implementer"},"type_url":{"type":"string","title":"type_url defines the type URL used when marshalling the type as any\nthis is required so we can provide type safe google.protobuf.Any marshalling and\nunmarshalling, making sure that we don't accept just 'any' type\nin our interface fields"}}},"cosmos.base.reflection.v2alpha1.MsgDescriptor":{"type":"object","title":"MsgDescriptor describes a cosmos-sdk message that can be delivered with a transaction","properties":{"msg_type_url":{"description":"msg_type_url contains the TypeURL of a sdk.Msg.","type":"string"}}},"cosmos.base.reflection.v2alpha1.QueryMethodDescriptor":{"type":"object","title":"QueryMethodDescriptor describes a queryable method of a query service\nno other info is provided beside method name and tendermint queryable path\nbecause it would be redundant with the grpc reflection service","properties":{"full_query_path":{"type":"string","title":"full_query_path is the path that can be used to query\nthis method via tendermint abci.Query"},"name":{"type":"string","title":"name is the protobuf name (not fullname) of the method"}}},"cosmos.base.reflection.v2alpha1.QueryServiceDescriptor":{"type":"object","title":"QueryServiceDescriptor describes a cosmos-sdk queryable service","properties":{"fullname":{"type":"string","title":"fullname is the protobuf fullname of the service descriptor"},"is_module":{"type":"boolean","title":"is_module describes if this service is actually exposed by an application's module"},"methods":{"type":"array","title":"methods provides a list of query service methods","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryMethodDescriptor"}}}},"cosmos.base.reflection.v2alpha1.QueryServicesDescriptor":{"type":"object","title":"QueryServicesDescriptor contains the list of cosmos-sdk queriable services","properties":{"query_services":{"type":"array","title":"query_services is a list of cosmos-sdk QueryServiceDescriptor","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServiceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.SigningModeDescriptor":{"type":"object","title":"SigningModeDescriptor provides information on a signing flow of the application\nNOTE(fdymylja): here we could go as far as providing an entire flow on how\nto sign a message given a SigningModeDescriptor, but it's better to think about\nthis another time","properties":{"authn_info_provider_method_fullname":{"type":"string","title":"authn_info_provider_method_fullname defines the fullname of the method to call to get\nthe metadata required to authenticate using the provided sign_modes"},"name":{"type":"string","title":"name defines the unique name of the signing mode"},"number":{"type":"integer","format":"int32","title":"number is the unique int32 identifier for the sign_mode enum"}}},"cosmos.base.reflection.v2alpha1.TxDescriptor":{"type":"object","title":"TxDescriptor describes the accepted transaction type","properties":{"fullname":{"description":"fullname is the protobuf fullname of the raw transaction type (for instance the tx.Tx type)\nit is not meant to support polymorphism of transaction types, it is supposed to be used by\nreflection clients to understand if they can handle a specific transaction type in an application.","type":"string"},"msgs":{"type":"array","title":"msgs lists the accepted application messages (sdk.Msg)","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.MsgDescriptor"}}}},"cosmos.base.tendermint.v1beta1.ABCIQueryResponse":{"description":"ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query.\n\nNote: This type is a duplicate of the ResponseQuery proto type defined in\nTendermint.","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"type":"string","title":"nondeterministic"},"proof_ops":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOps"},"value":{"type":"string","format":"byte"}}},"cosmos.base.tendermint.v1beta1.Block":{"description":"Block is tendermint type Block, with the Header proposer address\nfield converted to bech32 string.","type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse":{"description":"GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestBlockResponse":{"description":"GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"title":"Since: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse":{"description":"GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.GetNodeInfoResponse":{"description":"GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method.","type":"object","properties":{"application_version":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.VersionInfo"},"default_node_info":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfo"}}},"cosmos.base.tendermint.v1beta1.GetSyncingResponse":{"description":"GetSyncingResponse is the response type for the Query/GetSyncing RPC method.","type":"object","properties":{"syncing":{"type":"boolean"}}},"cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse":{"description":"GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.Header":{"description":"Header defines the structure of a Tendermint block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"description":"proposer_address is the original block proposer address, formatted as a Bech32 string.\nIn Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\nfor better UX.\n\noriginal proposer of the block","type":"string"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"cosmos.base.tendermint.v1beta1.Module":{"type":"object","title":"Module is the type for VersionInfo","properties":{"path":{"type":"string","title":"module path"},"sum":{"type":"string","title":"checksum"},"version":{"type":"string","title":"module version"}}},"cosmos.base.tendermint.v1beta1.ProofOp":{"description":"ProofOp defines an operation used for calculating Merkle root. The data could\nbe arbitrary format, providing necessary data for example neighbouring node\nhash.\n\nNote: This type is a duplicate of the ProofOp proto type defined in Tendermint.","type":"object","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"cosmos.base.tendermint.v1beta1.ProofOps":{"description":"ProofOps is Merkle proof defined by the list of ProofOps.\n\nNote: This type is a duplicate of the ProofOps proto type defined in Tendermint.","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOp"}}}},"cosmos.base.tendermint.v1beta1.Validator":{"description":"Validator is the type for the validator-set.","type":"object","properties":{"address":{"type":"string"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"voting_power":{"type":"string","format":"int64"}}},"cosmos.base.tendermint.v1beta1.VersionInfo":{"description":"VersionInfo is the type for the GetNodeInfoResponse message.","type":"object","properties":{"app_name":{"type":"string"},"build_deps":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Module"}},"build_tags":{"type":"string"},"cosmos_sdk_version":{"type":"string","title":"Since: cosmos-sdk 0.43"},"git_commit":{"type":"string"},"go_version":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.base.v1beta1.DecCoin":{"description":"DecCoin defines a token with a denomination and a decimal amount.\n\nNOTE: The amount field is an Dec which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.circuit.v1.AccountResponse":{"description":"AccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"permission":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.AccountsResponse":{"description":"AccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.circuit.v1.GenesisAccountPermissions"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.circuit.v1.DisabledListResponse":{"description":"DisabledListResponse is the response type for the Query/DisabledList RPC method.","type":"object","properties":{"disabled_list":{"type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.GenesisAccountPermissions":{"type":"object","title":"GenesisAccountPermissions is the account permissions for the circuit breaker in genesis","properties":{"address":{"type":"string"},"permissions":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreaker":{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","type":"object","properties":{"grantee":{"description":"grantee is the account authorized with the provided permissions.","type":"string"},"granter":{"description":"granter is the granter of the circuit breaker permissions and must have\nLEVEL_SUPER_ADMIN.","type":"string"},"permissions":{"description":"permissions are the circuit breaker permissions that the grantee receives.\nThese will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can\nbe specified to revoke all permissions.","$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse":{"description":"MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgResetCircuitBreaker":{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip or reset the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of Msg type URLs to resume processing. If\nit is left empty all Msg processing for type URLs that the account is\nauthorized to trip will resume.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgResetCircuitBreakerResponse":{"description":"MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgTripCircuitBreaker":{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of type URLs to immediately stop processing.\nIF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY.\nThis value is validated against the authority's permissions and if the\nauthority does not have permissions to trip the specified msg type URLs\n(or all URLs), the operation will fail.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgTripCircuitBreakerResponse":{"description":"MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.Permissions":{"description":"Permissions are the permissions that an account has to trip\nor reset the circuit breaker.","type":"object","properties":{"level":{"description":"level is the level of permissions granted to this account.","$ref":"#/definitions/cosmos.circuit.v1.Permissions.Level"},"limit_type_urls":{"description":"limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type\nURLs that the account can trip. It is an error to use limit_type_urls with\na level other than LEVEL_SOME_MSGS.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.Permissions.Level":{"description":"Level is the permission level.\n\n - LEVEL_NONE_UNSPECIFIED: LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit\nbreaker permissions.\n - LEVEL_SOME_MSGS: LEVEL_SOME_MSGS indicates that the account will have permission to\ntrip or reset the circuit breaker for some Msg type URLs. If this level\nis chosen, a non-empty list of Msg type URLs must be provided in\nlimit_type_urls.\n - LEVEL_ALL_MSGS: LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit\nbreaker for Msg's of all type URLs.\n - LEVEL_SUPER_ADMIN: LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker\nactions and can grant permissions to other accounts.","type":"string","default":"LEVEL_NONE_UNSPECIFIED","enum":["LEVEL_NONE_UNSPECIFIED","LEVEL_SOME_MSGS","LEVEL_ALL_MSGS","LEVEL_SUPER_ADMIN"]},"cosmos.consensus.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"abci":{"title":"Since: cosmos-sdk 0.50","$ref":"#/definitions/tendermint.types.ABCIParams"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"block":{"description":"params defines the x/consensus parameters to update.\nVersionsParams is not included in this Msg because it is tracked\nsepararately in x/upgrade.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"}}},"cosmos.consensus.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.consensus.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/consensus parameters.","type":"object","properties":{"params":{"description":"params are the tendermint consensus params stored in the consensus module.\nPlease note that `params.version` is not populated in this response, it is\ntracked separately in the x/upgrade module.","$ref":"#/definitions/tendermint.types.ConsensusParams"}}},"cosmos.crisis.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"constant_fee":{"description":"constant_fee defines the x/crisis parameter.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.crisis.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.crisis.v1beta1.MsgVerifyInvariant":{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","type":"object","properties":{"invariant_module_name":{"description":"name of the invariant module.","type":"string"},"invariant_route":{"description":"invariant_route is the msg's invariant route.","type":"string"},"sender":{"description":"sender is the account address of private key to send coins to fee collector account.","type":"string"}}},"cosmos.crisis.v1beta1.MsgVerifyInvariantResponse":{"description":"MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type.","type":"object"},"cosmos.crypto.multisig.v1beta1.CompactBitArray":{"description":"CompactBitArray is an implementation of a space efficient bit array.\nThis is used to ensure that the encoded data takes up a minimal amount of\nspace after proto encoding.\nThis is not thread safe, and is not intended for concurrent usage.","type":"object","properties":{"elems":{"type":"string","format":"byte"},"extra_bits_stored":{"type":"integer","format":"int64"}}},"cosmos.distribution.v1beta1.DelegationDelegatorReward":{"description":"DelegationDelegatorReward represents the properties\nof a delegator's delegation reward.","type":"object","properties":{"reward":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse":{"description":"MsgDepositValidatorRewardsPoolResponse defines the response to executing a\nMsgDepositValidatorRewardsPool message.\n\nSince: cosmos-sdk 0.50","type":"object"},"cosmos.distribution.v1beta1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.distribution.v1beta1.MsgSetWithdrawAddress":{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","type":"object","properties":{"delegator_address":{"type":"string"},"withdraw_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse":{"description":"MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response\ntype.","type":"object"},"cosmos.distribution.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/distribution parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward":{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse":{"description":"MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward\nresponse type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission":{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","type":"object","properties":{"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse":{"description":"MsgWithdrawValidatorCommissionResponse defines the\nMsg/WithdrawValidatorCommission response type.","type":"object","properties":{"amount":{"type":"array","title":"Since: cosmos-sdk 0.46","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.Params":{"description":"Params defines the set of params for the distribution module.","type":"object","properties":{"base_proposer_reward":{"description":"Deprecated: The base_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"bonus_proposer_reward":{"description":"Deprecated: The bonus_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"community_tax":{"type":"string"},"withdraw_addr_enabled":{"type":"boolean"}}},"cosmos.distribution.v1beta1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationRewardsResponse":{"description":"QueryDelegationRewardsResponse is the response type for the\nQuery/DelegationRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines the rewards accrued by a delegation.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse":{"description":"QueryDelegationTotalRewardsResponse is the response type for the\nQuery/DelegationTotalRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines all the rewards accrued by a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.DelegationDelegatorReward"}},"total":{"description":"total defines the sum of all the rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is the response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"validators":{"description":"validators defines the validators a delegator is delegating for.","type":"array","items":{"type":"string"}}}},"cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse":{"description":"QueryDelegatorWithdrawAddressResponse is the response type for the\nQuery/DelegatorWithdrawAddress RPC method.","type":"object","properties":{"withdraw_address":{"description":"withdraw_address defines the delegator address to query for.","type":"string"}}},"cosmos.distribution.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.QueryValidatorCommissionResponse":{"type":"object","title":"QueryValidatorCommissionResponse is the response type for the\nQuery/ValidatorCommission RPC method","properties":{"commission":{"description":"commission defines the commission the validator received.","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorAccumulatedCommission"}}},"cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse":{"description":"QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method.","type":"object","properties":{"commission":{"description":"commission defines the commission the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"operator_address":{"description":"operator_address defines the validator operator address.","type":"string"},"self_bond_rewards":{"description":"self_bond_rewards defines the self delegations rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse":{"description":"QueryValidatorOutstandingRewardsResponse is the response type for the\nQuery/ValidatorOutstandingRewards RPC method.","type":"object","properties":{"rewards":{"$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorOutstandingRewards"}}},"cosmos.distribution.v1beta1.QueryValidatorSlashesResponse":{"description":"QueryValidatorSlashesResponse is the response type for the\nQuery/ValidatorSlashes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"slashes":{"description":"slashes defines the slashes the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorSlashEvent"}}}},"cosmos.distribution.v1beta1.ValidatorAccumulatedCommission":{"description":"ValidatorAccumulatedCommission represents accumulated commission\nfor a validator kept as a running counter, can be withdrawn at any time.","type":"object","properties":{"commission":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorOutstandingRewards":{"description":"ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\nfor a validator inexpensive to track, allows simple sanity checks.","type":"object","properties":{"rewards":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorSlashEvent":{"description":"ValidatorSlashEvent represents a validator slash event.\nHeight is implicit within the store key.\nThis is needed to calculate appropriate amount of staking tokens\nfor delegations which are withdrawn after a slash has occurred.","type":"object","properties":{"fraction":{"type":"string"},"validator_period":{"type":"string","format":"uint64"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidence":{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","type":"object","properties":{"evidence":{"description":"evidence defines the evidence of misbehavior.","$ref":"#/definitions/google.protobuf.Any"},"submitter":{"description":"submitter is the signer account address of evidence.","type":"string"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse":{"description":"MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.","type":"object","properties":{"hash":{"description":"hash defines the hash of the evidence.","type":"string","format":"byte"}}},"cosmos.evidence.v1beta1.QueryAllEvidenceResponse":{"description":"QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC\nmethod.","type":"object","properties":{"evidence":{"description":"evidence returns all evidences.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.evidence.v1beta1.QueryEvidenceResponse":{"description":"QueryEvidenceResponse is the response type for the Query/Evidence RPC method.","type":"object","properties":{"evidence":{"description":"evidence returns the requested evidence.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.feegrant.v1beta1.Grant":{"type":"object","title":"Grant is stored in the KVStore to record a grant with full context","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowance":{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","type":"object","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse":{"description":"MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgPruneAllowances":{"description":"MsgPruneAllowances prunes expired fee allowances.\n\nSince cosmos-sdk 0.50","type":"object","properties":{"pruner":{"description":"pruner is the address of the user pruning expired allowances.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse":{"description":"MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type.\n\nSince cosmos-sdk 0.50","type":"object"},"cosmos.feegrant.v1beta1.MsgRevokeAllowance":{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","type":"object","properties":{"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse":{"description":"MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.QueryAllowanceResponse":{"description":"QueryAllowanceResponse is the response type for the Query/Allowance RPC method.","type":"object","properties":{"allowance":{"description":"allowance is a allowance granted for grantee by granter.","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}}},"cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse":{"description":"QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"allowances":{"description":"allowances that have been issued by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.feegrant.v1beta1.QueryAllowancesResponse":{"description":"QueryAllowancesResponse is the response type for the Query/Allowances RPC method.","type":"object","properties":{"allowances":{"description":"allowances are allowance's granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1.MsgCancelProposal":{"description":"MsgCancelProposal is the Msg/CancelProposal request type.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1.MsgCancelProposalResponse":{"description":"MsgCancelProposalResponse defines the response structure for executing a\nMsgCancelProposal message.\n\nSince: cosmos-sdk 0.50","type":"object","properties":{"canceled_height":{"description":"canceled_height defines the block height at which the proposal is canceled.","type":"string","format":"uint64"},"canceled_time":{"description":"canceled_time is the time when proposal is canceled.","type":"string","format":"date-time"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1.MsgExecLegacyContent":{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","type":"object","properties":{"authority":{"description":"authority must be the gov module address.","type":"string"},"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.gov.v1.MsgExecLegacyContentResponse":{"description":"MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type.","type":"object"},"cosmos.gov.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited or not"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"messages":{"description":"messages are the arbitrary messages to be executed if proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.gov.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/gov parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.gov.v1.Params"}}},"cosmos.gov.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.gov.v1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the Vote.","type":"string"},"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the VoteWeighted.","type":"string"},"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1.Params":{"description":"Params defines the parameters for the x/gov module.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"burn_proposal_deposit_prevote":{"type":"boolean","title":"burn deposits if the proposal does not enter voting period"},"burn_vote_quorum":{"type":"boolean","title":"burn deposits if a proposal does not meet quorum"},"burn_vote_veto":{"type":"boolean","title":"burn deposits if quorum with vote type no_veto is met"},"expedited_min_deposit":{"description":"Minimum expedited deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"expedited_threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.67.\n\nSince: cosmos-sdk 0.50","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.\n\nSince: cosmos-sdk 0.50","type":"string"},"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"min_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value minimum that must be met when making a deposit.\nDefault value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be\nrequired.\n\nSince: cosmos-sdk 0.50","type":"string"},"min_initial_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value that must be paid at proposal submission.","type":"string"},"proposal_cancel_dest":{"description":"The address which will receive (proposal_cancel_ratio * deposit) proposal deposits.\nIf empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned.\n\nSince: cosmos-sdk 0.50","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.\n\nSince: cosmos-sdk 0.50","type":"string"},"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\n considered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\n vetoed. Default value: 1/3.","type":"string"},"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"expedited":{"description":"Since: cosmos-sdk 0.50","type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"description":"Since: cosmos-sdk 0.50","type":"string","title":"failed_reason defines the reason why the proposal failed"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"},"id":{"description":"id defines the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages are the arbitrary messages to be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/gov#proposal-3"},"proposer":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"proposer is the address of the proposal sumbitter"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1.QueryConstitutionResponse":{"type":"object","title":"QueryConstitutionResponse is the response type for the Query/Constitution RPC method","properties":{"constitution":{"type":"string"}}},"cosmos.gov.v1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1.Deposit"}}},"cosmos.gov.v1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"Deprecated: Prefer to use `params` instead.\ndeposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1.DepositParams"},"params":{"description":"params defines all the paramaters of x/gov module.\n\nSince: cosmos-sdk 0.47","$ref":"#/definitions/cosmos.gov.v1.Params"},"tally_params":{"description":"Deprecated: Prefer to use `params` instead.\ntally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1.TallyParams"},"voting_params":{"description":"Deprecated: Prefer to use `params` instead.\nvoting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1.VotingParams"}}},"cosmos.gov.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"description":"proposal is the requested governance proposal.","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}},"cosmos.gov.v1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}}},"cosmos.gov.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"}}},"cosmos.gov.v1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1.Vote"}}},"cosmos.gov.v1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Vote"}}}},"cosmos.gov.v1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string"}}},"cosmos.gov.v1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the number of abstain votes on a proposal.","type":"string"},"no_count":{"description":"no_count is the number of no votes on a proposal.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the number of no with veto votes on a proposal.","type":"string"},"yes_count":{"description":"yes_count is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.gov.v1beta1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1beta1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1beta1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1beta1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1beta1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.\n\nSince: cosmos-sdk 0.43","type":"object"},"cosmos.gov.v1beta1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1beta1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1beta1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1beta1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}}},"cosmos.gov.v1beta1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"deposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.DepositParams"},"tally_params":{"description":"tally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyParams"},"voting_params":{"description":"voting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1beta1.VotingParams"}}},"cosmos.gov.v1beta1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}},"cosmos.gov.v1beta1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}}},"cosmos.gov.v1beta1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"}}},"cosmos.gov.v1beta1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}},"cosmos.gov.v1beta1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}}},"cosmos.gov.v1beta1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string","format":"byte"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string","format":"byte"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string","format":"byte"}}},"cosmos.gov.v1beta1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain":{"description":"abstain is the number of abstain votes on a proposal.","type":"string"},"no":{"description":"no is the number of no votes on a proposal.","type":"string"},"no_with_veto":{"description":"no_with_veto is the number of no with veto votes on a proposal.","type":"string"},"yes":{"description":"yes is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1beta1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"option":{"description":"Deprecated: Prefer to use `options` instead. This field is set in queries\nif and only if `len(options) == 1` and that option has weight 1. In all\nother cases, this field will default to VOTE_OPTION_UNSPECIFIED.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"options":{"description":"options is the weighted vote options.\n\nSince: cosmos-sdk 0.43","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1beta1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1beta1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1beta1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.group.v1.Exec":{"description":"Exec defines modes of execution of a proposal on creation or on new vote.\n\n - EXEC_UNSPECIFIED: An empty value means that there should be a separate\nMsgExec request for the proposal to execute.\n - EXEC_TRY: Try to execute the proposal immediately.\nIf the proposal is not allowed per the DecisionPolicy,\nthe proposal will still be open and could\nbe executed at a later point.","type":"string","default":"EXEC_UNSPECIFIED","enum":["EXEC_UNSPECIFIED","EXEC_TRY"]},"cosmos.group.v1.GroupInfo":{"description":"GroupInfo represents the high-level on-chain information for a group.","type":"object","properties":{"admin":{"description":"admin is the account address of the group's admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group was created.","type":"string","format":"date-time"},"id":{"description":"id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata to attached to the group.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1"},"total_weight":{"description":"total_weight is the sum of the group members' weights.","type":"string"},"version":{"type":"string","format":"uint64","title":"version is used to track changes to a group's membership structure that\nwould break existing proposals. Whenever any members weight is changed,\nor any member is added or removed this version is incremented and will\ncause proposals based on older versions of this group to fail"}}},"cosmos.group.v1.GroupMember":{"description":"GroupMember represents the relationship between a group and a member.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member":{"description":"member is the member data.","$ref":"#/definitions/cosmos.group.v1.Member"}}},"cosmos.group.v1.GroupPolicyInfo":{"description":"GroupPolicyInfo represents the high-level on-chain information for a group policy.","type":"object","properties":{"address":{"description":"address is the account address of group policy.","type":"string"},"admin":{"description":"admin is the account address of the group admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group policy was created.","type":"string","format":"date-time"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the group policy.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#decision-policy-1"},"version":{"description":"version is used to track changes to a group's GroupPolicyInfo structure that\nwould create a different result on a running proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.Member":{"description":"Member represents a group member with an account address,\nnon-zero weight, metadata and added_at timestamp.","type":"object","properties":{"added_at":{"description":"added_at is a timestamp specifying when a member was added.","type":"string","format":"date-time"},"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MemberRequest":{"description":"MemberRequest represents a group member to be used in Msg server requests.\nContrary to `Member`, it doesn't have any `added_at` field\nsince this field cannot be set as part of requests.","type":"object","properties":{"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MsgCreateGroup":{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}},"metadata":{"description":"metadata is any arbitrary metadata to attached to the group.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicy":{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is any arbitrary metadata attached to the group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicyResponse":{"description":"MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type.","type":"object","properties":{"address":{"description":"address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupResponse":{"description":"MsgCreateGroupResponse is the Msg/CreateGroup response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgCreateGroupWithPolicy":{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group and group policy admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_metadata":{"description":"group_metadata is any arbitrary metadata attached to the group.","type":"string"},"group_policy_as_admin":{"description":"group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group\nand group policy admin.","type":"boolean"},"group_policy_metadata":{"description":"group_policy_metadata is any arbitrary metadata attached to the group policy.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgCreateGroupWithPolicyResponse":{"description":"MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group with policy.","type":"string","format":"uint64"},"group_policy_address":{"description":"group_policy_address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgExec":{"description":"MsgExec is the Msg/Exec request type.","type":"object","properties":{"executor":{"description":"executor is the account address used to execute the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgExecResponse":{"description":"MsgExecResponse is the Msg/Exec request type.","type":"object","properties":{"result":{"description":"result is the final result of the proposal execution.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"}}},"cosmos.group.v1.MsgLeaveGroup":{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","type":"object","properties":{"address":{"description":"address is the account address of the group member.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgLeaveGroupResponse":{"description":"MsgLeaveGroupResponse is the Msg/LeaveGroup response type.","type":"object"},"cosmos.group.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","type":"object","properties":{"exec":{"description":"exec defines the mode of execution of the proposal,\nwhether it should be executed immediately on creation or not.\nIf so, proposers signatures are considered as Yes votes.","$ref":"#/definitions/cosmos.group.v1.Exec"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposers":{"description":"proposers are the account addresses of the proposers.\nProposers signatures will be counted as yes votes.","type":"array","items":{"type":"string"}},"summary":{"description":"summary is the summary of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"},"title":{"description":"title is the title of the proposal.\n\nSince: cosmos-sdk 0.47","type":"string"}}},"cosmos.group.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse is the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgUpdateGroupAdmin":{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the current account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"new_admin":{"description":"new_admin is the group new admin account address.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupAdminResponse":{"description":"MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMembers":{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member_updates":{"description":"member_updates is the list of members to update,\nset weight to 0 to remove a member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgUpdateGroupMembersResponse":{"description":"MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMetadata":{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is the updated group's metadata.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupMetadataResponse":{"description":"MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyAdmin":{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of the group policy.","type":"string"},"new_admin":{"description":"new_admin is the new group policy admin.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse":{"description":"MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy":{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy is the updated group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse":{"description":"MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyMetadata":{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"metadata":{"description":"metadata is the group policy metadata to be updated.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse":{"description":"MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type.","type":"object"},"cosmos.group.v1.MsgVote":{"description":"MsgVote is the Msg/Vote request type.","type":"object","properties":{"exec":{"description":"exec defines whether the proposal should be executed\nimmediately after voting or not.","$ref":"#/definitions/cosmos.group.v1.Exec"},"metadata":{"description":"metadata is any arbitrary metadata attached to the vote.","type":"string"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter account address.","type":"string"}}},"cosmos.group.v1.MsgVoteResponse":{"description":"MsgVoteResponse is the Msg/Vote response type.","type":"object"},"cosmos.group.v1.MsgWithdrawProposal":{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","type":"object","properties":{"address":{"description":"address is the admin of the group policy or one of the proposer of the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgWithdrawProposalResponse":{"description":"MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type.","type":"object"},"cosmos.group.v1.Proposal":{"description":"Proposal defines a group proposal. Any member of a group can submit a proposal\nfor a group policy to decide upon.\nA proposal consists of a set of `sdk.Msg`s that will be executed if the proposal\npasses as well as some optional metadata associated with the proposal.","type":"object","properties":{"executor_result":{"description":"executor_result is the final result of the proposal execution. Initial value is NotRun.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"},"final_tally_result":{"description":"final_tally_result contains the sums of all weighted votes for this\nproposal for each vote option. It is empty at submission, and only\npopulated after tallying, at voting period end or at proposal execution,\nwhichever happens first.","$ref":"#/definitions/cosmos.group.v1.TallyResult"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"group_policy_version":{"description":"group_policy_version tracks the version of the group policy at proposal submission.\nWhen a decision policy is changed, existing proposals from previous policy\nversions will become invalid with the `ABORTED` status.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"group_version":{"description":"group_version tracks the version of the group at proposal submission.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"id":{"description":"id is the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#proposal-4"},"proposers":{"description":"proposers are the account addresses of the proposers.","type":"array","items":{"type":"string"}},"status":{"description":"status represents the high level position in the life cycle of the proposal. Initial value is Submitted.","$ref":"#/definitions/cosmos.group.v1.ProposalStatus"},"submit_time":{"description":"submit_time is a timestamp specifying when a proposal was submitted.","type":"string","format":"date-time"},"summary":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"summary is a short summary of the proposal"},"title":{"description":"Since: cosmos-sdk 0.47","type":"string","title":"title is the title of the proposal"},"voting_period_end":{"description":"voting_period_end is the timestamp before which voting must be done.\nUnless a successful MsgExec is called before (to execute a proposal whose\ntally is successful before the voting period ends), tallying will be done\nat this point, and the `final_tally_result`and `status` fields will be\naccordingly updated.","type":"string","format":"date-time"}}},"cosmos.group.v1.ProposalExecutorResult":{"description":"ProposalExecutorResult defines types of proposal executor results.\n\n - PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED: An empty value is not allowed.\n - PROPOSAL_EXECUTOR_RESULT_NOT_RUN: We have not yet run the executor.\n - PROPOSAL_EXECUTOR_RESULT_SUCCESS: The executor was successful and proposed action updated state.\n - PROPOSAL_EXECUTOR_RESULT_FAILURE: The executor returned an error and proposed action didn't update state.","type":"string","default":"PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","enum":["PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","PROPOSAL_EXECUTOR_RESULT_NOT_RUN","PROPOSAL_EXECUTOR_RESULT_SUCCESS","PROPOSAL_EXECUTOR_RESULT_FAILURE"]},"cosmos.group.v1.ProposalStatus":{"description":"ProposalStatus defines proposal statuses.\n\n - PROPOSAL_STATUS_UNSPECIFIED: An empty value is invalid and not allowed.\n - PROPOSAL_STATUS_SUBMITTED: Initial status of a proposal when submitted.\n - PROPOSAL_STATUS_ACCEPTED: Final status of a proposal when the final tally is done and the outcome\npasses the group policy's decision policy.\n - PROPOSAL_STATUS_REJECTED: Final status of a proposal when the final tally is done and the outcome\nis rejected by the group policy's decision policy.\n - PROPOSAL_STATUS_ABORTED: Final status of a proposal when the group policy is modified before the\nfinal tally.\n - PROPOSAL_STATUS_WITHDRAWN: A proposal can be withdrawn before the voting start time by the owner.\nWhen this happens the final status is Withdrawn.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_SUBMITTED","PROPOSAL_STATUS_ACCEPTED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_ABORTED","PROPOSAL_STATUS_WITHDRAWN"]},"cosmos.group.v1.QueryGroupInfoResponse":{"description":"QueryGroupInfoResponse is the Query/GroupInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupInfo of the group.","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}}},"cosmos.group.v1.QueryGroupMembersResponse":{"description":"QueryGroupMembersResponse is the Query/GroupMembersResponse response type.","type":"object","properties":{"members":{"description":"members are the members of the group with given group_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupMember"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByAdminResponse":{"description":"QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info with provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByGroupResponse":{"description":"QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info associated with the provided group.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPolicyInfoResponse":{"description":"QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupPolicyInfo of the group policy.","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}}},"cosmos.group.v1.QueryGroupsByAdminResponse":{"description":"QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsByMemberResponse":{"description":"QueryGroupsByMemberResponse is the Query/GroupsByMember response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided group member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsResponse":{"description":"QueryGroupsResponse is the Query/Groups response type.\n\nSince: cosmos-sdk 0.47.1","type":"object","properties":{"groups":{"description":"`groups` is all the groups present in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the Query/Proposal response type.","type":"object","properties":{"proposal":{"description":"proposal is the proposal info.","$ref":"#/definitions/cosmos.group.v1.Proposal"}}},"cosmos.group.v1.QueryProposalsByGroupPolicyResponse":{"description":"QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals are the proposals with given group policy.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Proposal"}}}},"cosmos.group.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the Query/TallyResult response type.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.group.v1.TallyResult"}}},"cosmos.group.v1.QueryVoteByProposalVoterResponse":{"description":"QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type.","type":"object","properties":{"vote":{"description":"vote is the vote with given proposal_id and voter.","$ref":"#/definitions/cosmos.group.v1.Vote"}}},"cosmos.group.v1.QueryVotesByProposalResponse":{"description":"QueryVotesByProposalResponse is the Query/VotesByProposal response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes for given proposal_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.QueryVotesByVoterResponse":{"description":"QueryVotesByVoterResponse is the Query/VotesByVoter response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes by given voter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.TallyResult":{"description":"TallyResult represents the sum of weighted votes for each vote option.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the weighted sum of abstainers.","type":"string"},"no_count":{"description":"no_count is the weighted sum of no votes.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the weighted sum of veto.","type":"string"},"yes_count":{"description":"yes_count is the weighted sum of yes votes.","type":"string"}}},"cosmos.group.v1.Vote":{"type":"object","title":"Vote represents a vote for a proposal.string metadata","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"submit_time":{"description":"submit_time is the timestamp when the vote was submitted.","type":"string","format":"date-time"},"voter":{"description":"voter is the account address of the voter.","type":"string"}}},"cosmos.group.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will\nreturn an error.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.mint.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.mint.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.mint.v1beta1.Params":{"description":"Params defines the parameters for the x/mint module.","type":"object","properties":{"blocks_per_year":{"type":"string","format":"uint64","title":"expected blocks per year"},"goal_bonded":{"type":"string","title":"goal of percent bonded atoms"},"inflation_max":{"type":"string","title":"maximum inflation rate"},"inflation_min":{"type":"string","title":"minimum inflation rate"},"inflation_rate_change":{"type":"string","title":"maximum annual change in inflation rate"},"mint_denom":{"type":"string","title":"type of coin to mint"}}},"cosmos.mint.v1beta1.QueryAnnualProvisionsResponse":{"description":"QueryAnnualProvisionsResponse is the response type for the\nQuery/AnnualProvisions RPC method.","type":"object","properties":{"annual_provisions":{"description":"annual_provisions is the current minting annual provisions value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryInflationResponse":{"description":"QueryInflationResponse is the response type for the Query/Inflation RPC\nmethod.","type":"object","properties":{"inflation":{"description":"inflation is the current minting inflation value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.nft.v1beta1.Class":{"description":"Class defines the class of the nft type.","type":"object","properties":{"data":{"title":"data is the app specific metadata of the NFT class. Optional","$ref":"#/definitions/google.protobuf.Any"},"description":{"type":"string","title":"description is a brief description of nft classification. Optional"},"id":{"type":"string","title":"id defines the unique identifier of the NFT classification, similar to the contract address of ERC721"},"name":{"type":"string","title":"name defines the human-readable name of the NFT classification. Optional"},"symbol":{"type":"string","title":"symbol is an abbreviated name for nft classification. Optional"},"uri":{"type":"string","title":"uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri. Optional"}}},"cosmos.nft.v1beta1.MsgSend":{"description":"MsgSend represents a message to send a nft from one account to another account.","type":"object","properties":{"class_id":{"type":"string","title":"class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721"},"id":{"type":"string","title":"id defines the unique identification of nft"},"receiver":{"type":"string","title":"receiver is the receiver address of nft"},"sender":{"type":"string","title":"sender is the address of the owner of nft"}}},"cosmos.nft.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.nft.v1beta1.NFT":{"description":"NFT defines the NFT.","type":"object","properties":{"class_id":{"type":"string","title":"class_id associated with the NFT, similar to the contract address of ERC721"},"data":{"title":"data is an app specific data of the NFT. Optional","$ref":"#/definitions/google.protobuf.Any"},"id":{"type":"string","title":"id is a unique identifier of the NFT"},"uri":{"type":"string","title":"uri for the NFT metadata stored off chain"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri"}}},"cosmos.nft.v1beta1.QueryBalanceResponse":{"type":"object","title":"QueryBalanceResponse is the response type for the Query/Balance RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs of a given class owned by the owner"}}},"cosmos.nft.v1beta1.QueryClassResponse":{"type":"object","title":"QueryClassResponse is the response type for the Query/Class RPC method","properties":{"class":{"description":"class defines the class of the nft type.","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}}},"cosmos.nft.v1beta1.QueryClassesResponse":{"type":"object","title":"QueryClassesResponse is the response type for the Query/Classes RPC method","properties":{"classes":{"description":"class defines the class of the nft type.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryNFTResponse":{"type":"object","title":"QueryNFTResponse is the response type for the Query/NFT RPC method","properties":{"nft":{"title":"owner is the owner address of the nft","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}}},"cosmos.nft.v1beta1.QueryNFTsResponse":{"type":"object","title":"QueryNFTsResponse is the response type for the Query/NFTs RPC methods","properties":{"nfts":{"type":"array","title":"NFT defines the NFT","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryOwnerResponse":{"type":"object","title":"QueryOwnerResponse is the response type for the Query/Owner RPC method","properties":{"owner":{"type":"string","title":"owner is the owner address of the nft"}}},"cosmos.nft.v1beta1.QuerySupplyResponse":{"type":"object","title":"QuerySupplyResponse is the response type for the Query/Supply RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs from the given class"}}},"cosmos.params.v1beta1.ParamChange":{"description":"ParamChange defines an individual parameter change, for use in\nParameterChangeProposal.","type":"object","properties":{"key":{"type":"string"},"subspace":{"type":"string"},"value":{"type":"string"}}},"cosmos.params.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"param":{"description":"param defines the queried parameter.","$ref":"#/definitions/cosmos.params.v1beta1.ParamChange"}}},"cosmos.params.v1beta1.QuerySubspacesResponse":{"description":"QuerySubspacesResponse defines the response types for querying for all\nregistered subspaces and all keys for a subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"subspaces":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.params.v1beta1.Subspace"}}}},"cosmos.params.v1beta1.Subspace":{"description":"Subspace defines a parameter subspace name and all the keys that exist for\nthe subspace.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjail":{"type":"object","title":"MsgUnjail defines the Msg/Unjail request type","properties":{"validator_addr":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjailResponse":{"type":"object","title":"MsgUnjailResponse defines the Msg/Unjail response type"},"cosmos.slashing.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/slashing parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.slashing.v1beta1.Params":{"description":"Params represents the parameters used for by the slashing module.","type":"object","properties":{"downtime_jail_duration":{"type":"string"},"min_signed_per_window":{"type":"string","format":"byte"},"signed_blocks_window":{"type":"string","format":"int64"},"slash_fraction_double_sign":{"type":"string","format":"byte"},"slash_fraction_downtime":{"type":"string","format":"byte"}}},"cosmos.slashing.v1beta1.QueryParamsResponse":{"type":"object","title":"QueryParamsResponse is the response type for the Query/Params RPC method","properties":{"params":{"$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.QuerySigningInfoResponse":{"type":"object","title":"QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC\nmethod","properties":{"val_signing_info":{"title":"val_signing_info is the signing info of requested val cons address","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}}},"cosmos.slashing.v1beta1.QuerySigningInfosResponse":{"type":"object","title":"QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC\nmethod","properties":{"info":{"type":"array","title":"info is the signing info of all validators","items":{"type":"object","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.slashing.v1beta1.ValidatorSigningInfo":{"description":"ValidatorSigningInfo defines a validator's signing info for monitoring their\nliveness activity.","type":"object","properties":{"address":{"type":"string"},"index_offset":{"description":"Index which is incremented every time a validator is bonded in a block and\n_may_ have signed a pre-commit or not. This in conjunction with the\nsigned_blocks_window param determines the index in the missed block bitmap.","type":"string","format":"int64"},"jailed_until":{"description":"Timestamp until which the validator is jailed due to liveness downtime.","type":"string","format":"date-time"},"missed_blocks_counter":{"description":"A counter of missed (unsigned) blocks. It is used to avoid unnecessary\nreads in the missed block bitmap.","type":"string","format":"int64"},"start_height":{"type":"string","format":"int64","title":"Height at which validator was first a candidate OR was un-jailed"},"tombstoned":{"description":"Whether or not a validator has been tombstoned (killed out of validator\nset). It is set once the validator commits an equivocation or for any other\nconfigured misbehavior.","type":"boolean"}}},"cosmos.staking.v1beta1.BondStatus":{"description":"BondStatus is the status of a validator.\n\n - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.","type":"string","default":"BOND_STATUS_UNSPECIFIED","enum":["BOND_STATUS_UNSPECIFIED","BOND_STATUS_UNBONDED","BOND_STATUS_UNBONDING","BOND_STATUS_BONDED"]},"cosmos.staking.v1beta1.Commission":{"description":"Commission defines commission parameters for a given validator.","type":"object","properties":{"commission_rates":{"description":"commission_rates defines the initial commission rates to be used for creating a validator.","$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"update_time":{"description":"update_time is the last time the commission rate was changed.","type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.CommissionRates":{"description":"CommissionRates defines the initial commission rates to be used for creating\na validator.","type":"object","properties":{"max_change_rate":{"description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction.","type":"string"},"max_rate":{"description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction.","type":"string"},"rate":{"description":"rate is the commission rate charged to delegators, as a fraction.","type":"string"}}},"cosmos.staking.v1beta1.Delegation":{"description":"Delegation represents the bond with tokens held by an account. It is\nowned by one delegator, and is associated with the voting power of one\nvalidator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"shares":{"description":"shares define the delegation shares received.","type":"string"},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.DelegationResponse":{"description":"DelegationResponse is equivalent to Delegation except that it contains a\nbalance in addition to shares which is more suitable for client responses.","type":"object","properties":{"balance":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Delegation"}}},"cosmos.staking.v1beta1.Description":{"description":"Description defines a validator description.","type":"object","properties":{"details":{"description":"details define other optional details.","type":"string"},"identity":{"description":"identity defines an optional identity signature (ex. UPort or Keybase).","type":"string"},"moniker":{"description":"moniker defines a human-readable name for the validator.","type":"string"},"security_contact":{"description":"security_contact defines an optional email for security contact.","type":"string"},"website":{"description":"website defines an optional website link.","type":"string"}}},"cosmos.staking.v1beta1.HistoricalInfo":{"description":"HistoricalInfo contains header and validator information for a given block.\nIt is stored as part of staking module's state, which persists the `n` most\nrecent HistoricalInfo\n(`n` is set by the staking module's `historical_entries` parameter).","type":"object","properties":{"header":{"$ref":"#/definitions/tendermint.types.Header"},"valset":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgBeginRedelegateResponse":{"description":"MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegation":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator","properties":{"amount":{"title":"amount is always less than or equal to unbonding delegation entry balance","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgCancelUnbondingDelegationResponse"},"cosmos.staking.v1beta1.MsgCreateValidator":{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","type":"object","properties":{"commission":{"$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"delegator_address":{"description":"Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated.\nThe validator address bytes and delegator address bytes refer to the same account while creating validator (defer\nonly in bech32 notation).","type":"string"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"pubkey":{"$ref":"#/definitions/google.protobuf.Any"},"validator_address":{"type":"string"},"value":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.staking.v1beta1.MsgCreateValidatorResponse":{"description":"MsgCreateValidatorResponse defines the Msg/CreateValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgDelegate":{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgDelegateResponse":{"description":"MsgDelegateResponse defines the Msg/Delegate response type.","type":"object"},"cosmos.staking.v1beta1.MsgEditValidator":{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","type":"object","properties":{"commission_rate":{"type":"string","title":"We pass a reference to the new commission rate and min self delegation as\nit's not mandatory to update. If not updated, the deserialized rate will be\nzero with no way to distinguish if an update was intended.\nREF: #2373"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgEditValidatorResponse":{"description":"MsgEditValidatorResponse defines the Msg/EditValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgUndelegate":{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgUndelegateResponse":{"description":"MsgUndelegateResponse defines the Msg/Undelegate response type.","type":"object","properties":{"amount":{"description":"Since: cosmos-sdk 0.50","title":"amount returns the amount of undelegated coins","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/staking parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47","type":"object"},"cosmos.staking.v1beta1.Params":{"description":"Params defines the parameters for the x/staking module.","type":"object","properties":{"bond_denom":{"description":"bond_denom defines the bondable coin denomination.","type":"string"},"historical_entries":{"description":"historical_entries is the number of historical entries to persist.","type":"integer","format":"int64"},"max_entries":{"description":"max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio).","type":"integer","format":"int64"},"max_validators":{"description":"max_validators is the maximum number of validators.","type":"integer","format":"int64"},"min_commission_rate":{"type":"string","title":"min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators"},"unbonding_time":{"description":"unbonding_time is the time duration of unbonding.","type":"string"}}},"cosmos.staking.v1beta1.Pool":{"description":"Pool is used for tracking bonded and not-bonded token supply of the bond\ndenomination.","type":"object","properties":{"bonded_tokens":{"type":"string"},"not_bonded_tokens":{"type":"string"}}},"cosmos.staking.v1beta1.QueryDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/Delegation RPC method.","type":"object","properties":{"delegation_response":{"description":"delegation_responses defines the delegation info of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse":{"description":"QueryDelegatorDelegationsResponse is response type for the\nQuery/DelegatorDelegations RPC method.","type":"object","properties":{"delegation_responses":{"description":"delegation_responses defines all the delegations' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse":{"description":"QueryUnbondingDelegatorDelegationsResponse is response type for the\nQuery/UnbondingDelegatorDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorResponse":{"description":"QueryDelegatorValidatorResponse response type for the\nQuery/DelegatorValidator RPC method.","type":"object","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators defines the validators' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.QueryHistoricalInfoResponse":{"description":"QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC\nmethod.","type":"object","properties":{"hist":{"description":"hist defines the historical info at the given height.","$ref":"#/definitions/cosmos.staking.v1beta1.HistoricalInfo"}}},"cosmos.staking.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.QueryPoolResponse":{"description":"QueryPoolResponse is response type for the Query/Pool RPC method.","type":"object","properties":{"pool":{"description":"pool defines the pool info.","$ref":"#/definitions/cosmos.staking.v1beta1.Pool"}}},"cosmos.staking.v1beta1.QueryRedelegationsResponse":{"description":"QueryRedelegationsResponse is response type for the Query/Redelegations RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"redelegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationResponse"}}}},"cosmos.staking.v1beta1.QueryUnbondingDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/UnbondingDelegation\nRPC method.","type":"object","properties":{"unbond":{"description":"unbond defines the unbonding information of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}},"cosmos.staking.v1beta1.QueryValidatorDelegationsResponse":{"type":"object","title":"QueryValidatorDelegationsResponse is response type for the\nQuery/ValidatorDelegations RPC method","properties":{"delegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryValidatorResponse":{"type":"object","title":"QueryValidatorResponse is response type for the Query/Validator RPC method","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse":{"description":"QueryValidatorUnbondingDelegationsResponse is response type for the\nQuery/ValidatorUnbondingDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryValidatorsResponse":{"type":"object","title":"QueryValidatorsResponse is response type for the Query/Validators RPC method","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators contains all the queried validators.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.Redelegation":{"description":"Redelegation contains the list of a particular delegator's redelegating bonds\nfrom a particular source validator to a particular destination validator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the bech32-encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the redelegation entries.\n\nredelegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}},"validator_dst_address":{"description":"validator_dst_address is the validator redelegation destination operator address.","type":"string"},"validator_src_address":{"description":"validator_src_address is the validator redelegation source operator address.","type":"string"}}},"cosmos.staking.v1beta1.RedelegationEntry":{"description":"RedelegationEntry defines a redelegation object with relevant metadata.","type":"object","properties":{"completion_time":{"description":"completion_time defines the unix time for redelegation completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height defines the height which the redelegation took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the initial balance when redelegation started.","type":"string"},"shares_dst":{"description":"shares_dst is the amount of destination-validator shares created by redelegation.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.RedelegationEntryResponse":{"description":"RedelegationEntryResponse is equivalent to a RedelegationEntry except that it\ncontains a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"balance":{"type":"string"},"redelegation_entry":{"$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}}},"cosmos.staking.v1beta1.RedelegationResponse":{"description":"RedelegationResponse is equivalent to a Redelegation except that its entries\ncontain a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntryResponse"}},"redelegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Redelegation"}}},"cosmos.staking.v1beta1.UnbondingDelegation":{"description":"UnbondingDelegation stores all of a single delegator's unbonding bonds\nfor a single validator in an time-ordered list.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the unbonding delegation entries.\n\nunbonding delegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegationEntry"}},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.UnbondingDelegationEntry":{"description":"UnbondingDelegationEntry defines an unbonding object with relevant metadata.","type":"object","properties":{"balance":{"description":"balance defines the tokens to receive at completion.","type":"string"},"completion_time":{"description":"completion_time is the unix time for unbonding completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the tokens initially scheduled to receive at completion.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.Validator":{"description":"Validator defines a validator, together with the total amount of the\nValidator's bond shares and their exchange rate to coins. Slashing results in\na decrease in the exchange rate, allowing correct calculation of future\nundelegations without iterating over delegators. When coins are delegated to\nthis validator, the validator is credited with a delegation whose number of\nbond shares is based on the amount of coins delegated divided by the current\nexchange rate. Voting power can be calculated as total bonded shares\nmultiplied by exchange rate.","type":"object","properties":{"commission":{"description":"commission defines the commission parameters.","$ref":"#/definitions/cosmos.staking.v1beta1.Commission"},"consensus_pubkey":{"description":"consensus_pubkey is the consensus public key of the validator, as a Protobuf Any.","$ref":"#/definitions/google.protobuf.Any"},"delegator_shares":{"description":"delegator_shares defines total shares issued to a validator's delegators.","type":"string"},"description":{"description":"description defines the description terms for the validator.","$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"jailed":{"description":"jailed defined whether the validator has been jailed from bonded status or not.","type":"boolean"},"min_self_delegation":{"description":"min_self_delegation is the validator's self declared minimum self delegation.\n\nSince: cosmos-sdk 0.46","type":"string"},"operator_address":{"description":"operator_address defines the address of the validator's operator; bech encoded in JSON.","type":"string"},"status":{"description":"status is the validator status (bonded/unbonding/unbonded).","$ref":"#/definitions/cosmos.staking.v1beta1.BondStatus"},"tokens":{"description":"tokens define the delegated tokens (incl. self-delegation).","type":"string"},"unbonding_height":{"description":"unbonding_height defines, if unbonding, the height at which this validator has begun unbonding.","type":"string","format":"int64"},"unbonding_ids":{"type":"array","title":"list of unbonding ids, each uniquely identifing an unbonding of this validator","items":{"type":"string","format":"uint64"}},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"strictly positive if this validator's unbonding has been stopped by external modules"},"unbonding_time":{"description":"unbonding_time defines, if unbonding, the min time for the validator to complete unbonding.","type":"string","format":"date-time"}}},"cosmos.store.streaming.abci.ListenCommitRequest":{"type":"object","title":"ListenCommitRequest is the request type for the ListenCommit RPC method","properties":{"block_height":{"type":"string","format":"int64","title":"explicitly pass in block height as ResponseCommit does not contain this info"},"change_set":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.store.v1beta1.StoreKVPair"}},"res":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}}},"cosmos.store.streaming.abci.ListenCommitResponse":{"type":"object","title":"ListenCommitResponse is the response type for the ListenCommit RPC method"},"cosmos.store.streaming.abci.ListenFinalizeBlockRequest":{"type":"object","title":"ListenEndBlockRequest is the request type for the ListenEndBlock RPC method","properties":{"req":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"},"res":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}}},"cosmos.store.streaming.abci.ListenFinalizeBlockResponse":{"type":"object","title":"ListenEndBlockResponse is the response type for the ListenEndBlock RPC method"},"cosmos.store.v1beta1.StoreKVPair":{"description":"Since: cosmos-sdk 0.43","type":"object","title":"StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes)\nIt optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and\nDeletes","properties":{"delete":{"type":"boolean","title":"true indicates a delete operation, false indicates a set operation"},"key":{"type":"string","format":"byte"},"store_key":{"type":"string","title":"the store key for the KVStore this pair originates from"},"value":{"type":"string","format":"byte"}}},"cosmos.tx.signing.v1beta1.SignMode":{"description":"SignMode represents a signing mode with its own security guarantees.\n\nThis enum should be considered a registry of all known sign modes\nin the Cosmos ecosystem. Apps are not expected to support all known\nsign modes. Apps that would like to support custom sign modes are\nencouraged to open a small PR against this file to add a new case\nto this SignMode enum describing their sign mode so that different\napps have a consistent version of this enum.\n\n - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\nrejected.\n - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\nverified with raw bytes from Tx.\n - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\nhuman-readable textual representation on top of the binary representation\nfrom SIGN_MODE_DIRECT.\n\nSince: cosmos-sdk 0.50\n - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\nSignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\nrequire signers signing over other signers' `signer_info`.\n\nSince: cosmos-sdk 0.46\n - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\nAmino JSON and will be removed in the future.\n - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\nSDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\nCurrently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\nbut is not implemented on the SDK by default. To enable EIP-191, you need\nto pass a custom `TxConfig` that has an implementation of\n`SignModeHandler` for EIP-191. The SDK may decide to fully support\nEIP-191 in the future.\n\nSince: cosmos-sdk 0.45.2","type":"string","default":"SIGN_MODE_UNSPECIFIED","enum":["SIGN_MODE_UNSPECIFIED","SIGN_MODE_DIRECT","SIGN_MODE_TEXTUAL","SIGN_MODE_DIRECT_AUX","SIGN_MODE_LEGACY_AMINO_JSON","SIGN_MODE_EIP_191"]},"cosmos.tx.v1beta1.AuthInfo":{"description":"AuthInfo describes the fee and signer modes that are used to sign a\ntransaction.","type":"object","properties":{"fee":{"description":"Fee is the fee and gas limit for the transaction. The first signer is the\nprimary signer and the one which pays the fee. The fee can be calculated\nbased on the cost of evaluating the body and doing signature verification\nof the signers. This can be estimated via simulation.","$ref":"#/definitions/cosmos.tx.v1beta1.Fee"},"signer_infos":{"description":"signer_infos defines the signing modes for the required signers. The number\nand order of elements must match the required signers from TxBody's\nmessages. The first element is the primary signer and the one which pays\nthe fee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.SignerInfo"}},"tip":{"description":"Tip is the optional tip used for transactions fees paid in another denom.\n\nThis field is ignored if the chain didn't enable tips, i.e. didn't add the\n`TipDecorator` in its posthandler.\n\nSince: cosmos-sdk 0.46","$ref":"#/definitions/cosmos.tx.v1beta1.Tip"}}},"cosmos.tx.v1beta1.BroadcastMode":{"description":"BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\nmethod.\n\n - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\nBROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits\nfor a CheckTx execution response only.\n - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client\nreturns immediately.","type":"string","default":"BROADCAST_MODE_UNSPECIFIED","enum":["BROADCAST_MODE_UNSPECIFIED","BROADCAST_MODE_BLOCK","BROADCAST_MODE_SYNC","BROADCAST_MODE_ASYNC"]},"cosmos.tx.v1beta1.BroadcastTxRequest":{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","type":"object","properties":{"mode":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastMode"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.BroadcastTxResponse":{"description":"BroadcastTxResponse is the response type for the\nService.BroadcastTx method.","type":"object","properties":{"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.Fee":{"description":"Fee includes the amount of coins paid in fees and the maximum\ngas to be used by the transaction. The ratio yields an effective \"gasprice\",\nwhich must be above some miminum to be accepted into the mempool.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of coins to be paid as a fee","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"gas_limit":{"type":"string","format":"uint64","title":"gas_limit is the maximum gas that can be used in transaction processing\nbefore an out of gas error occurs"},"granter":{"type":"string","title":"if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used\nto pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\nnot support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees.\nthe payer must be a tx signer (and thus have signed this field in AuthInfo).\nsetting this field does *not* change the ordering of required signers for the transaction.","type":"string"}}},"cosmos.tx.v1beta1.GetBlockWithTxsResponse":{"description":"GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs\nmethod.\n\nSince: cosmos-sdk 0.45.2","type":"object","properties":{"block":{"$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"pagination":{"description":"pagination defines a pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"txs":{"description":"txs are the transactions in the block.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.GetTxResponse":{"description":"GetTxResponse is the response type for the Service.GetTx method.","type":"object","properties":{"tx":{"description":"tx is the queried transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.GetTxsEventResponse":{"description":"GetTxsEventResponse is the response type for the Service.TxsByEvents\nRPC method.","type":"object","properties":{"pagination":{"description":"pagination defines a pagination for the response.\nDeprecated post v0.46.x: use total instead.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64","title":"total is total number of results available"},"tx_responses":{"description":"tx_responses is the list of queried TxResponses.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}},"txs":{"description":"txs is the list of queried transactions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.ModeInfo":{"description":"ModeInfo describes the signing mode of a single or nested multisig signer.","type":"object","properties":{"multi":{"title":"multi represents a nested multisig signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi"},"single":{"title":"single represents a single signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Single"}}},"cosmos.tx.v1beta1.ModeInfo.Multi":{"type":"object","title":"Multi is the mode info for a multisig public key","properties":{"bitarray":{"title":"bitarray specifies which keys within the multisig are signing","$ref":"#/definitions/cosmos.crypto.multisig.v1beta1.CompactBitArray"},"mode_infos":{"type":"array","title":"mode_infos is the corresponding modes of the signers of the multisig\nwhich could include nested multisig public keys","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"}}}},"cosmos.tx.v1beta1.ModeInfo.Single":{"type":"object","title":"Single is the mode info for a single signer. It is structured as a message\nto allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\nfuture","properties":{"mode":{"title":"mode is the signing mode of the single signer","$ref":"#/definitions/cosmos.tx.signing.v1beta1.SignMode"}}},"cosmos.tx.v1beta1.OrderBy":{"description":"- ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","type":"string","title":"OrderBy defines the sorting order","default":"ORDER_BY_UNSPECIFIED","enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"]},"cosmos.tx.v1beta1.SignerInfo":{"description":"SignerInfo describes the public key and signing mode of a single top-level\nsigner.","type":"object","properties":{"mode_info":{"title":"mode_info describes the signing mode of the signer and is a nested\nstructure to support nested multisig pubkey's","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"},"public_key":{"description":"public_key is the public key of the signer. It is optional for accounts\nthat already exist in state. If unset, the verifier can use the required \\\nsigner address for this position and lookup the public key.","$ref":"#/definitions/google.protobuf.Any"},"sequence":{"description":"sequence is the sequence of the account, which describes the\nnumber of committed transactions signed by a given address. It is used to\nprevent replay attacks.","type":"string","format":"uint64"}}},"cosmos.tx.v1beta1.SimulateRequest":{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to simulate.\nDeprecated. Send raw tx bytes instead.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_bytes":{"description":"tx_bytes is the raw transaction.\n\nSince: cosmos-sdk 0.43","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.SimulateResponse":{"description":"SimulateResponse is the response type for the\nService.SimulateRPC method.","type":"object","properties":{"gas_info":{"description":"gas_info is the information about gas used in the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.GasInfo"},"result":{"description":"result is the result of the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.Result"}}},"cosmos.tx.v1beta1.Tip":{"description":"Tip is the tip used for meta-transactions.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of the tip","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"tipper":{"type":"string","title":"tipper is the address of the account paying for the tip"}}},"cosmos.tx.v1beta1.Tx":{"description":"Tx is the standard type used for broadcasting transactions.","type":"object","properties":{"auth_info":{"title":"auth_info is the authorization related content of the transaction,\nspecifically signers, signer modes and fee","$ref":"#/definitions/cosmos.tx.v1beta1.AuthInfo"},"body":{"title":"body is the processable content of the transaction","$ref":"#/definitions/cosmos.tx.v1beta1.TxBody"},"signatures":{"description":"signatures is a list of signatures that matches the length and order of\nAuthInfo's signer_infos to allow connecting signature meta information like\npublic key and signing mode by position.","type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.tx.v1beta1.TxBody":{"description":"TxBody is the body of a transaction that all signers sign over.","type":"object","properties":{"extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, the transaction will be rejected","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"memo":{"description":"memo is any arbitrary note/comment to be added to the transaction.\nWARNING: in clients, any publicly exposed text should not be called memo,\nbut should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).","type":"string"},"messages":{"description":"messages is a list of messages to be executed. The required signers of\nthose messages define the number and order of elements in AuthInfo's\nsigner_infos and Tx's signatures. Each required signer address is added to\nthe list only the first time it occurs.\nBy convention, the first required signer (usually from the first message)\nis referred to as the primary signer and pays the fee for the whole\ntransaction.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"non_critical_extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, they will be ignored","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"timeout_height":{"type":"string","format":"uint64","title":"timeout is the block height after which this transaction will not\nbe processed by the chain"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeAminoResponse":{"description":"TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeResponse":{"description":"TxDecodeResponse is the response type for the\nService.TxDecode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the decoded transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeAminoRequest":{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxEncodeRequest":{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx":{"description":"tx is the transaction to encode.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeResponse":{"description":"TxEncodeResponse is the response type for the\nService.TxEncode method.\n\nSince: cosmos-sdk 0.47","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the encoded transaction bytes.","type":"string","format":"byte"}}},"cosmos.upgrade.v1beta1.ModuleVersion":{"description":"ModuleVersion specifies a module and its consensus version.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"name":{"type":"string","title":"name of the app module"},"version":{"type":"string","format":"uint64","title":"consensus version of the app module"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgrade":{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse":{"description":"MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"plan":{"description":"plan is the upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse":{"description":"MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.upgrade.v1beta1.Plan":{"description":"Plan specifies information about a planned upgrade and when it should occur.","type":"object","properties":{"height":{"description":"The height at which the upgrade must be performed.","type":"string","format":"int64"},"info":{"type":"string","title":"Any application specific upgrade info to be included on-chain\nsuch as a git commit that validators could automatically upgrade to"},"name":{"description":"Sets the name for the upgrade. This name will be used by the upgraded\nversion of the software to apply any special \"on-upgrade\" commands during\nthe first BeginBlock method after the upgrade is applied. It is also used\nto detect whether a software version can handle a given upgrade. If no\nupgrade handler with this name has been set in the software, it will be\nassumed that the software is out-of-date when the upgrade Time or Height is\nreached and the software will exit.","type":"string"},"time":{"description":"Deprecated: Time based upgrades have been deprecated. Time based upgrade logic\nhas been removed from the SDK.\nIf this field is not empty, an error will be thrown.","type":"string","format":"date-time"},"upgraded_client_state":{"description":"Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been\nmoved to the IBC module in the sub module 02-client.\nIf this field is not empty, an error will be thrown.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.upgrade.v1beta1.QueryAppliedPlanResponse":{"description":"QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC\nmethod.","type":"object","properties":{"height":{"description":"height is the block height at which the plan was applied.","type":"string","format":"int64"}}},"cosmos.upgrade.v1beta1.QueryAuthorityResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"QueryAuthorityResponse is the response type for Query/Authority","properties":{"address":{"type":"string"}}},"cosmos.upgrade.v1beta1.QueryCurrentPlanResponse":{"description":"QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC\nmethod.","type":"object","properties":{"plan":{"description":"plan is the current upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.QueryModuleVersionsResponse":{"description":"QueryModuleVersionsResponse is the response type for the Query/ModuleVersions\nRPC method.\n\nSince: cosmos-sdk 0.43","type":"object","properties":{"module_versions":{"description":"module_versions is a list of module names with their consensus versions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.upgrade.v1beta1.ModuleVersion"}}}},"cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState\nRPC method.","type":"object","properties":{"upgraded_consensus_state":{"type":"string","format":"byte","title":"Since: cosmos-sdk 0.43"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"from_address":{"type":"string"},"start_time":{"description":"start of vesting as unix time (in seconds).","type":"string","format":"int64"},"to_address":{"type":"string"},"vesting_periods":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.vesting.v1beta1.Period"}}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount\nresponse type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.\n\nSince: cosmos-sdk 0.46","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse":{"description":"MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.\n\nSince: cosmos-sdk 0.46","type":"object"},"cosmos.vesting.v1beta1.MsgCreateVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"delayed":{"type":"boolean"},"end_time":{"description":"end of vesting as unix time (in seconds).","type":"string","format":"int64"},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type.","type":"object"},"cosmos.vesting.v1beta1.Period":{"description":"Period defines a length of time and amount of coins that will vest.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"length":{"description":"Period duration in seconds.","type":"string","format":"int64"}}},"cosmwasm.wasm.v1.AbsoluteTxPosition":{"description":"AbsoluteTxPosition is a unique transaction position that allows for global\nordering of transactions.","type":"object","properties":{"block_height":{"type":"string","format":"uint64","title":"BlockHeight is the block the contract was created at"},"tx_index":{"type":"string","format":"uint64","title":"TxIndex is a monotonic counter within the block (actual transaction index,\nor gas consumed)"}}},"cosmwasm.wasm.v1.AccessConfig":{"description":"AccessConfig access control type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.AccessType":{"description":"- ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty value\n - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses","type":"string","title":"AccessType permission types","default":"ACCESS_TYPE_UNSPECIFIED","enum":["ACCESS_TYPE_UNSPECIFIED","ACCESS_TYPE_NOBODY","ACCESS_TYPE_EVERYBODY","ACCESS_TYPE_ANY_OF_ADDRESSES"]},"cosmwasm.wasm.v1.CodeInfoResponse":{"type":"object","title":"CodeInfoResponse contains code meta data from CodeInfo","properties":{"code_id":{"type":"string","format":"uint64","title":"id for legacy support"},"creator":{"type":"string"},"data_hash":{"type":"string","format":"byte"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.ContractCodeHistoryEntry":{"description":"ContractCodeHistoryEntry metadata to a contract.","type":"object","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"msg":{"type":"string","format":"byte"},"operation":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryOperationType"},"updated":{"description":"Updated Tx position when the operation was executed.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"}}},"cosmwasm.wasm.v1.ContractCodeHistoryOperationType":{"description":"- CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data","type":"string","title":"ContractCodeHistoryOperationType actions that caused a code change","default":"CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","enum":["CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED","CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT","CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE","CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS"]},"cosmwasm.wasm.v1.ContractInfo":{"type":"object","title":"ContractInfo stores a WASM contract instance","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored Wasm code"},"created":{"description":"Created Tx position when the contract was instantiated.","$ref":"#/definitions/cosmwasm.wasm.v1.AbsoluteTxPosition"},"creator":{"type":"string","title":"Creator address who initially instantiated the contract"},"extension":{"description":"Extension is an extension point to store custom metadata within the\npersistence model.","$ref":"#/definitions/google.protobuf.Any"},"ibc2_port_id":{"type":"string"},"ibc_port_id":{"type":"string"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"}}},"cosmwasm.wasm.v1.Model":{"type":"object","title":"Model is a struct that holds a KV pair","properties":{"key":{"type":"string","format":"byte","title":"hex-encode key to read it better (this is often ascii)"},"value":{"type":"string","format":"byte","title":"base64-encode raw value"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddresses":{"description":"MsgAddCodeUploadParamsAddresses is the\nMsgAddCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgAddCodeUploadParamsAddressesResponse":{"description":"MsgAddCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgAddCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgClearAdmin":{"type":"object","title":"MsgClearAdmin removes any admin stored for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgClearAdminResponse":{"type":"object","title":"MsgClearAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgExecuteContract":{"type":"object","title":"MsgExecuteContract submits the given message data to a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on execution","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgExecuteContractResponse":{"description":"MsgExecuteContractResponse returns execution result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContract":{"description":"MsgInstantiateContract create a new smart contract instance for the given\ncode id.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2":{"description":"MsgInstantiateContract2 create a new smart contract instance for the given\ncode id with a predictable address.","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"fix_msg":{"type":"boolean","title":"FixMsg include the msg value into the hash for the predictable address.\nDefault is false"},"funds":{"type":"array","title":"Funds coins that are transferred to the contract on instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"salt":{"description":"Salt is an arbitrary value provided by the sender. Size can be 1 to 64.","type":"string","format":"byte"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgInstantiateContract2Response":{"type":"object","title":"MsgInstantiateContract2Response return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgInstantiateContractResponse":{"type":"object","title":"MsgInstantiateContractResponse return instantiation result data","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgMigrateContract":{"type":"object","title":"MsgMigrateContract runs a code upgrade/ downgrade for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the new WASM code"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgMigrateContractResponse":{"description":"MsgMigrateContractResponse returns contract migration result data.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains same raw bytes returned as data from the wasm contract.\n(May be empty)"}}},"cosmwasm.wasm.v1.MsgPinCodes":{"description":"MsgPinCodes is the MsgPinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the new WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgPinCodesResponse":{"description":"MsgPinCodesResponse defines the response structure for executing a\nMsgPinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddresses":{"description":"MsgRemoveCodeUploadParamsAddresses is the\nMsgRemoveCodeUploadParamsAddresses request type.","type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"authority":{"description":"Authority is the address of the governance account.","type":"string"}}},"cosmwasm.wasm.v1.MsgRemoveCodeUploadParamsAddressesResponse":{"description":"MsgRemoveCodeUploadParamsAddressesResponse defines the response\nstructure for executing a MsgRemoveCodeUploadParamsAddresses message.","type":"object"},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContract":{"description":"MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract\nrequest type.\n\nSince: 0.40","type":"object","properties":{"admin":{"type":"string","title":"Admin is an optional address that can execute migrations"},"authority":{"description":"Authority is the address of the governance account.","type":"string"},"builder":{"type":"string","title":"Builder is the docker image used to build the code deterministically, used\nfor smart contract verification"},"code_hash":{"type":"string","format":"byte","title":"CodeHash is the SHA256 sum of the code outputted by builder, used for smart\ncontract verification"},"funds":{"type":"array","title":"Funds coins that are transferred from the authority account to the contract\non instantiation","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"label":{"description":"Label is optional metadata to be stored with a contract instance.","type":"string"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on instantiation"},"source":{"type":"string","title":"Source is the URL where the code is hosted"},"unpin_code":{"description":"UnpinCode code on upload, optional. As default the uploaded contract is\npinned to cache.","type":"boolean"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndInstantiateContractResponse":{"description":"MsgStoreAndInstantiateContractResponse defines the response structure\nfor executing a MsgStoreAndInstantiateContract message.\n\nSince: 0.40","type":"object","properties":{"address":{"description":"Address is the bech32 address of the new contract instance.","type":"string"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContract":{"description":"MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract\nrequest type.\n\nSince: 0.42","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"instantiate_permission":{"title":"InstantiatePermission to apply on contract creation, optional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract on migration"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreAndMigrateContractResponse":{"description":"MsgStoreAndMigrateContractResponse defines the response structure\nfor executing a MsgStoreAndMigrateContract message.\n\nSince: 0.42","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"},"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgStoreCode":{"type":"object","title":"MsgStoreCode submit Wasm code to the system","properties":{"instantiate_permission":{"title":"InstantiatePermission access control to apply on contract creation,\noptional","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the actor that signed the messages"},"wasm_byte_code":{"type":"string","format":"byte","title":"WASMByteCode can be raw or gzip compressed"}}},"cosmwasm.wasm.v1.MsgStoreCodeResponse":{"description":"MsgStoreCodeResponse returns store result data.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"Checksum is the sha256 hash of the stored code"},"code_id":{"type":"string","format":"uint64","title":"CodeID is the reference to the stored WASM code"}}},"cosmwasm.wasm.v1.MsgSudoContract":{"description":"MsgSudoContract is the MsgSudoContract request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"contract":{"type":"string","title":"Contract is the address of the smart contract"},"msg":{"type":"string","format":"byte","title":"Msg json encoded message to be passed to the contract as sudo"}}},"cosmwasm.wasm.v1.MsgSudoContractResponse":{"description":"MsgSudoContractResponse defines the response structure for executing a\nMsgSudoContract message.\n\nSince: 0.40","type":"object","properties":{"data":{"type":"string","format":"byte","title":"Data contains bytes to returned from the contract"}}},"cosmwasm.wasm.v1.MsgUnpinCodes":{"description":"MsgUnpinCodes is the MsgUnpinCodes request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"code_ids":{"type":"array","title":"CodeIDs references the WASM codes","items":{"type":"string","format":"uint64"}}}},"cosmwasm.wasm.v1.MsgUnpinCodesResponse":{"description":"MsgUnpinCodesResponse defines the response structure for executing a\nMsgUnpinCodes message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.MsgUpdateAdmin":{"type":"object","title":"MsgUpdateAdmin sets a new admin for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_admin":{"type":"string","title":"NewAdmin address to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateAdminResponse":{"type":"object","title":"MsgUpdateAdminResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateContractLabel":{"type":"object","title":"MsgUpdateContractLabel sets a new label for a smart contract","properties":{"contract":{"type":"string","title":"Contract is the address of the smart contract"},"new_label":{"type":"string","title":"NewLabel string to be set"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateContractLabelResponse":{"type":"object","title":"MsgUpdateContractLabelResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfig":{"type":"object","title":"MsgUpdateInstantiateConfig updates instantiate config for a smart contract","properties":{"code_id":{"type":"string","format":"uint64","title":"CodeID references the stored WASM code"},"new_instantiate_permission":{"title":"NewInstantiatePermission is the new access control","$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"sender":{"type":"string","title":"Sender is the that actor that signed the messages"}}},"cosmwasm.wasm.v1.MsgUpdateInstantiateConfigResponse":{"type":"object","title":"MsgUpdateInstantiateConfigResponse returns empty data"},"cosmwasm.wasm.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the MsgUpdateParams request type.\n\nSince: 0.40","type":"object","properties":{"authority":{"description":"Authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/wasm parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: 0.40","type":"object"},"cosmwasm.wasm.v1.Params":{"description":"Params defines the set of wasm parameters.","type":"object","properties":{"code_upload_access":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"},"instantiate_default_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessType"}}},"cosmwasm.wasm.v1.QueryAllContractStateResponse":{"type":"object","title":"QueryAllContractStateResponse is the response type for the\nQuery/AllContractState RPC method","properties":{"models":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.Model"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryBuildAddressResponse":{"description":"QueryBuildAddressResponse is the response type for the Query/BuildAddress RPC\nmethod.","type":"object","properties":{"address":{"type":"string","title":"Address is the contract address"}}},"cosmwasm.wasm.v1.QueryCodeInfoResponse":{"type":"object","title":"QueryCodeInfoResponse is the response type for the Query/CodeInfo RPC method","properties":{"checksum":{"type":"string","format":"byte"},"code_id":{"type":"string","format":"uint64"},"creator":{"type":"string"},"instantiate_permission":{"$ref":"#/definitions/cosmwasm.wasm.v1.AccessConfig"}}},"cosmwasm.wasm.v1.QueryCodeResponse":{"type":"object","title":"QueryCodeResponse is the response type for the Query/Code RPC method","properties":{"code_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"},"data":{"type":"string","format":"byte"}}},"cosmwasm.wasm.v1.QueryCodesResponse":{"type":"object","title":"QueryCodesResponse is the response type for the Query/Codes RPC method","properties":{"code_infos":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.CodeInfoResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractHistoryResponse":{"type":"object","title":"QueryContractHistoryResponse is the response type for the\nQuery/ContractHistory RPC method","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmwasm.wasm.v1.ContractCodeHistoryEntry"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractInfoResponse":{"type":"object","title":"QueryContractInfoResponse is the response type for the Query/ContractInfo RPC\nmethod","properties":{"address":{"type":"string","title":"address is the address of the contract"},"contract_info":{"$ref":"#/definitions/cosmwasm.wasm.v1.ContractInfo"}}},"cosmwasm.wasm.v1.QueryContractsByCodeResponse":{"type":"object","title":"QueryContractsByCodeResponse is the response type for the\nQuery/ContractsByCode RPC method","properties":{"contracts":{"type":"array","title":"contracts are a set of contract addresses","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryContractsByCreatorResponse":{"description":"QueryContractsByCreatorResponse is the response type for the\nQuery/ContractsByCreator RPC method.","type":"object","properties":{"contract_addresses":{"type":"array","title":"ContractAddresses result set","items":{"type":"string"}},"pagination":{"description":"Pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmwasm.wasm.v1.Params"}}},"cosmwasm.wasm.v1.QueryPinnedCodesResponse":{"type":"object","title":"QueryPinnedCodesResponse is the response type for the\nQuery/PinnedCodes RPC method","properties":{"code_ids":{"type":"array","items":{"type":"string","format":"uint64"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmwasm.wasm.v1.QueryRawContractStateResponse":{"type":"object","title":"QueryRawContractStateResponse is the response type for the\nQuery/RawContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the raw store data"}}},"cosmwasm.wasm.v1.QuerySmartContractStateResponse":{"type":"object","title":"QuerySmartContractStateResponse is the response type for the\nQuery/SmartContractState RPC method","properties":{"data":{"type":"string","format":"byte","title":"Data contains the json data returned from the smart contract"}}},"cosmwasm.wasm.v1.QueryWasmLimitsConfigResponse":{"description":"QueryWasmLimitsConfigResponse is the response type for the\nQuery/WasmLimitsConfig RPC method. It contains the JSON encoded limits for\nstatic validation of Wasm files.","type":"object","properties":{"config":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount":{"type":"object","title":"MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount","properties":{"connection_id":{"type":"string"},"ordering":{"$ref":"#/definitions/ibc.core.channel.v1.Order"},"owner":{"type":"string"},"version":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse":{"type":"object","title":"MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTx":{"type":"object","title":"MsgSendTx defines the payload for Msg/SendTx","properties":{"connection_id":{"type":"string"},"owner":{"type":"string"},"packet_data":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.InterchainAccountPacketData"},"relative_timeout":{"description":"Relative timeout timestamp provided will be added to the current block time during transaction execution.\nThe timeout timestamp must be non-zero.","type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse":{"type":"object","title":"MsgSendTxResponse defines the response for MsgSendTx","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/controller parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.controller.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the controller submodule.","type":"object","properties":{"controller_enabled":{"description":"controller_enabled enables or disables the controller submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse":{"description":"QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method.","type":"object","properties":{"address":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe":{"type":"object","title":"MsgModuleQuerySafe defines the payload for Msg/ModuleQuerySafe","properties":{"requests":{"description":"requests defines the module safe queries to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryRequest"}},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse":{"type":"object","title":"MsgModuleQuerySafeResponse defines the response for Msg/ModuleQuerySafe","properties":{"height":{"type":"string","format":"uint64","title":"height at which the responses were queried"},"responses":{"type":"array","title":"protobuf encoded responses for each query","items":{"type":"string","format":"byte"}}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/host parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.host.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the host submodule.","type":"object","properties":{"allow_messages":{"description":"allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain.","type":"array","items":{"type":"string"}},"host_enabled":{"description":"host_enabled enables or disables the host submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.host.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.QueryRequest":{"description":"QueryRequest defines the parameters for a particular query request\nby an interchain account.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"data defines the payload of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"},"path":{"type":"string","title":"path defines the path of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"}}},"ibc.applications.interchain_accounts.v1.InterchainAccountPacketData":{"description":"InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.","type":"object","properties":{"data":{"type":"string","format":"byte"},"memo":{"type":"string"},"type":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.Type"}}},"ibc.applications.interchain_accounts.v1.Type":{"description":"- TYPE_UNSPECIFIED: Default zero value enumeration\n - TYPE_EXECUTE_TX: Execute a transaction on an interchain accounts host chain","type":"string","title":"Type defines a classification of message issued from a controller chain to its associated interchain accounts\nhost","default":"TYPE_UNSPECIFIED","enum":["TYPE_UNSPECIFIED","TYPE_EXECUTE_TX"]},"ibc.applications.transfer.v1.Denom":{"description":"Denom holds the base denom of a Token and a trace of the chains it was sent through.","type":"object","properties":{"base":{"type":"string","title":"the base token denomination"},"trace":{"type":"array","title":"the trace of the token","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Hop"}}}},"ibc.applications.transfer.v1.Hop":{"type":"object","title":"Hop defines a port ID, channel ID pair specifying a unique \"hop\" in a trace","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.transfer.v1.MsgTransfer":{"type":"object","title":"MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between\nICS20 enabled chains. See ICS Spec here:\nhttps://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures","properties":{"encoding":{"type":"string","title":"optional encoding"},"memo":{"type":"string","title":"optional memo"},"receiver":{"type":"string","title":"the recipient address on the destination chain"},"sender":{"type":"string","title":"the sender address"},"source_channel":{"type":"string","title":"the channel by which the packet will be sent"},"source_port":{"type":"string","title":"the port on which the packet will be sent"},"timeout_height":{"description":"Timeout height relative to the current block height.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted.","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"description":"Timeout timestamp in absolute nanoseconds since unix epoch.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set.","type":"string","format":"uint64"},"token":{"title":"token to be transferred","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.applications.transfer.v1.MsgTransferResponse":{"description":"MsgTransferResponse defines the Msg/Transfer response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64","title":"sequence number of the transfer packet sent"}}},"ibc.applications.transfer.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"params":{"description":"params defines the transfer parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.transfer.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibc.applications.transfer.v1.Params":{"description":"Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false.","type":"object","properties":{"receive_enabled":{"description":"receive_enabled enables or disables all cross-chain token transfers to this\nchain.","type":"boolean"},"send_enabled":{"description":"send_enabled enables or disables all cross-chain token transfers from this\nchain.","type":"boolean"}}},"ibc.applications.transfer.v1.QueryDenomHashResponse":{"description":"QueryDenomHashResponse is the response type for the Query/DenomHash RPC\nmethod.","type":"object","properties":{"hash":{"description":"hash (in hex format) of the denomination trace information.","type":"string"}}},"ibc.applications.transfer.v1.QueryDenomResponse":{"description":"QueryDenomResponse is the response type for the Query/Denom RPC\nmethod.","type":"object","properties":{"denom":{"description":"denom returns the requested denomination.","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}}},"ibc.applications.transfer.v1.QueryDenomsResponse":{"description":"QueryDenomsResponse is the response type for the Query/Denoms RPC\nmethod.","type":"object","properties":{"denoms":{"description":"denoms returns all denominations.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.applications.transfer.v1.QueryEscrowAddressResponse":{"description":"QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.","type":"object","properties":{"escrow_address":{"type":"string","title":"the escrow account address"}}},"ibc.applications.transfer.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"}}},"ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse":{"description":"QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.core.channel.v1.Channel":{"description":"Channel defines pipeline for exactly-once packet delivery between specific\nmodules on separate blockchains, which has at least one end capable of\nsending packets and one end capable of receiving packets.","type":"object","properties":{"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.Counterparty":{"type":"object","title":"Counterparty defines a channel end counterparty","properties":{"channel_id":{"type":"string","title":"channel end on the counterparty chain"},"port_id":{"description":"port on the counterparty chain which owns the other end of the channel.","type":"string"}}},"ibc.core.channel.v1.IdentifiedChannel":{"description":"IdentifiedChannel defines a channel with additional port and channel\nidentifier fields.","type":"object","properties":{"channel_id":{"type":"string","title":"channel identifier"},"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"port_id":{"type":"string","title":"port identifier"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.MsgAcknowledgement":{"type":"object","title":"MsgAcknowledgement receives incoming IBC acknowledgement","properties":{"acknowledgement":{"type":"string","format":"byte"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgChannelCloseConfirm":{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseConfirmResponse":{"description":"MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelCloseInit":{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseInitResponse":{"description":"MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenAck":{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"counterparty_channel_id":{"type":"string"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenAckResponse":{"description":"MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenConfirm":{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenConfirmResponse":{"description":"MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenInit":{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","type":"object","properties":{"channel":{"$ref":"#/definitions/ibc.core.channel.v1.Channel"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenInitResponse":{"description":"MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTry":{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","type":"object","properties":{"channel":{"description":"NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC.","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"previous_channel_id":{"description":"Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC.","type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTryResponse":{"description":"MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacket":{"type":"object","title":"MsgRecvPacket receives incoming IBC packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnClose":{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","type":"object","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_close":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnCloseResponse":{"description":"MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.Order":{"description":"- ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\nwhich they were sent.\n - ORDER_ORDERED: packets are delivered exactly in the order which they were sent","type":"string","title":"Order defines if a channel is ORDERED or UNORDERED","default":"ORDER_NONE_UNSPECIFIED","enum":["ORDER_NONE_UNSPECIFIED","ORDER_UNORDERED","ORDER_ORDERED"]},"ibc.core.channel.v1.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"data":{"type":"string","format":"byte","title":"actual opaque bytes transferred directly to the application module"},"destination_channel":{"description":"identifies the channel end on the receiving chain.","type":"string"},"destination_port":{"description":"identifies the port on the receiving chain.","type":"string"},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_channel":{"description":"identifies the channel end on the sending chain.","type":"string"},"source_port":{"description":"identifies the port on the sending chain.","type":"string"},"timeout_height":{"title":"block height after which the packet times out","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"type":"string","format":"uint64","title":"block timestamp (in nanoseconds) after which the packet times out"}}},"ibc.core.channel.v1.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"channel_id":{"description":"channel unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"port_id":{"description":"channel port identifier.","type":"string"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v1.QueryChannelClientStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelConsensusStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelResponse":{"description":"QueryChannelResponse is the response type for the Query/Channel RPC method.\nBesides the Channel end, it includes a proof and the height from which the\nproof was retrieved.","type":"object","properties":{"channel":{"title":"channel associated with the request identifiers","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelsResponse":{"description":"QueryChannelsResponse is the response type for the Query/Channels RPC method.","type":"object","properties":{"channels":{"description":"list of stored channels of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryConnectionChannelsResponse":{"type":"object","title":"QueryConnectionChannelsResponse is the Response type for the\nQuery/QueryConnectionChannels RPC method","properties":{"channels":{"description":"list of channels associated with a connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryNextSequenceReceiveResponse":{"type":"object","title":"QuerySequenceResponse is the response type for the\nQuery/QueryNextSequenceReceiveResponse RPC method","properties":{"next_sequence_receive":{"type":"string","format":"uint64","title":"next sequence receive number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the request type for the\nQuery/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementResponse":{"type":"object","title":"QueryPacketAcknowledgementResponse defines the client query response for a\npacket which also includes a proof and the height from which the\nproof was retrieved","properties":{"acknowledgement":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketCommitmentResponse":{"type":"object","title":"QueryPacketCommitmentResponse defines the client query response for a packet\nwhich also includes a proof and the height from which the proof was\nretrieved","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketCommitmentsResponse":{"type":"object","title":"QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method","properties":{"commitments":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketReceiptResponse":{"type":"object","title":"QueryPacketReceiptResponse defines the client query response for a packet\nreceipt which also includes a proof, and the height from which the proof was\nretrieved","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v1.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.channel.v1.State":{"description":"State defines if a channel is in one of the following states:\nCLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A channel has just started the opening handshake.\n - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n - STATE_OPEN: A channel has completed the handshake. Open channels are\nready to send and receive packets.\n - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\npackets.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN","STATE_CLOSED"]},"ibc.core.channel.v2.Acknowledgement":{"description":"Acknowledgement contains a list of all ack results associated with a single packet.\nIn the case of a successful receive, the acknowledgement will contain an app acknowledgement\nfor each application that received a payload in the same order that the payloads were sent\nin the packet.\nIf the receive is not successful, the acknowledgement will contain a single app acknowledgment\nwhich will be a constant error acknowledgment as defined by the IBC v2 protocol.","type":"object","properties":{"app_acknowledgements":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.channel.v2.MsgAcknowledgement":{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","type":"object","properties":{"acknowledgement":{"$ref":"#/definitions/ibc.core.channel.v2.Acknowledgement"},"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgRecvPacket":{"description":"MsgRecvPacket receives an incoming IBC packet.","type":"object","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgSendPacket":{"description":"MsgSendPacket sends an outgoing IBC packet.","type":"object","properties":{"payloads":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"signer":{"type":"string"},"source_client":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgSendPacketResponse":{"description":"MsgSendPacketResponse defines the Msg/SendPacket response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"destination_client":{"description":"identifies the receiving client on the receiving chain.","type":"string"},"payloads":{"description":"a list of payloads, each one for a specific application.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_client":{"description":"identifies the sending client on the sending chain.","type":"string"},"timeout_timestamp":{"description":"timeout timestamp in seconds after which the packet times out.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"client_id":{"description":"client unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.Payload":{"type":"object","title":"Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes)","properties":{"destination_port":{"description":"specifies the destination port of the packet.","type":"string"},"encoding":{"description":"the encoding used for the provided value.","type":"string"},"source_port":{"description":"specifies the source port of the packet.","type":"string"},"value":{"description":"the raw bytes for the payload.","type":"string","format":"byte"},"version":{"description":"version of the specified application.","type":"string"}}},"ibc.core.channel.v2.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementResponse":{"description":"QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method.","type":"object","properties":{"acknowledgement":{"type":"string","format":"byte","title":"acknowledgement associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketCommitmentResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketCommitmentsResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitments":{"description":"collection of packet commitments for the requested channel identifier.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"description":"query block height.","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"description":"pagination response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketReceiptResponse":{"description":"QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method.","type":"object","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence or absence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v2.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.client.v1.ConsensusStateWithHeight":{"description":"ConsensusStateWithHeight defines a consensus state with an additional height\nfield.","type":"object","properties":{"consensus_state":{"title":"consensus state","$ref":"#/definitions/google.protobuf.Any"},"height":{"title":"consensus state height","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.Height":{"description":"Normally the RevisionHeight is incremented at each height while keeping\nRevisionNumber the same. However some consensus algorithms may choose to\nreset the height in certain conditions e.g. hard forks, state-machine\nbreaking changes In these cases, the RevisionNumber is incremented so that\nheight continues to be monitonically increasing even as the RevisionHeight\ngets reset\n\nPlease note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag.\nThis enforces the Go json marshaller to always emit zero values for both revision_number and revision_height.","type":"object","title":"Height is a monotonically increasing data type\nthat can be compared against another Height for the purposes of updating and\nfreezing clients","properties":{"revision_height":{"type":"string","format":"uint64","title":"the height within the given revision"},"revision_number":{"type":"string","format":"uint64","title":"the revision that the client is currently on"}}},"ibc.core.client.v1.IdentifiedClientState":{"description":"IdentifiedClientState defines a client state with an additional client\nidentifier field.","type":"object","properties":{"client_id":{"type":"string","title":"client identifier"},"client_state":{"title":"client state","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgCreateClient":{"type":"object","title":"MsgCreateClient defines a message to create an IBC client","properties":{"client_state":{"title":"light client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"description":"consensus state associated with the client that corresponds to a given\nheight.","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgCreateClientResponse":{"description":"MsgCreateClientResponse defines the Msg/CreateClient response type.","type":"object","properties":{"client_id":{"type":"string"}}},"ibc.core.client.v1.MsgDeleteClientCreator":{"type":"object","title":"MsgDeleteClientCreator defines a message to delete the client creator of a client","properties":{"client_id":{"type":"string","title":"client identifier"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgDeleteClientCreatorResponse":{"description":"MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type.","type":"object"},"ibc.core.client.v1.MsgIBCSoftwareUpgrade":{"type":"object","title":"MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal","properties":{"plan":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"},"signer":{"type":"string","title":"signer address"},"upgraded_client_state":{"description":"An UpgradedClientState must be provided to perform an IBC breaking upgrade.\nThis will make the chain commit to the correct upgraded (self) client state\nbefore the upgrade occurs, so that connecting chains can verify that the\nnew upgraded client is valid by verifying a proof on the previous version\nof the chain. This will allow IBC connections to persist smoothly across\nplanned chain upgrades. Correspondingly, the UpgradedClientState field has been\ndeprecated in the Cosmos SDK to allow for this logic to exist solely in\nthe 02-client module.","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse":{"description":"MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type.","type":"object"},"ibc.core.client.v1.MsgRecoverClient":{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"subject_client_id":{"type":"string","title":"the client identifier for the client to be updated if the proposal passes"},"substitute_client_id":{"type":"string","title":"the substitute client identifier for the client which will replace the subject\nclient"}}},"ibc.core.client.v1.MsgRecoverClientResponse":{"description":"MsgRecoverClientResponse defines the Msg/RecoverClient response type.","type":"object"},"ibc.core.client.v1.MsgSubmitMisbehaviour":{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"misbehaviour":{"title":"misbehaviour used for freezing the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgSubmitMisbehaviourResponse":{"description":"MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response\ntype.","type":"object"},"ibc.core.client.v1.MsgUpdateClient":{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_message":{"title":"client message to update the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateClientResponse":{"description":"MsgUpdateClientResponse defines the Msg/UpdateClient response type.","type":"object"},"ibc.core.client.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","type":"object","properties":{"params":{"description":"params defines the client parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.client.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.client.v1.MsgUpgradeClient":{"type":"object","title":"MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client\nstate","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_state":{"title":"upgraded client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"title":"upgraded consensus state, only contains enough information to serve as a\nbasis of trust in update logic","$ref":"#/definitions/google.protobuf.Any"},"proof_upgrade_client":{"type":"string","format":"byte","title":"proof that old chain committed to new client"},"proof_upgrade_consensus_state":{"type":"string","format":"byte","title":"proof that old chain committed to new consensus state"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpgradeClientResponse":{"description":"MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.","type":"object"},"ibc.core.client.v1.Params":{"description":"Params defines the set of IBC light client parameters.","type":"object","properties":{"allowed_clients":{"description":"allowed_clients defines the list of allowed client state types which can be created\nand interacted with. If a client type is removed from the allowed clients list, usage\nof this client will be disabled until it is added again to the list.","type":"array","items":{"type":"string"}}}},"ibc.core.client.v1.QueryClientCreatorResponse":{"description":"QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC\nmethod.","type":"object","properties":{"creator":{"type":"string","title":"creator of the client"}}},"ibc.core.client.v1.QueryClientParamsResponse":{"description":"QueryClientParamsResponse is the response type for the Query/ClientParams RPC\nmethod.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.client.v1.Params"}}},"ibc.core.client.v1.QueryClientStateResponse":{"description":"QueryClientStateResponse is the response type for the Query/ClientState RPC\nmethod. Besides the client state, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryClientStatesResponse":{"description":"QueryClientStatesResponse is the response type for the Query/ClientStates RPC\nmethod.","type":"object","properties":{"client_states":{"description":"list of stored ClientStates of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryClientStatusResponse":{"description":"QueryClientStatusResponse is the response type for the Query/ClientStatus RPC\nmethod. It returns the current status of the IBC client.","type":"object","properties":{"status":{"type":"string"}}},"ibc.core.client.v1.QueryConsensusStateHeightsResponse":{"type":"object","title":"QueryConsensusStateHeightsResponse is the response type for the\nQuery/ConsensusStateHeights RPC method","properties":{"consensus_state_heights":{"type":"array","title":"consensus state heights","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.Height"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryConsensusStateResponse":{"type":"object","title":"QueryConsensusStateResponse is the response type for the Query/ConsensusState\nRPC method","properties":{"consensus_state":{"title":"consensus state associated with the client identifier at the given height","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryConsensusStatesResponse":{"type":"object","title":"QueryConsensusStatesResponse is the response type for the\nQuery/ConsensusStates RPC method","properties":{"consensus_states":{"type":"array","title":"consensus states associated with the identifier","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.ConsensusStateWithHeight"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryUpgradedClientStateResponse":{"description":"QueryUpgradedClientStateResponse is the response type for the\nQuery/UpgradedClientState RPC method.","type":"object","properties":{"upgraded_client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the\nQuery/UpgradedConsensusState RPC method.","type":"object","properties":{"upgraded_consensus_state":{"title":"Consensus state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryVerifyMembershipRequest":{"type":"object","title":"QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method","properties":{"block_delay":{"type":"string","format":"uint64","title":"optional block delay"},"client_id":{"description":"client unique identifier.","type":"string"},"merkle_path":{"description":"the commitment key path.","$ref":"#/definitions/ibc.core.commitment.v2.MerklePath"},"proof":{"description":"the proof to be verified by the client.","type":"string","format":"byte"},"proof_height":{"description":"the height of the commitment root at which the proof is verified.","$ref":"#/definitions/ibc.core.client.v1.Height"},"time_delay":{"type":"string","format":"uint64","title":"optional time delay"},"value":{"description":"the value which is proven.","type":"string","format":"byte"}}},"ibc.core.client.v1.QueryVerifyMembershipResponse":{"type":"object","title":"QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method","properties":{"success":{"description":"boolean indicating success or failure of proof verification.","type":"boolean"}}},"ibc.core.client.v2.Config":{"type":"object","title":"Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages\nfor a given client.\nIf it is set, then only relayers in the allow list can send v2 messages\nIf it is not set, then the client allows permissionless relaying of v2 messages","properties":{"allowed_relayers":{"type":"array","title":"allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client","items":{"type":"string"}}}},"ibc.core.client.v2.CounterpartyInfo":{"type":"object","title":"CounterpartyInfo defines the key that the counterparty will use to message our client","properties":{"client_id":{"type":"string","title":"client identifier is the identifier used to send packet messages to our client"},"merkle_prefix":{"type":"array","title":"merkle prefix key is the prefix that ics provable keys are stored under","items":{"type":"string","format":"byte"}}}},"ibc.core.client.v2.MsgRegisterCounterparty":{"type":"object","title":"MsgRegisterCounterparty defines a message to register a counterparty on a client","properties":{"client_id":{"type":"string","title":"client identifier"},"counterparty_client_id":{"type":"string","title":"counterparty client identifier"},"counterparty_merkle_prefix":{"type":"array","title":"counterparty merkle prefix","items":{"type":"string","format":"byte"}},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgRegisterCounterpartyResponse":{"description":"MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type.","type":"object"},"ibc.core.client.v2.MsgUpdateClientConfig":{"type":"object","title":"MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client","properties":{"client_id":{"type":"string","title":"client identifier"},"config":{"description":"NOTE: All fields in the config must be supplied.","title":"allowed relayers","$ref":"#/definitions/ibc.core.client.v2.Config"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgUpdateClientConfigResponse":{"description":"MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type.","type":"object"},"ibc.core.client.v2.QueryConfigResponse":{"type":"object","title":"QueryConfigResponse is the response type for the Query/Config RPC method","properties":{"config":{"$ref":"#/definitions/ibc.core.client.v2.Config"}}},"ibc.core.client.v2.QueryCounterpartyInfoResponse":{"description":"QueryCounterpartyInfoResponse is the response type for the\nQuery/CounterpartyInfo RPC method.","type":"object","properties":{"counterparty_info":{"$ref":"#/definitions/ibc.core.client.v2.CounterpartyInfo"}}},"ibc.core.commitment.v1.MerklePrefix":{"type":"object","title":"MerklePrefix is merkle path prefixed to the key.\nThe constructed key from the Path and the key will be append(Path.KeyPath,\nappend(Path.KeyPrefix, key...))","properties":{"key_prefix":{"type":"string","format":"byte"}}},"ibc.core.commitment.v2.MerklePath":{"description":"MerklePath is the path used to verify commitment proofs, which can be an\narbitrary structured object (defined by a commitment type).\nICS-23 verification supports membership proofs for nested merkle trees.\nThe ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix.\nThe IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash\nstored in the consensus state of the client.\nEach element of the path represents the key of a merkle tree from the root to the leaf.\nThe elements of the path before the final element must be the path to the tree that contains\nthe ICS24 provable store. Thus, it should remain constant for all ICS24 proofs.\nThe final element of the path is the key of the leaf in the ICS24 provable store,\nThus IBC core will append the ICS24 path to the final element of the MerklePath\nstored in the counterparty to create the full path to the leaf for proof verification.\nExamples:\nCosmos SDK:\nThe Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes\nare hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"ibc\", \"\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"ibc\", \"{packetCommitmentPath}\"] which will then be used for final verification.\nEthereum:\nThe Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed\nby the smart contract state. Each smart contract has a specific prefix reserved within the global trie.\nThus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie.\nSince there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"IBCCoreContractAddressStoragePrefix\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"IBCCoreContractAddressStoragePrefix{packetCommitmentPath}\"] which will then be used for final\nverification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the\nconsensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24\nprovable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified\nby the client against the root hash in the client's consensus state.","type":"object","properties":{"key_path":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.connection.v1.ConnectionEnd":{"description":"ConnectionEnd defines a stateful object on a chain connected to another\nseparate one.\nNOTE: there must only be 2 defined ConnectionEnds to establish\na connection between two chains.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period that must pass before a consensus state can be used for\npacket-verification NOTE: delay period logic is only implemented by some\nclients.","type":"string","format":"uint64"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"description":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.Counterparty":{"description":"Counterparty defines the counterparty chain associated with a connection end.","type":"object","properties":{"client_id":{"description":"identifies the client on the counterparty chain associated with a given\nconnection.","type":"string"},"connection_id":{"description":"identifies the connection end on the counterparty chain associated with a\ngiven connection.","type":"string"},"prefix":{"description":"commitment merkle prefix of the counterparty chain.","$ref":"#/definitions/ibc.core.commitment.v1.MerklePrefix"}}},"ibc.core.connection.v1.IdentifiedConnection":{"description":"IdentifiedConnection defines a connection with additional connection\nidentifier field.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period associated with this connection.","type":"string","format":"uint64"},"id":{"description":"connection identifier.","type":"string"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"type":"array","title":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.MsgConnectionOpenAck":{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","type":"object","properties":{"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"connection_id":{"type":"string"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty_connection_id":{"type":"string"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain B: `UNINITIALIZED -\u003e\nTRYOPEN`"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenAckResponse":{"description":"MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenConfirm":{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","type":"object","properties":{"connection_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte","title":"proof for the change of the connection state on Chain A: `INIT -\u003e OPEN`"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenConfirmResponse":{"description":"MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm\nresponse type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenInit":{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","type":"object","properties":{"client_id":{"type":"string"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"type":"string","format":"uint64"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenInitResponse":{"description":"MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response\ntype.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenTry":{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","type":"object","properties":{"client_id":{"type":"string"},"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"counterparty_versions":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}},"delay_period":{"type":"string","format":"uint64"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"previous_connection_id":{"description":"Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC.","type":"string"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain A: `UNINITIALIZED -\u003e\nINIT`"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenTryResponse":{"description":"MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type.","type":"object"},"ibc.core.connection.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","type":"object","properties":{"params":{"description":"params defines the connection parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.connection.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.connection.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.connection.v1.Params":{"description":"Params defines the set of Connection parameters.","type":"object","properties":{"max_expected_time_per_block":{"description":"maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the\nlargest amount of time that the chain might reasonably take to produce the next block under normal operating\nconditions. A safe choice is 3-5x the expected time per block.","type":"string","format":"uint64"}}},"ibc.core.connection.v1.QueryClientConnectionsResponse":{"type":"object","title":"QueryClientConnectionsResponse is the response type for the\nQuery/ClientConnections RPC method","properties":{"connection_paths":{"description":"slice of all the connection paths associated with a client.","type":"array","items":{"type":"string"}},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was generated","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionClientStateResponse":{"type":"object","title":"QueryConnectionClientStateResponse is the response type for the\nQuery/ConnectionClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionConsensusStateResponse":{"type":"object","title":"QueryConnectionConsensusStateResponse is the response type for the\nQuery/ConnectionConsensusState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionParamsResponse":{"description":"QueryConnectionParamsResponse is the response type for the Query/ConnectionParams RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.connection.v1.Params"}}},"ibc.core.connection.v1.QueryConnectionResponse":{"description":"QueryConnectionResponse is the response type for the Query/Connection RPC\nmethod. Besides the connection end, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"connection":{"title":"connection associated with the request identifier","$ref":"#/definitions/ibc.core.connection.v1.ConnectionEnd"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionsResponse":{"description":"QueryConnectionsResponse is the response type for the Query/Connections RPC\nmethod.","type":"object","properties":{"connections":{"description":"list of stored connections of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.IdentifiedConnection"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.connection.v1.State":{"description":"State defines if a connection is in one of the following states:\nINIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A connection end has just started the opening handshake.\n - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\nchain.\n - STATE_OPEN: A connection end has completed the handshake.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN"]},"ibc.core.connection.v1.Version":{"description":"Version defines the versioning scheme used to negotiate the IBC version in\nthe connection handshake.","type":"object","properties":{"features":{"type":"array","title":"list of features compatible with the specified identifier","items":{"type":"string"}},"identifier":{"type":"string","title":"unique version identifier"}}},"ibc.lightclients.wasm.v1.MsgMigrateContract":{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the new wasm byte code for the contract"},"client_id":{"type":"string","title":"the client id of the contract"},"msg":{"type":"string","format":"byte","title":"the json encoded message to be passed to the contract on migration"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgMigrateContractResponse":{"type":"object","title":"MsgMigrateContractResponse defines the response type for the MigrateContract rpc"},"ibc.lightclients.wasm.v1.MsgRemoveChecksum":{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash to be removed from the store"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse":{"type":"object","title":"MsgStoreChecksumResponse defines the response type for the StoreCode rpc"},"ibc.lightclients.wasm.v1.MsgStoreCode":{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"wasm_byte_code":{"type":"string","format":"byte","title":"wasm byte code of light client contract. It can be raw or gzip compressed"}}},"ibc.lightclients.wasm.v1.MsgStoreCodeResponse":{"type":"object","title":"MsgStoreCodeResponse defines the response type for the StoreCode rpc","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the stored code"}}},"ibc.lightclients.wasm.v1.QueryChecksumsResponse":{"description":"QueryChecksumsResponse is the response type for the Query/Checksums RPC method.","type":"object","properties":{"checksums":{"description":"checksums is a list of the hex encoded checksums of all wasm codes stored.","type":"array","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.lightclients.wasm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC method.","type":"object","properties":{"data":{"type":"string","format":"byte"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.EpochAnchor":{"description":"EpochAnchor is a minimal per-epoch on-chain anchor that freezes the deterministic seed\nand the eligible supernode sets used for deterministic selection off-chain.","type":"object","properties":{"active_set_commitment":{"type":"string","format":"byte"},"active_supernode_accounts":{"description":"active_supernode_accounts is the sorted list of ACTIVE supernodes at epoch start.","type":"array","items":{"type":"string"}},"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"params_commitment":{"description":"params_commitment is a hash commitment to Params (with defaults) at epoch start.","type":"string","format":"byte"},"seed":{"description":"seed is a fixed 32-byte value derived at epoch start (domain-separated).","type":"string","format":"byte"},"target_supernode_accounts":{"description":"target_supernode_accounts is the sorted list of eligible targets at epoch start:\nACTIVE + POSTPONED supernodes.","type":"array","items":{"type":"string"}},"targets_set_commitment":{"type":"string","format":"byte"}}},"lumera.audit.v1.EpochReport":{"description":"EpochReport is a single per-epoch report submitted by a Supernode.","type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"report_height":{"type":"string","format":"int64"},"storage_challenge_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeObservation"}},"supernode_account":{"type":"string"}}},"lumera.audit.v1.Evidence":{"description":"Evidence is a stable outer record that stores evidence about an audited subject.\nType-specific fields are encoded into the `metadata` bytes field.","type":"object","properties":{"action_id":{"description":"action_id optionally links this evidence to a specific action.","type":"string"},"evidence_id":{"description":"evidence_id is a chain-assigned unique identifier.","type":"string","format":"uint64"},"evidence_type":{"description":"evidence_type is a stable discriminator used to interpret metadata.","$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is protobuf-binary bytes of a type-specific Evidence metadata message.","type":"string","format":"byte"},"reported_height":{"description":"reported_height is the block height when the evidence was submitted.","type":"string","format":"uint64"},"reporter_address":{"description":"reporter_address is the submitter of the evidence.","type":"string"},"subject_address":{"description":"subject_address is the audited subject (e.g. supernode-related actor).","type":"string"}}},"lumera.audit.v1.EvidenceType":{"description":" - EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE: action finalization rejected due to an invalid signature / signature-derived data.\n - EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: action finalization rejected because the attempted finalizer is not in the top-10 supernodes.\n - EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE: storage challenge failure evidence submitted by the deterministic challenger.","type":"string","default":"EVIDENCE_TYPE_UNSPECIFIED","enum":["EVIDENCE_TYPE_UNSPECIFIED","EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE","EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10","EVIDENCE_TYPE_ACTION_EXPIRED","EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE"]},"lumera.audit.v1.HostReport":{"description":"HostReport is the Supernode's self-reported host metrics and counters for an epoch.","type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.HostReportEntry":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"report_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.MsgSubmitEpochReport":{"type":"object","properties":{"creator":{"description":"creator is the transaction signer.","type":"string"},"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"storage_challenge_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeObservation"}}}},"lumera.audit.v1.MsgSubmitEpochReportResponse":{"type":"object"},"lumera.audit.v1.MsgSubmitEvidence":{"type":"object","properties":{"action_id":{"type":"string"},"creator":{"type":"string"},"evidence_type":{"$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is JSON for the type-specific Evidence metadata message.\nThe chain stores protobuf-binary bytes derived from this JSON.","type":"string"},"subject_address":{"type":"string"}}},"lumera.audit.v1.MsgSubmitEvidenceResponse":{"type":"object","properties":{"evidence_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"action_finalization_not_in_top10_consecutive_epochs":{"description":"action_finalization_not_in_top10_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_not_in_top10_evidences_per_epoch":{"description":"action_finalization_not_in_top10_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_recovery_epochs":{"description":"action_finalization_recovery_epochs is the number of epochs to wait before considering recovery.","type":"integer","format":"int64"},"action_finalization_recovery_max_total_bad_evidences":{"description":"action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad\naction-finalization evidences in the recovery epoch-span for auto-recovery to occur.\nRecovery happens ONLY IF total_bad \u003c this value.","type":"integer","format":"int64"},"action_finalization_signature_failure_consecutive_epochs":{"description":"action_finalization_signature_failure_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"action_finalization_signature_failure_evidences_per_epoch":{"description":"action_finalization_signature_failure_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"consecutive_epochs_to_postpone":{"description":"Number of consecutive epochs a required port must be reported CLOSED by peers\nat or above peer_port_postpone_threshold_percent before postponing the supernode.","type":"integer","format":"int64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_zero_height":{"description":"epoch_zero_height defines the reference chain height at which epoch_id = 0 starts.\nThis makes epoch boundaries deterministic from genesis without needing to query state.","type":"string","format":"uint64"},"keep_last_epoch_entries":{"description":"How many completed epochs to keep in state for epoch-scoped data like EpochReport\nand related indices. Pruning runs at epoch end.","type":"string","format":"uint64"},"max_probe_targets_per_epoch":{"type":"integer","format":"int64"},"min_cpu_free_percent":{"description":"Minimum required host free capacity (self reported).\nfree% = 100 - usage%\nA usage% of 0 is treated as \"unknown\" (no action).","type":"integer","format":"int64"},"min_disk_free_percent":{"type":"integer","format":"int64"},"min_mem_free_percent":{"type":"integer","format":"int64"},"min_probe_targets_per_epoch":{"type":"integer","format":"int64"},"peer_port_postpone_threshold_percent":{"description":"Minimum percent (1-100) of peer reports that must report a required port as CLOSED\nfor the port to be treated as CLOSED for postponement purposes.\n\n100 means unanimous.\nExample: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%).","type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"sc_challengers_per_epoch":{"type":"integer","format":"int64"},"sc_enabled":{"description":"Storage Challenge (SC) params.","type":"boolean"}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.QueryAssignedTargetsResponse":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"target_supernode_accounts":{"type":"array","items":{"type":"string"}}}},"lumera.audit.v1.QueryCurrentEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryCurrentEpochResponse":{"type":"object","properties":{"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryEpochReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.EpochReport"}}},"lumera.audit.v1.QueryEpochReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.EpochReport"}}}},"lumera.audit.v1.QueryEvidenceByActionResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryEvidenceByIdResponse":{"type":"object","properties":{"evidence":{"$ref":"#/definitions/lumera.audit.v1.Evidence"}}},"lumera.audit.v1.QueryEvidenceBySubjectResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryHostReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.HostReportEntry"}}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QueryStorageChallengeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeReport"}}}},"lumera.audit.v1.StorageChallengeObservation":{"description":"StorageChallengeObservation is a prober's reachability observation about an assigned target.","type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the epoch.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.StorageChallengeReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"reason":{"description":"reason is an optional string describing why the state transition occurred.\nIt is currently set only for transitions into POSTPONED.","type":"string"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"tendermint.abci.CheckTxType":{"type":"string","default":"NEW","enum":["NEW","RECHECK"]},"tendermint.abci.CommitInfo":{"type":"object","properties":{"round":{"type":"integer","format":"int32"},"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.VoteInfo"}}}},"tendermint.abci.Event":{"description":"Event allows application developers to attach additional information to\nResponseFinalizeBlock and ResponseCheckTx.\nLater, transactions may be queried using these events.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.EventAttribute"}},"type":{"type":"string"}}},"tendermint.abci.EventAttribute":{"description":"EventAttribute is a single key-value pair, associated with an event.","type":"object","properties":{"index":{"type":"boolean","title":"nondeterministic"},"key":{"type":"string"},"value":{"type":"string"}}},"tendermint.abci.ExecTxResult":{"description":"ExecTxResult contains results of executing one individual transaction.\n\n* Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","title":"nondeterministic","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ExtendedCommitInfo":{"description":"ExtendedCommitInfo is similar to CommitInfo except that it is only used in\nthe PrepareProposal request such that CometBFT can provide vote extensions\nto the application.","type":"object","properties":{"round":{"description":"The round at which the block proposer decided in the previous height.","type":"integer","format":"int32"},"votes":{"description":"List of validators' addresses in the last validator set with their voting\ninformation, including vote extensions.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExtendedVoteInfo"}}}},"tendermint.abci.ExtendedVoteInfo":{"type":"object","properties":{"block_id_flag":{"title":"block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all","$ref":"#/definitions/tendermint.types.BlockIDFlag"},"extension_signature":{"type":"string","format":"byte","title":"Vote extension signature created by CometBFT"},"validator":{"description":"The validator that sent the vote.","$ref":"#/definitions/tendermint.abci.Validator"},"vote_extension":{"description":"Non-deterministic extension provided by the sending validator's application.","type":"string","format":"byte"}}},"tendermint.abci.Misbehavior":{"type":"object","properties":{"height":{"type":"string","format":"int64","title":"The height when the offense occurred"},"time":{"type":"string","format":"date-time","title":"The corresponding time where the offense occurred"},"total_voting_power":{"type":"string","format":"int64","title":"Total voting power of the validator set in case the ABCI application does\nnot store historical validators.\nhttps://github.com/tendermint/tendermint/issues/4581"},"type":{"$ref":"#/definitions/tendermint.abci.MisbehaviorType"},"validator":{"title":"The offending validator","$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.abci.MisbehaviorType":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","DUPLICATE_VOTE","LIGHT_CLIENT_ATTACK"]},"tendermint.abci.RequestApplySnapshotChunk":{"type":"object","title":"Applies a snapshot chunk","properties":{"chunk":{"type":"string","format":"byte"},"index":{"type":"integer","format":"int64"},"sender":{"type":"string"}}},"tendermint.abci.RequestCheckTx":{"type":"object","properties":{"tx":{"type":"string","format":"byte"},"type":{"$ref":"#/definitions/tendermint.abci.CheckTxType"}}},"tendermint.abci.RequestCommit":{"type":"object"},"tendermint.abci.RequestEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.RequestExtendVote":{"type":"object","title":"Extends a vote with application-injected data","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this vote may be referring to"},"height":{"type":"string","format":"int64","title":"the height of the extended vote"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time","title":"info of the block that this vote may be referring to"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFinalizeBlock":{"type":"object","properties":{"decided_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"hash":{"description":"hash is the merkle root hash of the fields of the decided block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"proposer_address is the address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFlush":{"type":"object"},"tendermint.abci.RequestInfo":{"type":"object","properties":{"abci_version":{"type":"string"},"block_version":{"type":"string","format":"uint64"},"p2p_version":{"type":"string","format":"uint64"},"version":{"type":"string"}}},"tendermint.abci.RequestInitChain":{"type":"object","properties":{"app_state_bytes":{"type":"string","format":"byte"},"chain_id":{"type":"string"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"initial_height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.RequestListSnapshots":{"type":"object","title":"lists available snapshots"},"tendermint.abci.RequestLoadSnapshotChunk":{"type":"object","title":"loads a snapshot chunk","properties":{"chunk":{"type":"integer","format":"int64"},"format":{"type":"integer","format":"int64"},"height":{"type":"string","format":"uint64"}}},"tendermint.abci.RequestOfferSnapshot":{"type":"object","title":"offers a snapshot to the application","properties":{"app_hash":{"type":"string","format":"byte","title":"light client-verified app hash for snapshot height"},"snapshot":{"title":"snapshot offered by peers","$ref":"#/definitions/tendermint.abci.Snapshot"}}},"tendermint.abci.RequestPrepareProposal":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"local_last_commit":{"$ref":"#/definitions/tendermint.abci.ExtendedCommitInfo"},"max_tx_bytes":{"description":"the modified transactions cannot exceed this size.","type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"address of the public key of the validator proposing the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"description":"txs is an array of transactions that will be included in a block,\nsent to the app for possible modifications.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestProcessProposal":{"type":"object","properties":{"hash":{"description":"hash is the merkle root hash of the fields of the proposed block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestQuery":{"type":"object","properties":{"data":{"type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"path":{"type":"string"},"prove":{"type":"boolean"}}},"tendermint.abci.RequestVerifyVoteExtension":{"type":"object","title":"Verify the vote extension","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this received vote corresponds to"},"height":{"type":"string","format":"int64"},"validator_address":{"type":"string","format":"byte","title":"the validator that signed the vote extension"},"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseApplySnapshotChunk":{"type":"object","properties":{"refetch_chunks":{"type":"array","title":"Chunks to refetch and reapply","items":{"type":"integer","format":"int64"}},"reject_senders":{"type":"array","title":"Chunk senders to reject and ban","items":{"type":"string"}},"result":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk.Result"}}},"tendermint.abci.ResponseApplySnapshotChunk.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Chunk successfully accepted\n - ABORT: Abort all snapshot restoration\n - RETRY: Retry chunk (combine with refetch and reject)\n - RETRY_SNAPSHOT: Retry snapshot (combine with refetch and reject)\n - REJECT_SNAPSHOT: Reject this snapshot, try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","RETRY","RETRY_SNAPSHOT","REJECT_SNAPSHOT"]},"tendermint.abci.ResponseCheckTx":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ResponseCommit":{"type":"object","properties":{"retain_height":{"type":"string","format":"int64"}}},"tendermint.abci.ResponseEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.ResponseExtendVote":{"type":"object","properties":{"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseFinalizeBlock":{"type":"object","properties":{"app_hash":{"description":"app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was\ndeterministic. It is up to the application to decide which algorithm to use.","type":"string","format":"byte"},"consensus_param_updates":{"description":"updates to the consensus params, if any.","$ref":"#/definitions/tendermint.types.ConsensusParams"},"events":{"type":"array","title":"set of block events emmitted as part of executing the block","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"tx_results":{"type":"array","title":"the result of executing each transaction including the events\nthe particular transction emitted. This should match the order\nof the transactions delivered in the block itself","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExecTxResult"}},"validator_updates":{"description":"a list of updates to the validator set. These will reflect the validator set at current height + 2.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseFlush":{"type":"object"},"tendermint.abci.ResponseInfo":{"type":"object","properties":{"app_version":{"type":"string","format":"uint64"},"data":{"type":"string"},"last_block_app_hash":{"type":"string","format":"byte"},"last_block_height":{"type":"string","format":"int64"},"version":{"type":"string"}}},"tendermint.abci.ResponseInitChain":{"type":"object","properties":{"app_hash":{"type":"string","format":"byte"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseListSnapshots":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Snapshot"}}}},"tendermint.abci.ResponseLoadSnapshotChunk":{"type":"object","properties":{"chunk":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseOfferSnapshot":{"type":"object","properties":{"result":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot.Result"}}},"tendermint.abci.ResponseOfferSnapshot.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Snapshot accepted, apply chunks\n - ABORT: Abort all snapshot restoration\n - REJECT: Reject this specific snapshot, try others\n - REJECT_FORMAT: Reject all snapshots of this format, try others\n - REJECT_SENDER: Reject all snapshots from the sender(s), try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","REJECT","REJECT_FORMAT","REJECT_SENDER"]},"tendermint.abci.ResponsePrepareProposal":{"type":"object","properties":{"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.ResponseProcessProposal":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal.ProposalStatus"}}},"tendermint.abci.ResponseProcessProposal.ProposalStatus":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.ResponseQuery":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"description":"bytes data = 2; // use \"value\" instead.\n\nnondeterministic","type":"string"},"proof_ops":{"$ref":"#/definitions/tendermint.crypto.ProofOps"},"value":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseVerifyVoteExtension":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus"}}},"tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus":{"description":" - REJECT: Rejecting the vote extension will reject the entire precommit by the sender.\nIncorrectly implementing this thus has liveness implications as it may affect\nCometBFT's ability to receive 2/3+ valid votes to finalize the block.\nHonest nodes should never be rejected.","type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.Snapshot":{"type":"object","properties":{"chunks":{"type":"integer","format":"int64","title":"Number of chunks in the snapshot"},"format":{"type":"integer","format":"int64","title":"The application-specific snapshot format"},"hash":{"type":"string","format":"byte","title":"Arbitrary snapshot hash, equal only if identical"},"height":{"type":"string","format":"uint64","title":"The height at which the snapshot was taken"},"metadata":{"type":"string","format":"byte","title":"Arbitrary application metadata"}}},"tendermint.abci.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte","title":"The first 20 bytes of SHA256(public key)"},"power":{"description":"The voting power","type":"string","format":"int64","title":"PubKey pub_key = 2 [(gogoproto.nullable)=false];"}}},"tendermint.abci.ValidatorUpdate":{"type":"object","properties":{"power":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"}}},"tendermint.abci.VoteInfo":{"type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"validator":{"$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.crypto.ProofOp":{"type":"object","title":"ProofOp defines an operation used for calculating Merkle root\nThe data could be arbitrary format, providing nessecary data\nfor example neighbouring node hash","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"tendermint.crypto.ProofOps":{"type":"object","title":"ProofOps is Merkle proof defined by the list of ProofOps","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.crypto.ProofOp"}}}},"tendermint.crypto.PublicKey":{"type":"object","title":"PublicKey defines the keys available for use with Validators","properties":{"ed25519":{"type":"string","format":"byte"},"secp256k1":{"type":"string","format":"byte"}}},"tendermint.p2p.DefaultNodeInfo":{"type":"object","properties":{"channels":{"type":"string","format":"byte"},"default_node_id":{"type":"string"},"listen_addr":{"type":"string"},"moniker":{"type":"string"},"network":{"type":"string"},"other":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfoOther"},"protocol_version":{"$ref":"#/definitions/tendermint.p2p.ProtocolVersion"},"version":{"type":"string"}}},"tendermint.p2p.DefaultNodeInfoOther":{"type":"object","properties":{"rpc_address":{"type":"string"},"tx_index":{"type":"string"}}},"tendermint.p2p.ProtocolVersion":{"type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"},"p2p":{"type":"string","format":"uint64"}}},"tendermint.types.ABCIParams":{"description":"ABCIParams configure functionality specific to the Application Blockchain Interface.","type":"object","properties":{"vote_extensions_enable_height":{"description":"vote_extensions_enable_height configures the first height during which\nvote extensions will be enabled. During this specified height, and for all\nsubsequent heights, precommit messages that do not contain valid extension data\nwill be considered invalid. Prior to this height, vote extensions will not\nbe used or accepted by validators on the network.\n\nOnce enabled, vote extensions will be created by the application in ExtendVote,\npassed to the application for validation in VerifyVoteExtension and given\nto the application to use when proposing a block during PrepareProposal.","type":"string","format":"int64"}}},"tendermint.types.Block":{"type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/tendermint.types.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"tendermint.types.BlockID":{"type":"object","title":"BlockID","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"$ref":"#/definitions/tendermint.types.PartSetHeader"}}},"tendermint.types.BlockIDFlag":{"description":"- BLOCK_ID_FLAG_UNKNOWN: indicates an error condition\n - BLOCK_ID_FLAG_ABSENT: the vote was not received\n - BLOCK_ID_FLAG_COMMIT: voted for the block that received the majority\n - BLOCK_ID_FLAG_NIL: voted for nil","type":"string","title":"BlockIdFlag indicates which BlockID the signature is for","default":"BLOCK_ID_FLAG_UNKNOWN","enum":["BLOCK_ID_FLAG_UNKNOWN","BLOCK_ID_FLAG_ABSENT","BLOCK_ID_FLAG_COMMIT","BLOCK_ID_FLAG_NIL"]},"tendermint.types.BlockParams":{"description":"BlockParams contains limits on the block size.","type":"object","properties":{"max_bytes":{"type":"string","format":"int64","title":"Max block size, in bytes.\nNote: must be greater than 0"},"max_gas":{"type":"string","format":"int64","title":"Max gas per block.\nNote: must be greater or equal to -1"}}},"tendermint.types.Commit":{"description":"Commit contains the evidence that a block was committed by a set of validators.","type":"object","properties":{"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signatures":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.CommitSig"}}}},"tendermint.types.CommitSig":{"description":"CommitSig is a part of the Vote included in a Commit.","type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"signature":{"type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"validator_address":{"type":"string","format":"byte"}}},"tendermint.types.ConsensusParams":{"description":"ConsensusParams contains consensus critical parameters that determine the\nvalidity of blocks.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"block":{"$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"},"version":{"$ref":"#/definitions/tendermint.types.VersionParams"}}},"tendermint.types.Data":{"type":"object","title":"Data contains the set of transactions included in the block","properties":{"txs":{"description":"Txs that will be applied by state @ block.Height+1.\nNOTE: not all txs here are valid. We're just agreeing on the order first.\nThis means that block.AppHash does not include these txs.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.types.DuplicateVoteEvidence":{"description":"DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.","type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"},"validator_power":{"type":"string","format":"int64"},"vote_a":{"$ref":"#/definitions/tendermint.types.Vote"},"vote_b":{"$ref":"#/definitions/tendermint.types.Vote"}}},"tendermint.types.Evidence":{"type":"object","properties":{"duplicate_vote_evidence":{"$ref":"#/definitions/tendermint.types.DuplicateVoteEvidence"},"light_client_attack_evidence":{"$ref":"#/definitions/tendermint.types.LightClientAttackEvidence"}}},"tendermint.types.EvidenceList":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Evidence"}}}},"tendermint.types.EvidenceParams":{"description":"EvidenceParams determine how we handle evidence of malfeasance.","type":"object","properties":{"max_age_duration":{"description":"Max age of evidence, in time.\n\nIt should correspond with an app's \"unbonding period\" or other similar\nmechanism for handling [Nothing-At-Stake\nattacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).","type":"string"},"max_age_num_blocks":{"description":"Max age of evidence, in blocks.\n\nThe basic formula for calculating this is: MaxAgeDuration / {average block\ntime}.","type":"string","format":"int64"},"max_bytes":{"type":"string","format":"int64","title":"This sets the maximum size of total evidence in bytes that can be committed in a single block.\nand should fall comfortably under the max block bytes.\nDefault is 1048576 or 1MB"}}},"tendermint.types.Header":{"description":"Header defines the structure of a block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"type":"string","format":"byte","title":"original proposer of the block"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"tendermint.types.LightBlock":{"type":"object","properties":{"signed_header":{"$ref":"#/definitions/tendermint.types.SignedHeader"},"validator_set":{"$ref":"#/definitions/tendermint.types.ValidatorSet"}}},"tendermint.types.LightClientAttackEvidence":{"description":"LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.","type":"object","properties":{"byzantine_validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}},"common_height":{"type":"string","format":"int64"},"conflicting_block":{"$ref":"#/definitions/tendermint.types.LightBlock"},"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"}}},"tendermint.types.PartSetHeader":{"type":"object","title":"PartsetHeader","properties":{"hash":{"type":"string","format":"byte"},"total":{"type":"integer","format":"int64"}}},"tendermint.types.SignedHeader":{"type":"object","properties":{"commit":{"$ref":"#/definitions/tendermint.types.Commit"},"header":{"$ref":"#/definitions/tendermint.types.Header"}}},"tendermint.types.SignedMsgType":{"description":"SignedMsgType is a type of signed message in the consensus.\n\n - SIGNED_MSG_TYPE_PREVOTE: Votes\n - SIGNED_MSG_TYPE_PROPOSAL: Proposals","type":"string","default":"SIGNED_MSG_TYPE_UNKNOWN","enum":["SIGNED_MSG_TYPE_UNKNOWN","SIGNED_MSG_TYPE_PREVOTE","SIGNED_MSG_TYPE_PRECOMMIT","SIGNED_MSG_TYPE_PROPOSAL"]},"tendermint.types.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"},"voting_power":{"type":"string","format":"int64"}}},"tendermint.types.ValidatorParams":{"description":"ValidatorParams restrict the public key types validators can use.\nNOTE: uses ABCI pubkey naming, not Amino names.","type":"object","properties":{"pub_key_types":{"type":"array","items":{"type":"string"}}}},"tendermint.types.ValidatorSet":{"type":"object","properties":{"proposer":{"$ref":"#/definitions/tendermint.types.Validator"},"total_voting_power":{"type":"string","format":"int64"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}}}},"tendermint.types.VersionParams":{"description":"VersionParams contains the ABCI application version.","type":"object","properties":{"app":{"type":"string","format":"uint64"}}},"tendermint.types.Vote":{"description":"Vote represents a prevote or precommit vote from validators for\nconsensus.","type":"object","properties":{"block_id":{"description":"zero if vote is nil.","$ref":"#/definitions/tendermint.types.BlockID"},"extension":{"description":"Vote extension provided by the application. Only valid for precommit\nmessages.","type":"string","format":"byte"},"extension_signature":{"description":"Vote extension signature by the validator if they participated in\nconsensus for the associated block.\nOnly valid for precommit messages.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signature":{"description":"Vote signature by the validator if they participated in consensus for the\nassociated block.","type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"type":{"$ref":"#/definitions/tendermint.types.SignedMsgType"},"validator_address":{"type":"string","format":"byte"},"validator_index":{"type":"integer","format":"int32"}}},"tendermint.version.Consensus":{"description":"Consensus captures the consensus rules for processing a block in the blockchain,\nincluding all blockchain data structures and the rules of the application's\nstate transition machine.","type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"}}}},"tags":[{"name":"Query"},{"name":"Msg"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file +{"id":"github.com/LumeraProtocol/lumera","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/LumeraProtocol/lumera REST API","title":"HTTP API Console","contact":{"name":"github.com/LumeraProtocol/lumera"},"version":"version not set"},"paths":{"/LumeraProtocol/lumera/action/v1/get_action/{actionID}":{"get":{"tags":["Query"],"summary":"GetAction queries a single action by ID.","operationId":"GithubComLumeraProtocollumeraQuery_GetAction","parameters":[{"type":"string","description":"The ID of the action to query","name":"actionID","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/get_action_fee/{dataSize}":{"get":{"tags":["Query"],"summary":"Queries a list of GetActionFee items.","operationId":"GithubComLumeraProtocollumeraQuery_GetActionFee","parameters":[{"type":"string","name":"dataSize","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryGetActionFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions":{"get":{"tags":["Query"],"summary":"List actions with optional type and state filters.","operationId":"GithubComLumeraProtocollumeraQuery_ListActions","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"],"type":"string","default":"ACTION_STATE_UNSPECIFIED","description":" - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","name":"actionState","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_block_height/{blockHeight}":{"get":{"tags":["Query"],"summary":"List actions created at a specific block height.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByBlockHeight","parameters":[{"type":"string","format":"int64","name":"blockHeight","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_creator/{creator}":{"get":{"tags":["Query"],"summary":"List actions created by a specific address.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsByCreator","parameters":[{"type":"string","name":"creator","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsByCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_actions_by_supernode/{superNodeAddress}":{"get":{"tags":["Query"],"summary":"List actions for a specific supernode.","operationId":"GithubComLumeraProtocollumeraQuery_ListActionsBySuperNode","parameters":[{"type":"string","name":"superNodeAddress","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListActionsBySuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/list_expired_actions":{"get":{"tags":["Query"],"summary":"List expired actions.","operationId":"GithubComLumeraProtocollumeraQuery_ListExpiredActions","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryListExpiredActionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/action/v1/query_action_by_metadata":{"get":{"tags":["Query"],"summary":"Query actions based on metadata.","operationId":"GithubComLumeraProtocollumeraQuery_QueryActionByMetadata","parameters":[{"enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"],"type":"string","default":"ACTION_TYPE_UNSPECIFIED","description":" - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","name":"actionType","in":"query"},{"type":"string","description":"e.g., \"field=value\"","name":"metadataQuery","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.QueryActionByMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/assigned_targets/{supernode_account}":{"get":{"tags":["Query"],"summary":"AssignedTargets returns the prober -\u003e targets assignment for a given supernode_account.\nIf filter_by_epoch_id is false, it returns the assignments for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_AssignedTargets","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryAssignedTargetsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch":{"get":{"tags":["Query"],"summary":"CurrentEpoch returns the current derived epoch boundaries at the current chain height.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpoch","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/current_epoch_anchor":{"get":{"tags":["Query"],"summary":"CurrentEpochAnchor returns the persisted epoch anchor for the current epoch.","operationId":"GithubComLumeraProtocollumeraQuery_CurrentEpochAnchor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryCurrentEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_anchor/{epoch_id}":{"get":{"tags":["Query"],"summary":"EpochAnchor returns the persisted epoch anchor for the given epoch_id.","operationId":"GithubComLumeraProtocollumeraQuery_EpochAnchor","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochAnchorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_report/{epoch_id}/{supernode_account}":{"get":{"tags":["Query"],"summary":"EpochReport returns the submitted epoch report for (epoch_id, supernode_account).","operationId":"GithubComLumeraProtocollumeraQuery_EpochReport","parameters":[{"type":"string","format":"uint64","name":"epoch_id","in":"path","required":true},{"type":"string","name":"supernode_account","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/epoch_reports_by_reporter/{supernode_account}":{"get":{"tags":["Query"],"summary":"EpochReportsByReporter returns epoch reports submitted by the given reporter across epochs.","operationId":"GithubComLumeraProtocollumeraQuery_EpochReportsByReporter","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEpochReportsByReporterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_action/{action_id}":{"get":{"tags":["Query"],"summary":"EvidenceByAction queries evidence records by action id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceByAction","parameters":[{"type":"string","name":"action_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/by_subject/{subject_address}":{"get":{"tags":["Query"],"summary":"EvidenceBySubject queries evidence records by subject address.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceBySubject","parameters":[{"type":"string","name":"subject_address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceBySubjectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/evidence/{evidence_id}":{"get":{"tags":["Query"],"summary":"EvidenceById queries a single evidence record by id.","operationId":"GithubComLumeraProtocollumeraQuery_EvidenceById","parameters":[{"type":"string","format":"uint64","name":"evidence_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryEvidenceByIdResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/host_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"HostReports returns host reports submitted by the given supernode_account across epochs.","operationId":"GithubComLumeraProtocollumeraQuery_HostReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryHostReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin14","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/audit/v1/storage_challenge_reports/{supernode_account}":{"get":{"tags":["Query"],"summary":"StorageChallengeReports returns all reports that include storage-challenge observations about the given supernode_account.","operationId":"GithubComLumeraProtocollumeraQuery_StorageChallengeReports","parameters":[{"type":"string","name":"supernode_account","in":"path","required":true},{"type":"string","format":"uint64","name":"epoch_id","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","name":"filter_by_epoch_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.QueryStorageChallengeReportsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/claim_record/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of ClaimRecord items.","operationId":"GithubComLumeraProtocollumeraQuery_ClaimRecord","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryClaimRecordResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/list_claimed/{vestedTerm}":{"get":{"tags":["Query"],"summary":"Queries a list of ListClaimed items.","operationId":"GithubComLumeraProtocollumeraQuery_ListClaimed","parameters":[{"type":"integer","format":"int64","name":"vestedTerm","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryListClaimedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/claim/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin19","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/lumeraid/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin24","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by validatorAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNode","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_super_node_by_address/{supernodeAddress}":{"get":{"tags":["Query"],"summary":"Queries a SuperNode by supernodeAddress.","operationId":"GithubComLumeraProtocollumeraQuery_GetSuperNodeBySuperNodeAddress","parameters":[{"type":"string","name":"supernodeAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/get_top_super_nodes_for_block/{blockHeight}":{"get":{"tags":["Query"],"summary":"Queries a list of GetTopSuperNodesForBlock items.","operationId":"GithubComLumeraProtocollumeraQuery_GetTopSuperNodesForBlock","parameters":[{"type":"integer","format":"int32","name":"blockHeight","in":"path","required":true},{"type":"integer","format":"int32","name":"limit","in":"query"},{"type":"string","name":"state","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/list_super_nodes":{"get":{"tags":["Query"],"summary":"Queries a list of SuperNodes.","operationId":"GithubComLumeraProtocollumeraQuery_ListSuperNodes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryListSuperNodesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/metrics/{validatorAddress}":{"get":{"tags":["Query"],"summary":"Queries the latest metrics state for a validator.","operationId":"GithubComLumeraProtocollumeraQuery_GetMetrics","parameters":[{"type":"string","name":"validatorAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryGetMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/LumeraProtocol/lumera/supernode/v1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubComLumeraProtocollumeraQuery_ParamsMixin32","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/ApproveAction":{"post":{"tags":["Msg"],"summary":"ApproveAction defines a message for approving an action.","operationId":"GithubComLumeraProtocollumeraMsg_ApproveAction","parameters":[{"description":"MsgApproveAction is the Msg/ApproveAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgApproveActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/FinalizeAction":{"post":{"tags":["Msg"],"summary":"FinalizeAction defines a message for finalizing an action.","operationId":"GithubComLumeraProtocollumeraMsg_FinalizeAction","parameters":[{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgFinalizeActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/RequestAction":{"post":{"tags":["Msg"],"summary":"RequestAction defines a message for requesting an action.","operationId":"GithubComLumeraProtocollumeraMsg_RequestAction","parameters":[{"description":"MsgRequestAction is the Msg/RequestAction request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestAction"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgRequestActionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.action.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.action.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitEpochReport":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_SubmitEpochReport","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEpochReport"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEpochReportResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence defines the SubmitEvidence RPC.","operationId":"GithubComLumeraProtocollumeraMsg_SubmitEvidence","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.audit.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin15","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.audit.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/Claim":{"post":{"tags":["Msg"],"summary":"Claim defines a message for claiming tokens.","operationId":"GithubComLumeraProtocollumeraMsg_Claim","parameters":[{"description":"MsgClaim is the Msg/Claim request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/DelayedClaim":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DelayedClaim","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaim"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgDelayedClaimResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.claim.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin20","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.claim.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.lumeraid.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin25","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.lumeraid.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/DeregisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_DeregisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgDeregisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/RegisterSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_RegisterSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgRegisterSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/ReportSupernodeMetrics":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_ReportSupernodeMetrics","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetrics"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgReportSupernodeMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StartSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StartSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStartSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/StopSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_StopSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgStopSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubComLumeraProtocollumeraMsg_UpdateParamsMixin36","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/lumera.supernode.v1.Msg/UpdateSupernode":{"post":{"tags":["Msg"],"operationId":"GithubComLumeraProtocollumeraMsg_UpdateSupernode","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/lumera.supernode.v1.MsgUpdateSupernodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"lumera.action.v1.Action":{"description":"Action represents a specific action within the Lumera protocol.","type":"object","properties":{"actionID":{"type":"string"},"actionType":{"$ref":"#/definitions/lumera.action.v1.ActionType"},"app_pubkey":{"type":"string","format":"byte"},"blockHeight":{"type":"string","format":"int64"},"creator":{"type":"string"},"expirationTime":{"type":"string","format":"int64"},"fileSizeKbs":{"type":"string","format":"int64"},"metadata":{"type":"string","format":"byte"},"price":{"type":"string"},"state":{"$ref":"#/definitions/lumera.action.v1.ActionState"},"superNodes":{"type":"array","items":{"type":"string"}}}},"lumera.action.v1.ActionState":{"description":"ActionState enum represents the various states an action can be in.\n\n - ACTION_STATE_UNSPECIFIED: The default state, used when the state is not specified.\n - ACTION_STATE_PENDING: The action is pending and has not yet been processed.\n - ACTION_STATE_PROCESSING: The action is currently being processed.\n - ACTION_STATE_DONE: The action has been completed successfully.\n - ACTION_STATE_APPROVED: The action has been approved.\n - ACTION_STATE_REJECTED: The action has been rejected.\n - ACTION_STATE_FAILED: The action has failed.\n - ACTION_STATE_EXPIRED: The action has expired and is no longer valid.","type":"string","default":"ACTION_STATE_UNSPECIFIED","enum":["ACTION_STATE_UNSPECIFIED","ACTION_STATE_PENDING","ACTION_STATE_PROCESSING","ACTION_STATE_DONE","ACTION_STATE_APPROVED","ACTION_STATE_REJECTED","ACTION_STATE_FAILED","ACTION_STATE_EXPIRED"]},"lumera.action.v1.ActionType":{"description":"ActionType enum represents the various types of actions that can be performed.\n\n - ACTION_TYPE_UNSPECIFIED: The default action type, used when the type is not specified.\n - ACTION_TYPE_SENSE: The action type for sense operations.\n - ACTION_TYPE_CASCADE: The action type for cascade operations.","type":"string","default":"ACTION_TYPE_UNSPECIFIED","enum":["ACTION_TYPE_UNSPECIFIED","ACTION_TYPE_SENSE","ACTION_TYPE_CASCADE"]},"lumera.action.v1.MsgApproveAction":{"description":"MsgApproveAction is the Msg/ApproveAction request type.","type":"object","properties":{"actionId":{"type":"string"},"creator":{"type":"string"}}},"lumera.action.v1.MsgApproveActionResponse":{"type":"object","title":"MsgApproveActionResponse defines the response structure for executing a MsgApproveAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgFinalizeAction":{"description":"MsgFinalizeAction is the Msg/FinalizeAction request type.","type":"object","properties":{"actionId":{"type":"string"},"actionType":{"type":"string"},"creator":{"type":"string","title":"must be supernode address"},"metadata":{"type":"string"}}},"lumera.action.v1.MsgFinalizeActionResponse":{"type":"object","title":"MsgFinalizeActionResponse defines the response structure for executing a MsgFinalizeAction"},"lumera.action.v1.MsgRequestAction":{"description":"MsgRequestAction is the Msg/RequestAction request type.","type":"object","properties":{"actionType":{"type":"string"},"app_pubkey":{"type":"string","format":"byte"},"creator":{"type":"string"},"expirationTime":{"type":"string"},"fileSizeKbs":{"type":"string"},"metadata":{"type":"string"},"price":{"type":"string"}}},"lumera.action.v1.MsgRequestActionResponse":{"type":"object","title":"MsgRequestActionResponse defines the response structure for executing a MsgRequestAction","properties":{"actionId":{"type":"string"},"status":{"type":"string"}}},"lumera.action.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.action.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.action.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"base_action_fee":{"title":"Fees","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"expiration_duration":{"type":"string","title":"Time Constraints"},"fee_per_kbyte":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"foundation_fee_share":{"type":"string"},"max_actions_per_block":{"type":"string","format":"uint64","title":"Limits"},"max_dd_and_fingerprints":{"type":"string","format":"uint64"},"max_processing_time":{"type":"string"},"max_raptor_q_symbols":{"type":"string","format":"uint64"},"min_processing_time":{"type":"string"},"min_super_nodes":{"type":"string","format":"uint64"},"super_node_fee_share":{"type":"string","title":"Reward Distribution"}}},"lumera.action.v1.QueryActionByMetadataResponse":{"type":"object","title":"QueryActionByMetadataResponse is a response type to query actions by metadata","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryGetActionFeeResponse":{"type":"object","title":"QueryGetActionFeeResponse is a response type to get action fee","properties":{"amount":{"type":"string"}}},"lumera.action.v1.QueryGetActionResponse":{"type":"object","title":"Response type for GetAction","properties":{"action":{"$ref":"#/definitions/lumera.action.v1.Action"}}},"lumera.action.v1.QueryListActionsByBlockHeightResponse":{"type":"object","title":"QueryListActionsByBlockHeightResponse is a response type to list actions by block height","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsByCreatorResponse":{"type":"object","title":"QueryListActionsByCreatorResponse is a response type to list actions for a specific creator","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsBySuperNodeResponse":{"type":"object","title":"QueryListActionsBySuperNodeResponse is a response type to list actions for a specific supernode","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListActionsResponse":{"type":"object","title":"QueryListActionsResponse is a response type to list actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryListExpiredActionsResponse":{"type":"object","title":"QueryListExpiredActionsResponse is a response type to list expired actions","properties":{"actions":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.action.v1.Action"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64"}}},"lumera.action.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.action.v1.Params"}}},"lumera.audit.v1.EpochAnchor":{"description":"EpochAnchor is a minimal per-epoch on-chain anchor that freezes the deterministic seed\nand the eligible supernode sets used for deterministic selection off-chain.","type":"object","properties":{"active_set_commitment":{"type":"string","format":"byte"},"active_supernode_accounts":{"description":"active_supernode_accounts is the sorted list of ACTIVE supernodes at epoch start.","type":"array","items":{"type":"string"}},"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"params_commitment":{"description":"params_commitment is a hash commitment to Params (with defaults) at epoch start.","type":"string","format":"byte"},"seed":{"description":"seed is a fixed 32-byte value derived at epoch start (domain-separated).","type":"string","format":"byte"},"target_supernode_accounts":{"description":"target_supernode_accounts is the sorted list of eligible targets at epoch start:\nACTIVE + POSTPONED supernodes.","type":"array","items":{"type":"string"}},"targets_set_commitment":{"type":"string","format":"byte"}}},"lumera.audit.v1.EpochReport":{"description":"EpochReport is a single per-epoch report submitted by a Supernode.","type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"report_height":{"type":"string","format":"int64"},"storage_challenge_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeObservation"}},"supernode_account":{"type":"string"}}},"lumera.audit.v1.Evidence":{"description":"Evidence is a stable outer record that stores evidence about an audited subject.\nType-specific fields are encoded into the `metadata` bytes field.","type":"object","properties":{"action_id":{"description":"action_id optionally links this evidence to a specific action.","type":"string"},"evidence_id":{"description":"evidence_id is a chain-assigned unique identifier.","type":"string","format":"uint64"},"evidence_type":{"description":"evidence_type is a stable discriminator used to interpret metadata.","$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is protobuf-binary bytes of a type-specific Evidence metadata message.","type":"string","format":"byte"},"reported_height":{"description":"reported_height is the block height when the evidence was submitted.","type":"string","format":"uint64"},"reporter_address":{"description":"reporter_address is the submitter of the evidence.","type":"string"},"subject_address":{"description":"subject_address is the audited subject (e.g. supernode-related actor).","type":"string"}}},"lumera.audit.v1.EvidenceType":{"description":" - EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE: action finalization rejected due to an invalid signature / signature-derived data.\n - EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10: action finalization rejected because the attempted finalizer is not in the top-10 supernodes.\n - EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE: storage challenge failure evidence submitted by the deterministic challenger.\n - EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE: client-observed cascade flow failure (upload/download).","type":"string","default":"EVIDENCE_TYPE_UNSPECIFIED","enum":["EVIDENCE_TYPE_UNSPECIFIED","EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE","EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10","EVIDENCE_TYPE_ACTION_EXPIRED","EVIDENCE_TYPE_STORAGE_CHALLENGE_FAILURE","EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE"]},"lumera.audit.v1.HostReport":{"description":"HostReport is the Supernode's self-reported host metrics and counters for an epoch.","type":"object","properties":{"cpu_usage_percent":{"type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"failed_actions_count":{"type":"integer","format":"int64"},"inbound_port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"mem_usage_percent":{"type":"number","format":"double"}}},"lumera.audit.v1.HostReportEntry":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"report_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.MsgSubmitEpochReport":{"type":"object","properties":{"creator":{"description":"creator is the transaction signer.","type":"string"},"epoch_id":{"type":"string","format":"uint64"},"host_report":{"$ref":"#/definitions/lumera.audit.v1.HostReport"},"storage_challenge_observations":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeObservation"}}}},"lumera.audit.v1.MsgSubmitEpochReportResponse":{"type":"object"},"lumera.audit.v1.MsgSubmitEvidence":{"type":"object","properties":{"action_id":{"type":"string"},"creator":{"type":"string"},"evidence_type":{"$ref":"#/definitions/lumera.audit.v1.EvidenceType"},"metadata":{"description":"metadata is JSON for the type-specific Evidence metadata message.\nThe chain stores protobuf-binary bytes derived from this JSON.","type":"string"},"subject_address":{"type":"string"}}},"lumera.audit.v1.MsgSubmitEvidenceResponse":{"type":"object","properties":{"evidence_id":{"type":"string","format":"uint64"}}},"lumera.audit.v1.MsgUpdateParams":{"type":"object","properties":{"authority":{"type":"string"},"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.MsgUpdateParamsResponse":{"type":"object"},"lumera.audit.v1.Params":{"description":"Params defines the parameters for the audit module.","type":"object","properties":{"action_finalization_not_in_top10_consecutive_epochs":{"description":"action_finalization_not_in_top10_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_not_in_top10_evidences_per_epoch":{"description":"action_finalization_not_in_top10_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_NOT_IN_TOP_10.","type":"integer","format":"int64"},"action_finalization_recovery_epochs":{"description":"action_finalization_recovery_epochs is the number of epochs to wait before considering recovery.","type":"integer","format":"int64"},"action_finalization_recovery_max_total_bad_evidences":{"description":"action_finalization_recovery_max_total_bad_evidences is the maximum allowed total count of bad\naction-finalization evidences in the recovery epoch-span for auto-recovery to occur.\nRecovery happens ONLY IF total_bad \u003c this value.","type":"integer","format":"int64"},"action_finalization_signature_failure_consecutive_epochs":{"description":"action_finalization_signature_failure_consecutive_epochs is the consecutive epochs threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"action_finalization_signature_failure_evidences_per_epoch":{"description":"action_finalization_signature_failure_evidences_per_epoch is the per-epoch count threshold\nfor EVIDENCE_TYPE_ACTION_FINALIZATION_SIGNATURE_FAILURE.","type":"integer","format":"int64"},"consecutive_epochs_to_postpone":{"description":"Number of consecutive epochs a required port must be reported CLOSED by peers\nat or above peer_port_postpone_threshold_percent before postponing the supernode.","type":"integer","format":"int64"},"epoch_length_blocks":{"type":"string","format":"uint64"},"epoch_zero_height":{"description":"epoch_zero_height defines the reference chain height at which epoch_id = 0 starts.\nThis makes epoch boundaries deterministic from genesis without needing to query state.","type":"string","format":"uint64"},"keep_last_epoch_entries":{"description":"How many completed epochs to keep in state for epoch-scoped data like EpochReport\nand related indices. Pruning runs at epoch end.","type":"string","format":"uint64"},"max_probe_targets_per_epoch":{"type":"integer","format":"int64"},"min_cpu_free_percent":{"description":"Minimum required host free capacity (self reported).\nfree% = 100 - usage%\nA usage% of 0 is treated as \"unknown\" (no action).","type":"integer","format":"int64"},"min_disk_free_percent":{"type":"integer","format":"int64"},"min_mem_free_percent":{"type":"integer","format":"int64"},"min_probe_targets_per_epoch":{"type":"integer","format":"int64"},"peer_port_postpone_threshold_percent":{"description":"Minimum percent (1-100) of peer reports that must report a required port as CLOSED\nfor the port to be treated as CLOSED for postponement purposes.\n\n100 means unanimous.\nExample: to approximate a 2/3 threshold, use 66 (since 2/3 ≈ 66.6%).","type":"integer","format":"int64"},"peer_quorum_reports":{"type":"integer","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"sc_challengers_per_epoch":{"type":"integer","format":"int64"},"sc_enabled":{"description":"Storage Challenge (SC) params.","type":"boolean"}}},"lumera.audit.v1.PortState":{"type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.audit.v1.QueryAssignedTargetsResponse":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"target_supernode_accounts":{"type":"array","items":{"type":"string"}}}},"lumera.audit.v1.QueryCurrentEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryCurrentEpochResponse":{"type":"object","properties":{"epoch_end_height":{"type":"string","format":"int64"},"epoch_id":{"type":"string","format":"uint64"},"epoch_start_height":{"type":"string","format":"int64"}}},"lumera.audit.v1.QueryEpochAnchorResponse":{"type":"object","properties":{"anchor":{"$ref":"#/definitions/lumera.audit.v1.EpochAnchor"}}},"lumera.audit.v1.QueryEpochReportResponse":{"type":"object","properties":{"report":{"$ref":"#/definitions/lumera.audit.v1.EpochReport"}}},"lumera.audit.v1.QueryEpochReportsByReporterResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.EpochReport"}}}},"lumera.audit.v1.QueryEvidenceByActionResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryEvidenceByIdResponse":{"type":"object","properties":{"evidence":{"$ref":"#/definitions/lumera.audit.v1.Evidence"}}},"lumera.audit.v1.QueryEvidenceBySubjectResponse":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.Evidence"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.audit.v1.QueryHostReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.HostReportEntry"}}}},"lumera.audit.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/lumera.audit.v1.Params"}}},"lumera.audit.v1.QueryStorageChallengeReportsResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"reports":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.audit.v1.StorageChallengeReport"}}}},"lumera.audit.v1.StorageChallengeObservation":{"description":"StorageChallengeObservation is a prober's reachability observation about an assigned target.","type":"object","properties":{"port_states":{"description":"port_states[i] refers to required_open_ports[i] for the epoch.","type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"target_supernode_account":{"type":"string"}}},"lumera.audit.v1.StorageChallengeReport":{"type":"object","properties":{"epoch_id":{"type":"string","format":"uint64"},"port_states":{"type":"array","items":{"$ref":"#/definitions/lumera.audit.v1.PortState"}},"report_height":{"type":"string","format":"int64"},"reporter_supernode_account":{"type":"string"}}},"lumera.claim.ClaimRecord":{"description":"ClaimRecord represents a record of a claim made by a user.","type":"object","properties":{"balance":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"claimTime":{"type":"string","format":"int64"},"claimed":{"type":"boolean"},"destAddress":{"type":"string"},"oldAddress":{"type":"string"},"vestedTier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgClaim":{"description":"MsgClaim is the Msg/Claim request type.","type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"lumera.claim.MsgClaimResponse":{"type":"object","title":"MsgClaimResponse defines the response structure for executing a"},"lumera.claim.MsgDelayedClaim":{"type":"object","properties":{"creator":{"type":"string"},"newAddress":{"type":"string"},"oldAddress":{"type":"string"},"pubKey":{"type":"string"},"signature":{"type":"string"},"tier":{"type":"integer","format":"int64"}}},"lumera.claim.MsgDelayedClaimResponse":{"type":"object"},"lumera.claim.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.\nMsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/claim parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.claim.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.claim.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"claim_end_time":{"type":"string","format":"int64"},"enable_claims":{"type":"boolean"},"max_claims_per_block":{"type":"string","format":"uint64"}}},"lumera.claim.QueryClaimRecordResponse":{"description":"QueryClaimRecordResponse is response type for the Query/ClaimRecord RPC method.","type":"object","properties":{"record":{"$ref":"#/definitions/lumera.claim.ClaimRecord"}}},"lumera.claim.QueryListClaimedResponse":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.claim.ClaimRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"lumera.claim.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.claim.Params"}}},"lumera.lumeraid.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.lumeraid.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.lumeraid.Params":{"description":"Params defines the parameters for the module.","type":"object"},"lumera.lumeraid.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.lumeraid.Params"}}},"lumera.supernode.v1.Evidence":{"description":"Evidence defines the evidence structure for the supernode module.","type":"object","properties":{"action_id":{"type":"string"},"description":{"type":"string"},"evidence_type":{"type":"string"},"height":{"type":"integer","format":"int32"},"reporter_address":{"type":"string"},"severity":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.IPAddressHistory":{"type":"object","properties":{"address":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.MetricsAggregate":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"type":"object","additionalProperties":{"type":"number","format":"double"}},"report_count":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.MsgDeregisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgDeregisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgRegisterSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgRegisterSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgReportSupernodeMetrics":{"type":"object","properties":{"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.MsgReportSupernodeMetricsResponse":{"type":"object","properties":{"compliant":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"lumera.supernode.v1.MsgStartSupernode":{"type":"object","properties":{"creator":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStartSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgStopSupernode":{"type":"object","properties":{"creator":{"type":"string"},"reason":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgStopSupernodeResponse":{"type":"object"},"lumera.supernode.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"NOTE: All parameters must be supplied.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"lumera.supernode.v1.MsgUpdateSupernode":{"type":"object","properties":{"creator":{"type":"string"},"ipAddress":{"type":"string"},"note":{"type":"string"},"p2p_port":{"type":"string"},"supernodeAccount":{"type":"string"},"validatorAddress":{"type":"string"}}},"lumera.supernode.v1.MsgUpdateSupernodeResponse":{"type":"object"},"lumera.supernode.v1.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"evidence_retention_period":{"type":"string"},"inactivity_penalty_period":{"type":"string"},"max_cpu_usage_percent":{"type":"string","format":"uint64"},"max_mem_usage_percent":{"type":"string","format":"uint64"},"max_storage_usage_percent":{"type":"string","format":"uint64"},"metrics_freshness_max_blocks":{"description":"Maximum acceptable staleness (in blocks) for a metrics report when\nvalidating freshness.","type":"string","format":"uint64"},"metrics_grace_period_blocks":{"description":"Additional grace (in blocks) before marking metrics overdue/stale.","type":"string","format":"uint64"},"metrics_thresholds":{"type":"string"},"metrics_update_interval_blocks":{"description":"Expected cadence (in blocks) between supernode metrics reports. The daemon\ncan run on a timer using expected block time, but the chain enforces\nheight-based staleness strictly in blocks.","type":"string","format":"uint64"},"min_cpu_cores":{"type":"string","format":"uint64"},"min_mem_gb":{"type":"string","format":"uint64"},"min_storage_gb":{"type":"string","format":"uint64"},"min_supernode_version":{"type":"string"},"minimum_stake_for_sn":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"reporting_threshold":{"type":"string","format":"uint64"},"required_open_ports":{"type":"array","items":{"type":"integer","format":"int64"}},"slashing_fraction":{"type":"string"},"slashing_threshold":{"type":"string","format":"uint64"}}},"lumera.supernode.v1.PortState":{"description":"PortState defines tri-state port reporting. UNKNOWN is the default for proto3\nand is treated as \"not reported / not measured\".","type":"string","default":"PORT_STATE_UNKNOWN","enum":["PORT_STATE_UNKNOWN","PORT_STATE_OPEN","PORT_STATE_CLOSED"]},"lumera.supernode.v1.PortStatus":{"description":"PortStatus reports the state of a specific TCP port.","type":"object","properties":{"port":{"type":"integer","format":"int64"},"state":{"$ref":"#/definitions/lumera.supernode.v1.PortState"}}},"lumera.supernode.v1.QueryGetMetricsResponse":{"description":"QueryGetMetricsResponse is response type for the Query/GetMetrics RPC method.","type":"object","properties":{"metrics_state":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetricsState"}}},"lumera.supernode.v1.QueryGetSuperNodeBySuperNodeAddressResponse":{"description":"QueryGetSuperNodeBySuperNodeAddressResponse is response type for the Query/GetSuperNodeBySuperNodeAddress RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetSuperNodeResponse":{"description":"QueryGetSuperNodeResponse is response type for the Query/GetSuperNode RPC method.","type":"object","properties":{"supernode":{"$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}},"lumera.supernode.v1.QueryGetTopSuperNodesForBlockResponse":{"description":"QueryGetTopSuperNodesForBlockResponse is response type for the Query/GetTopSuperNodesForBlock RPC method.","type":"object","properties":{"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryListSuperNodesResponse":{"description":"QueryListSuperNodesResponse is response type for the Query/ListSuperNodes RPC method.","type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supernodes":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNode"}}}},"lumera.supernode.v1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/lumera.supernode.v1.Params"}}},"lumera.supernode.v1.SuperNode":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.Evidence"}},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.MetricsAggregate"},"note":{"type":"string"},"p2p_port":{"type":"string"},"prev_ip_addresses":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.IPAddressHistory"}},"prev_supernode_accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SupernodeAccountHistory"}},"states":{"type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.SuperNodeStateRecord"}},"supernode_account":{"type":"string"},"validator_address":{"type":"string"}}},"lumera.supernode.v1.SuperNodeState":{"type":"string","default":"SUPERNODE_STATE_UNSPECIFIED","enum":["SUPERNODE_STATE_UNSPECIFIED","SUPERNODE_STATE_ACTIVE","SUPERNODE_STATE_DISABLED","SUPERNODE_STATE_STOPPED","SUPERNODE_STATE_PENALIZED","SUPERNODE_STATE_POSTPONED"]},"lumera.supernode.v1.SuperNodeStateRecord":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"reason":{"description":"reason is an optional string describing why the state transition occurred.\nIt is currently set only for transitions into POSTPONED.","type":"string"},"state":{"$ref":"#/definitions/lumera.supernode.v1.SuperNodeState"}}},"lumera.supernode.v1.SupernodeAccountHistory":{"type":"object","properties":{"account":{"type":"string"},"height":{"type":"string","format":"int64"}}},"lumera.supernode.v1.SupernodeMetrics":{"description":"SupernodeMetrics defines the structured metrics reported by a supernode.","type":"object","properties":{"cpu_cores_total":{"description":"CPU metrics.","type":"number","format":"double"},"cpu_usage_percent":{"type":"number","format":"double"},"disk_free_gb":{"type":"number","format":"double"},"disk_total_gb":{"description":"Storage metrics (GB).","type":"number","format":"double"},"disk_usage_percent":{"type":"number","format":"double"},"mem_free_gb":{"type":"number","format":"double"},"mem_total_gb":{"description":"Memory metrics (GB).","type":"number","format":"double"},"mem_usage_percent":{"type":"number","format":"double"},"open_ports":{"description":"Tri-state port reporting for required ports.","type":"array","items":{"type":"object","$ref":"#/definitions/lumera.supernode.v1.PortStatus"}},"peers_count":{"type":"integer","format":"int64"},"uptime_seconds":{"description":"Uptime and connectivity.","type":"number","format":"double"},"version_major":{"description":"Semantic version of the supernode software.","type":"integer","format":"int64"},"version_minor":{"type":"integer","format":"int64"},"version_patch":{"type":"integer","format":"int64"}}},"lumera.supernode.v1.SupernodeMetricsState":{"description":"SupernodeMetricsState stores the latest metrics state for a validator.","type":"object","properties":{"height":{"type":"string","format":"int64"},"metrics":{"$ref":"#/definitions/lumera.supernode.v1.SupernodeMetrics"},"report_count":{"type":"string","format":"uint64"},"validator_address":{"type":"string"}}}},"tags":[{"name":"Query"},{"name":"Msg"}]} \ No newline at end of file diff --git a/tests/systemtests/audit_host_requirements_bypass_test.go b/tests/systemtests/audit_host_requirements_bypass_test.go index a7164b4..e5679ac 100644 --- a/tests/systemtests/audit_host_requirements_bypass_test.go +++ b/tests/systemtests/audit_host_requirements_bypass_test.go @@ -23,10 +23,6 @@ func TestAuditHostRequirements_UsageZeroBypassesMinimums(t *testing.T) { // Avoid missing-report postponement before/around the tested epoch. state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("10")) require.NoError(t, err) - - // Enforce host requirements, but allow "unknown" usage values to bypass (usage_percent==0). - state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) - require.NoError(t, err) return state }, ) @@ -45,18 +41,16 @@ func TestAuditHostRequirements_UsageZeroBypassesMinimums(t *testing.T) { awaitAtLeastHeight(t, epochStartHeight) - seed := headerHashAtHeight(t, sut.rpcAddr, epochStartHeight) - senders := sortedStrings(n0.accAddr, n1.accAddr) - receivers := sortedStrings(n0.accAddr, n1.accAddr) - kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kEpoch) + // Use the on-chain assignment query so tests track current assignment logic. + assigned0 := auditQueryAssignedTargets(t, epochID, true, n0.accAddr) + require.Equal(t, epochID, assigned0.EpochId) + require.Len(t, assigned0.TargetSupernodeAccounts, 1) + require.Equal(t, []uint32{4444}, assigned0.RequiredOpenPorts) - targets0, ok := assignedTargets(seed, senders, receivers, kEpoch, n0.accAddr) - require.True(t, ok) - require.Len(t, targets0, 1) - targets1, ok := assignedTargets(seed, senders, receivers, kEpoch, n1.accAddr) - require.True(t, ok) - require.Len(t, targets1, 1) + assigned1 := auditQueryAssignedTargets(t, epochID, true, n1.accAddr) + require.Equal(t, epochID, assigned1.EpochId) + require.Len(t, assigned1.TargetSupernodeAccounts, 1) + require.Equal(t, []uint32{4444}, assigned1.RequiredOpenPorts) unknownSelfBz, err := json.Marshal(map[string]any{ "cpu_usage_percent": 0.0, @@ -72,15 +66,24 @@ func TestAuditHostRequirements_UsageZeroBypassesMinimums(t *testing.T) { // node0 reports "unknown" cpu usage (0), which must not trigger host-requirements postponement. tx0 := submitEpochReport(t, cli, n0.nodeName, epochID, unknownSelf, []string{ - storageChallengeObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + storageChallengeObservationJSON(assigned0.TargetSupernodeAccounts[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, tx0) tx1 := submitEpochReport(t, cli, n1.nodeName, epochID, okHost, []string{ - storageChallengeObservationJSON(targets1[0], []string{"PORT_STATE_OPEN"}), + storageChallengeObservationJSON(assigned1.TargetSupernodeAccounts[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, tx1) + // Verify the report was persisted with unknown host usage values. + r0 := auditQueryReport(t, epochID, n0.accAddr) + require.Equal(t, n0.accAddr, r0.SupernodeAccount) + require.EqualValues(t, 0, r0.HostReport.CpuUsagePercent) + require.EqualValues(t, 0, r0.HostReport.MemUsagePercent) + require.EqualValues(t, 0, r0.HostReport.DiskUsagePercent) + require.Len(t, r0.StorageChallengeObservations, 1) + require.Equal(t, assigned0.TargetSupernodeAccounts[0], r0.StorageChallengeObservations[0].TargetSupernodeAccount) + awaitAtLeastHeight(t, enforceHeight) require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n0.valAddr)) diff --git a/tests/systemtests/audit_host_requirements_enforcement_test.go b/tests/systemtests/audit_host_requirements_enforcement_test.go index 510f5fd..e906e92 100644 --- a/tests/systemtests/audit_host_requirements_enforcement_test.go +++ b/tests/systemtests/audit_host_requirements_enforcement_test.go @@ -10,7 +10,7 @@ import ( "github.com/tidwall/sjson" ) -func TestAuditHostRequirementsPostponesActiveSupernode(t *testing.T) { +func TestAuditHostRequirements_NoThresholdsDoNotPostponeActiveSupernode(t *testing.T) { const ( // Keep epochs small so AwaitBlockHeight timeouts don't flake. epochLengthBlocks = uint64(10) @@ -24,10 +24,6 @@ func TestAuditHostRequirementsPostponesActiveSupernode(t *testing.T) { // Avoid missing-report postponement before the first tested epoch. state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("10")) require.NoError(t, err) - - // Enforce host requirements. - state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) - require.NoError(t, err) return state }, ) @@ -46,18 +42,11 @@ func TestAuditHostRequirementsPostponesActiveSupernode(t *testing.T) { awaitAtLeastHeight(t, epochStartHeight) - seed := headerHashAtHeight(t, sut.rpcAddr, epochStartHeight) - senders := sortedStrings(n0.accAddr, n1.accAddr) - receivers := sortedStrings(n0.accAddr, n1.accAddr) - kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kEpoch) + assigned0 := auditQueryAssignedTargets(t, epochID, true, n0.accAddr) + require.Len(t, assigned0.TargetSupernodeAccounts, 1) - targets0, ok := assignedTargets(seed, senders, receivers, kEpoch, n0.accAddr) - require.True(t, ok) - require.Len(t, targets0, 1) - targets1, ok := assignedTargets(seed, senders, receivers, kEpoch, n1.accAddr) - require.True(t, ok) - require.Len(t, targets1, 1) + assigned1 := auditQueryAssignedTargets(t, epochID, true, n1.accAddr) + require.Len(t, assigned1.TargetSupernodeAccounts, 1) badSelfBz, err := json.Marshal(map[string]any{ "cpu_usage_percent": 99.0, @@ -71,20 +60,20 @@ func TestAuditHostRequirementsPostponesActiveSupernode(t *testing.T) { okHost := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) - // node0 violates host requirements. + // node0 reports high CPU usage. With threshold params left at defaults, this should not postpone. tx0 := submitEpochReport(t, cli, n0.nodeName, epochID, badSelf, []string{ - storageChallengeObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), + storageChallengeObservationJSON(assigned0.TargetSupernodeAccounts[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, tx0) - // node1 stays compliant (and also submits to avoid missing-report enforcement). + // node1 also submits to avoid missing-report enforcement. tx1 := submitEpochReport(t, cli, n1.nodeName, epochID, okHost, []string{ - storageChallengeObservationJSON(targets1[0], []string{"PORT_STATE_OPEN"}), + storageChallengeObservationJSON(assigned1.TargetSupernodeAccounts[0], []string{"PORT_STATE_OPEN"}), }) RequireTxSuccess(t, tx1) awaitAtLeastHeight(t, enforceHeight) - require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n0.valAddr)) + require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n0.valAddr)) require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n1.valAddr)) } diff --git a/tests/systemtests/audit_postponed_reporter_self_only_test.go b/tests/systemtests/audit_postponed_reporter_self_only_test.go index af18aef..9e6df01 100644 --- a/tests/systemtests/audit_postponed_reporter_self_only_test.go +++ b/tests/systemtests/audit_postponed_reporter_self_only_test.go @@ -3,7 +3,6 @@ package system import ( - "encoding/json" "testing" "github.com/stretchr/testify/require" @@ -12,8 +11,8 @@ import ( func TestAuditSubmitReport_PostponedReporterSelfOnly(t *testing.T) { const ( - // Keep epochs long enough in real time to avoid missing-report postponement before the first tested epoch. - epochLengthBlocks = uint64(20) + // Keep epochs short so the test stays fast. + epochLengthBlocks = uint64(10) ) const originHeight = int64(1) @@ -21,12 +20,8 @@ func TestAuditSubmitReport_PostponedReporterSelfOnly(t *testing.T) { setSupernodeParamsForAuditTests(t), setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), func(genesis []byte) []byte { - // Avoid missing-report postponement before the first tested epoch. - state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("2")) - require.NoError(t, err) - - // Make it easy to postpone node1 via host requirements (independent of consecutive epochs). - state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) + // Postpone after one missed epoch so we can drive the state transition quickly. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("1")) require.NoError(t, err) return state }, @@ -47,40 +42,17 @@ func TestAuditSubmitReport_PostponedReporterSelfOnly(t *testing.T) { awaitAtLeastHeight(t, epoch1Start) - seed1 := headerHashAtHeight(t, sut.rpcAddr, epoch1Start) - senders := sortedStrings(n0.accAddr, n1.accAddr) - receivers := sortedStrings(n0.accAddr, n1.accAddr) - kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kEpoch) - - targets0, ok := assignedTargets(seed1, senders, receivers, kEpoch, n0.accAddr) - require.True(t, ok) - require.Len(t, targets0, 1) - + assigned0 := auditQueryAssignedTargets(t, epochID1, true, n0.accAddr) host := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) + obs0 := make([]string, 0, len(assigned0.TargetSupernodeAccounts)) + for _, target := range assigned0.TargetSupernodeAccounts { + obs0 = append(obs0, storageChallengeObservationJSON(target, []string{"PORT_STATE_OPEN"})) + } - node1BadSelfBz, err := json.Marshal(map[string]any{ - "cpu_usage_percent": 99.0, - "mem_usage_percent": 1.0, - "disk_usage_percent": 1.0, - "inbound_port_states": []string{"PORT_STATE_OPEN"}, - "failed_actions_count": 0, - }) - require.NoError(t, err) - node1BadSelf := string(node1BadSelfBz) - - // Both submit in epoch1 so missing-report enforcement doesn't interfere. - // node1 violates host minimums and should become POSTPONED at epoch end. - txResp0 := submitEpochReport(t, cli, n0.nodeName, epochID1, host, []string{ - storageChallengeObservationJSON(targets0[0], []string{"PORT_STATE_OPEN"}), - }) + // Submit only node0 in epoch1 so node1 is postponed due to missing report. + txResp0 := submitEpochReport(t, cli, n0.nodeName, epochID1, host, obs0) RequireTxSuccess(t, txResp0) - txResp1 := submitEpochReport(t, cli, n1.nodeName, epochID1, node1BadSelf, []string{ - storageChallengeObservationJSON(n0.accAddr, []string{"PORT_STATE_OPEN"}), - }) - RequireTxSuccess(t, txResp1) - awaitAtLeastHeight(t, epoch2Start) require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) diff --git a/tests/systemtests/audit_recovery_enforcement_test.go b/tests/systemtests/audit_recovery_enforcement_test.go index 398495b..fa2ff18 100644 --- a/tests/systemtests/audit_recovery_enforcement_test.go +++ b/tests/systemtests/audit_recovery_enforcement_test.go @@ -3,14 +3,13 @@ package system import ( - "encoding/json" "testing" "github.com/stretchr/testify/require" "github.com/tidwall/sjson" ) -func TestAuditRecovery_PostponedBecomesActiveWithSelfAndPeerOpen(t *testing.T) { +func TestAuditRecovery_PostponedBecomesActiveWithSelfAndPeerOpen_NoHostThresholds(t *testing.T) { const ( epochLengthBlocks = uint64(10) ) @@ -20,12 +19,8 @@ func TestAuditRecovery_PostponedBecomesActiveWithSelfAndPeerOpen(t *testing.T) { setSupernodeParamsForAuditTests(t), setAuditParamsForFastEpochs(t, epochLengthBlocks, 1, 1, 1, []uint32{4444}), func(genesis []byte) []byte { - // Keep missing-report / peer-port streaks from interfering with this recovery test. - state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("10")) - require.NoError(t, err) - - // Use host requirements to get into POSTPONED state deterministically. - state, err = sjson.SetRawBytes(state, "app_state.audit.params.min_cpu_free_percent", []byte("90")) + // Use 2 consecutive windows to avoid setup-time missing-report postponements. + state, err := sjson.SetRawBytes(genesis, "app_state.audit.params.consecutive_epochs_to_postpone", []byte("2")) require.NoError(t, err) return state }, @@ -42,63 +37,77 @@ func TestAuditRecovery_PostponedBecomesActiveWithSelfAndPeerOpen(t *testing.T) { currentHeight := sut.AwaitNextBlock(t) epochID1, epoch1Start := nextEpochAfterHeight(originHeight, epochLengthBlocks, currentHeight) epochID2 := epochID1 + 1 + epochID3 := epochID2 + 1 + epoch3Start := epoch1Start + 2*int64(epochLengthBlocks) + epoch4Start := epoch3Start + int64(epochLengthBlocks) epoch2Start := epoch1Start + int64(epochLengthBlocks) - enforce2 := epoch2Start + int64(epochLengthBlocks) - - senders := sortedStrings(n0.accAddr, n1.accAddr) - receivers := sortedStrings(n0.accAddr, n1.accAddr) - kEpoch := computeKEpoch(1, 1, 1, len(senders), len(receivers)) - require.Equal(t, uint32(1), kEpoch) hostOK := auditHostReportJSON([]string{"PORT_STATE_OPEN"}) - badSelfBz, err := json.Marshal(map[string]any{ - "cpu_usage_percent": 99.0, - "mem_usage_percent": 1.0, - "disk_usage_percent": 1.0, - "inbound_port_states": []string{"PORT_STATE_OPEN"}, - "failed_actions_count": 0, - }) - require.NoError(t, err) - hostBad := string(badSelfBz) - - // Epoch 1: node1 violates host requirements -> becomes POSTPONED. + // Epoch 1: node0 reports node1 as CLOSED; node1 reports OPEN for node0. + // Not enough streak yet (consecutive=2), so node1 remains ACTIVE after epoch1. awaitAtLeastHeight(t, epoch1Start) - seed1 := headerHashAtHeight(t, sut.rpcAddr, epoch1Start) - targets0e1, ok := assignedTargets(seed1, senders, receivers, kEpoch, n0.accAddr) - require.True(t, ok) - require.Len(t, targets0e1, 1) - targets1e1, ok := assignedTargets(seed1, senders, receivers, kEpoch, n1.accAddr) - require.True(t, ok) - require.Len(t, targets1e1, 1) - - tx0e1 := submitEpochReport(t, cli, n0.nodeName, epochID1, hostOK, []string{ - storageChallengeObservationJSON(targets0e1[0], []string{"PORT_STATE_OPEN"}), - }) + assigned0e1 := auditQueryAssignedTargets(t, epochID1, true, n0.accAddr) + require.Len(t, assigned0e1.TargetSupernodeAccounts, 1) + require.Equal(t, n1.accAddr, assigned0e1.TargetSupernodeAccounts[0]) + obs0e1 := make([]string, 0, len(assigned0e1.TargetSupernodeAccounts)) + for _, target := range assigned0e1.TargetSupernodeAccounts { + obs0e1 = append(obs0e1, storageChallengeObservationJSON(target, []string{"PORT_STATE_CLOSED"})) + } + tx0e1 := submitEpochReport(t, cli, n0.nodeName, epochID1, hostOK, obs0e1) RequireTxSuccess(t, tx0e1) - tx1e1 := submitEpochReport(t, cli, n1.nodeName, epochID1, hostBad, []string{ - storageChallengeObservationJSON(targets1e1[0], []string{"PORT_STATE_OPEN"}), - }) + + assigned1e1 := auditQueryAssignedTargets(t, epochID1, true, n1.accAddr) + require.Len(t, assigned1e1.TargetSupernodeAccounts, 1) + require.Equal(t, n0.accAddr, assigned1e1.TargetSupernodeAccounts[0]) + obs1e1 := make([]string, 0, len(assigned1e1.TargetSupernodeAccounts)) + for _, target := range assigned1e1.TargetSupernodeAccounts { + obs1e1 = append(obs1e1, storageChallengeObservationJSON(target, []string{"PORT_STATE_OPEN"})) + } + tx1e1 := submitEpochReport(t, cli, n1.nodeName, epochID1, hostOK, obs1e1) RequireTxSuccess(t, tx1e1) awaitAtLeastHeight(t, epoch2Start) - require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) - - // Epoch 2: node1 submits compliant host report (no storage challenge observations), - // and node0 submits an OPEN storage challenge observation about node1 in the same epoch -> recovery at epoch end. - seed2 := headerHashAtHeight(t, sut.rpcAddr, epoch2Start) - targets0e2, ok := assignedTargets(seed2, senders, receivers, kEpoch, n0.accAddr) - require.True(t, ok) - require.Len(t, targets0e2, 1) + require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n1.valAddr)) - tx0e2 := submitEpochReport(t, cli, n0.nodeName, epochID2, hostOK, []string{ - storageChallengeObservationJSON(targets0e2[0], []string{"PORT_STATE_OPEN"}), - }) + // Epoch 2: repeat CLOSED for node1 -> now node1 is POSTPONED at epoch2 end. + assigned0e2 := auditQueryAssignedTargets(t, epochID2, true, n0.accAddr) + require.Len(t, assigned0e2.TargetSupernodeAccounts, 1) + require.Equal(t, n1.accAddr, assigned0e2.TargetSupernodeAccounts[0]) + obs0e2 := make([]string, 0, len(assigned0e2.TargetSupernodeAccounts)) + for _, target := range assigned0e2.TargetSupernodeAccounts { + obs0e2 = append(obs0e2, storageChallengeObservationJSON(target, []string{"PORT_STATE_CLOSED"})) + } + tx0e2 := submitEpochReport(t, cli, n0.nodeName, epochID2, hostOK, obs0e2) RequireTxSuccess(t, tx0e2) - tx1e2 := submitEpochReport(t, cli, n1.nodeName, epochID2, hostOK, nil) + assigned1e2 := auditQueryAssignedTargets(t, epochID2, true, n1.accAddr) + require.Len(t, assigned1e2.TargetSupernodeAccounts, 1) + require.Equal(t, n0.accAddr, assigned1e2.TargetSupernodeAccounts[0]) + obs1e2 := make([]string, 0, len(assigned1e2.TargetSupernodeAccounts)) + for _, target := range assigned1e2.TargetSupernodeAccounts { + obs1e2 = append(obs1e2, storageChallengeObservationJSON(target, []string{"PORT_STATE_OPEN"})) + } + tx1e2 := submitEpochReport(t, cli, n1.nodeName, epochID2, hostOK, obs1e2) RequireTxSuccess(t, tx1e2) - awaitAtLeastHeight(t, enforce2) + awaitAtLeastHeight(t, epoch3Start) + require.Equal(t, "SUPERNODE_STATE_POSTPONED", querySupernodeLatestState(t, cli, n1.valAddr)) + + // Epoch 3: node0 reports OPEN for node1; node1 (POSTPONED) submits host-only. + // This satisfies recovery conditions at epoch3 end. + assigned0e3 := auditQueryAssignedTargets(t, epochID3, true, n0.accAddr) + require.Len(t, assigned0e3.TargetSupernodeAccounts, 1) + require.Equal(t, n1.accAddr, assigned0e3.TargetSupernodeAccounts[0]) + obs0e3 := []string{ + storageChallengeObservationJSON(n1.accAddr, []string{"PORT_STATE_OPEN"}), + } + tx0e3 := submitEpochReport(t, cli, n0.nodeName, epochID3, hostOK, obs0e3) + RequireTxSuccess(t, tx0e3) + + tx1e3 := submitEpochReport(t, cli, n1.nodeName, epochID3, hostOK, nil) + RequireTxSuccess(t, tx1e3) + + awaitAtLeastHeight(t, epoch4Start) require.Equal(t, "SUPERNODE_STATE_ACTIVE", querySupernodeLatestState(t, cli, n1.valAddr)) } diff --git a/x/action/v1/keeper/abci_test.go b/x/action/v1/keeper/abci_test.go index e8e8e01..0f50dce 100644 --- a/x/action/v1/keeper/abci_test.go +++ b/x/action/v1/keeper/abci_test.go @@ -7,6 +7,8 @@ import ( ) func (suite *KeeperTestSuite) TestEndBlocker_ChecksExpiredActions() { + suite.setupExpectationsGetAllTopSNs(1) + expiredAction := &actiontypes.Action{ ActionID: "expired-1", State: actiontypes.ActionStatePending, diff --git a/x/action/v1/keeper/expiration_test.go b/x/action/v1/keeper/expiration_test.go index a03145b..a52cb09 100644 --- a/x/action/v1/keeper/expiration_test.go +++ b/x/action/v1/keeper/expiration_test.go @@ -7,19 +7,23 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - "go.uber.org/mock/gomock" "github.com/stretchr/testify/suite" + "go.uber.org/mock/gomock" "github.com/LumeraProtocol/lumera/testutil/cryptotestutils" keepertest "github.com/LumeraProtocol/lumera/testutil/keeper" "github.com/LumeraProtocol/lumera/x/action/v1/keeper" actiontypes "github.com/LumeraProtocol/lumera/x/action/v1/types" + supernodemocks "github.com/LumeraProtocol/lumera/x/supernode/v1/mocks" + sntypes "github.com/LumeraProtocol/lumera/x/supernode/v1/types" sdk "github.com/cosmos/cosmos-sdk/types" ) // ExpirationTestSuite tests the expiration functionality type ExpirationTestSuite struct { suite.Suite + ctrl *gomock.Controller + queryServer *supernodemocks.MockQueryServer ctx sdk.Context keeper keeper.Keeper signature string @@ -29,13 +33,16 @@ type ExpirationTestSuite struct { } func (suite *ExpirationTestSuite) SetupTest() { - ctrl := gomock.NewController(suite.T()) - defer ctrl.Finish() + suite.ctrl = gomock.NewController(suite.T()) key, address := cryptotestutils.KeyAndAddress() pubKey := key.PubKey() pairs := []keepertest.AccountPair{{Address: address, PubKey: pubKey}} - suite.keeper, suite.ctx = keepertest.ActionKeeperWithAddress(suite.T(), ctrl, pairs) + suite.keeper, suite.ctx = keepertest.ActionKeeperWithAddress(suite.T(), suite.ctrl, pairs) + + var ok bool + suite.queryServer, ok = suite.keeper.GetSupernodeQueryServer().(*supernodemocks.MockQueryServer) + suite.Require().True(ok) var err error suite.signature, err = cryptotestutils.CreateSignatureString([]secp256k1.PrivKey{key}, 50) @@ -50,6 +57,20 @@ func (suite *ExpirationTestSuite) SetupTest() { suite.ctx = suite.ctx.WithBlockTime(suite.blockTime) } +func (suite *ExpirationTestSuite) TearDownTest() { + suite.ctrl.Finish() +} + +func (suite *ExpirationTestSuite) setupExpectationsGetTopSuperNodesForExpiration(count int) { + suite.queryServer.EXPECT(). + GetTopSuperNodesForBlock( + gomock.AssignableToTypeOf(sdk.Context{}), + gomock.AssignableToTypeOf(&sntypes.QueryGetTopSuperNodesForBlockRequest{}), + ). + Return(&sntypes.QueryGetTopSuperNodesForBlockResponse{}, nil). + Times(count) +} + // TestCheckExpiration tests the expiration functionality func (suite *ExpirationTestSuite) TestCheckExpiration() { // Create test actions with different expiration times @@ -129,7 +150,16 @@ func (suite *ExpirationTestSuite) TestCheckExpiration() { suite.Require().NoError(err, "Failed to register action for test case %d: %s", i, tc.name) } - // Run the expiration check + // Count expected number of expired actions to match supernode query calls. + expectedExpiredCount := 0 + for _, tc := range testCases { + if tc.expectExpired { + expectedExpiredCount++ + } + } + + // Run the expiration check. + suite.setupExpectationsGetTopSuperNodesForExpiration(expectedExpiredCount) suite.keeper.CheckExpiration(suite.ctx) // Verify each action's state after the expiration check @@ -153,15 +183,12 @@ func (suite *ExpirationTestSuite) TestCheckExpiration() { }) suite.Require().NoError(err) - // Count expected number of expired/pending actions - expectedExpiredCount := 0 + // Count expected number of pending/processing actions expectedPendingCount := 0 expectedProcessingCount := 0 for _, tc := range testCases { - if tc.expectExpired { - expectedExpiredCount++ - } else { + if !tc.expectExpired { if tc.state == actiontypes.ActionStatePending { expectedPendingCount++ } else if tc.state == actiontypes.ActionStateProcessing { @@ -197,6 +224,7 @@ func (suite *ExpirationTestSuite) TestActionFeeRefundOnExpiration() { {name: "pending", state: actiontypes.ActionStatePending}, {name: "processing", state: actiontypes.ActionStateProcessing}, } + suite.setupExpectationsGetTopSuperNodesForExpiration(len(scenarios)) for i, scenario := range scenarios { // ensure module balance clean before starting scenario @@ -265,6 +293,7 @@ func (suite *ExpirationTestSuite) TestExpiredActionEvents() { {name: "pending", state: actiontypes.ActionStatePending, actionTyp: actiontypes.ActionTypeSense}, {name: "processing", state: actiontypes.ActionStateProcessing, actionTyp: actiontypes.ActionTypeCascade}, } + suite.setupExpectationsGetTopSuperNodesForExpiration(len(scenarios)) for i, scenario := range scenarios { ctx := suite.ctx.WithEventManager(sdk.NewEventManager()) From 2861200741ea0f9b604a32eb9bb637e53a4b673c Mon Sep 17 00:00:00 2001 From: Matee Ullah Malik Date: Wed, 11 Feb 2026 18:15:18 +0500 Subject: [PATCH 18/18] audit evidence update --- app/upgrades/upgrades_test.go | 3 +- proto/lumera/audit/v1/evidence_metadata.proto | 24 +- x/audit/v1/keeper/evidence_test.go | 22 +- x/audit/v1/types/evidence_metadata.pb.go | 388 +++++++++++------- 4 files changed, 266 insertions(+), 171 deletions(-) diff --git a/app/upgrades/upgrades_test.go b/app/upgrades/upgrades_test.go index 22940fb..d816333 100644 --- a/app/upgrades/upgrades_test.go +++ b/app/upgrades/upgrades_test.go @@ -125,8 +125,7 @@ func expectStoreUpgrade(upgradeName, chainID string) bool { return IsMainnet(chainID) case upgrade_v1_10_0.UpgradeName: return true - case upgrade_v1_10_1.UpgradeName: - case upgrade_v1_11_0.UpgradeName: + case upgrade_v1_10_1.UpgradeName, upgrade_v1_11_0.UpgradeName: return true default: return false diff --git a/proto/lumera/audit/v1/evidence_metadata.proto b/proto/lumera/audit/v1/evidence_metadata.proto index dc5ff63..21baaa6 100644 --- a/proto/lumera/audit/v1/evidence_metadata.proto +++ b/proto/lumera/audit/v1/evidence_metadata.proto @@ -49,19 +49,21 @@ message StorageChallengeFailureEvidenceMetadata { string transcript_hash = 7; } -// CascadeClientFailureEvidenceMetadata is metadata for client-observed failures -message CascadeClientFailureEvidenceMetadata { - // flow is a short discriminator for the failed flow segment. - // Example values: UPLOAD, DOWNLOAD. - string flow = 1; +enum CascadeClientFailureReporterComponent { + CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_UNSPECIFIED = 0; + CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SN_API_SERVER = 1; + CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SDK_GO = 2; + CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SDK_JS = 3; +} +// CascadeClientFailureEvidenceMetadata is metadata for client-observed failures. +message CascadeClientFailureEvidenceMetadata { // reporter_component identifies the emitting component. - // Example values: sn-api-server, sdk-go, sdk-js. - string reporter_component = 2; + CascadeClientFailureReporterComponent reporter_component = 1; - // target_supernode_account is the implicated supernode account, when known. - string target_supernode_account = 3 [(cosmos_proto.scalar) = "cosmos.AccAddressString"]; + // target_supernode_accounts are implicated supernode accounts + repeated string target_supernode_accounts = 2; - // details is free-form diagnostic text (e.g. full error traces). - string details = 4; + // details contains free-form diagnostic attributes (e.g. trace, endpoint, error). + map details = 3; } diff --git a/x/audit/v1/keeper/evidence_test.go b/x/audit/v1/keeper/evidence_test.go index a69652e..dbe86fd 100644 --- a/x/audit/v1/keeper/evidence_test.go +++ b/x/audit/v1/keeper/evidence_test.go @@ -79,14 +79,21 @@ func TestSubmitEvidenceAndQueries_CascadeClientFailure(t *testing.T) { require.NoError(t, err) subject, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x22}, 20)) require.NoError(t, err) - target, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x33}, 20)) + targetA, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x33}, 20)) + require.NoError(t, err) + targetB, err := f.addressCodec.BytesToString(bytes.Repeat([]byte{0x44}, 20)) require.NoError(t, err) meta := types.CascadeClientFailureEvidenceMetadata{ - Flow: "UPLOAD", - ReporterComponent: "sn-api-server", - TargetSupernodeAccount: target, - Details: "context deadline exceeded while streaming upload; full stack trace here", + ReporterComponent: types.CascadeClientFailureReporterComponent_CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SN_API_SERVER, + TargetSupernodeAccounts: []string{ + targetA, + targetB, + }, + Details: map[string]string{ + "error": "context deadline exceeded while streaming upload", + "trace_id": "trace-1234", + }, } metaBz, err := json.Marshal(meta) require.NoError(t, err) @@ -112,9 +119,8 @@ func TestSubmitEvidenceAndQueries_CascadeClientFailure(t *testing.T) { var gotMeta types.CascadeClientFailureEvidenceMetadata err = gogoproto.Unmarshal(gotByID.Evidence.Metadata, &gotMeta) require.NoError(t, err) - require.Equal(t, meta.Flow, gotMeta.Flow) require.Equal(t, meta.ReporterComponent, gotMeta.ReporterComponent) - require.Equal(t, meta.TargetSupernodeAccount, gotMeta.TargetSupernodeAccount) + require.Equal(t, meta.TargetSupernodeAccounts, gotMeta.TargetSupernodeAccounts) require.Equal(t, meta.Details, gotMeta.Details) gotBySubject, err := qs.EvidenceBySubject(f.ctx, &types.QueryEvidenceBySubjectRequest{SubjectAddress: subject}) @@ -142,7 +148,7 @@ func TestCreateEvidence_CascadeClientFailure_InvalidMetadata(t *testing.T) { subject, "action-cascade-1", types.EvidenceType_EVIDENCE_TYPE_CASCADE_CLIENT_FAILURE, - `{"flow":`, + `{"details":`, ) require.Error(t, err) require.Contains(t, err.Error(), types.ErrInvalidMetadata.Error()) diff --git a/x/audit/v1/types/evidence_metadata.pb.go b/x/audit/v1/types/evidence_metadata.pb.go index 3eb4938..3b5c049 100644 --- a/x/audit/v1/types/evidence_metadata.pb.go +++ b/x/audit/v1/types/evidence_metadata.pb.go @@ -23,6 +23,37 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +type CascadeClientFailureReporterComponent int32 + +const ( + CascadeClientFailureReporterComponent_CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_UNSPECIFIED CascadeClientFailureReporterComponent = 0 + CascadeClientFailureReporterComponent_CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SN_API_SERVER CascadeClientFailureReporterComponent = 1 + CascadeClientFailureReporterComponent_CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SDK_GO CascadeClientFailureReporterComponent = 2 + CascadeClientFailureReporterComponent_CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SDK_JS CascadeClientFailureReporterComponent = 3 +) + +var CascadeClientFailureReporterComponent_name = map[int32]string{ + 0: "CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_UNSPECIFIED", + 1: "CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SN_API_SERVER", + 2: "CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SDK_GO", + 3: "CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SDK_JS", +} + +var CascadeClientFailureReporterComponent_value = map[string]int32{ + "CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_UNSPECIFIED": 0, + "CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SN_API_SERVER": 1, + "CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SDK_GO": 2, + "CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_SDK_JS": 3, +} + +func (x CascadeClientFailureReporterComponent) String() string { + return proto.EnumName(CascadeClientFailureReporterComponent_name, int32(x)) +} + +func (CascadeClientFailureReporterComponent) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_09b57e4c2349ab91, []int{0} +} + // ActionExpiredEvidenceMetadata is metadata for evidence about an action expiring. type ActionExpiredEvidenceMetadata struct { // top_10_validator_addresses is the expected validator set for the action's block height. @@ -272,18 +303,14 @@ func (m *StorageChallengeFailureEvidenceMetadata) GetTranscriptHash() string { return "" } -// CascadeClientFailureEvidenceMetadata is metadata for client-observed failures +// CascadeClientFailureEvidenceMetadata is metadata for client-observed failures. type CascadeClientFailureEvidenceMetadata struct { - // flow is a short discriminator for the failed flow segment. - // Example values: UPLOAD, DOWNLOAD. - Flow string `protobuf:"bytes,1,opt,name=flow,proto3" json:"flow,omitempty"` // reporter_component identifies the emitting component. - // Example values: sn-api-server, sdk-go, sdk-js. - ReporterComponent string `protobuf:"bytes,2,opt,name=reporter_component,json=reporterComponent,proto3" json:"reporter_component,omitempty"` - // target_supernode_account is the implicated supernode account, when known. - TargetSupernodeAccount string `protobuf:"bytes,3,opt,name=target_supernode_account,json=targetSupernodeAccount,proto3" json:"target_supernode_account,omitempty"` - // details is free-form diagnostic text (e.g. full error traces). - Details string `protobuf:"bytes,4,opt,name=details,proto3" json:"details,omitempty"` + ReporterComponent CascadeClientFailureReporterComponent `protobuf:"varint,1,opt,name=reporter_component,json=reporterComponent,proto3,enum=lumera.audit.v1.CascadeClientFailureReporterComponent" json:"reporter_component,omitempty"` + // target_supernode_accounts are implicated supernode accounts, when known. + TargetSupernodeAccounts []string `protobuf:"bytes,2,rep,name=target_supernode_accounts,json=targetSupernodeAccounts,proto3" json:"target_supernode_accounts,omitempty"` + // details contains free-form diagnostic attributes (e.g. trace, endpoint, error). + Details map[string]string `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (m *CascadeClientFailureEvidenceMetadata) Reset() { *m = CascadeClientFailureEvidenceMetadata{} } @@ -319,40 +346,35 @@ func (m *CascadeClientFailureEvidenceMetadata) XXX_DiscardUnknown() { var xxx_messageInfo_CascadeClientFailureEvidenceMetadata proto.InternalMessageInfo -func (m *CascadeClientFailureEvidenceMetadata) GetFlow() string { - if m != nil { - return m.Flow - } - return "" -} - -func (m *CascadeClientFailureEvidenceMetadata) GetReporterComponent() string { +func (m *CascadeClientFailureEvidenceMetadata) GetReporterComponent() CascadeClientFailureReporterComponent { if m != nil { return m.ReporterComponent } - return "" + return CascadeClientFailureReporterComponent_CASCADE_CLIENT_FAILURE_REPORTER_COMPONENT_UNSPECIFIED } -func (m *CascadeClientFailureEvidenceMetadata) GetTargetSupernodeAccount() string { +func (m *CascadeClientFailureEvidenceMetadata) GetTargetSupernodeAccounts() []string { if m != nil { - return m.TargetSupernodeAccount + return m.TargetSupernodeAccounts } - return "" + return nil } -func (m *CascadeClientFailureEvidenceMetadata) GetDetails() string { +func (m *CascadeClientFailureEvidenceMetadata) GetDetails() map[string]string { if m != nil { return m.Details } - return "" + return nil } func init() { + proto.RegisterEnum("lumera.audit.v1.CascadeClientFailureReporterComponent", CascadeClientFailureReporterComponent_name, CascadeClientFailureReporterComponent_value) proto.RegisterType((*ActionExpiredEvidenceMetadata)(nil), "lumera.audit.v1.ActionExpiredEvidenceMetadata") proto.RegisterType((*ActionFinalizationSignatureFailureEvidenceMetadata)(nil), "lumera.audit.v1.ActionFinalizationSignatureFailureEvidenceMetadata") proto.RegisterType((*ActionFinalizationNotInTop10EvidenceMetadata)(nil), "lumera.audit.v1.ActionFinalizationNotInTop10EvidenceMetadata") proto.RegisterType((*StorageChallengeFailureEvidenceMetadata)(nil), "lumera.audit.v1.StorageChallengeFailureEvidenceMetadata") proto.RegisterType((*CascadeClientFailureEvidenceMetadata)(nil), "lumera.audit.v1.CascadeClientFailureEvidenceMetadata") + proto.RegisterMapType((map[string]string)(nil), "lumera.audit.v1.CascadeClientFailureEvidenceMetadata.DetailsEntry") } func init() { @@ -360,41 +382,51 @@ func init() { } var fileDescriptor_09b57e4c2349ab91 = []byte{ - // 529 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xcd, 0x6e, 0x52, 0x41, - 0x14, 0xe6, 0x0a, 0x16, 0x19, 0x8d, 0xd5, 0xbb, 0xb0, 0xb7, 0x68, 0x6f, 0x28, 0x31, 0x81, 0x18, - 0x81, 0xa2, 0x4f, 0x00, 0xa4, 0x8d, 0xc4, 0xe8, 0x02, 0xaa, 0x0b, 0x13, 0x9d, 0x8c, 0x33, 0x07, - 0x98, 0x78, 0x99, 0x99, 0xcc, 0xcc, 0xc5, 0xe2, 0xc6, 0x17, 0x30, 0xc6, 0x85, 0x8f, 0xd2, 0x87, - 0x70, 0xd9, 0x74, 0x65, 0x5c, 0x19, 0x78, 0x11, 0x73, 0xff, 0x4a, 0x2a, 0x76, 0x61, 0x17, 0xdd, - 0xcd, 0x39, 0xdf, 0x4f, 0xbe, 0xf9, 0x26, 0x19, 0x54, 0x0b, 0xc2, 0x29, 0x68, 0xd2, 0x22, 0x21, - 0xe3, 0xb6, 0x35, 0x6b, 0xb7, 0x60, 0xc6, 0x19, 0x08, 0x0a, 0x78, 0x0a, 0x96, 0x30, 0x62, 0x49, - 0x53, 0x69, 0x69, 0xa5, 0xbb, 0x99, 0x10, 0x9b, 0x31, 0xb1, 0x39, 0x6b, 0x97, 0xb7, 0xa9, 0x34, - 0x53, 0x69, 0x70, 0x0c, 0xb7, 0x92, 0x21, 0xe1, 0x56, 0x3f, 0xa3, 0x9d, 0x0e, 0xb5, 0x5c, 0x8a, - 0xfd, 0x23, 0xc5, 0x35, 0xb0, 0xfd, 0xd4, 0xf3, 0x45, 0x6a, 0xe9, 0xbe, 0x43, 0x65, 0x2b, 0x15, - 0x6e, 0xef, 0xe1, 0x19, 0x09, 0x38, 0x23, 0x56, 0x6a, 0x4c, 0x18, 0xd3, 0x60, 0x0c, 0x18, 0xcf, - 0xa9, 0xe4, 0xeb, 0xa5, 0xee, 0xee, 0xe9, 0x71, 0x63, 0x27, 0xb5, 0x7d, 0x9d, 0xb1, 0x3a, 0x09, - 0x69, 0x68, 0x35, 0x17, 0xe3, 0xc1, 0x96, 0x95, 0xaa, 0xbd, 0xf7, 0x37, 0x08, 0xa6, 0xfa, 0xdd, - 0x41, 0x4f, 0x92, 0x04, 0x07, 0x5c, 0x90, 0x80, 0x7f, 0x22, 0xd1, 0x79, 0xc8, 0xc7, 0x82, 0xd8, - 0x50, 0xc3, 0x01, 0xe1, 0x41, 0xa8, 0xe1, 0xca, 0x63, 0x7d, 0x75, 0xd0, 0xe3, 0xf5, 0x58, 0x2f, - 0xa5, 0xed, 0x8b, 0xc3, 0x48, 0x72, 0xe5, 0x81, 0xbe, 0xe4, 0x51, 0x6d, 0x68, 0xa5, 0x26, 0x63, - 0xe8, 0x4d, 0x48, 0x10, 0x80, 0x18, 0x5f, 0x58, 0xce, 0x36, 0xba, 0x01, 0x4a, 0xd2, 0x09, 0xe6, - 0xcc, 0x73, 0x2a, 0x4e, 0xbd, 0x30, 0x28, 0xc6, 0x73, 0x9f, 0xb9, 0x6f, 0xd1, 0x03, 0x9a, 0xc9, - 0x35, 0x36, 0xa1, 0x02, 0x2d, 0x24, 0x03, 0x4c, 0x28, 0x95, 0xa1, 0xb0, 0xde, 0xb5, 0x8a, 0x53, - 0x2f, 0x75, 0xef, 0x9f, 0x1e, 0x37, 0xb6, 0xd2, 0xa0, 0x1d, 0x4a, 0xcf, 0x47, 0x2c, 0xaf, 0x0c, - 0x86, 0x99, 0xbe, 0x93, 0xc8, 0xcf, 0xd9, 0xb3, 0x7f, 0xd8, 0xe7, 0xff, 0xc7, 0x9e, 0xad, 0xd9, - 0xef, 0xa2, 0x5b, 0x67, 0x68, 0x74, 0xb9, 0x42, 0x64, 0x37, 0xb8, 0x79, 0xb6, 0xeb, 0xb3, 0xe8, - 0xee, 0x23, 0x1e, 0x00, 0xfe, 0x00, 0x73, 0xef, 0x7a, 0x0c, 0x17, 0xa3, 0xf9, 0x39, 0xcc, 0x23, - 0xf5, 0x28, 0x69, 0x0c, 0xdb, 0xb9, 0x02, 0x6f, 0x23, 0x51, 0xa7, 0xbb, 0xc3, 0xb9, 0x02, 0xb7, - 0x86, 0x36, 0xad, 0x26, 0xc2, 0x50, 0xcd, 0x95, 0xc5, 0x13, 0x62, 0x26, 0x5e, 0x31, 0x66, 0xdd, - 0x5e, 0xad, 0x9f, 0x11, 0x33, 0xa9, 0xfe, 0x72, 0xd0, 0xc3, 0x1e, 0x31, 0x94, 0x30, 0xe8, 0x05, - 0x1c, 0x84, 0xbd, 0xe8, 0x2d, 0x5c, 0x54, 0x18, 0x05, 0xf2, 0x63, 0xfc, 0x0e, 0xa5, 0x41, 0x7c, - 0x76, 0x1b, 0xc8, 0xd5, 0xa0, 0xa4, 0xb6, 0xa0, 0x31, 0x95, 0x53, 0x25, 0x05, 0x64, 0xd5, 0x0f, - 0xee, 0x66, 0x48, 0x2f, 0x03, 0xdc, 0x57, 0xc8, 0xb3, 0x44, 0x8f, 0xc1, 0x5e, 0xae, 0xd0, 0x7b, - 0x89, 0x78, 0xad, 0x4c, 0x0f, 0x15, 0x19, 0x58, 0xc2, 0x03, 0x93, 0xf6, 0x98, 0x8d, 0xdd, 0x47, - 0x3f, 0x16, 0xbe, 0x73, 0xb2, 0xf0, 0x9d, 0xdf, 0x0b, 0xdf, 0xf9, 0xb6, 0xf4, 0x73, 0x27, 0x4b, - 0x3f, 0xf7, 0x73, 0xe9, 0xe7, 0xde, 0xdc, 0x39, 0x5a, 0x7d, 0x3f, 0x51, 0x87, 0xe6, 0xfd, 0x46, - 0xfc, 0x8f, 0x3c, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xed, 0x26, 0x22, 0x9e, 0x04, 0x00, - 0x00, + // 695 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4d, 0x4f, 0xdb, 0x4a, + 0x14, 0x8d, 0x13, 0x20, 0x8f, 0x01, 0x41, 0x9e, 0xf5, 0x24, 0x4c, 0xde, 0x23, 0x0a, 0xe8, 0x3d, + 0x11, 0xa1, 0x47, 0x42, 0x78, 0x9f, 0xa5, 0x2b, 0xc7, 0x71, 0x5a, 0x17, 0x48, 0x22, 0x3b, 0xb0, + 0xa8, 0xda, 0x8e, 0xa6, 0xf6, 0x25, 0xb1, 0xea, 0x78, 0xac, 0x99, 0x49, 0x44, 0xba, 0xe9, 0x0f, + 0x68, 0x55, 0x75, 0xd1, 0x9f, 0xc2, 0x8f, 0xe8, 0x12, 0xb1, 0xea, 0xb2, 0x22, 0x7f, 0xa4, 0xb2, + 0x9d, 0x40, 0x09, 0x20, 0xc1, 0x86, 0xdd, 0xdc, 0x7b, 0xcf, 0x39, 0x3a, 0x73, 0xe6, 0x26, 0x46, + 0xeb, 0x5e, 0xaf, 0x0b, 0x8c, 0x94, 0x48, 0xcf, 0x71, 0x45, 0xa9, 0x5f, 0x2e, 0x41, 0xdf, 0x75, + 0xc0, 0xb7, 0x01, 0x77, 0x41, 0x10, 0x87, 0x08, 0x52, 0x0c, 0x18, 0x15, 0x54, 0x5e, 0x8c, 0x81, + 0xc5, 0x08, 0x58, 0xec, 0x97, 0xb3, 0xcb, 0x36, 0xe5, 0x5d, 0xca, 0x71, 0x34, 0x2e, 0xc5, 0x45, + 0x8c, 0x5d, 0x7b, 0x87, 0x56, 0x54, 0x5b, 0xb8, 0xd4, 0xd7, 0x8f, 0x03, 0x97, 0x81, 0xa3, 0x8f, + 0x34, 0xf7, 0x47, 0x92, 0xf2, 0x2b, 0x94, 0x15, 0x34, 0xc0, 0xe5, 0x2d, 0xdc, 0x27, 0x9e, 0xeb, + 0x10, 0x41, 0x19, 0x26, 0x8e, 0xc3, 0x80, 0x73, 0xe0, 0x8a, 0x94, 0x4f, 0x15, 0x66, 0x2b, 0xab, + 0x67, 0x27, 0x9b, 0x2b, 0x23, 0xd9, 0xc3, 0x31, 0x4a, 0x8d, 0x41, 0x96, 0x60, 0xae, 0xdf, 0x36, + 0x97, 0x04, 0x0d, 0xca, 0x5b, 0x93, 0x43, 0xe0, 0x6b, 0x9f, 0x25, 0xb4, 0x1d, 0x3b, 0xa8, 0xb9, + 0x3e, 0xf1, 0xdc, 0xb7, 0x24, 0x3c, 0x5b, 0x6e, 0xdb, 0x27, 0xa2, 0xc7, 0xa0, 0x46, 0x5c, 0xaf, + 0xc7, 0xe0, 0xc1, 0x6d, 0x7d, 0x94, 0xd0, 0x9f, 0xd7, 0x6d, 0xd5, 0xa9, 0x30, 0xfc, 0x56, 0x48, + 0x79, 0x70, 0x43, 0x1f, 0x52, 0x68, 0xdd, 0x12, 0x94, 0x91, 0x36, 0x68, 0x1d, 0xe2, 0x79, 0xe0, + 0xb7, 0x6f, 0x0d, 0x67, 0x19, 0xfd, 0x04, 0x01, 0xb5, 0x3b, 0xd8, 0x75, 0x14, 0x29, 0x2f, 0x15, + 0xa6, 0xcc, 0x74, 0x54, 0x1b, 0x8e, 0xfc, 0x12, 0xfd, 0x66, 0x8f, 0xe9, 0x0c, 0xf3, 0x5e, 0x00, + 0xcc, 0xa7, 0x0e, 0x60, 0x62, 0xdb, 0xb4, 0xe7, 0x0b, 0x25, 0x99, 0x97, 0x0a, 0xb3, 0x95, 0x5f, + 0xcf, 0x4e, 0x36, 0x97, 0x46, 0x46, 0x55, 0xdb, 0xbe, 0x6a, 0x31, 0x7b, 0x29, 0x60, 0x8d, 0xf9, + 0x6a, 0x4c, 0xbf, 0x22, 0xef, 0xdc, 0x20, 0x9f, 0xba, 0x8f, 0xbc, 0x73, 0x4d, 0x7e, 0x15, 0xcd, + 0x5f, 0x4c, 0xc3, 0xcb, 0x4d, 0x85, 0x72, 0xe6, 0xdc, 0x45, 0xcf, 0x70, 0xc2, 0xbb, 0x1f, 0xb9, + 0x1e, 0xe0, 0x37, 0x30, 0x50, 0xa6, 0xa3, 0x71, 0x3a, 0xac, 0x77, 0x61, 0x10, 0xb2, 0x8f, 0xe2, + 0xc4, 0xb0, 0x18, 0x04, 0xa0, 0xcc, 0xc4, 0xec, 0x51, 0xaf, 0x35, 0x08, 0x40, 0x5e, 0x47, 0x8b, + 0x82, 0x11, 0x9f, 0xdb, 0xcc, 0x0d, 0x04, 0xee, 0x10, 0xde, 0x51, 0xd2, 0x11, 0x6a, 0xe1, 0xb2, + 0xfd, 0x94, 0xf0, 0xce, 0xda, 0x30, 0x89, 0x7e, 0xd7, 0x08, 0xb7, 0x89, 0x03, 0x9a, 0xe7, 0x82, + 0x2f, 0x6e, 0x7b, 0x0b, 0x40, 0x32, 0x83, 0x80, 0x32, 0x01, 0x0c, 0xdb, 0xb4, 0x1b, 0x50, 0x1f, + 0x7c, 0x11, 0xbd, 0xca, 0xc2, 0xf6, 0xbf, 0xc5, 0x89, 0x5f, 0x6a, 0xf1, 0x26, 0x49, 0x73, 0x44, + 0xd7, 0xc6, 0x6c, 0xf3, 0x67, 0x36, 0xd9, 0x92, 0x77, 0xd0, 0xb2, 0x20, 0xac, 0x0d, 0xe2, 0x7a, + 0xe8, 0x5c, 0x49, 0x86, 0xdb, 0x67, 0x2e, 0xc5, 0x80, 0xc9, 0x50, 0xb9, 0xfc, 0x02, 0xa5, 0x1d, + 0x10, 0xc4, 0xf5, 0xb8, 0x92, 0xca, 0xa7, 0x0a, 0x73, 0xdb, 0x95, 0x3b, 0xf9, 0x9a, 0xbc, 0x6a, + 0xb1, 0x1a, 0x8b, 0xe8, 0xbe, 0x60, 0x03, 0x73, 0x2c, 0x99, 0xdd, 0x41, 0xf3, 0x3f, 0x0e, 0xe4, + 0x0c, 0x4a, 0x85, 0x6f, 0x23, 0x45, 0xb1, 0x86, 0x47, 0xf9, 0x17, 0x34, 0xdd, 0x27, 0x5e, 0x0f, + 0xe2, 0xe5, 0x33, 0xe3, 0x62, 0x27, 0xf9, 0xbf, 0xb4, 0xf1, 0x3e, 0x89, 0xfe, 0xb8, 0x53, 0x24, + 0xf2, 0x23, 0xf4, 0x8f, 0xa6, 0x5a, 0x9a, 0x5a, 0xd5, 0xb1, 0xb6, 0x67, 0xe8, 0xf5, 0x16, 0xae, + 0xa9, 0xc6, 0xde, 0x81, 0xa9, 0x63, 0x53, 0x6f, 0x36, 0xcc, 0x96, 0x6e, 0x62, 0xad, 0xb1, 0xdf, + 0x6c, 0xd4, 0xc3, 0xd1, 0x41, 0xdd, 0x6a, 0xea, 0x9a, 0x51, 0x33, 0xf4, 0x6a, 0x26, 0x21, 0x3f, + 0x46, 0xff, 0xdd, 0x9d, 0x6a, 0xd5, 0xb1, 0xda, 0x34, 0xb0, 0xa5, 0x9b, 0x87, 0xba, 0x99, 0x91, + 0xe4, 0xbf, 0xd1, 0xd6, 0x3d, 0xc8, 0xd5, 0x5d, 0xfc, 0xa4, 0x91, 0x49, 0xde, 0x9f, 0xf5, 0xcc, + 0xca, 0xa4, 0x2a, 0x1b, 0x5f, 0xce, 0x73, 0xd2, 0xe9, 0x79, 0x4e, 0xfa, 0x76, 0x9e, 0x93, 0x3e, + 0x0d, 0x73, 0x89, 0xd3, 0x61, 0x2e, 0xf1, 0x75, 0x98, 0x4b, 0x3c, 0xcf, 0x1c, 0x5f, 0x7e, 0x15, + 0xc2, 0xd5, 0xe6, 0xaf, 0x67, 0xa2, 0xbf, 0xf7, 0xbf, 0xbe, 0x07, 0x00, 0x00, 0xff, 0xff, 0x2b, + 0x5d, 0xe1, 0x2f, 0x35, 0x06, 0x00, 0x00, } func (m *ActionExpiredEvidenceMetadata) Marshal() (dAtA []byte, err error) { @@ -584,32 +616,37 @@ func (m *CascadeClientFailureEvidenceMetadata) MarshalToSizedBuffer(dAtA []byte) var l int _ = l if len(m.Details) > 0 { - i -= len(m.Details) - copy(dAtA[i:], m.Details) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Details))) - i-- - dAtA[i] = 0x22 - } - if len(m.TargetSupernodeAccount) > 0 { - i -= len(m.TargetSupernodeAccount) - copy(dAtA[i:], m.TargetSupernodeAccount) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.TargetSupernodeAccount))) - i-- - dAtA[i] = 0x1a + for k := range m.Details { + v := m.Details[k] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(k) + copy(dAtA[i:], k) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1a + } } - if len(m.ReporterComponent) > 0 { - i -= len(m.ReporterComponent) - copy(dAtA[i:], m.ReporterComponent) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.ReporterComponent))) - i-- - dAtA[i] = 0x12 + if len(m.TargetSupernodeAccounts) > 0 { + for iNdEx := len(m.TargetSupernodeAccounts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TargetSupernodeAccounts[iNdEx]) + copy(dAtA[i:], m.TargetSupernodeAccounts[iNdEx]) + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.TargetSupernodeAccounts[iNdEx]))) + i-- + dAtA[i] = 0x12 + } } - if len(m.Flow) > 0 { - i -= len(m.Flow) - copy(dAtA[i:], m.Flow) - i = encodeVarintEvidenceMetadata(dAtA, i, uint64(len(m.Flow))) + if m.ReporterComponent != 0 { + i = encodeVarintEvidenceMetadata(dAtA, i, uint64(m.ReporterComponent)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } @@ -712,21 +749,22 @@ func (m *CascadeClientFailureEvidenceMetadata) Size() (n int) { } var l int _ = l - l = len(m.Flow) - if l > 0 { - n += 1 + l + sovEvidenceMetadata(uint64(l)) + if m.ReporterComponent != 0 { + n += 1 + sovEvidenceMetadata(uint64(m.ReporterComponent)) } - l = len(m.ReporterComponent) - if l > 0 { - n += 1 + l + sovEvidenceMetadata(uint64(l)) - } - l = len(m.TargetSupernodeAccount) - if l > 0 { - n += 1 + l + sovEvidenceMetadata(uint64(l)) + if len(m.TargetSupernodeAccounts) > 0 { + for _, s := range m.TargetSupernodeAccounts { + l = len(s) + n += 1 + l + sovEvidenceMetadata(uint64(l)) + } } - l = len(m.Details) - if l > 0 { - n += 1 + l + sovEvidenceMetadata(uint64(l)) + if len(m.Details) > 0 { + for k, v := range m.Details { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovEvidenceMetadata(uint64(len(k))) + 1 + len(v) + sovEvidenceMetadata(uint64(len(v))) + n += mapEntrySize + 1 + sovEvidenceMetadata(uint64(mapEntrySize)) + } } return n } @@ -1274,10 +1312,10 @@ func (m *CascadeClientFailureEvidenceMetadata) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Flow", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReporterComponent", wireType) } - var stringLen uint64 + m.ReporterComponent = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvidenceMetadata @@ -1287,27 +1325,14 @@ func (m *CascadeClientFailureEvidenceMetadata) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.ReporterComponent |= CascadeClientFailureReporterComponent(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEvidenceMetadata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvidenceMetadata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Flow = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReporterComponent", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TargetSupernodeAccounts", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1335,13 +1360,13 @@ func (m *CascadeClientFailureEvidenceMetadata) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ReporterComponent = string(dAtA[iNdEx:postIndex]) + m.TargetSupernodeAccounts = append(m.TargetSupernodeAccounts, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetSupernodeAccount", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvidenceMetadata @@ -1351,55 +1376,118 @@ func (m *CascadeClientFailureEvidenceMetadata) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvidenceMetadata } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvidenceMetadata } if postIndex > l { return io.ErrUnexpectedEOF } - m.TargetSupernodeAccount = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvidenceMetadata + if m.Details == nil { + m.Details = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { - return io.ErrUnexpectedEOF + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthEvidenceMetadata + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvidenceMetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthEvidenceMetadata + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipEvidenceMetadata(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvidenceMetadata + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEvidenceMetadata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvidenceMetadata - } - if postIndex > l { - return io.ErrUnexpectedEOF } - m.Details = string(dAtA[iNdEx:postIndex]) + m.Details[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex