From ebb9690e70059decb3c023e6dca496b3fa09b85e Mon Sep 17 00:00:00 2001 From: abstrct Date: Tue, 27 Jan 2026 11:18:33 -0500 Subject: [PATCH 01/14] Resolved issue with object deletion inconsistencies. --- x/structs/keeper/grid.go | 15 ++++++++++----- x/structs/keeper/infusion.go | 15 ++++++++++----- x/structs/keeper/struct.go | 26 ++++++++++++++++++-------- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/x/structs/keeper/grid.go b/x/structs/keeper/grid.go index 833c557..51a0a7e 100644 --- a/x/structs/keeper/grid.go +++ b/x/structs/keeper/grid.go @@ -12,6 +12,8 @@ import ( sdkerrors "cosmossdk.io/errors" "fmt" + + "slices" ) // GetObjectID returns the string representation of the ID, based on ObjectType @@ -111,15 +113,18 @@ func (k Keeper) GetGridCascadeQueue(ctx context.Context, clear bool) (queue []st gridCascadeQueueStore := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.GridCascadeQueue)) iterator := storetypes.KVStorePrefixIterator(gridCascadeQueueStore, []byte{}) - defer iterator.Close() - for ; iterator.Valid(); iterator.Next() { queue = append(queue, string(iterator.Key())) - if clear { - gridCascadeQueueStore.Delete(iterator.Key()) - } } + iterator.Close() + + slices.Sort(queue) + if clear { + for _, key := range queue { + gridCascadeQueueStore.Delete([]byte(key)) + } + } return } diff --git a/x/structs/keeper/infusion.go b/x/structs/keeper/infusion.go index c849af5..d3d6ecf 100644 --- a/x/structs/keeper/infusion.go +++ b/x/structs/keeper/infusion.go @@ -13,6 +13,7 @@ import ( "encoding/binary" //"strconv" "strings" + "slices" ) @@ -133,14 +134,18 @@ func (k Keeper) GetInfusionDestructionQueue(ctx context.Context, clear bool) (qu infusionDestructionQueueStore := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.InfusionDestructionQueue)) iterator := storetypes.KVStorePrefixIterator(infusionDestructionQueueStore, []byte{}) - defer iterator.Close() - for ; iterator.Valid(); iterator.Next() { queue = append(queue, string(iterator.Key())) - if clear { - infusionDestructionQueueStore.Delete(iterator.Key()) - } } + iterator.Close() + + slices.Sort(queue) + + if clear { + for _, key := range queue { + infusionDestructionQueueStore.Delete([]byte(key)) + } + } return } diff --git a/x/structs/keeper/struct.go b/x/structs/keeper/struct.go index 29b2460..ffeb37a 100644 --- a/x/structs/keeper/struct.go +++ b/x/structs/keeper/struct.go @@ -14,6 +14,9 @@ import ( "structs/x/structs/types" "strconv" + "bytes" + "slices" + ) @@ -164,18 +167,25 @@ func (k Keeper) StructSweepDestroyed(ctx context.Context) { store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), StructDestructionQueueReadKeyPrefix(unwrapCtx.BlockHeight())) iterator := storetypes.KVStorePrefixIterator(store, []byte{}) - defer iterator.Close() - + var keysToDelete [][]byte for ; iterator.Valid(); iterator.Next() { - k.logger.Info("Struct Sweep", "structId", iterator.Key()) + keysToDelete = append(keysToDelete, append([]byte{}, iterator.Key()...)) + } + iterator.Close() + + slices.SortFunc(keysToDelete, bytes.Compare) + + for _, key := range keysToDelete { + k.logger.Info("Struct Sweep", "structId", key) + structId := string(key) // Attributes // "health": StructAttributeType_health, - k.ClearStructAttribute(ctx, GetStructAttributeIDByObjectId(types.StructAttributeType_health, string(iterator.Key()) )) + k.ClearStructAttribute(ctx, GetStructAttributeIDByObjectId(types.StructAttributeType_health, structId )) // "status": StructAttributeType_status, - k.ClearStructAttribute(ctx, GetStructAttributeIDByObjectId(types.StructAttributeType_status, string(iterator.Key()) )) + k.ClearStructAttribute(ctx, GetStructAttributeIDByObjectId(types.StructAttributeType_status, structId )) - structure, structFound := k.GetStruct(ctx, string(iterator.Key())) + structure, structFound := k.GetStruct(ctx, structId) if structFound { // Location Back-Reference switch structure.LocationType { @@ -217,9 +227,9 @@ func (k Keeper) StructSweepDestroyed(ctx context.Context) { } // Object - k.RemoveStruct(ctx, string(iterator.Key())) + k.RemoveStruct(ctx, structId) - store.Delete(iterator.Key()) + store.Delete(key) } } From 275d18e36fb7c4279a2d7928ba9127b0a26c6ca0 Mon Sep 17 00:00:00 2001 From: abstrct Date: Tue, 27 Jan 2026 17:30:55 -0500 Subject: [PATCH 02/14] Fixing various return bugs in readiness and permission checks --- x/structs/keeper/fleet_cache.go | 12 ++++---- x/structs/keeper/player_cache.go | 24 ++++++++-------- x/structs/keeper/struct_cache.go | 42 +++++++++++++++------------- x/structs/keeper/substation_cache.go | 11 ++++---- 4 files changed, 46 insertions(+), 43 deletions(-) diff --git a/x/structs/keeper/fleet_cache.go b/x/structs/keeper/fleet_cache.go index 3b86e50..a28a570 100644 --- a/x/structs/keeper/fleet_cache.go +++ b/x/structs/keeper/fleet_cache.go @@ -362,11 +362,11 @@ func (cache *FleetCache) PeaceDeal() (){ func (cache *FleetCache) BuildInitiateReadiness(structure *types.Struct, structType *types.StructType, ambit types.Ambit, ambitSlot uint64) (error) { if structure.GetOwner() != cache.GetOwnerId() { - sdkerrors.Wrapf(types.ErrStructAction, "Struct owner must match fleet ") + return sdkerrors.Wrapf(types.ErrStructAction, "Struct owner must match fleet ") } if cache.IsAway() { - sdkerrors.Wrapf(types.ErrStructAction, "Structs cannot be built unless Fleet is On Station") + return sdkerrors.Wrapf(types.ErrStructAction, "Structs cannot be built unless Fleet is On Station") } @@ -381,7 +381,7 @@ func (cache *FleetCache) BuildInitiateReadiness(structure *types.Struct, structT } if (structType.Category != types.ObjectType_fleet) { - sdkerrors.Wrapf(types.ErrStructAction, "Struct Type cannot exist in this location ") + return sdkerrors.Wrapf(types.ErrStructAction, "Struct Type cannot exist in this location ") } // Check that the Struct can exist in the specified ambit @@ -430,15 +430,15 @@ func (cache *FleetCache) BuildInitiateReadiness(structure *types.Struct, structT func (cache *FleetCache) MoveReadiness(structure *StructCache, ambit types.Ambit, ambitSlot uint64) (error) { if structure.GetOwnerId() != cache.GetOwnerId() { - sdkerrors.Wrapf(types.ErrStructAction, "Struct owner must match fleet ") + return sdkerrors.Wrapf(types.ErrStructAction, "Struct owner must match fleet ") } if cache.IsAway() { - sdkerrors.Wrapf(types.ErrStructAction, "Structs cannot be built unless Fleet is On Station") + return sdkerrors.Wrapf(types.ErrStructAction, "Structs cannot be built unless Fleet is On Station") } if (structure.GetStructType().Category != types.ObjectType_fleet) { - sdkerrors.Wrapf(types.ErrStructAction, "Struct Type cannot exist in this location ") + return sdkerrors.Wrapf(types.ErrStructAction, "Struct Type cannot exist in this location ") } // Check that the Struct can exist in the specified ambit diff --git a/x/structs/keeper/player_cache.go b/x/structs/keeper/player_cache.go index ac8eafd..0cdfeb6 100644 --- a/x/structs/keeper/player_cache.go +++ b/x/structs/keeper/player_cache.go @@ -488,33 +488,35 @@ func (cache *PlayerCache) CanBeUpdatedBy(address string) (err error) { return cache.CanBeAdministratedBy(address, types.PermissionUpdate) } -func (cache *PlayerCache) CanBeAdministratedBy(address string, permission types.Permission) (err error) { +func (cache *PlayerCache) CanBeAdministratedBy(address string, permission types.Permission) (error) { // Make sure the address calling this has request permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), permission)) { - err = sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) doesn't have the required permissions ", address) + return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) doesn't have the required permissions ", address) } if (cache.GetPrimaryAddress() != address) { callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) - if (err == nil) { - if (callingPlayer.GetPlayerId() != cache.GetPlayerId()) { - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetPlayerId(), callingPlayer.GetPlayerId()), permission)) { - err = sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) doesn't have the required permissions on target player (%s)", callingPlayer.GetPlayerId(), cache.GetPlayerId()) - } + if (err != nil) { + return err + } + + if (callingPlayer.GetPlayerId() != cache.GetPlayerId()) { + if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetPlayerId(), callingPlayer.GetPlayerId()), permission)) { + return sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) doesn't have the required permissions on target player (%s)", callingPlayer.GetPlayerId(), cache.GetPlayerId()) } } } - return + return nil } -func (cache *PlayerCache) ReadinessCheck() (err error) { +func (cache *PlayerCache) ReadinessCheck() (error) { if (cache.IsOffline()) { - err = sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) is offline. Activate it", cache.PlayerId) + return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) is offline. Activate it", cache.PlayerId) } cache.Ready = true - return + return nil } diff --git a/x/structs/keeper/struct_cache.go b/x/structs/keeper/struct_cache.go index 645e02a..4144b0f 100644 --- a/x/structs/keeper/struct_cache.go +++ b/x/structs/keeper/struct_cache.go @@ -735,17 +735,17 @@ func (cache *StructCache) GoOffline() { cache.StatusRemoveOnline() } -func (cache *StructCache) ReadinessCheck() (err error) { +func (cache *StructCache) ReadinessCheck() (error) { if (cache.IsOffline()) { - err = sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) is offline. Activate it", cache.StructId) + return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) is offline. Activate it", cache.StructId) } else { if (cache.GetOwner().IsOffline()) { - err = sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) is offline due to power", cache.GetOwnerId()) + return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) is offline due to power", cache.GetOwnerId()) } } cache.Ready = true - return + return nil } /* Rough but Consistent Randomness Check */ @@ -770,42 +770,44 @@ func (cache *StructCache) IsSuccessful(successRate fraction.Fraction) bool { } /* Permissions */ -func (cache *StructCache) CanBePlayedBy(address string) (err error) { +func (cache *StructCache) CanBePlayedBy(address string) (error) { // Make sure the address calling this has Play permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionPlay)) { - err = sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling address (%s) has no play permissions ", address) + return sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling address (%s) has no play permissions ", address) } callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) - if (err == nil) { - if (callingPlayer.PlayerId != cache.GetOwnerId()) { - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionPlay)) { - err = sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling account (%s) has no play permissions on target player (%s)", callingPlayer.PlayerId, cache.GetOwnerId()) - } + if (err != nil) { + return err + } + if (callingPlayer.PlayerId != cache.GetOwnerId()) { + if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionPlay)) { + return sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling account (%s) has no play permissions on target player (%s)", callingPlayer.PlayerId, cache.GetOwnerId()) } } - return + return nil } -func (cache *StructCache) CanBeHashedBy(address string) (err error) { +func (cache *StructCache) CanBeHashedBy(address string) (error) { // Make sure the address calling this has Play permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionHash)) { - err = sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling address (%s) has no hashing permissions ", address) + return sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling address (%s) has no hashing permissions ", address) } callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) - if (err == nil) { - if (callingPlayer.PlayerId != cache.GetOwnerId()) { - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionHash)) { - err = sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling account (%s) has no hashing permissions on target player (%s)", callingPlayer.PlayerId, cache.GetOwnerId()) - } + if (err != nil) { + return err + } + if (callingPlayer.PlayerId != cache.GetOwnerId()) { + if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionHash)) { + return sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling account (%s) has no hashing permissions on target player (%s)", callingPlayer.PlayerId, cache.GetOwnerId()) } } - return + return nil } /* Game Functions */ diff --git a/x/structs/keeper/substation_cache.go b/x/structs/keeper/substation_cache.go index 94d785d..36704de 100644 --- a/x/structs/keeper/substation_cache.go +++ b/x/structs/keeper/substation_cache.go @@ -182,23 +182,22 @@ func (cache *SubstationCache) CanCreateAllocations(activePlayer *PlayerCache) (e return cache.PermissionCheck(types.PermissionAssets, activePlayer) } -func (cache *SubstationCache) PermissionCheck(permission types.Permission, activePlayer *PlayerCache) (err error) { +func (cache *SubstationCache) PermissionCheck(permission types.Permission, activePlayer *PlayerCache) (error) { // Make sure the address calling this has Play permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(activePlayer.GetActiveAddress()), permission)) { - err = sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no (%d) permissions ", activePlayer.GetActiveAddress(), permission) - + return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no (%d) permissions ", activePlayer.GetActiveAddress(), permission) } if !activePlayer.HasPlayerAccount() { - err = sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no Account", activePlayer.GetActiveAddress()) + return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no Account", activePlayer.GetActiveAddress()) } else { if (activePlayer.GetPlayerId() != cache.GetOwnerId()) { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetSubstationId(), activePlayer.GetPlayerId()), permission)) { - err = sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) has no (%d) permissions on target substation (%s)", activePlayer.GetPlayerId(), permission, cache.GetSubstationId()) + return sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) has no (%d) permissions on target substation (%s)", activePlayer.GetPlayerId(), permission, cache.GetSubstationId()) } } } - return + return nil } From 52237de661c35da0d06af0e93c77b062fdfda032 Mon Sep 17 00:00:00 2001 From: abstrct Date: Tue, 27 Jan 2026 21:38:16 -0500 Subject: [PATCH 03/14] refactor: migrate error handling to structured error types --- x/structs/keeper/agreement_cache.go | 11 +- x/structs/keeper/allocation.go | 15 +- x/structs/keeper/fleet_cache.go | 43 +- x/structs/keeper/grid.go | 3 +- x/structs/keeper/guild_cache.go | 21 +- x/structs/keeper/guild_membership_cache.go | 33 +- .../keeper/msg_server_address_register.go | 11 +- x/structs/keeper/msg_server_address_revoke.go | 3 +- .../msg_server_agreement_duration_increase.go | 3 +- x/structs/keeper/msg_server_agreement_open.go | 3 +- .../keeper/msg_server_allocation_create.go | 7 +- .../keeper/msg_server_allocation_delete.go | 11 +- .../keeper/msg_server_allocation_transfer.go | 7 +- .../keeper/msg_server_allocation_update.go | 13 +- x/structs/keeper/msg_server_fleet_move.go | 5 +- .../keeper/msg_server_guild_bank_redeem.go | 8 +- x/structs/keeper/msg_server_guild_create.go | 9 +- .../msg_server_guild_membership_join.go | 13 +- .../msg_server_guild_membership_join_proxy.go | 17 +- .../msg_server_guild_update_endpoint.go | 9 +- ...server_guild_update_entry_substation_id.go | 11 +- ...rver_guild_update_join_infusion_minimum.go | 9 +- ..._join_infusion_minimum_bypass_by_invite.go | 9 +- ...join_infusion_minimum_bypass_by_request.go | 9 +- .../msg_server_guild_update_owner_id.go | 11 +- .../msg_server_permission_grant_on_address.go | 5 +- .../msg_server_permission_grant_on_object.go | 7 +- ...msg_server_permission_revoke_on_address.go | 3 +- .../msg_server_permission_revoke_on_object.go | 5 +- .../msg_server_permission_set_on_address.go | 3 +- .../msg_server_permission_set_on_object.go | 5 +- x/structs/keeper/msg_server_planet_explore.go | 3 +- .../keeper/msg_server_planet_raid_complete.go | 11 +- x/structs/keeper/msg_server_player_resume.go | 3 +- x/structs/keeper/msg_server_player_send.go | 7 +- ...sg_server_player_update_primary_address.go | 7 +- .../msg_server_reactor_begin_migration.go | 11 +- .../msg_server_reactor_cancel_defusion.go | 22 +- x/structs/keeper/msg_server_reactor_defuse.go | 9 +- x/structs/keeper/msg_server_reactor_infuse.go | 9 +- .../keeper/msg_server_struct_activate.go | 5 +- x/structs/keeper/msg_server_struct_attack.go | 9 +- .../keeper/msg_server_struct_build_cancel.go | 5 +- .../msg_server_struct_build_complete.go | 15 +- .../msg_server_struct_build_initiate.go | 15 +- .../keeper/msg_server_struct_deactivate.go | 11 +- .../keeper/msg_server_struct_defense_clear.go | 15 +- .../keeper/msg_server_struct_defense_set.go | 17 +- .../msg_server_struct_generator_infuse.go | 25 +- x/structs/keeper/msg_server_struct_move.go | 5 +- .../msg_server_struct_ore_miner_complete.go | 5 +- ...msg_server_struct_ore_refinery_complete.go | 5 +- .../msg_server_struct_stealth_activate.go | 11 +- .../msg_server_struct_stealth_deactivate.go | 11 +- ...sg_server_substation_allocation_connect.go | 19 +- ...server_substation_allocation_disconnect.go | 12 +- .../keeper/msg_server_substation_create.go | 11 +- .../keeper/msg_server_substation_delete.go | 7 +- .../msg_server_substation_player_connect.go | 13 +- ...msg_server_substation_player_disconnect.go | 9 +- .../msg_server_substation_player_migrate.go | 13 +- x/structs/keeper/planet_cache.go | 39 +- x/structs/keeper/player_cache.go | 11 +- x/structs/keeper/provider_cache.go | 27 +- x/structs/keeper/struct_cache.go | 71 +- x/structs/keeper/substation_cache.go | 7 +- x/structs/types/errors.go | 331 +++- x/structs/types/errors_structured.go | 1426 +++++++++++++++++ x/structs/types/errors_structured_test.go | 897 +++++++++++ 69 files changed, 2953 insertions(+), 498 deletions(-) create mode 100644 x/structs/types/errors_structured.go create mode 100644 x/structs/types/errors_structured_test.go diff --git a/x/structs/keeper/agreement_cache.go b/x/structs/keeper/agreement_cache.go index f3522c7..55d0b01 100644 --- a/x/structs/keeper/agreement_cache.go +++ b/x/structs/keeper/agreement_cache.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "cosmossdk.io/math" ) @@ -183,15 +182,15 @@ func (cache *AgreementCache) CanUpdate(activePlayer *PlayerCache) (error) { func (cache *AgreementCache) PermissionCheck(permission types.Permission, activePlayer *PlayerCache) (error) { // Make sure the address calling this has permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(activePlayer.GetActiveAddress()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no (%d) permissions ", activePlayer.GetActiveAddress(), permission) + return types.NewPermissionError("address", activePlayer.GetActiveAddress(), "", "", uint64(permission), "agreement_action") } if !activePlayer.HasPlayerAccount() { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no Account", activePlayer.GetActiveAddress()) + return types.NewPlayerRequiredError(activePlayer.GetActiveAddress(), "agreement_action") } else { if (activePlayer.GetPlayerId() != cache.GetOwnerId()) { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetAgreementId(), activePlayer.GetPlayerId()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) has no (%d) permissions on target agreement (%s)", activePlayer.GetPlayerId(), permission, cache.GetAgreementId()) + return types.NewPermissionError("player", activePlayer.GetPlayerId(), "agreement", cache.GetAgreementId(), uint64(permission), "agreement_action") } } } @@ -402,7 +401,7 @@ func (cache *AgreementCache) SetEndBlock(endBlock uint64) { func (cache *AgreementCache) CapacityIncrease(amount uint64) (error){ if cache.GetProvider().GetSubstation().GetAvailableCapacity() < amount { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Substation (%s) cannot afford the increase", cache.GetProvider().GetSubstationId()) + return types.NewParameterValidationError("capacity", amount, "exceeds_available").WithSubstation(cache.GetProvider().GetSubstationId()).WithRange(0, cache.GetProvider().GetSubstation().GetAvailableCapacity()) } cache.PayoutVoidedProviderCancellationPenalty() @@ -441,7 +440,7 @@ func (cache *AgreementCache) CapacityDecrease(amount uint64) (error){ // remaining duration = end block - current block // new duration = (remaining duration * old capacity) / new capacity .Truncate() if cache.GetCapacity() < amount { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Cannot decrease passed zero") + return types.NewParameterValidationError("capacity", amount, "below_minimum").WithRange(0, cache.GetCapacity()) } newCapacity := cache.GetCapacity() - amount diff --git a/x/structs/keeper/allocation.go b/x/structs/keeper/allocation.go index cf1ffbd..4910f4f 100644 --- a/x/structs/keeper/allocation.go +++ b/x/structs/keeper/allocation.go @@ -10,9 +10,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "structs/x/structs/types" - - sdkerrors "cosmossdk.io/errors" - ) // AppendAllocation appends a allocation in the store with a new id @@ -37,7 +34,7 @@ func (k Keeper) AppendAllocation( // TODO - make a quicker lookup. This is going to get slow as allocation increase sourceAllocations := k.GetAllAllocationIdBySourceIndex(ctx, allocation.SourceObjectId) if (len(sourceAllocations) > 0) { - return allocation, power, sdkerrors.Wrapf(types.ErrAllocationAppend, "Allocation Source (%s) cannot have an automated Allocation with other allocations in place", allocation.SourceObjectId) + return allocation, power, types.NewAllocationError(allocation.SourceObjectId, "automated_conflict") } // Update the Power definition to be the capacity of the source @@ -50,7 +47,7 @@ func (k Keeper) AppendAllocation( sourceLoad := k.GetGridAttribute(ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_load, allocation.SourceObjectId)) availableCapacity := allocationSourceCapacity - sourceLoad if (availableCapacity < power) { - return allocation, power, sdkerrors.Wrapf(types.ErrAllocationAppend, "Allocation Source (%s) does not have the capacity (%d) for the power (%d) defined in this allocation", allocation.SourceObjectId, availableCapacity, power) + return allocation, power, types.NewAllocationError(allocation.SourceObjectId, "capacity_exceeded").WithCapacity(availableCapacity, power) } } @@ -109,24 +106,24 @@ func (k Keeper) SetAllocation(ctx context.Context, allocation types.Allocation, previousAllocation, previousAllocationFound := k.GetAllocation(ctx, allocation.Id) if (!previousAllocationFound) { // This should be an append, not a set. - return allocation, newPower, sdkerrors.Wrapf(types.ErrAllocationSet, "Trying to set an allocation that doesn't exist yet. Should have been an append?") + return allocation, newPower, types.NewAllocationError(allocation.SourceObjectId, "not_exists").WithAllocation(allocation.Id) } previousPower := k.GetGridAttribute(ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_power, allocation.Id)) if (previousAllocation.SourceObjectId != allocation.SourceObjectId) { // Should never change the Source of an Allocation - return allocation, newPower, sdkerrors.Wrapf(types.ErrAllocationSet, "Source Object (%s vs %s) should never change during an allocation update", previousAllocation.SourceObjectId, allocation.SourceObjectId) + return allocation, newPower, types.NewAllocationError(allocation.SourceObjectId, "immutable_source").WithFieldChange("source", previousAllocation.SourceObjectId, allocation.SourceObjectId) } if (previousAllocation.Index != allocation.Index) { // Should never change the SourceId of an Allocation - return allocation, newPower, sdkerrors.Wrapf(types.ErrAllocationSet, "Allocation Index (%d vs %d) should never change during an allocation update", previousAllocation.Index, allocation.Index) + return allocation, newPower, types.NewAllocationError(allocation.SourceObjectId, "immutable_index").WithFieldChange("index", string(previousAllocation.Index), string(allocation.Index)) } if (previousAllocation.Type != allocation.Type) { // Allocation Type should never change - return allocation, newPower, sdkerrors.Wrapf(types.ErrAllocationSet, "Allocation Type (%d vs %d) should never change during an allocation update", previousAllocation.Type, allocation.Type) + return allocation, newPower, types.NewAllocationError(allocation.SourceObjectId, "immutable_type").WithFieldChange("type", previousAllocation.Type.String(), allocation.Type.String()) } diff --git a/x/structs/keeper/fleet_cache.go b/x/structs/keeper/fleet_cache.go index a28a570..927d54a 100644 --- a/x/structs/keeper/fleet_cache.go +++ b/x/structs/keeper/fleet_cache.go @@ -6,7 +6,6 @@ import ( //"math" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -325,15 +324,15 @@ func (cache *FleetCache) SetLocationToPlanet(destination *PlanetCache) { func (cache *FleetCache) PlanetMoveReadinessCheck() (error) { if cache.GetOwner().IsOffline() { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) is offline due to power", cache.GetOwnerId()) + return types.NewPlayerPowerError(cache.GetOwnerId(), "offline") } if !cache.HasCommandStruct() { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet (%s) needs a Command Struct before deploy", cache.GetFleetId()) + return types.NewFleetCommandError(cache.GetFleetId(), "no_command_struct") } if cache.GetCommandStruct().IsOffline() { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet (%s) needs an Online Command Struct before deploy", cache.GetFleetId()) + return types.NewFleetCommandError(cache.GetFleetId(), "command_offline") } return nil @@ -362,36 +361,36 @@ func (cache *FleetCache) PeaceDeal() (){ func (cache *FleetCache) BuildInitiateReadiness(structure *types.Struct, structType *types.StructType, ambit types.Ambit, ambitSlot uint64) (error) { if structure.GetOwner() != cache.GetOwnerId() { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct owner must match fleet ") + return types.NewStructOwnershipError(structure.Id, cache.GetOwnerId(), structure.GetOwner()).WithLocation("fleet", cache.GetFleetId()) } if cache.IsAway() { - return sdkerrors.Wrapf(types.ErrStructAction, "Structs cannot be built unless Fleet is On Station") + return types.NewFleetStateError(cache.GetFleetId(), "away", "build") } if structType.Type != types.CommandStruct { if !cache.HasCommandStruct() { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet (%s) needs a Command Struct before deploy", cache.GetFleetId()) + return types.NewFleetCommandError(cache.GetFleetId(), "no_command_struct") } if cache.GetCommandStruct().IsOffline() { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet (%s) needs an Online Command Struct before deploy", cache.GetFleetId()) + return types.NewFleetCommandError(cache.GetFleetId(), "command_offline") } } if (structType.Category != types.ObjectType_fleet) { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct Type cannot exist in this location ") + return types.NewStructLocationError(structType.GetId(), ambit.String(), "outside_planet") } // Check that the Struct can exist in the specified ambit if types.Ambit_flag[ambit]&structType.PossibleAmbit == 0 { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct cannot be exist in the defined ambit (%s) based on structType (%d) ", ambit, structType.Id) + return types.NewStructLocationError(structType.GetId(), ambit.String(), "invalid_ambit") } if structType.Type == types.CommandStruct { if cache.HasCommandStruct() { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The fleet (%s) already has a Command Struct", cache.GetFleetId()) + return types.NewStructBuildError(structType.GetId(), "fleet", cache.GetFleetId(), "command_exists") } } else { @@ -413,14 +412,14 @@ func (cache *FleetCache) BuildInitiateReadiness(structure *types.Struct, structT slots = cache.GetFleet().SpaceSlots slot = cache.GetFleet().Space[ambitSlot] default: - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The Struct Build was initiated on a non-existent ambit") + return types.NewStructBuildError(structType.GetId(), "fleet", cache.GetFleetId(), "invalid_ambit").WithAmbit(ambit.String()) } if (ambitSlot >= slots) { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The Fleet (%s) specified doesn't have that slot available to build on", cache.GetFleetId()) + return types.NewStructBuildError(structType.GetId(), "fleet", cache.GetFleetId(), "slot_unavailable").WithSlot(ambitSlot) } if (slot != "") { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The Fleet (%s) specified already has a struct on that slot", cache.GetFleetId()) + return types.NewStructBuildError(structType.GetId(), "fleet", cache.GetFleetId(), "slot_occupied").WithSlot(ambitSlot).WithExistingStruct(slot) } } return nil @@ -430,20 +429,20 @@ func (cache *FleetCache) BuildInitiateReadiness(structure *types.Struct, structT func (cache *FleetCache) MoveReadiness(structure *StructCache, ambit types.Ambit, ambitSlot uint64) (error) { if structure.GetOwnerId() != cache.GetOwnerId() { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct owner must match fleet ") + return types.NewStructOwnershipError(structure.GetStructId(), cache.GetOwnerId(), structure.GetOwnerId()).WithLocation("fleet", cache.GetFleetId()) } if cache.IsAway() { - return sdkerrors.Wrapf(types.ErrStructAction, "Structs cannot be built unless Fleet is On Station") + return types.NewFleetStateError(cache.GetFleetId(), "away", "move") } if (structure.GetStructType().Category != types.ObjectType_fleet) { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct Type cannot exist in this location ") + return types.NewStructLocationError(structure.GetStructType().GetId(), ambit.String(), "outside_planet") } // Check that the Struct can exist in the specified ambit if types.Ambit_flag[ambit]&structure.GetStructType().PossibleAmbit == 0 { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct cannot be exist in the defined ambit (%s) based on structType (%d) ", ambit, structure.GetStructType().GetId()) + return types.NewStructLocationError(structure.GetStructType().GetId(), ambit.String(), "invalid_ambit") } if structure.GetStructType().Type != types.CommandStruct { @@ -465,14 +464,14 @@ func (cache *FleetCache) MoveReadiness(structure *StructCache, ambit types.Ambit slots = cache.GetFleet().SpaceSlots slot = cache.GetFleet().Space[ambitSlot] default: - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The Struct Build was initiated on a non-existent ambit") + return types.NewStructBuildError(structure.GetStructType().GetId(), "fleet", cache.GetFleetId(), "invalid_ambit").WithAmbit(ambit.String()) } if (ambitSlot >= slots) { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The Fleet (%s) specified doesn't have that slot available to build on", cache.GetFleetId()) + return types.NewStructBuildError(structure.GetStructType().GetId(), "fleet", cache.GetFleetId(), "slot_unavailable").WithSlot(ambitSlot) } if (slot != "") { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The Fleet (%s) specified already has a struct on that slot", cache.GetFleetId()) + return types.NewStructBuildError(structure.GetStructType().GetId(), "fleet", cache.GetFleetId(), "slot_occupied").WithSlot(ambitSlot).WithExistingStruct(slot) } } return nil @@ -492,7 +491,7 @@ func (cache *FleetCache) SetSlot(structure types.Struct) (err error) { case types.Ambit_space: cache.Fleet.Space[structure.Slot] = structure.Id default: - err = sdkerrors.Wrapf(types.ErrStructAction, "Struct cannot exist in the defined ambit (%s) ", structure.OperatingAmbit) + err = types.NewStructLocationError(0, structure.OperatingAmbit.String(), "invalid_ambit").WithStruct(structure.Id) } cache.FleetChanged = true cache.Changed() diff --git a/x/structs/keeper/grid.go b/x/structs/keeper/grid.go index 51a0a7e..5859766 100644 --- a/x/structs/keeper/grid.go +++ b/x/structs/keeper/grid.go @@ -10,7 +10,6 @@ import ( "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "fmt" "slices" @@ -132,7 +131,7 @@ func (k Keeper) AppendGridCascadeQueue(ctx context.Context, queueId string) (err // Skip if queueId is empty or nil to prevent "key is nil or empty" panic if queueId == "" { - return sdkerrors.Wrapf(types.ErrObjectNotFound, "queueId (%s) empty", queueId) + return types.NewObjectNotFoundError("grid_queue", queueId) } gridCascadeQueueStore := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.GridCascadeQueue)) diff --git a/x/structs/keeper/guild_cache.go b/x/structs/keeper/guild_cache.go index 2d1ff5f..ccc7d55 100644 --- a/x/structs/keeper/guild_cache.go +++ b/x/structs/keeper/guild_cache.go @@ -5,7 +5,6 @@ import ( "structs/x/structs/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" // Used in Randomness Orb @@ -184,7 +183,7 @@ func (cache *GuildCache) CanInviteMembers(activePlayer *PlayerCache) (err error) switch cache.GetJoinInfusionMinimumBypassByInvite() { // Invites are currently closed case types.GuildJoinBypassLevel_closed: - err = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Guild not currently allowing invitations") + err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_allowed").WithJoinType("invite") // Only specific players can invite case types.GuildJoinBypassLevel_permissioned: @@ -193,7 +192,7 @@ func (cache *GuildCache) CanInviteMembers(activePlayer *PlayerCache) (err error) // All Guild Members can Invite case types.GuildJoinBypassLevel_member: if activePlayer.GetGuildId() != cache.GetGuildId() { - err = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Calling player (%s) must be a member of Guild (%s) to invite others", activePlayer.GetPlayerId(), cache.GetGuildId()) + err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_member") } } return @@ -203,7 +202,7 @@ func (cache *GuildCache) CanApproveMembershipRequest(activePlayer *PlayerCache) switch cache.GetJoinInfusionMinimumBypassByRequest() { // Invites are currently closed case types.GuildJoinBypassLevel_closed: - err = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Guild not currently allowing requests") + err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_allowed").WithJoinType("request") // Only specific players can request case types.GuildJoinBypassLevel_permissioned: @@ -212,7 +211,7 @@ func (cache *GuildCache) CanApproveMembershipRequest(activePlayer *PlayerCache) // All Guild Members can Invite case types.GuildJoinBypassLevel_member: if activePlayer.GetGuildId() != cache.GetGuildId() { - err = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Calling player (%s) must be a member of Guild (%s) to approve requests", activePlayer.GetPlayerId(), cache.GetGuildId()) + err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_member") } } return @@ -227,7 +226,7 @@ func (cache *GuildCache) CanRequestMembership() (err error) { switch cache.GetJoinInfusionMinimumBypassByRequest() { // Invites are currently closed case types.GuildJoinBypassLevel_closed: - err = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Guild is not currently allowing membership requests") + err = types.NewGuildMembershipError(cache.GetGuildId(), "", "not_allowed").WithJoinType("request") } return } @@ -235,15 +234,15 @@ func (cache *GuildCache) CanRequestMembership() (err error) { func (cache *GuildCache) PermissionCheck(permission types.Permission, activePlayer *PlayerCache) (error) { // Make sure the address calling this has permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(activePlayer.GetActiveAddress()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no (%d) permissions ", activePlayer.GetActiveAddress(), permission) + return types.NewPermissionError("address", activePlayer.GetActiveAddress(), "", "", uint64(permission), "guild_action") } if !activePlayer.HasPlayerAccount() { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no Account", activePlayer.GetActiveAddress()) + return types.NewPlayerRequiredError(activePlayer.GetActiveAddress(), "guild_action") } else { if (activePlayer.GetPlayerId() != cache.GetOwnerId()) { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetGuildId(), activePlayer.GetPlayerId()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) has no (%d) permissions on target guild (%s)", activePlayer.GetPlayerId(), permission, cache.GetGuildId()) + return types.NewPermissionError("player", activePlayer.GetPlayerId(), "guild", cache.GetGuildId(), uint64(permission), "guild_action") } } } @@ -264,7 +263,7 @@ func (cache *GuildCache) BankMint(amountAlpha math.Int, amountToken math.Int, pl // Try to Move Alpha From the Player to the Pool if !cache.K.bankKeeper.HasBalance(cache.Ctx, player.GetPrimaryAccount(), alphaCollateralCoin) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player cannot afford the mint") + return types.NewPlayerAffordabilityError(player.GetPlayerId(), "mint", amountAlpha.String()+" ualpha") } errSend := cache.K.bankKeeper.SendCoins(cache.Ctx, player.GetPrimaryAccount(), cache.GetBankCollateralPool(), alphaCollateralCoins) @@ -295,7 +294,7 @@ func (cache *GuildCache) BankRedeem(amountToken math.Int, player *PlayerCache) ( // Try to Move Alpha From the Player to the Pool if !cache.K.bankKeeper.HasBalance(cache.Ctx, player.GetPrimaryAccount(), guildTokenCoin) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player cannot afford the mint") + return types.NewPlayerAffordabilityError(player.GetPlayerId(), "redeem", amountToken.String()+" "+cache.GetBankDenom()) } // alphaAmount = amountToken / guildTokenSupply.Amount diff --git a/x/structs/keeper/guild_membership_cache.go b/x/structs/keeper/guild_membership_cache.go index fdcc6ef..e567e83 100644 --- a/x/structs/keeper/guild_membership_cache.go +++ b/x/structs/keeper/guild_membership_cache.go @@ -5,7 +5,6 @@ import ( "structs/x/structs/types" //sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" // Used in Randomness Orb @@ -40,17 +39,17 @@ func (k *Keeper) GetGuildMembershipApplicationCache(ctx context.Context, calling targetPlayer, err := k.GetPlayerCacheFromId(ctx, playerId) if err != nil { - return GuildMembershipApplicationCache{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Player (%s) not found", playerId) + return GuildMembershipApplicationCache{}, types.NewObjectNotFoundError("player", playerId) } if targetPlayer.GetGuildId() == guildId { k.ClearGuildMembershipApplication(ctx, guildId, playerId) - return GuildMembershipApplicationCache{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Player (%s) already a member of Guild (%s)", playerId, guildId) + return GuildMembershipApplicationCache{}, types.NewGuildMembershipError(guildId, playerId, "already_member") } guild := k.GetGuildCacheFromId(ctx, guildId) if !guild.LoadGuild() { - return GuildMembershipApplicationCache{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild (%s) not found", guildId) + return GuildMembershipApplicationCache{}, types.NewObjectNotFoundError("guild", guildId) } guildMembershipApplication, guildMembershipApplicationFound := k.GetGuildMembershipApplication(ctx, guildId, playerId) @@ -62,7 +61,7 @@ func (k *Keeper) GetGuildMembershipApplicationCache(ctx context.Context, calling if guildMembershipApplicationFound { if guildMembershipApplication.JoinType != joinType { - return GuildMembershipApplicationCache{}, sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Application cannot change join type") + return GuildMembershipApplicationCache{}, types.NewGuildMembershipError(guildId, playerId, "join_type_mismatch") } } else { @@ -122,20 +121,20 @@ func (k *Keeper) GetGuildMembershipKickCache(ctx context.Context, callingPlayer targetPlayer, err := k.GetPlayerCacheFromId(ctx, playerId) if err != nil { - return GuildMembershipApplicationCache{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Player (%s) not found", playerId) + return GuildMembershipApplicationCache{}, types.NewObjectNotFoundError("player", playerId) } if targetPlayer.GetGuildId() != guildId { - return GuildMembershipApplicationCache{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Player (%s) already not a member of Guild (%s)", playerId, guildId) + return GuildMembershipApplicationCache{}, types.NewGuildMembershipError(guildId, playerId, "not_member") } guild := k.GetGuildCacheFromId(ctx, guildId) if !guild.LoadGuild() { - return GuildMembershipApplicationCache{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild (%s) not found", guildId) + return GuildMembershipApplicationCache{}, types.NewObjectNotFoundError("guild", guildId) } if guild.GetOwnerId() == playerId { - return GuildMembershipApplicationCache{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Player (%s) is the owner of the guild (%s), so... no.", playerId, guildId) + return GuildMembershipApplicationCache{}, types.NewGuildMembershipError(guildId, playerId, "cannot_kick_owner") } guildMembershipApplication, guildMembershipApplicationFound := k.GetGuildMembershipApplication(ctx, guildId, playerId) @@ -260,7 +259,7 @@ func (cache *GuildMembershipApplicationCache) SetSubstationIdOverride(substation substation := cache.K.GetSubstationCacheFromId(cache.Ctx, substationId) if !substation.LoadSubstation() { - return sdkerrors.Wrapf(types.ErrObjectNotFound, "Substation (%s) not found", substationId) + return types.NewObjectNotFoundError("substation", substationId) } substationPermissionError := substation.CanManagePlayerConnections(cache.CallingPlayer) @@ -287,7 +286,7 @@ func (cache *GuildMembershipApplicationCache) VerifyInviteAsGuild() (error) { } if (cache.GetJoinType() != types.GuildJoinType_invite) { - return sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Membership Application is incorrect type for invitation approval") + return types.NewGuildMembershipError(cache.GetGuildId(), cache.GetPlayerId(), "wrong_join_type").WithJoinType("invite") } return nil @@ -296,12 +295,12 @@ func (cache *GuildMembershipApplicationCache) VerifyInviteAsGuild() (error) { func (cache *GuildMembershipApplicationCache) VerifyInviteAsPlayer() (error) { if cache.GetPlayerId() != cache.CallingPlayer.GetPlayerId() { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetPlayerId(), cache.CallingPlayer.GetPlayerId()), types.PermissionAssociations)) { - return sdkerrors.Wrapf(types.ErrPermissionGuildRegister, "Calling player (%s) has no Player Association permissions with the Player (%s) ", cache.CallingPlayer.GetPlayerId(), cache.GetPlayerId()) + return types.NewPermissionError("player", cache.CallingPlayer.GetPlayerId(), "player", cache.GetPlayerId(), uint64(types.PermissionAssociations), "guild_register") } } if (cache.GetJoinType() != types.GuildJoinType_invite) { - return sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Membership Application is incorrect type for invitation approval") + return types.NewGuildMembershipError(cache.GetGuildId(), cache.GetPlayerId(), "wrong_join_type").WithJoinType("invite") } return nil @@ -342,7 +341,7 @@ func (cache *GuildMembershipApplicationCache) VerifyRequestAsGuild() (error) { } if (cache.GetJoinType() != types.GuildJoinType_request) { - return sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Membership Application is incorrect type for invitation approval") + return types.NewGuildMembershipError(cache.GetGuildId(), cache.GetPlayerId(), "wrong_join_type").WithJoinType("request") } return nil @@ -351,12 +350,12 @@ func (cache *GuildMembershipApplicationCache) VerifyRequestAsGuild() (error) { func (cache *GuildMembershipApplicationCache) VerifyRequestAsPlayer() (error) { if cache.GetPlayerId() != cache.CallingPlayer.GetPlayerId() { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetPlayerId(), cache.CallingPlayer.GetPlayerId()), types.PermissionAssociations)) { - return sdkerrors.Wrapf(types.ErrPermissionGuildRegister, "Calling player (%s) has no Player Association permissions with the Player (%s) ", cache.CallingPlayer.GetPlayerId(), cache.GetPlayerId()) + return types.NewPermissionError("player", cache.CallingPlayer.GetPlayerId(), "player", cache.GetPlayerId(), uint64(types.PermissionAssociations), "guild_register") } } if (cache.GetJoinType() != types.GuildJoinType_request) { - return sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Membership Application is incorrect type for invitation approval") + return types.NewGuildMembershipError(cache.GetGuildId(), cache.GetPlayerId(), "wrong_join_type").WithJoinType("request") } return nil @@ -409,7 +408,7 @@ func (cache *GuildMembershipApplicationCache) Kick() (error) { func (cache *GuildMembershipApplicationCache) VerifyDirectJoin() (error) { if cache.GetPlayerId() != cache.CallingPlayer.GetPlayerId() { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetPlayerId(), cache.CallingPlayer.GetPlayerId()), types.PermissionAssociations)) { - return sdkerrors.Wrapf(types.ErrPermissionGuildRegister, "Calling player (%s) has no Player Association permissions with the Player (%s) ", cache.CallingPlayer.GetPlayerId(), cache.GetPlayerId()) + return types.NewPermissionError("player", cache.CallingPlayer.GetPlayerId(), "player", cache.GetPlayerId(), uint64(types.PermissionAssociations), "guild_register") } } return nil diff --git a/x/structs/keeper/msg_server_address_register.go b/x/structs/keeper/msg_server_address_register.go index 249e19a..22eb4ee 100644 --- a/x/structs/keeper/msg_server_address_register.go +++ b/x/structs/keeper/msg_server_address_register.go @@ -7,7 +7,6 @@ import ( "math" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" crypto "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -27,14 +26,14 @@ func (k msgServer) AddressRegister(goCtx context.Context, msg *types.MsgAddressR } if !player.LoadPlayer() { - return &types.MsgAddressRegisterResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Non-player account cannot associate new addresses with themselves") + return &types.MsgAddressRegisterResponse{}, types.NewObjectNotFoundError("player", msg.PlayerId) } // Is the address associated with an account yet playerFoundForAddress := k.GetPlayerIndexFromAddress(ctx, msg.Address) if (playerFoundForAddress > 0) { - return &types.MsgAddressRegisterResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not associate an address when already has an account") + return &types.MsgAddressRegisterResponse{}, types.NewAddressValidationError(msg.Address, "already_registered") } // Check if msg.Creator has PermissionAssociations on the Address and Account @@ -47,7 +46,7 @@ func (k msgServer) AddressRegister(goCtx context.Context, msg *types.MsgAddressR addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) // The calling address must have a minimum of the same permission level if (!k.PermissionHasAll(ctx, addressPermissionId, types.Permission(msg.Permissions))) { - return &types.MsgAddressRegisterResponse{}, sdkerrors.Wrapf(types.ErrPermissionAssociation, "Calling address (%s) does not have permissions needed to allow address association of higher functionality ", msg.Creator) + return &types.MsgAddressRegisterResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(msg.Permissions), "address_association") } // Does the signature verify in the proof @@ -61,7 +60,7 @@ func (k msgServer) AddressRegister(goCtx context.Context, msg *types.MsgAddressR // Convert provided pub key into a bech32 string (i.e., an address) address := types.PubKeyToBech32(decodedProofPubKey) if (address != msg.Address) { - return &types.MsgAddressRegisterResponse{}, sdkerrors.Wrapf(types.ErrPlayerUpdate, "Proof mismatch for %s vs %s", address, msg.Address) + return &types.MsgAddressRegisterResponse{}, types.NewAddressValidationError(msg.Address, "proof_mismatch").WithPlayers(address, msg.Address) } pubKey := crypto.PubKey{} @@ -79,7 +78,7 @@ func (k msgServer) AddressRegister(goCtx context.Context, msg *types.MsgAddressR // Proof needs to only be 64 characters. Some systems provide a checksum bit on the end that ruins it all if (!pubKey.VerifySignature([]byte(hashInput), decodedProofSignature[:64])) { - return &types.MsgAddressRegisterResponse{}, sdkerrors.Wrapf(types.ErrPlayerUpdate, "Proof signature verification failure") + return &types.MsgAddressRegisterResponse{}, types.NewAddressValidationError(msg.Address, "signature_invalid") } // Add the address and player index to the keeper diff --git a/x/structs/keeper/msg_server_address_revoke.go b/x/structs/keeper/msg_server_address_revoke.go index aad770d..922d01d 100644 --- a/x/structs/keeper/msg_server_address_revoke.go +++ b/x/structs/keeper/msg_server_address_revoke.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "math" ) @@ -29,7 +28,7 @@ func (k msgServer) AddressRevoke(goCtx context.Context, msg *types.MsgAddressRev // Check is msg.Address is the current Primary Address if player.GetPrimaryAddress() == msg.Address { - return &types.MsgAddressRevokeResponse{}, sdkerrors.Wrapf(types.ErrPermissionRevoke, "Cannot Revoke Primary Address. Update Primary Address First") + return &types.MsgAddressRevokeResponse{}, types.NewAddressValidationError(msg.Address, "primary_address") } /* Got this far, make it so... */ diff --git a/x/structs/keeper/msg_server_agreement_duration_increase.go b/x/structs/keeper/msg_server_agreement_duration_increase.go index 35ddef4..031c925 100644 --- a/x/structs/keeper/msg_server_agreement_duration_increase.go +++ b/x/structs/keeper/msg_server_agreement_duration_increase.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "cosmossdk.io/math" ) @@ -40,7 +39,7 @@ func (k msgServer) AgreementDurationIncrease(goCtx context.Context, msg *types.M if !k.bankKeeper.HasBalance(ctx, sourceAcc, collateralAmountCoin) { - return &types.MsgAgreementResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Player cannot afford the agreement ") + return &types.MsgAgreementResponse{}, types.NewPlayerAffordabilityError(activePlayer.GetPlayerId(), "agreement_duration_increase", collateralAmountCoin.String()) } // move the funds from user to provider collateral pool diff --git a/x/structs/keeper/msg_server_agreement_open.go b/x/structs/keeper/msg_server_agreement_open.go index 4e19349..d89a177 100644 --- a/x/structs/keeper/msg_server_agreement_open.go +++ b/x/structs/keeper/msg_server_agreement_open.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "cosmossdk.io/math" ) @@ -55,7 +54,7 @@ func (k msgServer) AgreementOpen(goCtx context.Context, msg *types.MsgAgreementO } if !k.bankKeeper.HasBalance(ctx, sourceAcc, collateralAmountCoin) { - return &types.MsgAgreementResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Player cannot afford the agreement ") + return &types.MsgAgreementResponse{}, types.NewPlayerAffordabilityError(activePlayer.GetPlayerId(), "agreement_open", collateralAmountCoin.String()) } // move the funds from user to provider collateral pool diff --git a/x/structs/keeper/msg_server_allocation_create.go b/x/structs/keeper/msg_server_allocation_create.go index 43b2066..0b7b832 100644 --- a/x/structs/keeper/msg_server_allocation_create.go +++ b/x/structs/keeper/msg_server_allocation_create.go @@ -2,7 +2,6 @@ package keeper import ( "context" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -23,7 +22,7 @@ func (k msgServer) AllocationCreate(goCtx context.Context, msg *types.MsgAllocat player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgAllocationCreateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", msg.Creator) + return &types.MsgAllocationCreateResponse{}, types.NewPlayerRequiredError(msg.Creator, "allocation_create") } sourceObjectPermissionId := GetObjectPermissionIDBytes(msg.SourceObjectId, player.Id) @@ -34,14 +33,14 @@ func (k msgServer) AllocationCreate(goCtx context.Context, msg *types.MsgAllocat if (player.Id != msg.SourceObjectId) { // check that the player has permissions if (!k.PermissionHasOneOf(ctx, sourceObjectPermissionId, types.PermissionAssets)) { - return &types.MsgAllocationCreateResponse{}, sdkerrors.Wrapf(types.ErrPermissionAllocation, "Calling player (%s) has no Allocation permissions on source (%s) ", player.Id, msg.SourceObjectId) + return &types.MsgAllocationCreateResponse{}, types.NewPermissionError("player", player.Id, "allocation", msg.SourceObjectId, uint64(types.PermissionAssets), "allocation_create") } } // check that the account has energy management permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.Permission(types.PermissionAssets))) { - return &types.MsgAllocationCreateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgAllocationCreateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "energy_management") } allocation, _ , err := k.AppendAllocation(ctx, allocation, msg.Power) diff --git a/x/structs/keeper/msg_server_allocation_delete.go b/x/structs/keeper/msg_server_allocation_delete.go index 00df380..11c33d6 100644 --- a/x/structs/keeper/msg_server_allocation_delete.go +++ b/x/structs/keeper/msg_server_allocation_delete.go @@ -2,7 +2,6 @@ package keeper import ( "context" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -16,12 +15,12 @@ func (k msgServer) AllocationDelete(goCtx context.Context, msg *types.MsgAllocat allocation, allocationFound := k.GetAllocation(ctx, msg.AllocationId) if (!allocationFound) { - return &types.MsgAllocationDeleteResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "allocation (%s) not found", msg.AllocationId) + return &types.MsgAllocationDeleteResponse{}, types.NewObjectNotFoundError("allocation", msg.AllocationId) } player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgAllocationDeleteResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform allocation action with non-player address (%s)", msg.Creator) + return &types.MsgAllocationDeleteResponse{}, types.NewPlayerRequiredError(msg.Creator, "allocation_delete") } sourceObjectPermissionId := GetObjectPermissionIDBytes(allocation.SourceObjectId, player.Id) @@ -32,18 +31,18 @@ func (k msgServer) AllocationDelete(goCtx context.Context, msg *types.MsgAllocat if (player.Id != allocation.SourceObjectId) { // check that the player has permissions if (!k.PermissionHasOneOf(ctx, sourceObjectPermissionId, types.PermissionAssets)) { - return &types.MsgAllocationDeleteResponse{}, sdkerrors.Wrapf(types.ErrPermissionAllocation, "Calling player (%s) has no Allocation permissions on source (%s) ", player.Id, allocation.SourceObjectId) + return &types.MsgAllocationDeleteResponse{}, types.NewPermissionError("player", player.Id, "allocation", allocation.SourceObjectId, uint64(types.PermissionAssets), "allocation_delete") } } // check that the account has energy management permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.Permission(types.PermissionAssets))) { - return &types.MsgAllocationDeleteResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgAllocationDeleteResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "energy_management") } if (allocation.Type != types.AllocationType_dynamic) { - return &types.MsgAllocationDeleteResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Allocation Type must be Dynamic for deleting ") + return &types.MsgAllocationDeleteResponse{}, types.NewAllocationError(allocation.SourceObjectId, "immutable_type").WithFieldChange("type", allocation.Type.String(), "dynamic") } k.DestroyAllocation(ctx, msg.AllocationId) diff --git a/x/structs/keeper/msg_server_allocation_transfer.go b/x/structs/keeper/msg_server_allocation_transfer.go index 8fde5e3..7a2619f 100644 --- a/x/structs/keeper/msg_server_allocation_transfer.go +++ b/x/structs/keeper/msg_server_allocation_transfer.go @@ -2,7 +2,6 @@ package keeper import ( "context" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -18,15 +17,15 @@ func (k msgServer) AllocationTransfer(goCtx context.Context, msg *types.MsgAlloc allocation, allocationFound := k.GetAllocation(ctx, msg.AllocationId) if (!allocationFound) { - return &types.MsgAllocationTransferResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "allocation (%s) not found", msg.AllocationId) + return &types.MsgAllocationTransferResponse{}, types.NewObjectNotFoundError("allocation", msg.AllocationId) } if (allocation.Controller != msg.Creator) { - return &types.MsgAllocationTransferResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "allocation (%s) not controller by transaction creator. Unable to transfer", msg.AllocationId) + return &types.MsgAllocationTransferResponse{}, types.NewPermissionError("address", msg.Creator, "allocation", msg.AllocationId, uint64(types.PermissionAssets), "allocation_transfer") } if (allocation.DestinationId != "") { - return &types.MsgAllocationTransferResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "allocation (%s) must not be connected to a substation during a transfer", msg.AllocationId) + return &types.MsgAllocationTransferResponse{}, types.NewAllocationError(msg.AllocationId, "connected").WithDestination(allocation.DestinationId) } allocation.Controller = msg.Controller diff --git a/x/structs/keeper/msg_server_allocation_update.go b/x/structs/keeper/msg_server_allocation_update.go index 1bc10d7..ed07dd5 100644 --- a/x/structs/keeper/msg_server_allocation_update.go +++ b/x/structs/keeper/msg_server_allocation_update.go @@ -2,7 +2,6 @@ package keeper import ( "context" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -16,12 +15,12 @@ func (k msgServer) AllocationUpdate(goCtx context.Context, msg *types.MsgAllocat allocation, allocationFound := k.GetAllocation(ctx, msg.AllocationId) if (!allocationFound) { - return &types.MsgAllocationUpdateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "allocation (%s) not found", msg.AllocationId) + return &types.MsgAllocationUpdateResponse{}, types.NewObjectNotFoundError("allocation", msg.AllocationId) } player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgAllocationUpdateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", msg.Creator) + return &types.MsgAllocationUpdateResponse{}, types.NewPlayerRequiredError(msg.Creator, "allocation_update") } sourceObjectPermissionId := GetObjectPermissionIDBytes(allocation.SourceObjectId, player.Id) @@ -32,22 +31,22 @@ func (k msgServer) AllocationUpdate(goCtx context.Context, msg *types.MsgAllocat if (player.Id != allocation.SourceObjectId) { // check that the player has permissions if (!k.PermissionHasOneOf(ctx, sourceObjectPermissionId, types.PermissionAssets)) { - return &types.MsgAllocationUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionAllocation, "Calling player (%s) has no Allocation permissions on source (%s) ", player.Id, allocation.SourceObjectId) + return &types.MsgAllocationUpdateResponse{}, types.NewPermissionError("player", player.Id, "allocation", allocation.SourceObjectId, uint64(types.PermissionAssets), "allocation_update") } } // check that the account has energy management permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.Permission(types.PermissionAssets))) { - return &types.MsgAllocationUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgAllocationUpdateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "energy_management") } if (allocation.Type != types.AllocationType_dynamic) { - return &types.MsgAllocationUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Allocation Type must be Dynamic for updates ") + return &types.MsgAllocationUpdateResponse{}, types.NewAllocationError(allocation.SourceObjectId, "immutable_type").WithFieldChange("type", allocation.Type.String(), "dynamic") } if (msg.Power == 0) { - return &types.MsgAllocationUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Cannot update Allocation to be zero. Please delete it instead") + return &types.MsgAllocationUpdateResponse{}, types.NewParameterValidationError("power", 0, "below_minimum").WithRange(1, 0) } allocation, _, err := k.SetAllocation(ctx, allocation, msg.Power) diff --git a/x/structs/keeper/msg_server_fleet_move.go b/x/structs/keeper/msg_server_fleet_move.go index 6d6797a..73df74e 100644 --- a/x/structs/keeper/msg_server_fleet_move.go +++ b/x/structs/keeper/msg_server_fleet_move.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -28,12 +27,12 @@ func (k msgServer) FleetMove(goCtx context.Context, msg *types.MsgFleetMove) (*t } if fleet.GetOwner().IsHalted() { - return &types.MsgFleetMoveResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Cannot perform actions while Player (%s) is Halted", fleet.GetOwnerId()) + return &types.MsgFleetMoveResponse{}, types.NewPlayerHaltedError(fleet.GetOwnerId(), "fleet_move") } destination := k.GetPlanetCacheFromId(ctx, msg.DestinationLocationId) if (!destination.LoadPlanet()) { - return &types.MsgFleetMoveResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Planet (%s) wasn't found", msg.DestinationLocationId) + return &types.MsgFleetMoveResponse{}, types.NewObjectNotFoundError("planet", msg.DestinationLocationId) } // Is the Fleet able to move? diff --git a/x/structs/keeper/msg_server_guild_bank_redeem.go b/x/structs/keeper/msg_server_guild_bank_redeem.go index 831111a..f5c4ca7 100644 --- a/x/structs/keeper/msg_server_guild_bank_redeem.go +++ b/x/structs/keeper/msg_server_guild_bank_redeem.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "strings" @@ -19,22 +18,21 @@ func (k msgServer) GuildBankRedeem(goCtx context.Context, msg *types.MsgGuildBan activePlayer, lookupErr := k.GetPlayerCacheFromAddress(ctx, msg.Creator) if lookupErr != nil { - return &types.MsgGuildBankRedeemResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Player not found ") + return &types.MsgGuildBankRedeemResponse{}, types.NewPlayerRequiredError(msg.Creator, "guild_bank_redeem") } // TODO permission check on the address to look for Asset permissions denomSlice := strings.Split(msg.AmountToken.Denom,".") if len(denomSlice) != 2 { - return &types.MsgGuildBankRedeemResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Denom (%s) not in Guild Bank Token format ", msg.AmountToken.Denom) + return &types.MsgGuildBankRedeemResponse{}, types.NewParameterValidationError("denom", 0, "invalid_format") } guild := k.GetGuildCacheFromId(ctx, denomSlice[1]) if !guild.LoadGuild() { - return &types.MsgGuildBankRedeemResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild ID (%s) not found ", guild.GetGuildId()) + return &types.MsgGuildBankRedeemResponse{}, types.NewObjectNotFoundError("guild", guild.GetGuildId()) } err := guild.BankRedeem(msg.AmountToken.Amount, &activePlayer); return &types.MsgGuildBankRedeemResponse{}, err } - diff --git a/x/structs/keeper/msg_server_guild_create.go b/x/structs/keeper/msg_server_guild_create.go index 7e6d0f3..9293b47 100644 --- a/x/structs/keeper/msg_server_guild_create.go +++ b/x/structs/keeper/msg_server_guild_create.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -25,7 +24,7 @@ func (k msgServer) GuildCreate(goCtx context.Context, msg *types.MsgGuildCreate) reactor, reactorFound := k.GetReactorByBytes(ctx, reactorBytes) if (!reactorFound) { - return &types.MsgGuildCreateResponse{}, sdkerrors.Wrapf(types.ErrReactorRequired, "Guild creation requires Reactor but none associated with %s", msg.Creator) + return &types.MsgGuildCreateResponse{}, types.NewReactorError("guild_create", "required").WithAddress(msg.Creator, "validator") } // Currently, no real reason to do permission checks that the player can @@ -39,7 +38,7 @@ func (k msgServer) GuildCreate(goCtx context.Context, msg *types.MsgGuildCreate) if (playerIndex == 0) { // should really never get here as player creation is triggered // during reactor initialization - return &types.MsgGuildCreateResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Guild creation requires Player account but none associated with %s", msg.Creator) + return &types.MsgGuildCreateResponse{}, types.NewPlayerRequiredError(msg.Creator, "guild_create") } player, _ := k.GetPlayerFromIndex(ctx, playerIndex) @@ -49,13 +48,13 @@ func (k msgServer) GuildCreate(goCtx context.Context, msg *types.MsgGuildCreate) // Check that the Substation exists _, substationFound := k.GetSubstation(ctx, msg.EntrySubstationId) if (!substationFound) { - return &types.MsgGuildCreateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "proposed substation (%s) not found", msg.EntrySubstationId) + return &types.MsgGuildCreateResponse{}, types.NewObjectNotFoundError("substation", msg.EntrySubstationId) } // check that the calling player has substation permissions substationObjectPermissionId := GetObjectPermissionIDBytes(msg.EntrySubstationId, player.Id) if (!k.PermissionHasOneOf(ctx,substationObjectPermissionId, types.PermissionGrid)) { - return &types.MsgGuildCreateResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationPlayerConnect, "Calling player (%s) has no Substation Connect Player permissions ", player.Id) + return &types.MsgGuildCreateResponse{}, types.NewPermissionError("player", player.Id, "substation", msg.EntrySubstationId, uint64(types.PermissionGrid), "substation_connect") } } diff --git a/x/structs/keeper/msg_server_guild_membership_join.go b/x/structs/keeper/msg_server_guild_membership_join.go index 8e54a2b..c0ef500 100644 --- a/x/structs/keeper/msg_server_guild_membership_join.go +++ b/x/structs/keeper/msg_server_guild_membership_join.go @@ -5,7 +5,6 @@ import ( "time" "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -52,7 +51,7 @@ func (k msgServer) GuildMembershipJoin(goCtx context.Context, msg *types.MsgGuil destinationReactor, destinationReactorFound := k.GetReactor(ctx, guildMembershipApplication.GetGuild().GetPrimaryReactorId()) if (!destinationReactorFound) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Somehow this reactor (%s) doesn't exist, you should tell an adult", guildMembershipApplication.GetGuild().GetPrimaryReactorId()) + return &types.MsgGuildMembershipResponse{}, types.NewObjectNotFoundError("reactor", guildMembershipApplication.GetGuild().GetPrimaryReactorId()) } destinationValidatorAccount, _ := sdk.ValAddressFromBech32(destinationReactor.Validator) @@ -75,20 +74,20 @@ func (k msgServer) GuildMembershipJoin(goCtx context.Context, msg *types.MsgGuil infusion, infusionFound := k.GetInfusionByID(ctx, infusionId) if (!infusionFound) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Infusion (%s) not found", infusionId) + return &types.MsgGuildMembershipResponse{}, types.NewObjectNotFoundError("infusion", infusionId) } if (infusion.PlayerId != msg.PlayerId) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Infusion (%s) does not belong to player (%s)", infusionId, msg.PlayerId) + return &types.MsgGuildMembershipResponse{}, types.NewGuildMembershipError(msg.GuildId, msg.PlayerId, "infusion_ownership").WithInfusion(infusionId) } if (infusion.DestinationType != types.ObjectType_reactor) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Only Reactor infusions allowed, Infusion (%s) unacceptable", infusionId) + return &types.MsgGuildMembershipResponse{}, types.NewGuildMembershipError(msg.GuildId, msg.PlayerId, "invalid_infusion_type").WithInfusion(infusionId) } sourceReactor, sourceReactorFound := k.GetReactor(ctx, infusion.DestinationId) if (!sourceReactorFound) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Somehow this reactor (%s) doesn't exist, you should tell an adult",infusion.DestinationId) + return &types.MsgGuildMembershipResponse{}, types.NewObjectNotFoundError("reactor", infusion.DestinationId) } if (sourceReactor.GuildId != msg.GuildId) { @@ -130,7 +129,7 @@ func (k msgServer) GuildMembershipJoin(goCtx context.Context, msg *types.MsgGuil } if (currentFuel < guildMembershipApplication.GetGuild().GetJoinInfusionMinimum()) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Join Infusion Minimum not met") + return &types.MsgGuildMembershipResponse{}, types.NewGuildMembershipError(msg.GuildId, msg.PlayerId, "minimum_not_met").WithMinimum(guildMembershipApplication.GetGuild().GetJoinInfusionMinimum(), currentFuel) } } diff --git a/x/structs/keeper/msg_server_guild_membership_join_proxy.go b/x/structs/keeper/msg_server_guild_membership_join_proxy.go index 0611ade..37c95e2 100644 --- a/x/structs/keeper/msg_server_guild_membership_join_proxy.go +++ b/x/structs/keeper/msg_server_guild_membership_join_proxy.go @@ -7,7 +7,6 @@ import ( "structs/x/structs/types" - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" crypto "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -27,7 +26,7 @@ func (k msgServer) GuildMembershipJoinProxy(goCtx context.Context, msg *types.Ms // look up destination guild guild, guildFound := k.GetGuild(ctx, proxyPlayer.GuildId) if !guildFound { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Referenced Guild (%s) not found", proxyPlayer.GuildId) + return &types.MsgGuildMembershipResponse{}, types.NewObjectNotFoundError("guild", proxyPlayer.GuildId) } // Decode the PubKey from hex Encoding @@ -42,7 +41,7 @@ func (k msgServer) GuildMembershipJoinProxy(goCtx context.Context, msg *types.Ms address := types.PubKeyToBech32(decodedProofPubKey) if address != msg.Address { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrPermissionGuildRegister, "Proof mismatch for %s vs %s", address, msg.Address) + return &types.MsgGuildMembershipResponse{}, types.NewAddressValidationError(msg.Address, "proof_mismatch").WithPlayers(address, msg.Address) } pubKey := crypto.PubKey{} @@ -78,7 +77,7 @@ func (k msgServer) GuildMembershipJoinProxy(goCtx context.Context, msg *types.Ms // Proof needs to only be 64 characters. Some systems provide a checksum bit on the end that ruins it all if !pubKey.VerifySignature([]byte(hashInput), decodedProofSignature[:64]) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrPermissionGuildRegister, "Proof signature verification failure") + return &types.MsgGuildMembershipResponse{}, types.NewAddressValidationError(msg.Address, "signature_invalid") } guildObjectPermissionId := GetObjectPermissionIDBytes(guild.Id, proxyPlayer.Id) @@ -86,12 +85,12 @@ func (k msgServer) GuildMembershipJoinProxy(goCtx context.Context, msg *types.Ms // Check to make sure the player has permissions on the guild if !k.PermissionHasOneOf(ctx, guildObjectPermissionId, types.PermissionAssociations) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrPermissionGuildRegister, "Calling player (%s) has no Player Registration permissions ", proxyPlayer.Id) + return &types.MsgGuildMembershipResponse{}, types.NewPermissionError("player", proxyPlayer.Id, "guild", guild.Id, uint64(types.PermissionAssociations), "register_player") } // Make sure the address calling this has Associate permissions if !k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssociations) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageGuild, "Calling address (%s) has no Guild Management permissions ", msg.Creator) + return &types.MsgGuildMembershipResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssociations), "guild_management") } var substation types.Substation @@ -110,21 +109,21 @@ func (k msgServer) GuildMembershipJoinProxy(goCtx context.Context, msg *types.Ms if msg.SubstationId != "" { substation, substationFound = k.GetSubstation(ctx, msg.SubstationId) if !substationFound { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Provided Substation Override (%s) not found", msg.SubstationId) + return &types.MsgGuildMembershipResponse{}, types.NewObjectNotFoundError("substation", msg.SubstationId).WithContext("override substation") } // Since the Guild Entry Substation is being overridden, let's make // sure the ProxyPlayer actually have authority over this substation substationObjectPermissionId := GetObjectPermissionIDBytes(substation.Id, proxyPlayer.Id) if !k.PermissionHasOneOf(ctx, substationObjectPermissionId, types.PermissionGrid) { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrPermissionGuildRegister, "Calling player (%s) has no Player Connect permissions on Substation (%s) used as override", proxyPlayer.Id, substation.Id) + return &types.MsgGuildMembershipResponse{}, types.NewPermissionError("player", proxyPlayer.Id, "substation", substation.Id, uint64(types.PermissionGrid), "player_connect") } } if !substationFound { substation, substationFound = k.GetSubstation(ctx, guild.EntrySubstationId) if !substationFound { - return &types.MsgGuildMembershipResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Entry Substation (%s) for Guild (%s) not found", guild.EntrySubstationId, guild.Id) + return &types.MsgGuildMembershipResponse{}, types.NewObjectNotFoundError("substation", guild.EntrySubstationId).WithContext("guild entry substation for " + guild.Id) } } diff --git a/x/structs/keeper/msg_server_guild_update_endpoint.go b/x/structs/keeper/msg_server_guild_update_endpoint.go index 086629f..07eafa4 100644 --- a/x/structs/keeper/msg_server_guild_update_endpoint.go +++ b/x/structs/keeper/msg_server_guild_update_endpoint.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -17,25 +16,25 @@ func (k msgServer) GuildUpdateEndpoint(goCtx context.Context, msg *types.MsgGuil playerId := k.GetPlayerIndexFromAddress(ctx, msg.Creator) if (playerId == 0) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Guild update requires Player account but none associated with %s", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPlayerRequiredError(msg.Creator, "guild_update_endpoint") } player, _ := k.GetPlayerFromIndex(ctx, playerId) guild, guildFound := k.GetGuild(ctx, msg.GuildId) if (!guildFound) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild (%s) wasn't found. Can't update that which does not exist", msg.GuildId) + return &types.MsgGuildUpdateResponse{}, types.NewObjectNotFoundError("guild", msg.GuildId) } guildObjectPermissionId := GetObjectPermissionIDBytes(msg.GuildId, player.Id) addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasOneOf(ctx, guildObjectPermissionId, types.PermissionUpdate)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) has no permissions to update guild", player.Id) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("player", player.Id, "guild", msg.GuildId, uint64(types.PermissionUpdate), "guild_update") } // Make sure the address calling this has Associate permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageGuild, "Calling address (%s) has no Guild Management permissions ", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "guild_management") } guild.Endpoint = msg.Endpoint diff --git a/x/structs/keeper/msg_server_guild_update_entry_substation_id.go b/x/structs/keeper/msg_server_guild_update_entry_substation_id.go index 9797b58..975ff37 100644 --- a/x/structs/keeper/msg_server_guild_update_entry_substation_id.go +++ b/x/structs/keeper/msg_server_guild_update_entry_substation_id.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -17,25 +16,25 @@ func (k msgServer) GuildUpdateEntrySubstationId(goCtx context.Context, msg *type playerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) if (playerIndex == 0) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Guild update requires Player account but none associated with %s", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPlayerRequiredError(msg.Creator, "guild_update_entry_substation") } player, _ := k.GetPlayerFromIndex(ctx, playerIndex) guild, guildFound := k.GetGuild(ctx, msg.GuildId) if (!guildFound) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild (%s) wasn't found. Can't update that which does not exist", msg.GuildId) + return &types.MsgGuildUpdateResponse{}, types.NewObjectNotFoundError("guild", msg.GuildId) } guildObjectPermissionId := GetObjectPermissionIDBytes(msg.GuildId, player.Id) addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasOneOf(ctx, guildObjectPermissionId, types.PermissionUpdate)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) has no permissions to update guild", player.Id) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("player", player.Id, "guild", msg.GuildId, uint64(types.PermissionUpdate), "guild_update") } // Make sure the address calling this has Associate permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageGuild, "Calling address (%s) has no Guild Management permissions ", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "guild_management") } if (msg.EntrySubstationId != "") { @@ -44,7 +43,7 @@ func (k msgServer) GuildUpdateEntrySubstationId(goCtx context.Context, msg *type // check that the calling player has substation permissions if (!k.PermissionHasOneOf(ctx, substationObjectPermissionId, types.PermissionGrid)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationPlayerConnect, "Calling player (%s) has no Substation Connect Player permissions ", player.Id) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("player", player.Id, "substation", msg.EntrySubstationId, uint64(types.PermissionGrid), "substation_connect") } guild.SetEntrySubstationId(msg.EntrySubstationId) } diff --git a/x/structs/keeper/msg_server_guild_update_join_infusion_minimum.go b/x/structs/keeper/msg_server_guild_update_join_infusion_minimum.go index 4df2ab6..0c9a61c 100644 --- a/x/structs/keeper/msg_server_guild_update_join_infusion_minimum.go +++ b/x/structs/keeper/msg_server_guild_update_join_infusion_minimum.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -17,25 +16,25 @@ func (k msgServer) GuildUpdateJoinInfusionMinimum(goCtx context.Context, msg *ty playerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) if (playerIndex == 0) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Guild update requires Player account but none associated with %s", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPlayerRequiredError(msg.Creator, "guild_update_join_infusion_minimum") } player, _ := k.GetPlayerFromIndex(ctx, playerIndex) guild, guildFound := k.GetGuild(ctx, msg.GuildId) if (!guildFound) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild (%s) wasn't found. Can't update that which does not exist", msg.GuildId) + return &types.MsgGuildUpdateResponse{}, types.NewObjectNotFoundError("guild", msg.GuildId) } guildObjectPermissionId := GetObjectPermissionIDBytes(msg.GuildId, player.Id) addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasOneOf(ctx, guildObjectPermissionId, types.PermissionUpdate)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) has no permissions to update guild", player.Id) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("player", player.Id, "guild", msg.GuildId, uint64(types.PermissionUpdate), "guild_update") } // Make sure the address calling this has Associate permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageGuild, "Calling address (%s) has no Guild Management permissions ", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "guild_management") } if (msg.JoinInfusionMinimum != guild.JoinInfusionMinimum) { diff --git a/x/structs/keeper/msg_server_guild_update_join_infusion_minimum_bypass_by_invite.go b/x/structs/keeper/msg_server_guild_update_join_infusion_minimum_bypass_by_invite.go index be4f431..6efb9ee 100644 --- a/x/structs/keeper/msg_server_guild_update_join_infusion_minimum_bypass_by_invite.go +++ b/x/structs/keeper/msg_server_guild_update_join_infusion_minimum_bypass_by_invite.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -17,25 +16,25 @@ func (k msgServer) GuildUpdateJoinInfusionMinimumBypassByInvite(goCtx context.Co playerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) if (playerIndex == 0) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Guild update requires Player account but none associated with %s", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPlayerRequiredError(msg.Creator, "guild_update_join_bypass_invite") } player, _ := k.GetPlayerFromIndex(ctx, playerIndex) guild, guildFound := k.GetGuild(ctx, msg.GuildId) if (!guildFound) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild (%s) wasn't found. Can't update that which does not exist", msg.GuildId) + return &types.MsgGuildUpdateResponse{}, types.NewObjectNotFoundError("guild", msg.GuildId) } guildObjectPermissionId := GetObjectPermissionIDBytes(msg.GuildId, player.Id) addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasOneOf(ctx, guildObjectPermissionId, types.PermissionUpdate)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) has no permissions to update guild", player.Id) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("player", player.Id, "guild", msg.GuildId, uint64(types.PermissionUpdate), "guild_update") } // Make sure the address calling this has Associate permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageGuild, "Calling address (%s) has no Guild Management permissions ", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "guild_management") } if (msg.GuildJoinBypassLevel != guild.JoinInfusionMinimumBypassByInvite) { diff --git a/x/structs/keeper/msg_server_guild_update_join_infusion_minimum_bypass_by_request.go b/x/structs/keeper/msg_server_guild_update_join_infusion_minimum_bypass_by_request.go index b882d45..169862e 100644 --- a/x/structs/keeper/msg_server_guild_update_join_infusion_minimum_bypass_by_request.go +++ b/x/structs/keeper/msg_server_guild_update_join_infusion_minimum_bypass_by_request.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -17,25 +16,25 @@ func (k msgServer) GuildUpdateJoinInfusionMinimumBypassByRequest(goCtx context.C playerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) if (playerIndex == 0) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Guild update requires Player account but none associated with %s", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPlayerRequiredError(msg.Creator, "guild_update_join_bypass_request") } player, _ := k.GetPlayerFromIndex(ctx, playerIndex) guild, guildFound := k.GetGuild(ctx, msg.GuildId) if (!guildFound) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild (%s) wasn't found. Can't update that which does not exist", msg.GuildId) + return &types.MsgGuildUpdateResponse{}, types.NewObjectNotFoundError("guild", msg.GuildId) } guildObjectPermissionId := GetObjectPermissionIDBytes(msg.GuildId, player.Id) addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasOneOf(ctx, guildObjectPermissionId, types.PermissionUpdate)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) has no permissions to update guild", player.Id) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("player", player.Id, "guild", msg.GuildId, uint64(types.PermissionUpdate), "guild_update") } // Make sure the address calling this has Associate permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageGuild, "Calling address (%s) has no Guild Management permissions ", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "guild_management") } if (msg.GuildJoinBypassLevel != guild.JoinInfusionMinimumBypassByRequest) { diff --git a/x/structs/keeper/msg_server_guild_update_owner_id.go b/x/structs/keeper/msg_server_guild_update_owner_id.go index ee11caf..d5900bc 100644 --- a/x/structs/keeper/msg_server_guild_update_owner_id.go +++ b/x/structs/keeper/msg_server_guild_update_owner_id.go @@ -5,7 +5,6 @@ import ( "structs/x/structs/types" - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -18,31 +17,31 @@ func (k msgServer) GuildUpdateOwnerId(goCtx context.Context, msg *types.MsgGuild playerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) if playerIndex == 0 { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Guild update requires Player account but none associated with %s", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPlayerRequiredError(msg.Creator, "guild_update_owner") } player, _ := k.GetPlayerFromIndex(ctx, playerIndex) guild, guildFound := k.GetGuild(ctx, msg.GuildId) if !guildFound { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild (%s) wasn't found. Can't update that which does not exist", msg.GuildId) + return &types.MsgGuildUpdateResponse{}, types.NewObjectNotFoundError("guild", msg.GuildId) } guildObjectPermissionId := GetObjectPermissionIDBytes(msg.GuildId, player.Id) addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if !k.PermissionHasOneOf(ctx, guildObjectPermissionId, types.PermissionUpdate) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) has no permissions to update guild", player.Id) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("player", player.Id, "guild", msg.GuildId, uint64(types.PermissionUpdate), "guild_update") } // Make sure the address calling this has Associate permissions if !k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets) { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageGuild, "Calling address (%s) has no Guild Management permissions ", msg.Creator) + return &types.MsgGuildUpdateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "guild_management") } if guild.Owner != msg.Owner { _, guildOwnerFound := k.GetPlayer(ctx, msg.Owner) if !guildOwnerFound { - return &types.MsgGuildUpdateResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Guild could not change to new owner (%s) because they weren't found", msg.Owner) + return &types.MsgGuildUpdateResponse{}, types.NewObjectNotFoundError("player", msg.Owner) } guild.SetOwner(msg.Owner) k.SetGuild(ctx, guild) diff --git a/x/structs/keeper/msg_server_permission_grant_on_address.go b/x/structs/keeper/msg_server_permission_grant_on_address.go index 40762e9..73d9630 100644 --- a/x/structs/keeper/msg_server_permission_grant_on_address.go +++ b/x/structs/keeper/msg_server_permission_grant_on_address.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -18,7 +17,7 @@ func (k msgServer) PermissionGrantOnAddress(goCtx context.Context, msg *types.Ms var err error if msg.Permissions == 0 { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrPermission, "Cannot Grant 0") + return &types.MsgPermissionResponse{}, types.NewParameterValidationError("permissions", 0, "below_minimum").WithRange(1, 0) } player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) @@ -39,7 +38,7 @@ func (k msgServer) PermissionGrantOnAddress(goCtx context.Context, msg *types.Ms // Make sure the calling address has enough permissions to apply to another address addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasAll(ctx, addressPermissionId, types.Permission(msg.Permissions) | types.Permissions)) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) does not have the permissions needed to grant this level", msg.Creator) + return &types.MsgPermissionResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(msg.Permissions), "permission_grant") } targetAddressPermissionId := GetAddressPermissionIDBytes(msg.Address) diff --git a/x/structs/keeper/msg_server_permission_grant_on_object.go b/x/structs/keeper/msg_server_permission_grant_on_object.go index b3fe574..0f75a09 100644 --- a/x/structs/keeper/msg_server_permission_grant_on_object.go +++ b/x/structs/keeper/msg_server_permission_grant_on_object.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -18,7 +17,7 @@ func (k msgServer) PermissionGrantOnObject(goCtx context.Context, msg *types.Msg var err error if msg.Permissions == 0 { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrPermission, "Cannot Grant 0") + return &types.MsgPermissionResponse{}, types.NewParameterValidationError("permissions", 0, "below_minimum").WithRange(1, 0) } player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) @@ -36,13 +35,13 @@ func (k msgServer) PermissionGrantOnObject(goCtx context.Context, msg *types.Msg addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) // Make sure the address calling this has the Permissions permission for editing permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.Permissions)) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrPermissionAssociation, "Calling address (%s) has no permissions permission", msg.Creator) + return &types.MsgPermissionResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.Permissions), "permission_edit") } // Make sure the calling player has the same permissions that are being applied to the other player playerPermissionId := GetObjectPermissionIDBytes(msg.ObjectId, player.Id) if (!k.PermissionHasAll(ctx, playerPermissionId, types.Permission(msg.Permissions))) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) does not have the authority over the object", player.Id) + return &types.MsgPermissionResponse{}, types.NewPermissionError("player", player.Id, "object", msg.ObjectId, uint64(msg.Permissions), "permission_grant") } targetPlayerPermissionId := GetObjectPermissionIDBytes(msg.ObjectId, msg.PlayerId) diff --git a/x/structs/keeper/msg_server_permission_revoke_on_address.go b/x/structs/keeper/msg_server_permission_revoke_on_address.go index dc2154d..65d78d5 100644 --- a/x/structs/keeper/msg_server_permission_revoke_on_address.go +++ b/x/structs/keeper/msg_server_permission_revoke_on_address.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -35,7 +34,7 @@ func (k msgServer) PermissionRevokeOnAddress(goCtx context.Context, msg *types.M // Make sure the calling address has enough permissions to apply to another address addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasAll(ctx, addressPermissionId, types.Permission(msg.Permissions) | types.Permissions)) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling address (%s) does not have the permissions needed to grant this level", msg.Creator) + return &types.MsgPermissionResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(msg.Permissions), "permission_revoke") } targetAddressPermissionId := GetAddressPermissionIDBytes(msg.Address) diff --git a/x/structs/keeper/msg_server_permission_revoke_on_object.go b/x/structs/keeper/msg_server_permission_revoke_on_object.go index 9e86f12..fce78a3 100644 --- a/x/structs/keeper/msg_server_permission_revoke_on_object.go +++ b/x/structs/keeper/msg_server_permission_revoke_on_object.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -32,13 +31,13 @@ func (k msgServer) PermissionRevokeOnObject(goCtx context.Context, msg *types.Ms addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) // Make sure the address calling this has the Permissions permission for editing permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.Permissions)) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrPermissionAssociation, "Calling address (%s) has no permissions permission", msg.Creator) + return &types.MsgPermissionResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.Permissions), "permission_edit") } // Make sure the calling player has the same permissions that are being applied to the other player playerPermissionId := GetObjectPermissionIDBytes(msg.ObjectId, player.Id) if (!k.PermissionHasAll(ctx, playerPermissionId, types.Permission(msg.Permissions))) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) does not have the authority over the object", player.Id) + return &types.MsgPermissionResponse{}, types.NewPermissionError("player", player.Id, "object", msg.ObjectId, uint64(msg.Permissions), "permission_revoke") } targetPlayerPermissionId := GetObjectPermissionIDBytes(msg.ObjectId, msg.PlayerId) diff --git a/x/structs/keeper/msg_server_permission_set_on_address.go b/x/structs/keeper/msg_server_permission_set_on_address.go index 4038500..94578d4 100644 --- a/x/structs/keeper/msg_server_permission_set_on_address.go +++ b/x/structs/keeper/msg_server_permission_set_on_address.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -35,7 +34,7 @@ func (k msgServer) PermissionSetOnAddress(goCtx context.Context, msg *types.MsgP // Make sure the calling address has enough permissions to apply to another address addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasAll(ctx, addressPermissionId, types.Permission(msg.Permissions) | types.Permissions)) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling address (%s) does not have the permissions needed to grant this level", msg.Creator) + return &types.MsgPermissionResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(msg.Permissions), "permission_set") } targetAddressPermissionId := GetAddressPermissionIDBytes(msg.Address) diff --git a/x/structs/keeper/msg_server_permission_set_on_object.go b/x/structs/keeper/msg_server_permission_set_on_object.go index a0ff54e..20089aa 100644 --- a/x/structs/keeper/msg_server_permission_set_on_object.go +++ b/x/structs/keeper/msg_server_permission_set_on_object.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -32,13 +31,13 @@ func (k msgServer) PermissionSetOnObject(goCtx context.Context, msg *types.MsgPe addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) // Make sure the address calling this has the Permissions permission for editing permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.Permissions)) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrPermissionAssociation, "Calling address (%s) has no permissions permission", msg.Creator) + return &types.MsgPermissionResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.Permissions), "permission_edit") } // Make sure the calling player has the same permissions that are being applied to the other player playerPermissionId := GetObjectPermissionIDBytes(msg.ObjectId, player.Id) if (!k.PermissionHasAll(ctx, playerPermissionId, types.Permission(msg.Permissions))) { - return &types.MsgPermissionResponse{}, sdkerrors.Wrapf(types.ErrGuildUpdate, "Calling player (%s) does not have the authority over the object", player.Id) + return &types.MsgPermissionResponse{}, types.NewPermissionError("player", player.Id, "object", msg.ObjectId, uint64(msg.Permissions), "permission_set") } targetPlayerPermissionId := GetObjectPermissionIDBytes(msg.ObjectId, msg.PlayerId) diff --git a/x/structs/keeper/msg_server_planet_explore.go b/x/structs/keeper/msg_server_planet_explore.go index 73f7913..9bba1f5 100644 --- a/x/structs/keeper/msg_server_planet_explore.go +++ b/x/structs/keeper/msg_server_planet_explore.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -27,7 +26,7 @@ func (k msgServer) PlanetExplore(goCtx context.Context, msg *types.MsgPlanetExpl } if player.IsHalted() { - return &types.MsgPlanetExploreResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Cannot perform actions while Player (%s) is Halted", msg.PlayerId) + return &types.MsgPlanetExploreResponse{}, types.NewPlayerHaltedError(msg.PlayerId, "planet_explore") } // Is the Player online? diff --git a/x/structs/keeper/msg_server_planet_raid_complete.go b/x/structs/keeper/msg_server_planet_raid_complete.go index 5747c8f..3184de4 100644 --- a/x/structs/keeper/msg_server_planet_raid_complete.go +++ b/x/structs/keeper/msg_server_planet_raid_complete.go @@ -7,7 +7,6 @@ import ( //"fmt" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -46,22 +45,22 @@ func (k msgServer) PlanetRaidComplete(goCtx context.Context, msg *types.MsgPlane } if fleet.GetOwner().IsHalted() { - return &types.MsgPlanetRaidCompleteResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Cannot perform actions while Player (%s) is Halted", fleet.GetOwnerId()) + return &types.MsgPlanetRaidCompleteResponse{}, types.NewPlayerHaltedError(fleet.GetOwnerId(), "planet_raid_complete") } // check that the fleet is Away if fleet.IsOnStation() { - return &types.MsgPlanetRaidCompleteResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet cannot complete a Raid while On Station") + return &types.MsgPlanetRaidCompleteResponse{}, types.NewFleetStateError(fleet.GetFleetId(), "on_station", "raid_complete") } // check that forward pointer for the fleet is "" if (fleet.GetFleet().LocationListForward != "") { - return &types.MsgPlanetRaidCompleteResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet cannot complete a Raid unless it is the first in line") + return &types.MsgPlanetRaidCompleteResponse{}, types.NewFleetStateError(fleet.GetFleetId(), "not_first_in_queue", "raid_complete").WithPosition(0) } // check that the player is online if fleet.GetOwner().IsOffline() { - return &types.MsgPlanetRaidCompleteResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet cannot complete a Raid unless the player is Online") + return &types.MsgPlanetRaidCompleteResponse{}, types.NewPlayerPowerError(fleet.GetOwnerId(), "offline") } @@ -73,7 +72,7 @@ func (k msgServer) PlanetRaidComplete(goCtx context.Context, msg *types.MsgPlane if (!types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, fleet.GetPlanet().GetPlanetaryShield())) { //fleet.GetOwner().Halt() _ = ctx.EventManager().EmitTypedEvent(&types.EventRaid{&types.EventRaidDetail{FleetId: fleet.GetFleetId(), PlanetId: raidedPlanet, Status: types.RaidStatus_ongoing}}) - return &types.MsgPlanetRaidCompleteResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Work failure for input (%s) when trying to complete a Raid on Planet %s", hashInput, fleet.GetPlanet().GetPlanetId()) + return &types.MsgPlanetRaidCompleteResponse{}, types.NewWorkFailureError("raid", fleet.GetFleetId(), hashInput).WithPlanet(fleet.GetPlanet().GetPlanetId()) } // Award the Ore from the defender to attacker diff --git a/x/structs/keeper/msg_server_player_resume.go b/x/structs/keeper/msg_server_player_resume.go index a29a6b6..8809fec 100644 --- a/x/structs/keeper/msg_server_player_resume.go +++ b/x/structs/keeper/msg_server_player_resume.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" //"fmt" ) @@ -29,7 +28,7 @@ func (k msgServer) PlayerResume(goCtx context.Context, msg *types.MsgPlayerResum } if (player.GetCharge() < types.PlayerResumeCharge) { - return &types.MsgPlayerResumeResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Resuming from Halt requires a charge of %d, but player (%s) only had %d", types.PlayerResumeCharge, msg.PlayerId , player.GetCharge()) + return &types.MsgPlayerResumeResponse{}, types.NewInsufficientChargeError(msg.PlayerId, types.PlayerResumeCharge, player.GetCharge(), "resume") } player.Resume() diff --git a/x/structs/keeper/msg_server_player_send.go b/x/structs/keeper/msg_server_player_send.go index c3e3649..c3ea262 100644 --- a/x/structs/keeper/msg_server_player_send.go +++ b/x/structs/keeper/msg_server_player_send.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -27,16 +26,16 @@ func (k msgServer) PlayerSend(goCtx context.Context, msg *types.MsgPlayerSend) ( _ , addressValidationError := sdk.AccAddressFromBech32(msg.FromAddress) if (addressValidationError != nil){ - return &types.MsgPlayerSendResponse{}, sdkerrors.Wrapf(types.ErrPlayerUpdate, "From Address provided (%s) couldn't be validated as a real address. Update aborted. ", msg.FromAddress) + return &types.MsgPlayerSendResponse{}, types.NewAddressValidationError(msg.FromAddress, "invalid_format") } relatedPlayerIndex := k.GetPlayerIndexFromAddress(ctx, msg.FromAddress) if (relatedPlayerIndex == 0) { - return &types.MsgPlayerSendResponse{}, sdkerrors.Wrapf(types.ErrPlayerUpdate, "From Address provided (%s) is not associated with a player, register it with the player before setting it as Primary. Update aborted.", msg.FromAddress) + return &types.MsgPlayerSendResponse{}, types.NewAddressValidationError(msg.FromAddress, "not_registered") } if relatedPlayerIndex != player.GetIndex() { - return &types.MsgPlayerSendResponse{}, sdkerrors.Wrapf(types.ErrPlayerUpdate, "From Address provided (%s) is associated with Player %d instead of Player %d. Update aborted.", msg.FromAddress, relatedPlayerIndex, player.GetIndex()) + return &types.MsgPlayerSendResponse{}, types.NewAddressValidationError(msg.FromAddress, "wrong_player").WithPlayers(player.GetPlayerId(), "") } // Accounts involved diff --git a/x/structs/keeper/msg_server_player_update_primary_address.go b/x/structs/keeper/msg_server_player_update_primary_address.go index c775faf..038cfe2 100644 --- a/x/structs/keeper/msg_server_player_update_primary_address.go +++ b/x/structs/keeper/msg_server_player_update_primary_address.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "math" ) @@ -28,16 +27,16 @@ func (k msgServer) PlayerUpdatePrimaryAddress(goCtx context.Context, msg *types. _ , addressValidationError := sdk.AccAddressFromBech32(msg.PrimaryAddress) if (addressValidationError != nil){ - return &types.MsgPlayerUpdatePrimaryAddressResponse{}, sdkerrors.Wrapf(types.ErrPlayerUpdate, "New Primary Address provided (%s) couldn't be validated as a real address. Update aborted. ", msg.PrimaryAddress) + return &types.MsgPlayerUpdatePrimaryAddressResponse{}, types.NewAddressValidationError(msg.PrimaryAddress, "invalid_format") } relatedPlayerIndex := k.GetPlayerIndexFromAddress(ctx, msg.PrimaryAddress) if (relatedPlayerIndex == 0) { - return &types.MsgPlayerUpdatePrimaryAddressResponse{}, sdkerrors.Wrapf(types.ErrPlayerUpdate, "New Primary Address provided (%s) is not associated with a player, register it with the player before setting it as Primary. Update aborted.", msg.PrimaryAddress) + return &types.MsgPlayerUpdatePrimaryAddressResponse{}, types.NewAddressValidationError(msg.PrimaryAddress, "not_registered") } if relatedPlayerIndex != player.GetIndex() { - return &types.MsgPlayerUpdatePrimaryAddressResponse{}, sdkerrors.Wrapf(types.ErrPlayerUpdate, "New Primary Address provided (%s) is associated with Player %d instead of Player %d. Update aborted.", msg.PrimaryAddress, relatedPlayerIndex, player.GetIndex()) + return &types.MsgPlayerUpdatePrimaryAddressResponse{}, types.NewAddressValidationError(msg.PrimaryAddress, "wrong_player").WithPlayers(player.GetPlayerId(), "") } diff --git a/x/structs/keeper/msg_server_reactor_begin_migration.go b/x/structs/keeper/msg_server_reactor_begin_migration.go index 8457137..e814896 100644 --- a/x/structs/keeper/msg_server_reactor_begin_migration.go +++ b/x/structs/keeper/msg_server_reactor_begin_migration.go @@ -5,7 +5,6 @@ import ( "time" //"cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -31,21 +30,21 @@ func (k msgServer) ReactorBeginMigration(goCtx context.Context, msg *types.MsgRe valSrcAddr, valSrcErr := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress) if valSrcErr != nil { - return &types.MsgReactorBeginMigrationResponse{}, sdkerrors.Wrapf(types.ErrReactorBeginMigration, "invalid validator address: %s", valSrcErr) + return &types.MsgReactorBeginMigrationResponse{}, types.NewAddressValidationError(msg.ValidatorSrcAddress, "invalid_validator") } valDstAddr, valDstErr := sdk.ValAddressFromBech32(msg.ValidatorDstAddress) if valDstErr != nil { - return &types.MsgReactorBeginMigrationResponse{}, sdkerrors.Wrapf(types.ErrReactorBeginMigration, "invalid validator address: %s", valDstErr) + return &types.MsgReactorBeginMigrationResponse{}, types.NewAddressValidationError(msg.ValidatorDstAddress, "invalid_validator") } delegatorAddress, delegatorAddressErr := sdk.AccAddressFromBech32(msg.DelegatorAddress) if delegatorAddressErr != nil { - return &types.MsgReactorBeginMigrationResponse{}, sdkerrors.Wrapf(types.ErrReactorBeginMigration, "invalid delegator address: %s", delegatorAddressErr) + return &types.MsgReactorBeginMigrationResponse{}, types.NewAddressValidationError(msg.DelegatorAddress, "invalid_delegator") } if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() { - return &types.MsgReactorBeginMigrationResponse{}, sdkerrors.Wrapf(types.ErrReactorBeginMigration, "invalid delegation amount") + return &types.MsgReactorBeginMigrationResponse{}, types.NewReactorError("begin_migration", "invalid_amount") } shares, err := k.stakingKeeper.ValidateUnbondAmount( @@ -61,7 +60,7 @@ func (k msgServer) ReactorBeginMigration(goCtx context.Context, msg *types.MsgRe } if msg.Amount.Denom != bondDenom { - return &types.MsgReactorBeginMigrationResponse{}, sdkerrors.Wrapf(types.ErrReactorBeginMigration, "invalid coin denomination: got %s, expected %s", msg.Amount.Denom, bondDenom) + return &types.MsgReactorBeginMigrationResponse{}, types.NewReactorError("begin_migration", "invalid_denom").WithDenom(msg.Amount.Denom, bondDenom) } completionTime, err := k.stakingKeeper.BeginRedelegation( diff --git a/x/structs/keeper/msg_server_reactor_cancel_defusion.go b/x/structs/keeper/msg_server_reactor_cancel_defusion.go index 7b17ed5..1ad32d4 100644 --- a/x/structs/keeper/msg_server_reactor_cancel_defusion.go +++ b/x/structs/keeper/msg_server_reactor_cancel_defusion.go @@ -6,7 +6,6 @@ import ( "strconv" //"cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -33,16 +32,16 @@ func (k msgServer) ReactorCancelDefusion(goCtx context.Context, msg *types.MsgRe delegatorAddress, delegatorAddressErr := sdk.AccAddressFromBech32(msg.DelegatorAddress) if delegatorAddressErr != nil { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, "invalid delegator address: %s", delegatorAddressErr) + return &types.MsgReactorCancelDefusionResponse{}, types.NewReactorError("cancel_defusion", "invalid_address").WithAddress(msg.DelegatorAddress, "delegator") } valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress) if valErr != nil { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, "invalid validator address: %s", valErr) + return &types.MsgReactorCancelDefusionResponse{}, types.NewReactorError("cancel_defusion", "invalid_address").WithAddress(msg.ValidatorAddress, "validator") } if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, "invalid delegation amount") + return &types.MsgReactorCancelDefusionResponse{}, types.NewReactorError("cancel_defusion", "invalid_amount") } bondDenom, err := k.stakingKeeper.BondDenom(ctx) @@ -51,11 +50,11 @@ func (k msgServer) ReactorCancelDefusion(goCtx context.Context, msg *types.MsgRe } if msg.Amount.Denom != bondDenom { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, "invalid coin denomination: got %s, expected %s", msg.Amount.Denom, bondDenom) + return &types.MsgReactorCancelDefusionResponse{}, types.NewReactorError("cancel_defusion", "invalid_denom").WithDenom(msg.Amount.Denom, bondDenom) } if msg.CreationHeight <= 0 { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, "invalid height" ) + return &types.MsgReactorCancelDefusionResponse{}, types.NewReactorError("cancel_defusion", "invalid_height") } validator, err := k.stakingKeeper.GetValidator(ctx, valAddr) @@ -76,10 +75,7 @@ func (k msgServer) ReactorCancelDefusion(goCtx context.Context, msg *types.MsgRe ubd, err := k.stakingKeeper.GetUnbondingDelegation(ctx, delegatorAddress, valAddr) if err != nil { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, - "unbonding delegation with delegator %s not found for validator %s", - msg.DelegatorAddress, msg.ValidatorAddress, - ) + return &types.MsgReactorCancelDefusionResponse{}, types.NewObjectNotFoundError("unbonding_delegation", msg.DelegatorAddress).WithContext("validator: " + msg.ValidatorAddress) } var ( @@ -95,15 +91,15 @@ func (k msgServer) ReactorCancelDefusion(goCtx context.Context, msg *types.MsgRe } } if unbondEntryIndex == -1 { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, "unbonding delegation entry is not found at block height %d", msg.CreationHeight) + return &types.MsgReactorCancelDefusionResponse{}, types.NewReactorError("cancel_defusion", "entry_not_found").WithHeight(msg.CreationHeight) } if unbondEntry.Balance.LT(msg.Amount.Amount) { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, "amount is greater than the unbonding delegation entry balance") + return &types.MsgReactorCancelDefusionResponse{}, types.NewReactorError("cancel_defusion", "balance_exceeded") } if unbondEntry.CompletionTime.Before(ctx.BlockTime()) { - return &types.MsgReactorCancelDefusionResponse{}, sdkerrors.Wrapf(types.ErrReactorCancelDefusion, "unbonding delegation is already processed") + return &types.MsgReactorCancelDefusionResponse{}, types.NewReactorError("cancel_defusion", "already_processed") } // delegate back the unbonding delegation amount to the validator diff --git a/x/structs/keeper/msg_server_reactor_defuse.go b/x/structs/keeper/msg_server_reactor_defuse.go index de55f8d..5596077 100644 --- a/x/structs/keeper/msg_server_reactor_defuse.go +++ b/x/structs/keeper/msg_server_reactor_defuse.go @@ -5,7 +5,6 @@ import ( "time" //"cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -31,16 +30,16 @@ func (k msgServer) ReactorDefuse(goCtx context.Context, msg *types.MsgReactorDef delegatorAddress, delegatorAddressErr := sdk.AccAddressFromBech32(msg.DelegatorAddress) if delegatorAddressErr != nil { - return &types.MsgReactorDefuseResponse{}, sdkerrors.Wrapf(types.ErrReactorDefusion, "invalid delegator address: %s", delegatorAddressErr) + return &types.MsgReactorDefuseResponse{}, types.NewAddressValidationError(msg.DelegatorAddress, "invalid_delegator") } valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress) if valErr != nil { - return &types.MsgReactorDefuseResponse{}, sdkerrors.Wrapf(types.ErrReactorDefusion, "invalid validator address: %s", valErr) + return &types.MsgReactorDefuseResponse{}, types.NewAddressValidationError(msg.ValidatorAddress, "invalid_validator") } if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() { - return &types.MsgReactorDefuseResponse{}, sdkerrors.Wrapf(types.ErrReactorDefusion, "invalid delegation amount") + return &types.MsgReactorDefuseResponse{}, types.NewReactorError("defuse", "invalid_amount") } bondDenom, err := k.stakingKeeper.BondDenom(ctx) @@ -49,7 +48,7 @@ func (k msgServer) ReactorDefuse(goCtx context.Context, msg *types.MsgReactorDef } if msg.Amount.Denom != bondDenom { - return &types.MsgReactorDefuseResponse{}, sdkerrors.Wrapf(types.ErrReactorDefusion, "invalid coin denomination: got %s, expected %s", msg.Amount.Denom, bondDenom) + return &types.MsgReactorDefuseResponse{}, types.NewReactorError("defuse", "invalid_denom").WithDenom(msg.Amount.Denom, bondDenom) } shares, err := k.stakingKeeper.ValidateUnbondAmount( diff --git a/x/structs/keeper/msg_server_reactor_infuse.go b/x/structs/keeper/msg_server_reactor_infuse.go index 6961e6b..b906fb7 100644 --- a/x/structs/keeper/msg_server_reactor_infuse.go +++ b/x/structs/keeper/msg_server_reactor_infuse.go @@ -5,7 +5,6 @@ import ( //"time" //"cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -31,17 +30,17 @@ func (k msgServer) ReactorInfuse(goCtx context.Context, msg *types.MsgReactorInf delegatorAddress, delegatorAddressErr := sdk.AccAddressFromBech32(msg.DelegatorAddress) if delegatorAddressErr != nil { - return &types.MsgReactorInfuseResponse{}, sdkerrors.Wrapf(types.ErrReactorInfusion, "invalid delegator address: %s", delegatorAddressErr) + return &types.MsgReactorInfuseResponse{}, types.NewAddressValidationError(msg.DelegatorAddress, "invalid_delegator") } valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress) if valErr != nil { - return &types.MsgReactorInfuseResponse{}, sdkerrors.Wrapf(types.ErrReactorInfusion, "invalid validator address: %s", valErr) + return &types.MsgReactorInfuseResponse{}, types.NewAddressValidationError(msg.ValidatorAddress, "invalid_validator") } if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() { - return &types.MsgReactorInfuseResponse{}, sdkerrors.Wrapf(types.ErrReactorInfusion, "invalid delegation amount") + return &types.MsgReactorInfuseResponse{}, types.NewReactorError("infuse", "invalid_amount") } validator, err := k.stakingKeeper.GetValidator(ctx, valAddr) @@ -55,7 +54,7 @@ func (k msgServer) ReactorInfuse(goCtx context.Context, msg *types.MsgReactorInf } if msg.Amount.Denom != bondDenom { - return &types.MsgReactorInfuseResponse{}, sdkerrors.Wrapf(types.ErrReactorInfusion, "invalid coin denomination: got %s, expected %s", msg.Amount.Denom, bondDenom) + return &types.MsgReactorInfuseResponse{}, types.NewReactorError("infuse", "invalid_denom").WithDenom(msg.Amount.Denom, bondDenom) } // NOTE: source funds are always unbonded diff --git a/x/structs/keeper/msg_server_struct_activate.go b/x/structs/keeper/msg_server_struct_activate.go index 272ffda..7ae17cb 100644 --- a/x/structs/keeper/msg_server_struct_activate.go +++ b/x/structs/keeper/msg_server_struct_activate.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" //"fmt" ) @@ -26,7 +25,7 @@ func (k msgServer) StructActivate(goCtx context.Context, msg *types.MsgStructAct } if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_activate").WithStruct(msg.StructId) } // Check Activation Readiness @@ -43,7 +42,7 @@ func (k msgServer) StructActivate(goCtx context.Context, msg *types.MsgStructAct playerCharge := k.GetPlayerCharge(ctx, structure.GetOwnerId()) if (playerCharge < structure.GetStructType().GetActivateCharge()) { k.DischargePlayer(ctx, structure.GetOwnerId()) - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d for this mining operation, but player (%s) only had %d", structure.GetTypeId() , structure.GetStructType().GetActivateCharge(), structure.GetOwnerId(), playerCharge) + return &types.MsgStructStatusResponse{}, types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetActivateCharge(), playerCharge, "activate").WithStructType(structure.GetTypeId()).WithStructId(msg.StructId) } structure.GoOnline() diff --git a/x/structs/keeper/msg_server_struct_attack.go b/x/structs/keeper/msg_server_struct_attack.go index 3636af3..c317d8b 100644 --- a/x/structs/keeper/msg_server_struct_attack.go +++ b/x/structs/keeper/msg_server_struct_attack.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -27,7 +26,7 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac } if structure.GetOwner().IsHalted() { - return &types.MsgStructAttackResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.OperatingStructId, structure.GetOwnerId()) + return &types.MsgStructAttackResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_attack").WithStruct(msg.OperatingStructId) } // Is the Struct & Owner online? @@ -39,13 +38,13 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac if !structure.IsCommandable() { k.DischargePlayer(ctx, structure.GetOwnerId()) - return &types.MsgStructAttackResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Commanding a Fleet Struct (%s) requires a Command Struct be Online", structure.GetStructId()) + return &types.MsgStructAttackResponse{}, types.NewFleetCommandError(structure.GetFleet().GetFleetId(), "command_offline").WithStructId(structure.GetStructId()) } playerCharge := k.GetPlayerCharge(ctx, structure.GetOwnerId()) if (playerCharge < structure.GetStructType().GetWeaponCharge(types.TechWeaponSystem_enum[msg.WeaponSystem])) { k.DischargePlayer(ctx, structure.GetOwnerId()) - return &types.MsgStructAttackResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d for this attack, but player (%s) only had %d", structure.GetTypeId() , structure.GetStructType().GetWeaponCharge(types.TechWeaponSystem_enum[msg.WeaponSystem]), structure.GetOwnerId(), playerCharge) + return &types.MsgStructAttackResponse{}, types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetWeaponCharge(types.TechWeaponSystem_enum[msg.WeaponSystem]), playerCharge, "attack").WithStructType(structure.GetTypeId()) } // Jump out of Stealth Mode for the attack @@ -62,7 +61,7 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac if uint64(len(msg.TargetStructId)) != structure.GetStructType().GetWeaponTargets(types.TechWeaponSystem_enum[msg.WeaponSystem]) { k.DischargePlayer(ctx, structure.GetOwnerId()) - return &types.MsgStructAttackResponse{}, sdkerrors.Wrapf(types.ErrStructAction, "Attack Targeting Incomplete") + return &types.MsgStructAttackResponse{}, types.NewCombatTargetingError(structure.GetStructId(), "", msg.WeaponSystem, "incomplete_targeting") } // Begin taking shots. Most weapons only use a single shot but some perform multiple. diff --git a/x/structs/keeper/msg_server_struct_build_cancel.go b/x/structs/keeper/msg_server_struct_build_cancel.go index 7a9ff79..fb18975 100644 --- a/x/structs/keeper/msg_server_struct_build_cancel.go +++ b/x/structs/keeper/msg_server_struct_build_cancel.go @@ -4,7 +4,6 @@ import ( "context" //"strconv" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -26,13 +25,13 @@ func (k msgServer) StructBuildCancel(goCtx context.Context, msg *types.MsgStruct } if !structure.LoadStruct(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct (%s) does not exist", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct", msg.StructId) } if structure.IsBuilt() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) already built", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "built", "building", "build_cancel") } structure.DestroyAndCommit() diff --git a/x/structs/keeper/msg_server_struct_build_complete.go b/x/structs/keeper/msg_server_struct_build_complete.go index 83ddbc2..c82c237 100644 --- a/x/structs/keeper/msg_server_struct_build_complete.go +++ b/x/structs/keeper/msg_server_struct_build_complete.go @@ -4,7 +4,6 @@ import ( "context" "strconv" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -25,24 +24,24 @@ func (k msgServer) StructBuildComplete(goCtx context.Context, msg *types.MsgStru } if !structure.LoadStruct(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct (%s) does not exist", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct", msg.StructId) } if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_build_complete").WithStruct(msg.StructId) } if structure.IsBuilt() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) already built", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "built", "building", "build_complete") } // Check Player Charge /* if (structure.GetOwner().GetCharge() < structure.GetStructType().ActivateCharge) { - err := sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d to build, but player (%s) only had %d", structure.GetStructType().Id, structure.GetStructType().ActivateCharge, structure.GetOwnerId(), structure.GetOwner().GetCharge() ) + err := types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().ActivateCharge, structure.GetOwner().GetCharge(), "struct_build_complete").WithStructType(structure.GetStructType().Id) structure.GetOwner().Discharge() structure.GetOwner().Commit() return &types.MsgStructStatusResponse{}, err @@ -50,7 +49,7 @@ func (k msgServer) StructBuildComplete(goCtx context.Context, msg *types.MsgStru */ if structure.GetOwner().IsOffline(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "The player (%s) is offline ",structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "offline") } // Remove the BuildDraw load @@ -60,7 +59,7 @@ func (k msgServer) StructBuildComplete(goCtx context.Context, msg *types.MsgStru structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) //structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct Type (%d) required a draw of %d to activate, but player (%s) has %d available", structure.GetStructType().Id, structure.GetStructType().PassiveDraw, structure.GetOwnerId(), structure.GetOwner().GetAvailableCapacity()) + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "capacity_exceeded").WithCapacity(structure.GetStructType().PassiveDraw, structure.GetOwner().GetAvailableCapacity()) } // Check the Proof @@ -74,7 +73,7 @@ func (k msgServer) StructBuildComplete(goCtx context.Context, msg *types.MsgStru //structure.GetOwner().Discharge() //structure.GetOwner().Halt() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrStructBuildComplete, "Work failure for input (%s) when trying to build Struct %s", hashInput, structure.GetStructId()) + return &types.MsgStructStatusResponse{}, types.NewWorkFailureError("build", structure.GetStructId(), hashInput) } structure.StatusAddBuilt() diff --git a/x/structs/keeper/msg_server_struct_build_initiate.go b/x/structs/keeper/msg_server_struct_build_initiate.go index 66a9af1..1ce532d 100644 --- a/x/structs/keeper/msg_server_struct_build_initiate.go +++ b/x/structs/keeper/msg_server_struct_build_initiate.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -25,7 +24,7 @@ func (k msgServer) StructBuildInitiate(goCtx context.Context, msg *types.MsgStru // Load the Owner Player owner, err := k.GetPlayerCacheFromId(ctx, msg.PlayerId) if (err != nil) { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Struct build initialization requires Player account but none associated with %s", msg.Creator) + return &types.MsgStructStatusResponse{}, types.NewPlayerRequiredError(msg.Creator, "struct_build_initiate") } // Check address play permissions @@ -35,13 +34,13 @@ func (k msgServer) StructBuildInitiate(goCtx context.Context, msg *types.MsgStru } if owner.IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Cannot perform actions while Player (%s) is Halted", msg.PlayerId) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(msg.PlayerId, "struct_build_initiate") } // Load the Struct Type structType, structTypeFound := k.GetStructType(ctx, msg.StructTypeId) if !structTypeFound { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct Type (%d) was not found. Building a Struct with schematics might be tough", msg.StructTypeId) + return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct_type", "").WithIndex(msg.StructTypeId) } // Check that the player can build more of this type of Struct @@ -49,13 +48,13 @@ func (k msgServer) StructBuildInitiate(goCtx context.Context, msg *types.MsgStru if (owner.GetBuiltQuantity(msg.StructTypeId) >= structType.GetBuildLimit()) { owner.Discharge() owner.Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "The player (%s) cannot build more of this type ",owner.GetPlayerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(owner.GetPlayerId(), "capacity_exceeded").WithCapacity(structType.GetBuildLimit(), owner.GetBuiltQuantity(msg.StructTypeId)) } } // Check Player Charge if (owner.GetCharge() < structType.BuildCharge) { - err := sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d to build, but player (%s) only had %d", msg.StructTypeId, structType.BuildCharge, owner.GetPlayerId(), owner.GetCharge() ) + err := types.NewInsufficientChargeError(owner.GetPlayerId(), structType.BuildCharge, owner.GetCharge(), "build").WithStructType(msg.StructTypeId) owner.Discharge() owner.Commit() return &types.MsgStructStatusResponse{}, err @@ -63,14 +62,14 @@ func (k msgServer) StructBuildInitiate(goCtx context.Context, msg *types.MsgStru if !owner.IsOnline(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "The player (%s) is offline ",owner.GetPlayerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(owner.GetPlayerId(), "offline") } if !owner.CanSupportLoadAddition(structType.BuildDraw) { owner.Discharge() owner.Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct Type (%d) required a draw of %d during build, but player (%s) has %d available", msg.StructTypeId, structType.BuildDraw, owner.GetPlayerId(),owner.GetAvailableCapacity()) + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(owner.GetPlayerId(), "capacity_exceeded").WithCapacity(structType.BuildDraw, owner.GetAvailableCapacity()) } diff --git a/x/structs/keeper/msg_server_struct_deactivate.go b/x/structs/keeper/msg_server_struct_deactivate.go index be70dae..768111b 100644 --- a/x/structs/keeper/msg_server_struct_deactivate.go +++ b/x/structs/keeper/msg_server_struct_deactivate.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" //"fmt" ) @@ -26,27 +25,27 @@ func (k msgServer) StructDeactivate(goCtx context.Context, msg *types.MsgStructD } if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_deactivate").WithStruct(msg.StructId) } if !structure.LoadStruct(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct (%s) does not exist", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct", msg.StructId) } if !structure.IsBuilt() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) isn't built yet", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "building", "built", "deactivate") } if structure.IsOffline() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) already offline", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "offline", "online", "deactivate") } if structure.GetOwner().IsOffline(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "The player (%s) is offline ",structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "offline") } diff --git a/x/structs/keeper/msg_server_struct_defense_clear.go b/x/structs/keeper/msg_server_struct_defense_clear.go index aa3bc6e..6e2c009 100644 --- a/x/structs/keeper/msg_server_struct_defense_clear.go +++ b/x/structs/keeper/msg_server_struct_defense_clear.go @@ -6,7 +6,6 @@ import ( //"fmt" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" @@ -30,42 +29,42 @@ func (k msgServer) StructDefenseClear(goCtx context.Context, msg *types.MsgStruc } if !structure.LoadStruct(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct (%s) does not exist", msg.DefenderStructId) + return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct", msg.DefenderStructId) } if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.DefenderStructId, structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "defense_clear").WithStruct(msg.DefenderStructId) } if structure.IsOffline() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) already built", msg.DefenderStructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.DefenderStructId, "offline", "online", "defense_clear") } if !structure.IsCommandable() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Commanding a Fleet Struct (%s) requires a Command Struct be Online", structure.GetStructId()) + return &types.MsgStructStatusResponse{}, types.NewFleetCommandError(structure.GetStructId(), "no_command_struct") } // Check Player Charge if (structure.GetOwner().GetCharge() < structure.GetStructType().DefendChangeCharge) { - err := sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d to change defensive stance, but player (%s) only had %d", structure.GetStructType().Id, structure.GetStructType().DefendChangeCharge, structure.GetOwnerId(), structure.GetOwner().GetCharge() ) + err := types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().DefendChangeCharge, structure.GetOwner().GetCharge(), "defend").WithStructType(structure.GetStructType().Id) structure.GetOwner().Discharge() structure.GetOwner().Commit() return &types.MsgStructStatusResponse{}, err } if structure.GetOwner().IsOffline(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "The player (%s) is offline ",structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "offline") } protectedStructIndex := k.GetStructAttribute(ctx, GetStructAttributeIDByObjectId(types.StructAttributeType_protectedStructIndex, msg.DefenderStructId)) if (protectedStructIndex == 0) { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct %s not defending anything", msg.DefenderStructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.DefenderStructId, "not_defending", "defending", "defense_clear") } protectedStructId := GetObjectID(types.ObjectType_struct, protectedStructIndex) diff --git a/x/structs/keeper/msg_server_struct_defense_set.go b/x/structs/keeper/msg_server_struct_defense_set.go index e3b52f0..a194bc4 100644 --- a/x/structs/keeper/msg_server_struct_defense_set.go +++ b/x/structs/keeper/msg_server_struct_defense_set.go @@ -6,7 +6,6 @@ import ( //"fmt" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" @@ -39,34 +38,34 @@ func (k msgServer) StructDefenseSet(goCtx context.Context, msg *types.MsgStructD } if !structure.LoadStruct(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct (%s) does not exist", msg.DefenderStructId) + return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct", msg.DefenderStructId) } if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.DefenderStructId, structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "defense_set").WithStruct(msg.DefenderStructId) } if structure.IsOffline() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) already built", msg.DefenderStructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.DefenderStructId, "offline", "online", "defense_set") } if !structure.IsCommandable() { k.DischargePlayer(ctx, structure.GetOwnerId()) - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Commanding a Fleet Struct (%s) requires a Command Struct be Online", structure.GetStructId()) + return &types.MsgStructStatusResponse{}, types.NewFleetCommandError(structure.GetStructId(), "no_command_struct") } // Check Player Charge if (structure.GetOwner().GetCharge() < structure.GetStructType().DefendChangeCharge) { - err := sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d to change defensive stance, but player (%s) only had %d", structure.GetStructType().Id, structure.GetStructType().DefendChangeCharge, structure.GetOwnerId(), structure.GetOwner().GetCharge() ) + err := types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().DefendChangeCharge, structure.GetOwner().GetCharge(), "defend").WithStructType(structure.GetStructType().Id) structure.GetOwner().Discharge() structure.GetOwner().Commit() return &types.MsgStructStatusResponse{}, err } if structure.GetOwner().IsOffline(){ - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "The player (%s) is offline ",structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "offline") } @@ -75,7 +74,7 @@ func (k msgServer) StructDefenseSet(goCtx context.Context, msg *types.MsgStructD //load target protectedStructure, protectedStructureFound := k.GetStruct(ctx, msg.ProtectedStructId) if (!protectedStructureFound) { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct (%s) not found", msg.ProtectedStructId) + return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct", msg.ProtectedStructId) } // Are they within defensive range @@ -102,7 +101,7 @@ func (k msgServer) StructDefenseSet(goCtx context.Context, msg *types.MsgStructD if (!inRange) { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) is not within ranger to defend Struct (%s) ", structure.GetStructId(), msg.ProtectedStructId) + return &types.MsgStructStatusResponse{}, types.NewStructLocationError(structure.GetStructType().Id, "", "not_in_range").WithStruct(structure.GetStructId()).WithLocation("struct", msg.ProtectedStructId) } diff --git a/x/structs/keeper/msg_server_struct_generator_infuse.go b/x/structs/keeper/msg_server_struct_generator_infuse.go index 2777b50..e3f401c 100644 --- a/x/structs/keeper/msg_server_struct_generator_infuse.go +++ b/x/structs/keeper/msg_server_struct_generator_infuse.go @@ -5,7 +5,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "cosmossdk.io/math" @@ -20,7 +19,7 @@ func (k msgServer) StructGeneratorInfuse(goCtx context.Context, msg *types.MsgSt callingPlayerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) if (callingPlayerIndex == 0) { - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Struct build actions requires Player account but none associated with %s", msg.Creator) + return &types.MsgStructGeneratorStatusResponse{}, types.NewPlayerRequiredError(msg.Creator, "struct_generator_infuse") } callingPlayerId := GetObjectID(types.ObjectType_player, callingPlayerIndex) callingPlayer, _ := k.GetPlayer(ctx, callingPlayerId) @@ -28,32 +27,32 @@ func (k msgServer) StructGeneratorInfuse(goCtx context.Context, msg *types.MsgSt addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) // Make sure the address calling this has Assets permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling address (%s) has no assets permissions ", msg.Creator) + return &types.MsgStructGeneratorStatusResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "assets") } structStatusAttributeId := GetStructAttributeIDByObjectId(types.StructAttributeType_status, msg.StructId) structure, structureFound := k.GetStruct(ctx, msg.StructId) if (!structureFound) { - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct (%s) not found", msg.StructId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("struct", msg.StructId) } // Is the Struct online? if (k.StructAttributeFlagHasOneOf(ctx, structStatusAttributeId, uint64(types.StructStateOnline))) { k.DischargePlayer(ctx, callingPlayerId) - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) is offline. Activate it", msg.StructId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewStructStateError(msg.StructId, "offline", "online", "generator_infuse") } // Load Struct Type structType, structTypeFound := k.GetStructType(ctx, structure.Type) if (!structTypeFound) { - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct Type (%d) was not found. Building a Struct with schematics might be tough", structure.Type) + return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("struct_type", "").WithIndex(structure.Type) } if (structType.PowerGeneration == types.TechPowerGeneration_noPowerGeneration) { k.DischargePlayer(ctx, callingPlayerId) - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) has no generation systems", msg.StructId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewStructCapabilityError(msg.StructId, "generation") } // FIX FIX FIX FIX @@ -64,21 +63,21 @@ func (k msgServer) StructGeneratorInfuse(goCtx context.Context, msg *types.MsgSt // FIX FIX FIX FIX planet, planetFound := k.GetPlanet(ctx, structure.LocationId) if (!planetFound) { - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Planet (%s) was not found, which is actually a pretty big problem. Please tell an adult", structure.LocationId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("planet", structure.LocationId) } if (planet.Status == types.PlanetStatus_complete) { k.DischargePlayer(ctx, callingPlayerId) - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrStructMine, "Planet (%s) is already complete. Move on bud, no work to be done here", structure.LocationId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewPlanetStateError(structure.LocationId, "complete", "generator_infuse") } infusionAmount, parseError := sdk.ParseCoinsNormalized(msg.InfuseAmount) if (parseError != nil ){ - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrStructInfuse, "Infuse amount (%s) is invalid", msg.InfuseAmount) + return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_amount") } if len(infusionAmount) < 1 { - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrStructInfuse, "Infuse amount (%s) is invalid", msg.InfuseAmount) + return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_amount") } if (infusionAmount[0].Denom == "ualpha") { @@ -88,7 +87,7 @@ func (k msgServer) StructGeneratorInfuse(goCtx context.Context, msg *types.MsgSt infusionAmount[0].Amount = infusionAmount[0].Amount.Mul(alphaUnitConversionInt) infusionAmount[0].Denom = "ualpha" } else { - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrStructInfuse, "Infuse amount (%s) is invalid, %s is not a fuel", msg.InfuseAmount, infusionAmount[0].Denom) + return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_denom").WithDenom(infusionAmount[0].Denom) } // Transfer the refined Alpha from the player @@ -97,7 +96,7 @@ func (k msgServer) StructGeneratorInfuse(goCtx context.Context, msg *types.MsgSt if (sendError != nil){ k.DischargePlayer(ctx, callingPlayerId) - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrStructInfuse, "Infuse failed %s", sendError ) + return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "transfer_failed").WithDetails(sendError.Error()) } k.bankKeeper.BurnCoins(ctx, types.ModuleName, infusionAmount) diff --git a/x/structs/keeper/msg_server_struct_move.go b/x/structs/keeper/msg_server_struct_move.go index b3a9044..a911ab6 100644 --- a/x/structs/keeper/msg_server_struct_move.go +++ b/x/structs/keeper/msg_server_struct_move.go @@ -10,7 +10,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" */ - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" "structs/x/structs/types" ) @@ -44,12 +43,12 @@ func (k msgServer) StructMove(goCtx context.Context, msg *types.MsgStructMove) ( } if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_move").WithStruct(msg.StructId) } // Check Player Charge if structure.GetOwner().GetCharge() < structure.GetStructType().GetMoveCharge() { - err := sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d for movement, but player (%s) only had %d", structure.GetStructType().GetId(), structure.GetStructType().GetMoveCharge(), structure.GetOwnerId(), structure.GetOwner().GetCharge() ) + err := types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetMoveCharge(), structure.GetOwner().GetCharge(), "move").WithStructType(structure.GetStructType().GetId()) structure.GetOwner().Discharge() structure.GetOwner().Commit() return &types.MsgStructStatusResponse{}, err diff --git a/x/structs/keeper/msg_server_struct_ore_miner_complete.go b/x/structs/keeper/msg_server_struct_ore_miner_complete.go index 57a754e..300f434 100644 --- a/x/structs/keeper/msg_server_struct_ore_miner_complete.go +++ b/x/structs/keeper/msg_server_struct_ore_miner_complete.go @@ -7,7 +7,6 @@ import ( //"fmt" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -27,7 +26,7 @@ func (k msgServer) StructOreMinerComplete(goCtx context.Context, msg *types.MsgS } if structure.GetOwner().IsHalted() { - return &types.MsgStructOreMinerStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) + return &types.MsgStructOreMinerStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "ore_mine_complete").WithStruct(msg.StructId) } // Is the Struct & Owner online? @@ -49,7 +48,7 @@ func (k msgServer) StructOreMinerComplete(goCtx context.Context, msg *types.MsgS currentAge := uint64(ctx.BlockHeight()) - structure.GetBlockStartOreMine() if (!types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().GetOreMiningDifficulty())) { //structure.GetOwner().Halt() - return &types.MsgStructOreMinerStatusResponse{}, sdkerrors.Wrapf(types.ErrStructMine, "Work failure for input (%s) when trying to mine on Struct %s", hashInput, structure.StructId) + return &types.MsgStructOreMinerStatusResponse{}, types.NewWorkFailureError("mine", structure.StructId, hashInput) } // Got this far, let's reward the player with some Ore diff --git a/x/structs/keeper/msg_server_struct_ore_refinery_complete.go b/x/structs/keeper/msg_server_struct_ore_refinery_complete.go index eed648b..ce7b1eb 100644 --- a/x/structs/keeper/msg_server_struct_ore_refinery_complete.go +++ b/x/structs/keeper/msg_server_struct_ore_refinery_complete.go @@ -7,7 +7,6 @@ import ( //"fmt" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -28,7 +27,7 @@ func (k msgServer) StructOreRefineryComplete(goCtx context.Context, msg *types.M } if structure.GetOwner().IsHalted() { - return &types.MsgStructOreRefineryStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) + return &types.MsgStructOreRefineryStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "ore_refine_complete").WithStruct(msg.StructId) } // Is the Struct & Owner online? @@ -50,7 +49,7 @@ func (k msgServer) StructOreRefineryComplete(goCtx context.Context, msg *types.M currentAge := uint64(ctx.BlockHeight()) - structure.GetBlockStartOreRefine() if (!types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().GetOreRefiningDifficulty())) { //structure.GetOwner().Halt() - return &types.MsgStructOreRefineryStatusResponse{}, sdkerrors.Wrapf(types.ErrStructRefine, "Work failure for input (%s) when trying to refine on Struct %s", hashInput, structure.StructId) + return &types.MsgStructOreRefineryStatusResponse{}, types.NewWorkFailureError("refine", structure.StructId, hashInput) } structure.OreRefine() diff --git a/x/structs/keeper/msg_server_struct_stealth_activate.go b/x/structs/keeper/msg_server_struct_stealth_activate.go index 52e0307..d7ba001 100644 --- a/x/structs/keeper/msg_server_struct_stealth_activate.go +++ b/x/structs/keeper/msg_server_struct_stealth_activate.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" //"fmt" ) @@ -25,7 +24,7 @@ func (k msgServer) StructStealthActivate(goCtx context.Context, msg *types.MsgSt } if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "stealth_activate").WithStruct(msg.StructId) } // Is the Struct & Owner online? @@ -39,21 +38,21 @@ func (k msgServer) StructStealthActivate(goCtx context.Context, msg *types.MsgSt if !structure.IsCommandable() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Commanding a Fleet Struct (%s) requires a Command Struct be Online", structure.GetStructId()) + return &types.MsgStructStatusResponse{}, types.NewFleetCommandError(structure.GetStructId(), "no_command_struct") } // Is Struct Stealth Mode already activated? if structure.IsHidden() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) already in stealth", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "hidden", "visible", "stealth_activate") } if (!structure.GetStructType().HasStealthSystem()) { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) has no stealth system", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewStructCapabilityError(msg.StructId, "stealth") } @@ -62,7 +61,7 @@ func (k msgServer) StructStealthActivate(goCtx context.Context, msg *types.MsgSt if (playerCharge < structure.GetStructType().GetStealthActivateCharge()) { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d for stealth mode, but player (%s) only had %d", structure.GetTypeId(), structure.GetStructType().GetStealthActivateCharge(), structure.GetOwnerId(), playerCharge) + return &types.MsgStructStatusResponse{}, types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetStealthActivateCharge(), playerCharge, "stealth").WithStructType(structure.GetTypeId()) } structure.GetOwner().Discharge() diff --git a/x/structs/keeper/msg_server_struct_stealth_deactivate.go b/x/structs/keeper/msg_server_struct_stealth_deactivate.go index 0da2d08..9263afb 100644 --- a/x/structs/keeper/msg_server_struct_stealth_deactivate.go +++ b/x/structs/keeper/msg_server_struct_stealth_deactivate.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" //"fmt" ) @@ -25,7 +24,7 @@ func (k msgServer) StructStealthDeactivate(goCtx context.Context, msg *types.Msg } if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "stealth_deactivate").WithStruct(msg.StructId) } // Is the Struct & Owner online? @@ -39,21 +38,21 @@ func (k msgServer) StructStealthDeactivate(goCtx context.Context, msg *types.Msg if !structure.IsCommandable() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Commanding a Fleet Struct (%s) requires a Command Struct be Online", structure.GetStructId()) + return &types.MsgStructStatusResponse{}, types.NewFleetCommandError(structure.GetStructId(), "no_command_struct") } // Is Struct Stealth Mode already activated? if !structure.IsHidden() { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) already in out of stealth", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "visible", "hidden", "stealth_deactivate") } if (!structure.GetStructType().HasStealthSystem()) { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) has no stealth system", msg.StructId) + return &types.MsgStructStatusResponse{}, types.NewStructCapabilityError(msg.StructId, "stealth") } @@ -62,7 +61,7 @@ func (k msgServer) StructStealthDeactivate(goCtx context.Context, msg *types.Msg if (playerCharge < structure.GetStructType().GetStealthActivateCharge()) { structure.GetOwner().Discharge() structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Struct Type (%d) required a charge of %d for stealth mode, but player (%s) only had %d", structure.GetTypeId(), structure.GetStructType().GetStealthActivateCharge(), structure.GetOwnerId(), playerCharge) + return &types.MsgStructStatusResponse{}, types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetStealthActivateCharge(), playerCharge, "stealth").WithStructType(structure.GetTypeId()) } structure.GetOwner().Discharge() diff --git a/x/structs/keeper/msg_server_substation_allocation_connect.go b/x/structs/keeper/msg_server_substation_allocation_connect.go index f1a3379..9bb14d5 100644 --- a/x/structs/keeper/msg_server_substation_allocation_connect.go +++ b/x/structs/keeper/msg_server_substation_allocation_connect.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -18,26 +17,26 @@ func (k msgServer) SubstationAllocationConnect(goCtx context.Context, msg *types allocation, allocationFound := k.GetAllocation(ctx, msg.AllocationId) if (!allocationFound) { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "allocation (%s) not found", msg.AllocationId) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewObjectNotFoundError("allocation", msg.AllocationId) } substation, substationFound := k.GetSubstation(ctx, msg.DestinationId) if (!substationFound) { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "destination substation (%s) not found", allocation.DestinationId) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewObjectNotFoundError("substation", msg.DestinationId) } player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", msg.Creator) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewPlayerRequiredError(msg.Creator, "substation_allocation_connect") } allocationPlayer, AllocationPlayerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, allocation.Controller)) if (!AllocationPlayerFound) { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", allocation.Controller) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewPlayerRequiredError(allocation.Controller, "substation_allocation_connect") } if (allocationPlayer.Id != player.Id) { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationAllocationConnect, "Trying to manage an Allocation not controlled by player (%s)", player.Id) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewPermissionError("player", player.Id, "allocation", msg.AllocationId, uint64(types.PermissionGrid), "allocation_connect") } @@ -46,22 +45,22 @@ func (k msgServer) SubstationAllocationConnect(goCtx context.Context, msg *types // check that the player has reactor permissions if (!k.PermissionHasOneOf(ctx, substationObjectPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationAllocationConnect, "Calling player (%s) has no Substation Connect Allocation permissions ", player.Id) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewPermissionError("player", player.Id, "substation", substation.Id, uint64(types.PermissionGrid), "allocation_connect") } // check that the account has energy management permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionGrid), "energy_management") } if (allocation.SourceObjectId == substation.Id) { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrAllocationConnectionChangeImpossible, "destination substation (%s) cannot match allocation source (%s)", allocation.DestinationId, allocation.SourceObjectId) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewAllocationError(allocation.SourceObjectId, "source_destination_match").WithDestination(substation.Id) } if substation.Id == allocation.DestinationId { - return &types.MsgSubstationAllocationConnectResponse{}, sdkerrors.Wrapf(types.ErrAllocationConnectionChangeImpossible, "destination substation (%s) cannot change to same destination", allocation.DestinationId) + return &types.MsgSubstationAllocationConnectResponse{}, types.NewAllocationError(allocation.SourceObjectId, "same_destination").WithDestination(allocation.DestinationId) } power := k.GetGridAttribute(ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_power, allocation.Id)) diff --git a/x/structs/keeper/msg_server_substation_allocation_disconnect.go b/x/structs/keeper/msg_server_substation_allocation_disconnect.go index b0ce481..9a50638 100644 --- a/x/structs/keeper/msg_server_substation_allocation_disconnect.go +++ b/x/structs/keeper/msg_server_substation_allocation_disconnect.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -19,25 +18,24 @@ func (k msgServer) SubstationAllocationDisconnect(goCtx context.Context, msg *ty player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgSubstationAllocationDisconnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", msg.Creator) + return &types.MsgSubstationAllocationDisconnectResponse{}, types.NewPlayerRequiredError(msg.Creator, "substation_allocation_disconnect") } allocation, allocationFound := k.GetAllocation(ctx, msg.AllocationId) if (!allocationFound) { - return &types.MsgSubstationAllocationDisconnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "allocation (%s) not found", msg.AllocationId) + return &types.MsgSubstationAllocationDisconnectResponse{}, types.NewObjectNotFoundError("allocation", msg.AllocationId) } allocationPlayer, AllocationPlayerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, allocation.Controller)) if (!AllocationPlayerFound) { - return &types.MsgSubstationAllocationDisconnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", allocation.Controller) + return &types.MsgSubstationAllocationDisconnectResponse{}, types.NewPlayerRequiredError(allocation.Controller, "substation_allocation_disconnect") } if (allocationPlayer.Id != player.Id) { sourceObjectPermissionId := GetObjectPermissionIDBytes(allocation.DestinationId, player.Id) // check that the player has reactor permissions if (!k.PermissionHasOneOf(ctx, sourceObjectPermissionId, types.PermissionGrid)) { // technically both correct. Refactor this to be clearer - return &types.MsgSubstationAllocationDisconnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationAllocationDisconnect, "Calling player (%s) has no Substation Disconnect Allocation permissions ", player.Id) - //return &types.MsgSubstationAllocationDisconnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationAllocationConnect, "Trying to manage an Allocation not controlled by player (%s)", player.Id) + return &types.MsgSubstationAllocationDisconnectResponse{}, types.NewPermissionError("player", player.Id, "substation", allocation.DestinationId, uint64(types.PermissionGrid), "allocation_disconnect") } } @@ -46,7 +44,7 @@ func (k msgServer) SubstationAllocationDisconnect(goCtx context.Context, msg *ty // check that the account has energy management permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationAllocationDisconnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgSubstationAllocationDisconnectResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionGrid), "energy_management") } diff --git a/x/structs/keeper/msg_server_substation_create.go b/x/structs/keeper/msg_server_substation_create.go index 7484d67..71664a9 100644 --- a/x/structs/keeper/msg_server_substation_create.go +++ b/x/structs/keeper/msg_server_substation_create.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -20,7 +19,7 @@ func (k msgServer) SubstationCreate(goCtx context.Context, msg *types.MsgSubstat // Make sure the allocation exists allocation, allocationFound := k.GetAllocation(ctx, msg.AllocationId) if (!allocationFound) { - return &types.MsgSubstationCreateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "allocation (%s) not found", msg.AllocationId) + return &types.MsgSubstationCreateResponse{}, types.NewObjectNotFoundError("allocation", msg.AllocationId) } // Check to see if ths calling address is a player and if it relates to the allocation @@ -32,24 +31,24 @@ func (k msgServer) SubstationCreate(goCtx context.Context, msg *types.MsgSubstat allocationPlayerIndex := k.GetPlayerIndexFromAddress(ctx, allocation.Controller) callingPlayerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) - allocationPlayer, AllocationPlayerFound := k.GetPlayerFromIndex(ctx, allocationPlayerIndex) + _, AllocationPlayerFound := k.GetPlayerFromIndex(ctx, allocationPlayerIndex) player := k.UpsertPlayer(ctx, msg.Creator) if (!AllocationPlayerFound) { if (allocation.Controller == msg.Creator){ connectPlayer = true } else { - return &types.MsgSubstationCreateResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationAllocationConnect, "Trying to manage an Allocation (%s) controlled by player (%s), not calling player (%s) ", allocation.Id, allocation.Controller, msg.Creator) + return &types.MsgSubstationCreateResponse{}, types.NewPermissionError("address", msg.Creator, "allocation", allocation.Id, uint64(types.PermissionAssets), "allocation_control") } } else { if (allocationPlayerIndex != callingPlayerIndex) { - return &types.MsgSubstationCreateResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationAllocationConnect, "Trying to manage an Allocation (%s) controlled by player (%s), not calling player (%s) ", allocation.Id, allocationPlayer.Id, player.Id) + return &types.MsgSubstationCreateResponse{}, types.NewPermissionError("player", player.Id, "allocation", allocation.Id, uint64(types.PermissionAssets), "allocation_control") } addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) // check that the account has energy management permissions if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgSubstationCreateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgSubstationCreateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "energy_management") } } diff --git a/x/structs/keeper/msg_server_substation_delete.go b/x/structs/keeper/msg_server_substation_delete.go index b1daeec..0524b0d 100644 --- a/x/structs/keeper/msg_server_substation_delete.go +++ b/x/structs/keeper/msg_server_substation_delete.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -17,21 +16,21 @@ func (k msgServer) SubstationDelete(goCtx context.Context, msg *types.MsgSubstat player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgSubstationDeleteResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", msg.Creator) + return &types.MsgSubstationDeleteResponse{}, types.NewPlayerRequiredError(msg.Creator, "substation_delete") } substationObjectPermissionId := GetObjectPermissionIDBytes(msg.SubstationId, player.Id) // check that the player has reactor permissions if (!k.PermissionHasOneOf(ctx, substationObjectPermissionId, types.PermissionDelete)) { - return &types.MsgSubstationDeleteResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationDelete, "Calling player (%s) has no Substation Delete permissions ", player.Id) + return &types.MsgSubstationDeleteResponse{}, types.NewPermissionError("player", player.Id, "substation", msg.SubstationId, uint64(types.PermissionDelete), "substation_delete") } // check that the account has energy management permissions addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgSubstationDeleteResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgSubstationDeleteResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "energy_management") } diff --git a/x/structs/keeper/msg_server_substation_player_connect.go b/x/structs/keeper/msg_server_substation_player_connect.go index 27cef3e..c2d0e24 100644 --- a/x/structs/keeper/msg_server_substation_player_connect.go +++ b/x/structs/keeper/msg_server_substation_player_connect.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -16,37 +15,37 @@ func (k msgServer) SubstationPlayerConnect(goCtx context.Context, msg *types.Msg player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgSubstationPlayerConnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", msg.Creator) + return &types.MsgSubstationPlayerConnectResponse{}, types.NewPlayerRequiredError(msg.Creator, "substation_player_connect") } targetPlayer, targetPlayerFound := k.GetPlayer(ctx, msg.PlayerId) if (!targetPlayerFound) { - return &types.MsgSubstationPlayerConnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Target player (%s) could be be found", player.Id) + return &types.MsgSubstationPlayerConnectResponse{}, types.NewObjectNotFoundError("player", msg.PlayerId) } substationObjectPermissionId := GetObjectPermissionIDBytes(msg.SubstationId, player.Id) // check that the calling player has substation permissions if (!k.PermissionHasOneOf(ctx, substationObjectPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationPlayerConnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationPlayerConnect, "Calling player (%s) has no Energy Management permissions on Substation (%s) ", player.Id, msg.SubstationId) + return &types.MsgSubstationPlayerConnectResponse{}, types.NewPermissionError("player", player.Id, "substation", msg.SubstationId, uint64(types.PermissionGrid), "player_connect") } if (player.Id != msg.PlayerId) { // check that the calling player has target player permissions playerObjectPermissionId := GetObjectPermissionIDBytes(msg.PlayerId, player.Id) if (!k.PermissionHasOneOf(ctx, playerObjectPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationPlayerConnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationPlayerConnect, "Calling player (%s) has no Energy Management permissions on target player (%s) ", player.Id, msg.PlayerId) + return &types.MsgSubstationPlayerConnectResponse{}, types.NewPermissionError("player", player.Id, "player", msg.PlayerId, uint64(types.PermissionGrid), "player_connect") } } // check that the account has energy management permissions addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if(!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationPlayerConnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgSubstationPlayerConnectResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionGrid), "energy_management") } substation, sourceSubstationFound := k.GetSubstation(ctx, msg.SubstationId) if (!sourceSubstationFound) { - return &types.MsgSubstationPlayerConnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "substation (%s) used for player connection not found", msg.SubstationId) + return &types.MsgSubstationPlayerConnectResponse{}, types.NewObjectNotFoundError("substation", msg.SubstationId) } // connect to new substation diff --git a/x/structs/keeper/msg_server_substation_player_disconnect.go b/x/structs/keeper/msg_server_substation_player_disconnect.go index f240eca..d6ba71c 100644 --- a/x/structs/keeper/msg_server_substation_player_disconnect.go +++ b/x/structs/keeper/msg_server_substation_player_disconnect.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -16,12 +15,12 @@ func (k msgServer) SubstationPlayerDisconnect(goCtx context.Context, msg *types. player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgSubstationPlayerDisconnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", msg.Creator) + return &types.MsgSubstationPlayerDisconnectResponse{}, types.NewPlayerRequiredError(msg.Creator, "substation_player_disconnect") } targetPlayer, targetPlayerFound := k.GetPlayer(ctx, msg.PlayerId) if (!targetPlayerFound) { - return &types.MsgSubstationPlayerDisconnectResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Target player (%s) could be be found", msg.PlayerId) + return &types.MsgSubstationPlayerDisconnectResponse{}, types.NewObjectNotFoundError("player", msg.PlayerId) } // Check if the Calling Player isn't Target Player @@ -36,7 +35,7 @@ func (k msgServer) SubstationPlayerDisconnect(goCtx context.Context, msg *types. if (!k.PermissionHasOneOf(ctx, playerObjectPermissionId, types.PermissionGrid)) { // Calling Player has no authority over this process - return &types.MsgSubstationPlayerDisconnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationPlayerConnect, "Calling player (%s) has no Energy Management permissions on Player (%s) or Substation (%s)", player.Id, targetPlayer.Id, player.SubstationId) + return &types.MsgSubstationPlayerDisconnectResponse{}, types.NewPermissionError("player", player.Id, "player", targetPlayer.Id, uint64(types.PermissionGrid), "player_disconnect") } } } @@ -44,7 +43,7 @@ func (k msgServer) SubstationPlayerDisconnect(goCtx context.Context, msg *types. // check that the account has energy management permissions addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationPlayerDisconnectResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgSubstationPlayerDisconnectResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionGrid), "energy_management") } // connect to new substation diff --git a/x/structs/keeper/msg_server_substation_player_migrate.go b/x/structs/keeper/msg_server_substation_player_migrate.go index c5ebcfb..05dbb94 100644 --- a/x/structs/keeper/msg_server_substation_player_migrate.go +++ b/x/structs/keeper/msg_server_substation_player_migrate.go @@ -3,7 +3,6 @@ package keeper import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -16,24 +15,24 @@ func (k msgServer) SubstationPlayerMigrate(goCtx context.Context, msg *types.Msg player, playerFound := k.GetPlayerFromIndex(ctx, k.GetPlayerIndexFromAddress(ctx, msg.Creator)) if (!playerFound) { - return &types.MsgSubstationPlayerMigrateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not perform substation action with non-player address (%s)", msg.Creator) + return &types.MsgSubstationPlayerMigrateResponse{}, types.NewPlayerRequiredError(msg.Creator, "substation_player_migrate") } substationObjectPermissionId := GetObjectPermissionIDBytes(msg.SubstationId, player.Id) // check that the calling player has substation permissions if (!k.PermissionHasOneOf(ctx, substationObjectPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationPlayerMigrateResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationPlayerConnect, "Calling player (%s) has no Energy Management permissions on Substation (%s)", player.Id, msg.SubstationId) + return &types.MsgSubstationPlayerMigrateResponse{}, types.NewPermissionError("player", player.Id, "substation", msg.SubstationId, uint64(types.PermissionGrid), "player_migrate") } // check that the account has energy management permissions addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) if(!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationPlayerMigrateResponse{}, sdkerrors.Wrapf(types.ErrPermissionManageEnergy, "Calling address (%s) has no Energy Management permissions ", msg.Creator) + return &types.MsgSubstationPlayerMigrateResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionGrid), "energy_management") } substation, sourceSubstationFound := k.GetSubstation(ctx, msg.SubstationId) if (!sourceSubstationFound) { - return &types.MsgSubstationPlayerMigrateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "substation (%s) used for player connection not found", msg.SubstationId) + return &types.MsgSubstationPlayerMigrateResponse{}, types.NewObjectNotFoundError("substation", msg.SubstationId) } @@ -45,13 +44,13 @@ func (k msgServer) SubstationPlayerMigrate(goCtx context.Context, msg *types.Msg // check that the calling player has target player permissions playerObjectPermissionId := GetObjectPermissionIDBytes(targetPlayerId, player.Id) if (!k.PermissionHasOneOf(ctx, playerObjectPermissionId, types.PermissionGrid)) { - return &types.MsgSubstationPlayerMigrateResponse{}, sdkerrors.Wrapf(types.ErrPermissionSubstationPlayerConnect, "Calling player (%s) has no Energy Management permissions on target (%s) ", player.Id, targetPlayerId) + return &types.MsgSubstationPlayerMigrateResponse{}, types.NewPermissionError("player", player.Id, "player", targetPlayerId, uint64(types.PermissionGrid), "player_migrate") } } targetPlayer, targetPlayerFound := k.GetPlayer(ctx, targetPlayerId) if (!targetPlayerFound) { - return &types.MsgSubstationPlayerMigrateResponse{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Target player (%s) could be be found", targetPlayerId) + return &types.MsgSubstationPlayerMigrateResponse{}, types.NewObjectNotFoundError("player", targetPlayerId) } targetPlayers = append(targetPlayers, targetPlayer) } diff --git a/x/structs/keeper/planet_cache.go b/x/structs/keeper/planet_cache.go index 79c5ed4..a1454c1 100644 --- a/x/structs/keeper/planet_cache.go +++ b/x/structs/keeper/planet_cache.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "github.com/nethruster/go-fraction" @@ -623,32 +622,32 @@ func (cache *PlanetCache) IsSuccessful(successRate fraction.Fraction) bool { func (cache *PlanetCache) BuildInitiateReadiness(structure *types.Struct, structType *types.StructType, ambit types.Ambit, ambitSlot uint64) (error) { if structure.GetOwner() != cache.GetOwnerId() { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct owner must match planet ") + return types.NewStructOwnershipError(structure.Id, cache.GetOwnerId(), structure.GetOwner()).WithLocation("planet", cache.GetPlanetId()) } if structType.Type == types.CommandStruct { - return sdkerrors.Wrapf(types.ErrStructAction, "Command Structs can only be built directly in the fleet") + return types.NewStructLocationError(structType.GetId(), ambit.String(), "command_struct_fleet_only") } if cache.GetOwner().GetFleet().IsAway() { - return sdkerrors.Wrapf(types.ErrStructAction, "Structs cannot be built unless Fleet is On Station") + return types.NewFleetStateError(cache.GetOwner().GetFleetId(), "away", "build") } if !cache.GetOwner().GetFleet().HasCommandStruct() { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet (%s) needs a Command Struct before deploy", cache.GetOwner().GetFleetId()) + return types.NewFleetCommandError(cache.GetOwner().GetFleetId(), "no_command_struct") } if cache.GetOwner().GetFleet().GetCommandStruct().IsOffline() { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet (%s) needs an Online Command Struct before deploy", cache.GetOwner().GetFleetId()) + return types.NewFleetCommandError(cache.GetOwner().GetFleetId(), "command_offline") } if (structType.Category != types.ObjectType_planet) { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct Type cannot exist outside a Planet") + return types.NewStructLocationError(structType.GetId(), ambit.String(), "outside_planet") } // Check that the Struct can exist in the specified ambit if types.Ambit_flag[ambit]&structType.PossibleAmbit == 0 { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct cannot be exist in the defined ambit (%s) based on structType (%d) ", ambit, structType.Id) + return types.NewStructLocationError(structType.GetId(), ambit.String(), "invalid_ambit") } var slots uint64 @@ -668,14 +667,14 @@ func (cache *PlanetCache) BuildInitiateReadiness(structure *types.Struct, struct slots = cache.GetPlanet().SpaceSlots slot = cache.GetPlanet().Space[ambitSlot] default: - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The Struct Build was initiated on a non-existent ambit") + return types.NewStructBuildError(structType.GetId(), "planet", cache.GetPlanetId(), "invalid_ambit").WithAmbit(ambit.String()) } if (ambitSlot >= slots) { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The planet (%s) specified doesn't have that slot available to build on", cache.GetPlanetId()) + return types.NewStructBuildError(structType.GetId(), "planet", cache.GetPlanetId(), "slot_unavailable").WithSlot(ambitSlot) } if (slot != "") { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The planet (%s) specified already has a struct on that slot", cache.GetPlanetId()) + return types.NewStructBuildError(structType.GetId(), "planet", cache.GetPlanetId(), "slot_occupied").WithSlot(ambitSlot).WithExistingStruct(slot) } return nil @@ -685,20 +684,20 @@ func (cache *PlanetCache) BuildInitiateReadiness(structure *types.Struct, struct func (cache *PlanetCache) MoveReadiness(structure *StructCache, ambit types.Ambit, ambitSlot uint64) (error) { if structure.GetOwnerId() != cache.GetOwnerId() { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct owner must match planet ") + return types.NewStructOwnershipError(structure.GetStructId(), cache.GetOwnerId(), structure.GetOwnerId()).WithLocation("planet", cache.GetPlanetId()) } if structure.GetStructType().Type == types.CommandStruct { - return sdkerrors.Wrapf(types.ErrStructAction, "Command Structs can only be built directly in the fleet") + return types.NewStructLocationError(structure.GetStructType().GetId(), ambit.String(), "command_struct_fleet_only") } if (structure.GetStructType().Category != types.ObjectType_planet) { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct Type cannot exist outside a Planet" ) + return types.NewStructLocationError(structure.GetStructType().GetId(), ambit.String(), "outside_planet") } // Check that the Struct can exist in the specified ambit if types.Ambit_flag[ambit]&structure.GetStructType().PossibleAmbit == 0 { - return sdkerrors.Wrapf(types.ErrStructAction, "Struct cannot be exist in the defined ambit (%s) based on structType (%d) ", ambit, structure.GetStructType().Id) + return types.NewStructLocationError(structure.GetStructType().GetId(), ambit.String(), "invalid_ambit") } var slots uint64 @@ -718,14 +717,14 @@ func (cache *PlanetCache) MoveReadiness(structure *StructCache, ambit types.Ambi slots = cache.GetPlanet().SpaceSlots slot = cache.GetPlanet().Space[ambitSlot] default: - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The Struct Build was initiated on a non-existent ambit") + return types.NewStructBuildError(structure.GetStructType().GetId(), "planet", cache.GetPlanetId(), "invalid_ambit").WithAmbit(ambit.String()) } if (ambitSlot >= slots) { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The planet (%s) specified doesn't have that slot available to build on", cache.GetPlanetId()) + return types.NewStructBuildError(structure.GetStructType().GetId(), "planet", cache.GetPlanetId(), "slot_unavailable").WithSlot(ambitSlot) } if (slot != "") { - return sdkerrors.Wrapf(types.ErrStructBuildInitiate, "The planet (%s) specified already has a struct on that slot", cache.GetPlanetId()) + return types.NewStructBuildError(structure.GetStructType().GetId(), "planet", cache.GetPlanetId(), "slot_occupied").WithSlot(ambitSlot).WithExistingStruct(slot) } return nil @@ -748,7 +747,7 @@ func (cache *PlanetCache) SetSlot(structure types.Struct) (err error) { case types.Ambit_space: cache.Planet.Space[structure.Slot] = structure.Id default: - err = sdkerrors.Wrapf(types.ErrStructAction, "Struct cannot exist in the defined ambit (%s) ", structure.OperatingAmbit) + err = types.NewStructLocationError(0, structure.OperatingAmbit.String(), "invalid_ambit").WithStruct(structure.Id) } cache.PlanetChanged = true @@ -807,7 +806,7 @@ func (cache *PlanetCache) AttemptComplete() (error) { cache.Commit() return nil } - return sdkerrors.Wrapf(types.ErrPlanetExploration, "New Planet cannot be explored while current planet (%s) has Ore available for mining", cache.GetPlanetId()) + return types.NewPlanetStateError(cache.GetPlanetId(), "has_ore", "explore") } diff --git a/x/structs/keeper/player_cache.go b/x/structs/keeper/player_cache.go index 0cdfeb6..9971bc5 100644 --- a/x/structs/keeper/player_cache.go +++ b/x/structs/keeper/player_cache.go @@ -6,7 +6,6 @@ import ( //"math" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -115,7 +114,7 @@ func (k *Keeper) GetPlayerCacheFromAddress(ctx context.Context, address string) index := k.GetPlayerIndexFromAddress(ctx, address) if (index == 0) { - return PlayerCache{ActiveAddress: address}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Player Account Not Found") + return PlayerCache{ActiveAddress: address}, types.NewAddressValidationError(address, "not_registered") } player, err := k.GetPlayerCacheFromId(ctx, GetObjectID(types.ObjectType_player, index)) @@ -284,7 +283,7 @@ func (cache *PlayerCache) GetPlayer() (types.Player, error) { if (!cache.PlayerLoaded) { found := cache.LoadPlayer() if (!found) { - return types.Player{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Could not load Player object for %s", cache.PlayerId ) + return types.Player{}, types.NewObjectNotFoundError("player", cache.PlayerId) } } @@ -492,7 +491,7 @@ func (cache *PlayerCache) CanBeAdministratedBy(address string, permission types. // Make sure the address calling this has request permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) doesn't have the required permissions ", address) + return types.NewPermissionError("address", address, "", "", uint64(permission), "administrate") } if (cache.GetPrimaryAddress() != address) { @@ -503,7 +502,7 @@ func (cache *PlayerCache) CanBeAdministratedBy(address string, permission types. if (callingPlayer.GetPlayerId() != cache.GetPlayerId()) { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetPlayerId(), callingPlayer.GetPlayerId()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) doesn't have the required permissions on target player (%s)", callingPlayer.GetPlayerId(), cache.GetPlayerId()) + return types.NewPermissionError("player", callingPlayer.GetPlayerId(), "player", cache.GetPlayerId(), uint64(permission), "administrate") } } } @@ -513,7 +512,7 @@ func (cache *PlayerCache) CanBeAdministratedBy(address string, permission types. func (cache *PlayerCache) ReadinessCheck() (error) { if (cache.IsOffline()) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) is offline. Activate it", cache.PlayerId) + return types.NewPlayerPowerError(cache.PlayerId, "offline") } cache.Ready = true return nil diff --git a/x/structs/keeper/provider_cache.go b/x/structs/keeper/provider_cache.go index a9d5e7f..908a654 100644 --- a/x/structs/keeper/provider_cache.go +++ b/x/structs/keeper/provider_cache.go @@ -5,7 +5,6 @@ import ( "structs/x/structs/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "cosmossdk.io/math" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) @@ -185,24 +184,24 @@ func (cache *ProviderCache) GetEarningsPoolLocation() sdk.AccAddress { return au func (cache *ProviderCache) AgreementVerify(capacity uint64, duration uint64) (error) { // min < capacity < max if cache.GetCapacityMinimum() > capacity { - return sdkerrors.Wrapf(types.ErrInvalidParameters, "Capacity (%d) cannot be lower than Minimum Capacity (%d)", capacity, cache.GetCapacityMinimum()) + return types.NewParameterValidationError("capacity", capacity, "below_minimum").WithRange(cache.GetCapacityMinimum(), cache.GetCapacityMaximum()) } if capacity > cache.GetCapacityMaximum() { - return sdkerrors.Wrapf(types.ErrInvalidParameters, "Capacity (%d) cannot be greater than Maximum Capacity (%d)", capacity, cache.GetCapacityMaximum()) + return types.NewParameterValidationError("capacity", capacity, "above_maximum").WithRange(cache.GetCapacityMinimum(), cache.GetCapacityMaximum()) } // min < duration < max if cache.GetDurationMinimum() > duration { - return sdkerrors.Wrapf(types.ErrInvalidParameters, "Duration (%d) cannot be lower than Minimum Duration (%d)", duration, cache.GetDurationMinimum()) + return types.NewParameterValidationError("duration", duration, "below_minimum").WithRange(cache.GetDurationMinimum(), cache.GetDurationMaximum()) } if duration > cache.GetDurationMaximum() { - return sdkerrors.Wrapf(types.ErrInvalidParameters, "Duration (%d) cannot be greater than Maximum Duration (%d)", duration, cache.GetDurationMaximum()) + return types.NewParameterValidationError("duration", duration, "above_maximum").WithRange(cache.GetDurationMinimum(), cache.GetDurationMaximum()) } // Can the Substation support the added capacity substation := cache.K.GetSubstationCacheFromId(cache.Ctx, cache.GetSubstationId()) if capacity > substation.GetAvailableCapacity(){ - return sdkerrors.Wrapf(types.ErrInvalidParameters, "Desired Capacity (%d) is beyond what the Substation (%s) can support (%d) for this Provider (%s)", capacity, substation.GetSubstationId(), substation.GetAvailableCapacity(), cache.GetProviderId()) + return types.NewParameterValidationError("capacity", capacity, "exceeds_available").WithSubstation(substation.GetSubstationId()).WithRange(0, substation.GetAvailableCapacity()) } return nil @@ -231,15 +230,15 @@ func (cache *ProviderCache) CanWithdrawBalance(activePlayer *PlayerCache) (error func (cache *ProviderCache) PermissionCheck(permission types.Permission, activePlayer *PlayerCache) (error) { // Make sure the address calling this has permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(activePlayer.GetActiveAddress()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no (%d) permissions ", activePlayer.GetActiveAddress(), permission) + return types.NewPermissionError("address", activePlayer.GetActiveAddress(), "", "", uint64(permission), "provider_action") } if !activePlayer.HasPlayerAccount() { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no Account", activePlayer.GetActiveAddress()) + return types.NewPlayerRequiredError(activePlayer.GetActiveAddress(), "provider_action") } else { if (activePlayer.GetPlayerId() != cache.GetOwnerId()) { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetProviderId(), activePlayer.GetPlayerId()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) has no (%d) permissions on target provider (%s)", activePlayer.GetPlayerId(), permission, cache.GetProviderId()) + return types.NewPermissionError("player", activePlayer.GetPlayerId(), "provider", cache.GetProviderId(), uint64(permission), "provider_action") } } } @@ -250,19 +249,19 @@ func (cache *ProviderCache) CanOpenAgreement(activePlayer *PlayerCache) (error) if cache.GetAccessPolicy() == types.ProviderAccessPolicy_openMarket { if !activePlayer.HasPlayerAccount() { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no Account", activePlayer.GetActiveAddress()) + return types.NewPlayerRequiredError(activePlayer.GetActiveAddress(), "agreement_open") } } else if cache.GetAccessPolicy() == types.ProviderAccessPolicy_guildMarket { if !cache.K.ProviderGuildAccessAllowed(cache.Ctx, cache.GetProviderId(), activePlayer.GetGuildId()) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) is not a member of an approved guild (%s)", activePlayer.GetPlayerId(), activePlayer.GetGuildId()) + return types.NewProviderAccessError(cache.GetProviderId(), "guild_not_allowed").WithGuild(activePlayer.GetGuildId()).WithPlayer(activePlayer.GetPlayerId()) } } else if cache.GetAccessPolicy() == types.ProviderAccessPolicy_closedMarket { - return sdkerrors.Wrapf(types.ErrPermission, "Provider (%s) is not accepting new Agreements", cache.GetProviderId()) + return types.NewProviderAccessError(cache.GetProviderId(), "closed_market").WithPlayer(activePlayer.GetPlayerId()) } else { - return sdkerrors.Wrapf(types.ErrPermission, "We're not really sure why it's not allowed, but it isn't. Pls tell an adult") + return types.NewProviderAccessError(cache.GetProviderId(), "unknown").WithPlayer(activePlayer.GetPlayerId()) } return nil @@ -320,7 +319,7 @@ func (cache *ProviderCache) GrantGuildsAndCommit(guildIdSet []string) (error) { for _, guildId := range guildIdSet { _, found := cache.K.GetGuild(cache.Ctx, guildId) if !found { - return sdkerrors.Wrapf(types.ErrObjectNotFound, "Guild ID (%s) not found ", guildId) + return types.NewObjectNotFoundError("guild", guildId) } cache.K.ProviderGrantGuild(cache.Ctx, cache.GetProviderId(), guildId) } diff --git a/x/structs/keeper/struct_cache.go b/x/structs/keeper/struct_cache.go index 4144b0f..a0dc89f 100644 --- a/x/structs/keeper/struct_cache.go +++ b/x/structs/keeper/struct_cache.go @@ -4,7 +4,6 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" "github.com/nethruster/go-fraction" @@ -191,7 +190,7 @@ func (k *Keeper) InitiateStruct(ctx context.Context, creatorAddress string, owne structure.LocationId = owner.GetFleetId() default: - return StructCache{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "We're not building these yet") + return StructCache{}, types.NewStructBuildError(structType.GetId(), "", "", "type_unsupported") } @@ -628,22 +627,22 @@ func (cache *StructCache) GridStatusRemoveReady() { func (cache *StructCache) ActivationReadinessCheck() (err error) { // Check Struct is Built if !cache.IsBuilt(){ - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) isn't finished being built yet", cache.StructId) + return types.NewStructStateError(cache.StructId, "building", "built", "activation") } // Check Struct is Online if cache.IsOnline(){ - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) is already online", cache.StructId) + return types.NewStructStateError(cache.StructId, "online", "offline", "activation") } // Check Player is Online if cache.GetOwner().IsOffline() { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) is offline due to power", cache.GetOwnerId()) + return types.NewPlayerPowerError(cache.GetOwnerId(), "offline") } // Check Player Capacity if (!cache.GetOwner().CanSupportLoadAddition(cache.GetStructType().GetPassiveDraw())) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) cannot handle the new load requirements", cache.GetOwnerId()) + return types.NewPlayerPowerError(cache.GetOwnerId(), "capacity_exceeded").WithCapacity(cache.GetStructType().GetPassiveDraw(), cache.GetOwner().GetAvailableCapacity()) } return @@ -737,10 +736,10 @@ func (cache *StructCache) GoOffline() { func (cache *StructCache) ReadinessCheck() (error) { if (cache.IsOffline()) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) is offline. Activate it", cache.StructId) + return types.NewStructStateError(cache.StructId, "offline", "online", "readiness_check") } else { if (cache.GetOwner().IsOffline()) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) is offline due to power", cache.GetOwnerId()) + return types.NewPlayerPowerError(cache.GetOwnerId(), "offline") } } @@ -774,7 +773,7 @@ func (cache *StructCache) CanBePlayedBy(address string) (error) { // Make sure the address calling this has Play permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionPlay)) { - return sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling address (%s) has no play permissions ", address) + return types.NewPermissionError("address", address, "", "", uint64(types.PermissionPlay), "play") } callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) @@ -783,7 +782,7 @@ func (cache *StructCache) CanBePlayedBy(address string) (error) { } if (callingPlayer.PlayerId != cache.GetOwnerId()) { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionPlay)) { - return sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling account (%s) has no play permissions on target player (%s)", callingPlayer.PlayerId, cache.GetOwnerId()) + return types.NewPermissionError("player", callingPlayer.PlayerId, "player", cache.GetOwnerId(), uint64(types.PermissionPlay), "play") } } @@ -792,9 +791,9 @@ func (cache *StructCache) CanBePlayedBy(address string) (error) { func (cache *StructCache) CanBeHashedBy(address string) (error) { - // Make sure the address calling this has Play permissions + // Make sure the address calling this has Hash permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionHash)) { - return sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling address (%s) has no hashing permissions ", address) + return types.NewPermissionError("address", address, "", "", uint64(types.PermissionHash), "hash") } callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) @@ -803,7 +802,7 @@ func (cache *StructCache) CanBeHashedBy(address string) (error) { } if (callingPlayer.PlayerId != cache.GetOwnerId()) { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionHash)) { - return sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling account (%s) has no hashing permissions on target player (%s)", callingPlayer.PlayerId, cache.GetOwnerId()) + return types.NewPermissionError("player", callingPlayer.PlayerId, "player", cache.GetOwnerId(), uint64(types.PermissionHash), "hash") } } @@ -815,19 +814,19 @@ func (cache *StructCache) CanBeHashedBy(address string) (error) { func (cache *StructCache) CanOreMinePlanet() (error) { if (!cache.GetStructType().HasOreMiningSystem()) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) has no mining system", cache.StructId) + return types.NewStructCapabilityError(cache.StructId, "mining") } if (cache.GetBlockStartOreMine() == 0) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) not mining", cache.StructId) + return types.NewStructStateError(cache.StructId, "not_mining", "mining", "ore_mine") } if (cache.GetPlanet().IsComplete()) { - return sdkerrors.Wrapf(types.ErrStructMine, "Planet (%s) is already complete. Move on bud, no work to be done here", cache.GetPlanet().GetPlanetId()) + return types.NewPlanetStateError(cache.GetPlanet().GetPlanetId(), "complete", "mine") } if (cache.GetPlanet().IsEmptyOfOre()) { - return sdkerrors.Wrapf(types.ErrStructMine, "Planet (%s) is empty, nothing to mine", cache.GetPlanet().GetPlanetId()) + return types.NewPlanetStateError(cache.GetPlanet().GetPlanetId(), "empty", "mine") } return nil @@ -845,15 +844,15 @@ func (cache *StructCache) OreMinePlanet() { func (cache *StructCache) CanOreRefine() (error) { if (!cache.GetStructType().HasOreRefiningSystem()) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) has no refining system", cache.StructId) + return types.NewStructCapabilityError(cache.StructId, "refining") } if (cache.GetBlockStartOreRefine() == 0) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) not mining", cache.StructId) + return types.NewStructStateError(cache.StructId, "not_refining", "refining", "ore_refine") } if (!cache.GetOwner().HasStoredOre()) { - return sdkerrors.Wrapf(types.ErrStructMine, "Player (%s) has no Ore to refine. Move on bud, no work to be done here", cache.GetOwner().PlayerId) + return types.NewPlayerAffordabilityError(cache.GetOwner().PlayerId, "refine", "ore") } return nil @@ -871,17 +870,17 @@ func (cache *StructCache) OreRefine() { func (cache *StructCache) CanAttack(targetStruct *StructCache, weaponSystem types.TechWeaponSystem) (err error) { if (targetStruct.IsDestroyed()) { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is already destroyed", targetStruct.StructId) + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "destroyed") } else { if (!cache.GetStructType().CanTargetAmbit(weaponSystem, cache.GetOperatingAmbit(), targetStruct.GetOperatingAmbit())) { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) cannot be hit from Attacker Struct (%s) using this weapon system %s", targetStruct.StructId, cache.StructId, weaponSystem) + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "out_of_range").WithAmbits(cache.GetOperatingAmbit().String(), targetStruct.GetOperatingAmbit().String()) } else { // Not MVP CanBlockTargeting always returns false if ((!cache.GetStructType().GetWeaponBlockable(weaponSystem)) && (targetStruct.GetStructType().CanBlockTargeting())) { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) currently blocking Attacker Struct (%s)", targetStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "blocked") } else { if (targetStruct.IsHidden() && (targetStruct.GetOperatingAmbit() != cache.GetOperatingAmbit())) { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is current hidden from Attacker Struct (%s)", targetStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "hidden") } } } @@ -894,7 +893,7 @@ func (cache *StructCache) CanAttack(targetStruct *StructCache, weaponSystem type if (cache.GetPlanet().GetLocationListStart() == targetStruct.GetLocationId()) { // The enemy fleet is here } else { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Planetary Attacker Struct (%s)", targetStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") } case types.ObjectType_fleet: @@ -905,7 +904,7 @@ func (cache *StructCache) CanAttack(targetStruct *StructCache, weaponSystem type // The Fleet is on station, and the enemy is reachable // Proceed with the intended action for the Fleet attacking the target } else { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by from the Struct (%s) on Planet", targetStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") } // Or is the Fleet out raiding another planet? } else { @@ -918,11 +917,11 @@ func (cache *StructCache) CanAttack(targetStruct *StructCache, weaponSystem type // The target is to either side of the Fleet // Proceed with the intended action for the Fleet attacking the target } else { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Fleet Attacker Struct (%s)", targetStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") } } default: - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Attacker Struct (%s). Should tell an adult about this one", targetStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") } } return @@ -933,11 +932,11 @@ func (cache *StructCache) CanCounterAttack(attackerStruct *StructCache) (err err if (attackerStruct.IsDestroyed() || cache.IsDestroyed()) { cache.K.logger.Info("Counter Struct or Attacker Struct is already destroyed", "counterStruct", cache.StructId, "target", attackerStruct.StructId) - err = sdkerrors.Wrapf(types.ErrStructAction, "Counter Struct (%s) or Attacker Struct (%s) is already destroyed", cache.StructId, attackerStruct.StructId) + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "destroyed").AsCounter() } else { if (!cache.GetStructType().CanCounterTargetAmbit(cache.GetOperatingAmbit(), attackerStruct.GetOperatingAmbit())) { cache.K.logger.Info("Attacker Struct cannot be hit from Counter Struct using this weapon system", "target", attackerStruct.StructId, "counterStruct", cache.StructId) - err = sdkerrors.Wrapf(types.ErrStructAction, "Attacker Struct (%s) cannot be hit from Counter Struct (%s) using this weapon system", attackerStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "out_of_range").AsCounter().WithAmbits(cache.GetOperatingAmbit().String(), attackerStruct.GetOperatingAmbit().String()) } } @@ -948,7 +947,7 @@ func (cache *StructCache) CanCounterAttack(attackerStruct *StructCache) (err err if (cache.GetPlanet().GetLocationListStart() == attackerStruct.GetLocationId()) { // The enemy fleet is here } else { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Planetary Counter-Attacker Struct (%s)", attackerStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() } case types.ObjectType_fleet: @@ -959,7 +958,7 @@ func (cache *StructCache) CanCounterAttack(attackerStruct *StructCache) (err err // The Fleet is on station, and the enemy is reachable // Proceed with the intended action for the Fleet attacking the target } else { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by from the Counter-Attacker Struct (%s) on Planet", attackerStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() } // Or is the Fleet out raiding another planet? } else { @@ -972,11 +971,11 @@ func (cache *StructCache) CanCounterAttack(attackerStruct *StructCache) (err err // The target is to either side of the Fleet // Proceed with the intended action for the Fleet attacking the target } else { - err = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Fleet Counter-Attacker Struct (%s)", attackerStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() } } default: - err = sdkerrors.Wrapf(types.ErrStructAction, "Attacker Struct (%s) is unreachable by Counter-Attacker Struct (%s). Should tell an adult about this one", attackerStruct.StructId, cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() } } return @@ -1345,7 +1344,7 @@ func (cache *StructCache) AttemptMove(destinationType types.ObjectType, ambit ty if (!cache.StructureLoaded) { cache.LoadStruct() } if cache.IsOffline() { - return sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct cannot move when offline") + return types.NewStructStateError(cache.StructId, "offline", "online", "move") } switch destinationType { @@ -1360,7 +1359,7 @@ func (cache *StructCache) AttemptMove(destinationType types.ObjectType, ambit ty return err } default: - return sdkerrors.Wrapf(types.ErrObjectNotFound, "We're not building these yet") + return types.NewStructBuildError(cache.GetStructType().GetId(), destinationType.String(), "", "type_unsupported") } switch (cache.Structure.LocationType) { diff --git a/x/structs/keeper/substation_cache.go b/x/structs/keeper/substation_cache.go index 36704de..0597105 100644 --- a/x/structs/keeper/substation_cache.go +++ b/x/structs/keeper/substation_cache.go @@ -4,7 +4,6 @@ import ( "context" //sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "structs/x/structs/types" ) @@ -185,15 +184,15 @@ func (cache *SubstationCache) CanCreateAllocations(activePlayer *PlayerCache) (e func (cache *SubstationCache) PermissionCheck(permission types.Permission, activePlayer *PlayerCache) (error) { // Make sure the address calling this has Play permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(activePlayer.GetActiveAddress()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no (%d) permissions ", activePlayer.GetActiveAddress(), permission) + return types.NewPermissionError("address", activePlayer.GetActiveAddress(), "", "", uint64(permission), "substation_action") } if !activePlayer.HasPlayerAccount() { - return sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no Account", activePlayer.GetActiveAddress()) + return types.NewPlayerRequiredError(activePlayer.GetActiveAddress(), "substation_action") } else { if (activePlayer.GetPlayerId() != cache.GetOwnerId()) { if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetSubstationId(), activePlayer.GetPlayerId()), permission)) { - return sdkerrors.Wrapf(types.ErrPermission, "Calling account (%s) has no (%d) permissions on target substation (%s)", activePlayer.GetPlayerId(), permission, cache.GetSubstationId()) + return types.NewPermissionError("player", activePlayer.GetPlayerId(), "substation", cache.GetSubstationId(), uint64(permission), "substation_action") } } } diff --git a/x/structs/types/errors.go b/x/structs/types/errors.go index fa5cd2d..32f1f31 100644 --- a/x/structs/types/errors.go +++ b/x/structs/types/errors.go @@ -6,88 +6,293 @@ import ( sdkerrors "cosmossdk.io/errors" ) -// x/structs module sentinel errors +// ============================================================================= +// Structured Error Sentinel Codes +// ============================================================================= +// Code Range Allocation: +// 1000-1049: Core/System Errors +// 1050-1099: Object Not Found Errors +// 1100-1149: Permission Errors +// 1150-1199: Player State Errors +// 1200-1249: Player Power/Capacity Errors +// 1250-1299: Struct State/Capability Errors +// 1300-1349: Struct Action Errors +// 1350-1399: Struct Build Errors +// 1400-1449: Combat Errors +// 1450-1499: Fleet Errors +// 1500-1549: Guild Errors +// 1550-1599: Allocation Errors +// 1600-1649: Reactor Errors +// 1650-1699: Planet Errors +// 1700-1749: Provider/Agreement Errors +// 1750-1799: Address Errors +// 1800-1849: Work/Hash Errors +// 1900-1999: IBC/Packet Errors +// ============================================================================= + +// ----------------------------------------------------------------------------- +// Core/System Errors (1000-1049) +// ----------------------------------------------------------------------------- var ( - ErrInvalidSigner = sdkerrors.Register(ModuleName, 1100, "expected gov account as only signer for proposal message") - ErrSample = sdkerrors.Register(ModuleName, 1101, "sample error") - ErrInvalidPacketTimeout = sdkerrors.Register(ModuleName, 1500, "invalid packet timeout") - ErrInvalidVersion = sdkerrors.Register(ModuleName, 1501, "invalid version") + ErrInvalidSigner = sdkerrors.Register(ModuleName, 1001, "expected gov account as only signer for proposal message") + ErrInvalidParameters = sdkerrors.Register(ModuleName, 1002, "invalid message parameters") + ErrSample = sdkerrors.Register(ModuleName, 1003, "sample error") ) - +// ----------------------------------------------------------------------------- +// Object Not Found Errors (1050-1099) +// ----------------------------------------------------------------------------- var ( - ErrGridMalfunction = sdkerrors.Register(ModuleName, 1800, "Grid malfunction") - ErrInsufficientCharge = sdkerrors.Register(ModuleName, 1801, "Insufficient Charge for Action") - ErrPlayerHalted = sdkerrors.Register(ModuleName, 1802, "Player is currently Halted, must be Resumed before more actions") - ErrInvalidParameters = sdkerrors.Register(ModuleName, 1803, "Invalid Message Details") - - ErrObjectNotFound = sdkerrors.Register(ModuleName, 1900, "object not found") - - - ErrAllocationSourceType = sdkerrors.Register(ModuleName, 1511, "invalid source type") - ErrAllocationSourceTypeMismatch = sdkerrors.Register(ModuleName, 1512, "source type mismatch") - ErrAllocationSourceNotOnline = sdkerrors.Register(ModuleName, 1514, "source not online") - ErrAllocationConnectionChangeImpossible = sdkerrors.Register(ModuleName, 1515, "allocation connection change attempted is impossible") - ErrAllocationSet = sdkerrors.Register(ModuleName, 1516, "allocation could not be updated") - ErrAllocationAppend = sdkerrors.Register(ModuleName, 1517, "allocation could not be created") + ErrObjectNotFound = sdkerrors.Register(ModuleName, 1050, "object not found") + ErrPlayerNotFound = sdkerrors.Register(ModuleName, 1051, "player not found") + ErrStructNotFound = sdkerrors.Register(ModuleName, 1052, "struct not found") + ErrStructTypeNotFound = sdkerrors.Register(ModuleName, 1053, "struct type not found") + ErrGuildNotFound = sdkerrors.Register(ModuleName, 1054, "guild not found") + ErrPlanetNotFound = sdkerrors.Register(ModuleName, 1055, "planet not found") + ErrFleetNotFound = sdkerrors.Register(ModuleName, 1056, "fleet not found") + ErrSubstationNotFound = sdkerrors.Register(ModuleName, 1057, "substation not found") + ErrAllocationNotFound = sdkerrors.Register(ModuleName, 1058, "allocation not found") + ErrReactorNotFound = sdkerrors.Register(ModuleName, 1059, "reactor not found") + ErrInfusionNotFound = sdkerrors.Register(ModuleName, 1060, "infusion not found") + ErrProviderNotFound = sdkerrors.Register(ModuleName, 1061, "provider not found") + ErrAgreementNotFound = sdkerrors.Register(ModuleName, 1062, "agreement not found") +) - ErrPlayerRequired = sdkerrors.Register(ModuleName, 1530, "player account required for this action") - ErrPlayerUpdate = sdkerrors.Register(ModuleName, 1532, "player account update failed") +// ----------------------------------------------------------------------------- +// Permission Errors (1100-1149) +// ----------------------------------------------------------------------------- +var ( + ErrPermission = sdkerrors.Register(ModuleName, 1100, "permission denied") + ErrPermissionPlay = sdkerrors.Register(ModuleName, 1101, "play permission denied") + ErrPermissionAssets = sdkerrors.Register(ModuleName, 1102, "asset permission denied") + ErrPermissionEnergy = sdkerrors.Register(ModuleName, 1103, "energy permission denied") + ErrPermissionGuild = sdkerrors.Register(ModuleName, 1104, "guild permission denied") + ErrPermissionSubstation = sdkerrors.Register(ModuleName, 1105, "substation permission denied") + ErrPermissionAllocation = sdkerrors.Register(ModuleName, 1106, "allocation permission denied") + ErrPermissionPlayer = sdkerrors.Register(ModuleName, 1107, "player permission denied") + ErrPermissionAddress = sdkerrors.Register(ModuleName, 1108, "address permission denied") + ErrPermissionAssociation = sdkerrors.Register(ModuleName, 1109, "address association permission denied") + ErrPermissionRevoke = sdkerrors.Register(ModuleName, 1110, "address revocation permission denied") + ErrPermissionManageAssets = sdkerrors.Register(ModuleName, 1111, "asset management permission denied") + ErrPermissionManagePlayer = sdkerrors.Register(ModuleName, 1112, "player management permission denied") + ErrPermissionManageGuild = sdkerrors.Register(ModuleName, 1113, "guild management permission denied") + ErrPermissionManageEnergy = sdkerrors.Register(ModuleName, 1114, "energy management permission denied") + ErrPermissionGuildRegister = sdkerrors.Register(ModuleName, 1115, "guild registration permission denied") + ErrPermissionSubstationDelete = sdkerrors.Register(ModuleName, 1116, "substation deletion permission denied") + ErrPermissionSubstationAllocationConnect = sdkerrors.Register(ModuleName, 1117, "substation allocation connection permission denied") + ErrPermissionSubstationAllocationDisconnect = sdkerrors.Register(ModuleName, 1118, "substation allocation disconnection permission denied") + ErrPermissionSubstationPlayerConnect = sdkerrors.Register(ModuleName, 1119, "substation player connection permission denied") + ErrPermissionSubstationPlayerDisconnect = sdkerrors.Register(ModuleName, 1120, "substation player disconnection permission denied") + ErrPermissionPlayerPlay = sdkerrors.Register(ModuleName, 1121, "player play permission denied") + ErrPermissionPlayerSquad = sdkerrors.Register(ModuleName, 1122, "player squad permission denied") +) - ErrSubstationHasNoPowerSource = sdkerrors.Register(ModuleName, 1551, "substation has no power source") +// ----------------------------------------------------------------------------- +// Player State Errors (1150-1199) +// ----------------------------------------------------------------------------- +var ( + ErrPlayerRequired = sdkerrors.Register(ModuleName, 1150, "player account required") + ErrPlayerHalted = sdkerrors.Register(ModuleName, 1151, "player is halted") + ErrPlayerOffline = sdkerrors.Register(ModuleName, 1152, "player is offline") + ErrPlayerUpdate = sdkerrors.Register(ModuleName, 1153, "player update failed") +) - ErrReactorActivation = sdkerrors.Register(ModuleName, 1571, "reactor activation failure") - ErrReactorRequired = sdkerrors.Register(ModuleName, 1573, "reactor account required for this action") +// ----------------------------------------------------------------------------- +// Player Power/Capacity Errors (1200-1249) +// ----------------------------------------------------------------------------- +var ( + ErrInsufficientCharge = sdkerrors.Register(ModuleName, 1200, "insufficient charge for action") + ErrPlayerPowerOffline = sdkerrors.Register(ModuleName, 1201, "player offline due to power") + ErrPlayerCapacityExceeded = sdkerrors.Register(ModuleName, 1202, "player capacity exceeded") + ErrPlayerAffordability = sdkerrors.Register(ModuleName, 1203, "player cannot afford action") +) - ErrGuildUpdate = sdkerrors.Register(ModuleName, 1581, "guild could not be updated") - ErrInvalidGuildJoinBypassLevel = sdkerrors.Register(ModuleName, 1582, "invalid guild join bypass level") - ErrGuildMembershipApplication = sdkerrors.Register(ModuleName, 1583, "invalid application process") +// ----------------------------------------------------------------------------- +// Struct State/Capability Errors (1250-1299) +// ----------------------------------------------------------------------------- +var ( + ErrStructState = sdkerrors.Register(ModuleName, 1250, "invalid struct state") + ErrStructOffline = sdkerrors.Register(ModuleName, 1251, "struct is offline") + ErrStructBuilding = sdkerrors.Register(ModuleName, 1252, "struct is still building") + ErrStructAlreadyOnline = sdkerrors.Register(ModuleName, 1253, "struct is already online") + ErrStructAlreadyOffline = sdkerrors.Register(ModuleName, 1254, "struct is already offline") + ErrStructCapability = sdkerrors.Register(ModuleName, 1260, "struct missing capability") + ErrStructNoMiningSystem = sdkerrors.Register(ModuleName, 1261, "struct has no mining system") + ErrStructNoRefiningSystem = sdkerrors.Register(ModuleName, 1262, "struct has no refining system") + ErrStructNoStealthSystem = sdkerrors.Register(ModuleName, 1263, "struct has no stealth system") + ErrStructNoGenerationSystem = sdkerrors.Register(ModuleName, 1264, "struct has no generation system") + ErrStructInfuse = sdkerrors.Register(ModuleName, 1270, "struct fuel infusion failed") +) +// ----------------------------------------------------------------------------- +// Struct Action Errors (1300-1349) +// ----------------------------------------------------------------------------- +var ( + ErrStructAction = sdkerrors.Register(ModuleName, 1300, "struct action failed") + ErrStructOwnership = sdkerrors.Register(ModuleName, 1301, "struct ownership mismatch") + ErrStructLocation = sdkerrors.Register(ModuleName, 1302, "invalid struct location") + ErrStructAmbit = sdkerrors.Register(ModuleName, 1303, "invalid struct ambit") + ErrStructActivate = sdkerrors.Register(ModuleName, 1304, "struct activation failed") + ErrStructMine = sdkerrors.Register(ModuleName, 1305, "struct mining failed") + ErrStructRefine = sdkerrors.Register(ModuleName, 1306, "struct refining failed") + ErrStructMineActivate = sdkerrors.Register(ModuleName, 1307, "struct mining activation failed") + ErrStructMineDeactivate = sdkerrors.Register(ModuleName, 1308, "struct mining deactivation failed") + ErrStructRefineActivate = sdkerrors.Register(ModuleName, 1309, "struct refining activation failed") + ErrStructRefineDeactivate = sdkerrors.Register(ModuleName, 1310, "struct refining deactivation failed") + ErrStructAllocationCreate = sdkerrors.Register(ModuleName, 1311, "struct allocation creation failed") +) - ErrPermission = sdkerrors.Register(ModuleName, 1607, "Permission error") - ErrPermissionAssociation = sdkerrors.Register(ModuleName, 1600, "Permission error during address association") - ErrPermissionRevoke = sdkerrors.Register(ModuleName, 1601, "Permission error during address revocation") - ErrPermissionPlay = sdkerrors.Register(ModuleName, 1602, "Permission error during play action") - ErrPermissionManageAssets = sdkerrors.Register(ModuleName, 1603, "Permission error during asset management action") - ErrPermissionManagePlayer = sdkerrors.Register(ModuleName, 1604, "Permission error during player management action") - ErrPermissionManageGuild = sdkerrors.Register(ModuleName, 1605, "Permission error during guild management action") - ErrPermissionManageEnergy = sdkerrors.Register(ModuleName, 1606, "Permission error during asset management action") +// ----------------------------------------------------------------------------- +// Struct Build Errors (1350-1399) +// ----------------------------------------------------------------------------- +var ( + ErrStructBuild = sdkerrors.Register(ModuleName, 1350, "struct build failed") + ErrStructBuildInitiate = sdkerrors.Register(ModuleName, 1351, "struct build initiation failed") + ErrStructBuildComplete = sdkerrors.Register(ModuleName, 1352, "struct build completion failed") + ErrStructSlotOccupied = sdkerrors.Register(ModuleName, 1353, "struct slot already occupied") + ErrStructSlotUnavailable = sdkerrors.Register(ModuleName, 1354, "struct slot unavailable") + ErrStructTypeUnsupported = sdkerrors.Register(ModuleName, 1355, "struct type not yet supported") + ErrStructCommandExists = sdkerrors.Register(ModuleName, 1356, "command struct already exists") +) - ErrPermissionGuildRegister = sdkerrors.Register(ModuleName, 1611, "Guild permission error during player register") +// ----------------------------------------------------------------------------- +// Combat Errors (1400-1449) +// ----------------------------------------------------------------------------- +var ( + ErrCombatTargeting = sdkerrors.Register(ModuleName, 1400, "combat targeting failed") + ErrTargetDestroyed = sdkerrors.Register(ModuleName, 1401, "target is destroyed") + ErrTargetUnreachable = sdkerrors.Register(ModuleName, 1402, "target is unreachable") + ErrTargetBlocked = sdkerrors.Register(ModuleName, 1403, "target is blocked") + ErrTargetHidden = sdkerrors.Register(ModuleName, 1404, "target is hidden") + ErrTargetOutOfRange = sdkerrors.Register(ModuleName, 1405, "target is out of range") + ErrIncompleteTargeting = sdkerrors.Register(ModuleName, 1406, "incomplete targeting") + ErrDefenseRange = sdkerrors.Register(ModuleName, 1407, "defender out of range") +) - ErrPermissionAllocation = sdkerrors.Register(ModuleName, 1630, "Allocation not owned by calling player") +// ----------------------------------------------------------------------------- +// Fleet Errors (1450-1499) +// ----------------------------------------------------------------------------- +var ( + ErrFleetCommand = sdkerrors.Register(ModuleName, 1450, "fleet command error") + ErrFleetNoCommandStruct = sdkerrors.Register(ModuleName, 1451, "fleet has no command struct") + ErrFleetCommandOffline = sdkerrors.Register(ModuleName, 1452, "fleet command struct is offline") + ErrFleetState = sdkerrors.Register(ModuleName, 1453, "invalid fleet state") + ErrFleetNotOnStation = sdkerrors.Register(ModuleName, 1454, "fleet not on station") + ErrFleetRaidQueue = sdkerrors.Register(ModuleName, 1455, "fleet raid queue error") +) - ErrPermissionSubstationDelete = sdkerrors.Register(ModuleName, 1632, "Substation permission error during allocation creation") - ErrPermissionSubstationAllocationConnect = sdkerrors.Register(ModuleName, 1633, "Substation permission error during allocation connection") - ErrPermissionSubstationAllocationDisconnect = sdkerrors.Register(ModuleName, 1634, "Substation permission error during allocation disconnection") - ErrPermissionSubstationPlayerConnect = sdkerrors.Register(ModuleName, 1635, "Substation permission error during player connection") - ErrPermissionSubstationPlayerDisconnect = sdkerrors.Register(ModuleName, 1636, "Substation permission error during player disconnection") +// ----------------------------------------------------------------------------- +// Guild Errors (1500-1549) +// ----------------------------------------------------------------------------- +var ( + ErrGuildUpdate = sdkerrors.Register(ModuleName, 1500, "guild update failed") + ErrGuildMembership = sdkerrors.Register(ModuleName, 1501, "guild membership error") + ErrGuildMembershipApplication = sdkerrors.Register(ModuleName, 1502, "guild membership application error") + ErrGuildJoinType = sdkerrors.Register(ModuleName, 1503, "invalid guild join type") + ErrGuildAlreadyMember = sdkerrors.Register(ModuleName, 1504, "player already guild member") + ErrGuildNotMember = sdkerrors.Register(ModuleName, 1505, "player not guild member") + ErrGuildOwnerKick = sdkerrors.Register(ModuleName, 1506, "cannot kick guild owner") + ErrGuildMinimumNotMet = sdkerrors.Register(ModuleName, 1507, "guild join minimum not met") + ErrInvalidGuildJoinBypassLevel = sdkerrors.Register(ModuleName, 1508, "invalid guild join bypass level") +) - ErrPermissionPlayerPlay = sdkerrors.Register(ModuleName, 1641, "Player cannot play other players yet (no sudo yo)") - ErrPermissionPlayerSquad = sdkerrors.Register(ModuleName, 1642, "Player cannot update other players squad status") +// ----------------------------------------------------------------------------- +// Allocation Errors (1550-1599) +// ----------------------------------------------------------------------------- +var ( + ErrAllocationCreate = sdkerrors.Register(ModuleName, 1550, "allocation creation failed") + ErrAllocationUpdate = sdkerrors.Register(ModuleName, 1551, "allocation update failed") + ErrAllocationAppend = sdkerrors.Register(ModuleName, 1552, "allocation append failed") + ErrAllocationSet = sdkerrors.Register(ModuleName, 1553, "allocation set failed") + ErrAllocationCapacity = sdkerrors.Register(ModuleName, 1554, "allocation capacity exceeded") + ErrAllocationAutomatedConflict = sdkerrors.Register(ModuleName, 1555, "automated allocation conflict") + ErrAllocationImmutableField = sdkerrors.Register(ModuleName, 1556, "allocation field is immutable") + ErrAllocationConnectionChangeImpossible = sdkerrors.Register(ModuleName, 1557, "allocation connection change impossible") + ErrAllocationSourceType = sdkerrors.Register(ModuleName, 1558, "invalid allocation source type") + ErrAllocationSourceTypeMismatch = sdkerrors.Register(ModuleName, 1559, "allocation source type mismatch") + ErrAllocationSourceNotOnline = sdkerrors.Register(ModuleName, 1560, "allocation source not online") + ErrSubstationHasNoPowerSource = sdkerrors.Register(ModuleName, 1561, "substation has no power source") +) - ErrPlanetExploration = sdkerrors.Register(ModuleName, 1711, "planet exploration failed") +// ----------------------------------------------------------------------------- +// Reactor Errors (1600-1649) +// ----------------------------------------------------------------------------- +var ( + ErrReactor = sdkerrors.Register(ModuleName, 1600, "reactor error") + ErrReactorRequired = sdkerrors.Register(ModuleName, 1601, "reactor required") + ErrReactorActivation = sdkerrors.Register(ModuleName, 1602, "reactor activation failed") + ErrReactorInfusion = sdkerrors.Register(ModuleName, 1603, "reactor infusion failed") + ErrReactorDefusion = sdkerrors.Register(ModuleName, 1604, "reactor defusion failed") + ErrReactorBeginMigration = sdkerrors.Register(ModuleName, 1605, "reactor migration failed") + ErrReactorCancelDefusion = sdkerrors.Register(ModuleName, 1606, "reactor cancel defusion failed") + ErrReactorInvalidAddress = sdkerrors.Register(ModuleName, 1607, "invalid reactor address") + ErrReactorInvalidAmount = sdkerrors.Register(ModuleName, 1608, "invalid reactor amount") + ErrReactorInvalidDenom = sdkerrors.Register(ModuleName, 1609, "invalid reactor denomination") + ErrReactorInvalidHeight = sdkerrors.Register(ModuleName, 1610, "invalid reactor height") + ErrReactorBalanceExceeded = sdkerrors.Register(ModuleName, 1611, "reactor balance exceeded") + ErrReactorAlreadyProcessed = sdkerrors.Register(ModuleName, 1612, "reactor unbonding already processed") +) - ErrReactorInfusion = sdkerrors.Register(ModuleName, 2001, "Reactor Infusion Failed") - ErrReactorDefusion = sdkerrors.Register(ModuleName, 2002, "Reactor Defusion Failed") - ErrReactorBeginMigration = sdkerrors.Register(ModuleName, 2003, "Reactor Beginning Migration Failed") - ErrReactorCancelDefusion = sdkerrors.Register(ModuleName, 2004, "Reactor Canceling Defusion Failed") +// ----------------------------------------------------------------------------- +// Planet Errors (1650-1699) +// ----------------------------------------------------------------------------- +var ( + ErrPlanetState = sdkerrors.Register(ModuleName, 1650, "invalid planet state") + ErrPlanetComplete = sdkerrors.Register(ModuleName, 1651, "planet already complete") + ErrPlanetEmpty = sdkerrors.Register(ModuleName, 1652, "planet is empty") + ErrPlanetHasOre = sdkerrors.Register(ModuleName, 1653, "planet still has ore") + ErrPlanetExploration = sdkerrors.Register(ModuleName, 1654, "planet exploration failed") +) - ErrStructBuildInitiate = sdkerrors.Register(ModuleName, 1721, "Struct build initialization failed") - ErrStructBuildComplete = sdkerrors.Register(ModuleName, 1722, "Struct build completion failed") - ErrStructMineActivate = sdkerrors.Register(ModuleName, 1723, "Struct mining system activation failed") - ErrStructMineDeactivate = sdkerrors.Register(ModuleName, 1724, "Struct mining system deactivation failed") - ErrStructMine = sdkerrors.Register(ModuleName, 1725, "Struct mining action failed") - ErrStructRefineActivate = sdkerrors.Register(ModuleName, 1726, "Struct refining system activation failed") - ErrStructRefineDeactivate = sdkerrors.Register(ModuleName, 1727, "Struct refining system deactivation failed") - ErrStructRefine = sdkerrors.Register(ModuleName, 1728, "Struct refining action failed") - ErrStructInfuse = sdkerrors.Register(ModuleName, 1729, "Struct infusion action failed") - ErrStructAllocationCreate = sdkerrors.Register(ModuleName, 1730, "Allocation of power from struct failed") - ErrStructActivate = sdkerrors.Register(ModuleName, 1731, "Struct activation failed") +// ----------------------------------------------------------------------------- +// Provider/Agreement Errors (1700-1749) +// ----------------------------------------------------------------------------- +var ( + ErrProviderAccess = sdkerrors.Register(ModuleName, 1700, "provider access denied") + ErrProviderMarketClosed = sdkerrors.Register(ModuleName, 1701, "provider market closed") + ErrProviderGuildNotApproved = sdkerrors.Register(ModuleName, 1702, "guild not approved for provider") + ErrParameterValidation = sdkerrors.Register(ModuleName, 1710, "parameter validation failed") + ErrParameterBelowMinimum = sdkerrors.Register(ModuleName, 1711, "parameter below minimum") + ErrParameterAboveMaximum = sdkerrors.Register(ModuleName, 1712, "parameter above maximum") + ErrParameterExceedsCapacity = sdkerrors.Register(ModuleName, 1713, "parameter exceeds available capacity") +) - ErrStructAction = sdkerrors.Register(ModuleName, 1700, "Struct action failed") +// ----------------------------------------------------------------------------- +// Address Errors (1750-1799) +// ----------------------------------------------------------------------------- +var ( + ErrAddressValidation = sdkerrors.Register(ModuleName, 1750, "address validation failed") + ErrAddressInvalidFormat = sdkerrors.Register(ModuleName, 1751, "invalid address format") + ErrAddressNotRegistered = sdkerrors.Register(ModuleName, 1752, "address not registered") + ErrAddressWrongPlayer = sdkerrors.Register(ModuleName, 1753, "address belongs to wrong player") + ErrAddressProofMismatch = sdkerrors.Register(ModuleName, 1754, "address proof mismatch") + ErrAddressSignatureInvalid = sdkerrors.Register(ModuleName, 1755, "address signature invalid") + ErrAddressAlreadyRegistered = sdkerrors.Register(ModuleName, 1756, "address already registered") +) +// ----------------------------------------------------------------------------- +// Work/Hash Errors (1800-1849) +// ----------------------------------------------------------------------------- +var ( + ErrWorkFailure = sdkerrors.Register(ModuleName, 1800, "work verification failed") + ErrWorkMineFailure = sdkerrors.Register(ModuleName, 1801, "mining work failed") + ErrWorkRefineFailure = sdkerrors.Register(ModuleName, 1802, "refining work failed") + ErrWorkBuildFailure = sdkerrors.Register(ModuleName, 1803, "build work failed") + ErrWorkRaidFailure = sdkerrors.Register(ModuleName, 1804, "raid work failed") +) - ErrSabotage = sdkerrors.Register(ModuleName, 3800, "Sabotage failed") +// ----------------------------------------------------------------------------- +// Sabotage Errors (1850-1899) +// ----------------------------------------------------------------------------- +var ( + ErrSabotage = sdkerrors.Register(ModuleName, 1850, "sabotage failed") +) +// ----------------------------------------------------------------------------- +// IBC/Packet Errors (1900-1999) +// ----------------------------------------------------------------------------- +var ( + ErrInvalidPacketTimeout = sdkerrors.Register(ModuleName, 1900, "invalid packet timeout") + ErrInvalidVersion = sdkerrors.Register(ModuleName, 1901, "invalid version") ) + diff --git a/x/structs/types/errors_structured.go b/x/structs/types/errors_structured.go new file mode 100644 index 0000000..09b1748 --- /dev/null +++ b/x/structs/types/errors_structured.go @@ -0,0 +1,1426 @@ +package types + +import ( + "fmt" +) + +// ============================================================================= +// Structured Error Interface +// ============================================================================= + +// StructuredError provides programmatic error details for client handling, +// structured logging, and testing assertions. +type StructuredError interface { + error + Code() uint32 + LogFields() []interface{} + Unwrap() error +} + +// ============================================================================= +// 1. ObjectNotFoundError +// ============================================================================= + +// ObjectNotFoundError indicates a requested object does not exist. +type ObjectNotFoundError struct { + ObjectType string // "player", "struct", "guild", "planet", "fleet", "substation", "allocation", "reactor", "infusion", "provider", "agreement" + ObjectId string + ObjectIndex uint64 // For indexed lookups (optional) + Context string // Additional context (optional) +} + +func NewObjectNotFoundError(objectType, objectId string) *ObjectNotFoundError { + return &ObjectNotFoundError{ + ObjectType: objectType, + ObjectId: objectId, + } +} + +func (e *ObjectNotFoundError) WithIndex(index uint64) *ObjectNotFoundError { + e.ObjectIndex = index + return e +} + +func (e *ObjectNotFoundError) WithContext(ctx string) *ObjectNotFoundError { + e.Context = ctx + return e +} + +func (e *ObjectNotFoundError) Error() string { + if e.Context != "" { + return fmt.Sprintf("%s (%s) not found: %s", e.ObjectType, e.ObjectId, e.Context) + } + return fmt.Sprintf("%s (%s) not found", e.ObjectType, e.ObjectId) +} + +func (e *ObjectNotFoundError) Code() uint32 { return 1050 } + +func (e *ObjectNotFoundError) LogFields() []interface{} { + return []interface{}{ + "error_type", "object_not_found", + "object_type", e.ObjectType, + "object_id", e.ObjectId, + "object_index", e.ObjectIndex, + "context", e.Context, + } +} + +func (e *ObjectNotFoundError) Unwrap() error { return ErrObjectNotFound } + +// ============================================================================= +// 2. InsufficientChargeError +// ============================================================================= + +// InsufficientChargeError indicates a player lacks charge for an action. +type InsufficientChargeError struct { + PlayerId string + Required uint64 + Available uint64 + Action string // "build", "activate", "attack", "move", "defend", "stealth", "resume" + StructType uint64 // Optional + StructId string // Optional +} + +func NewInsufficientChargeError(playerId string, required, available uint64, action string) *InsufficientChargeError { + return &InsufficientChargeError{ + PlayerId: playerId, + Required: required, + Available: available, + Action: action, + } +} + +func (e *InsufficientChargeError) WithStructType(structType uint64) *InsufficientChargeError { + e.StructType = structType + return e +} + +func (e *InsufficientChargeError) WithStructId(structId string) *InsufficientChargeError { + e.StructId = structId + return e +} + +func (e *InsufficientChargeError) Error() string { + if e.StructType > 0 { + return fmt.Sprintf("struct type (%d) required charge of %d for %s, but player (%s) only had %d", + e.StructType, e.Required, e.Action, e.PlayerId, e.Available) + } + return fmt.Sprintf("action %s required charge of %d, but player (%s) only had %d", + e.Action, e.Required, e.PlayerId, e.Available) +} + +func (e *InsufficientChargeError) Code() uint32 { return 1200 } + +func (e *InsufficientChargeError) LogFields() []interface{} { + return []interface{}{ + "error_type", "insufficient_charge", + "player_id", e.PlayerId, + "required", e.Required, + "available", e.Available, + "action", e.Action, + "struct_type", e.StructType, + "struct_id", e.StructId, + } +} + +func (e *InsufficientChargeError) Unwrap() error { return ErrInsufficientCharge } + +// ============================================================================= +// 3. PermissionError +// ============================================================================= + +// PermissionError indicates permission was denied for an action. +type PermissionError struct { + CallerType string // "address" or "player" + CallerId string + TargetType string // "player", "substation", "guild", "provider", "agreement", "struct" + TargetId string + Permission uint64 + Action string + RequiredLevel uint64 // For grant/set level checks (optional) + GuildId string // For guild market access (optional) + AssociationTargetId string // For player association (optional) +} + +func NewPermissionError(callerType, callerId, targetType, targetId string, permission uint64, action string) *PermissionError { + return &PermissionError{ + CallerType: callerType, + CallerId: callerId, + TargetType: targetType, + TargetId: targetId, + Permission: permission, + Action: action, + } +} + +func (e *PermissionError) WithRequiredLevel(level uint64) *PermissionError { + e.RequiredLevel = level + return e +} + +func (e *PermissionError) WithGuildId(guildId string) *PermissionError { + e.GuildId = guildId + return e +} + +func (e *PermissionError) WithAssociationTarget(targetId string) *PermissionError { + e.AssociationTargetId = targetId + return e +} + +func (e *PermissionError) Error() string { + if e.TargetId != "" { + return fmt.Sprintf("calling %s (%s) has no %s permission on %s (%s)", + e.CallerType, e.CallerId, e.Action, e.TargetType, e.TargetId) + } + return fmt.Sprintf("calling %s (%s) has no %s permission", e.CallerType, e.CallerId, e.Action) +} + +func (e *PermissionError) Code() uint32 { return 1100 } + +func (e *PermissionError) LogFields() []interface{} { + return []interface{}{ + "error_type", "permission_denied", + "caller_type", e.CallerType, + "caller_id", e.CallerId, + "target_type", e.TargetType, + "target_id", e.TargetId, + "permission", e.Permission, + "action", e.Action, + } +} + +func (e *PermissionError) Unwrap() error { return ErrPermission } + +// ============================================================================= +// 4. PlayerPowerError +// ============================================================================= + +// PlayerPowerError indicates a player power/capacity issue. +type PlayerPowerError struct { + PlayerId string + Reason string // "offline", "capacity_exceeded", "load_exceeded" + Required uint64 // For capacity checks (optional) + Available uint64 // For capacity checks (optional) +} + +func NewPlayerPowerError(playerId, reason string) *PlayerPowerError { + return &PlayerPowerError{ + PlayerId: playerId, + Reason: reason, + } +} + +func (e *PlayerPowerError) WithCapacity(required, available uint64) *PlayerPowerError { + e.Required = required + e.Available = available + return e +} + +func (e *PlayerPowerError) Error() string { + switch e.Reason { + case "offline": + return fmt.Sprintf("player (%s) is offline due to power", e.PlayerId) + case "capacity_exceeded": + return fmt.Sprintf("player (%s) cannot handle new load requirements (required: %d, available: %d)", + e.PlayerId, e.Required, e.Available) + default: + return fmt.Sprintf("player (%s) power error: %s", e.PlayerId, e.Reason) + } +} + +func (e *PlayerPowerError) Code() uint32 { return 1201 } + +func (e *PlayerPowerError) LogFields() []interface{} { + return []interface{}{ + "error_type", "player_power", + "player_id", e.PlayerId, + "reason", e.Reason, + "required", e.Required, + "available", e.Available, + } +} + +func (e *PlayerPowerError) Unwrap() error { return ErrPlayerPowerOffline } + +// ============================================================================= +// 5. PlayerAffordabilityError +// ============================================================================= + +// PlayerAffordabilityError indicates a player cannot afford an action. +type PlayerAffordabilityError struct { + PlayerId string + Action string // "mint", "agreement", "increase_duration", "refine" + Required string // Amount/description of what's needed +} + +func NewPlayerAffordabilityError(playerId, action, required string) *PlayerAffordabilityError { + return &PlayerAffordabilityError{ + PlayerId: playerId, + Action: action, + Required: required, + } +} + +func (e *PlayerAffordabilityError) Error() string { + if e.Required != "" { + return fmt.Sprintf("player (%s) cannot afford %s: requires %s", e.PlayerId, e.Action, e.Required) + } + return fmt.Sprintf("player (%s) cannot afford %s", e.PlayerId, e.Action) +} + +func (e *PlayerAffordabilityError) Code() uint32 { return 1203 } + +func (e *PlayerAffordabilityError) LogFields() []interface{} { + return []interface{}{ + "error_type", "player_affordability", + "player_id", e.PlayerId, + "action", e.Action, + "required", e.Required, + } +} + +func (e *PlayerAffordabilityError) Unwrap() error { return ErrPlayerAffordability } + +// ============================================================================= +// 6. StructStateError +// ============================================================================= + +// StructStateError indicates an invalid struct state for an operation. +type StructStateError struct { + StructId string + CurrentState string // "offline", "building", "online", "destroyed" + RequiredState string // "online", "built", "offline" + Action string +} + +func NewStructStateError(structId, currentState, requiredState, action string) *StructStateError { + return &StructStateError{ + StructId: structId, + CurrentState: currentState, + RequiredState: requiredState, + Action: action, + } +} + +func (e *StructStateError) Error() string { + return fmt.Sprintf("struct (%s) is %s but must be %s for %s", + e.StructId, e.CurrentState, e.RequiredState, e.Action) +} + +func (e *StructStateError) Code() uint32 { return 1250 } + +func (e *StructStateError) LogFields() []interface{} { + return []interface{}{ + "error_type", "struct_state", + "struct_id", e.StructId, + "current_state", e.CurrentState, + "required_state", e.RequiredState, + "action", e.Action, + } +} + +func (e *StructStateError) Unwrap() error { return ErrStructState } + +// ============================================================================= +// 7. StructCapabilityError +// ============================================================================= + +// StructCapabilityError indicates a struct lacks a required capability. +type StructCapabilityError struct { + StructId string + Capability string // "mining", "refining", "stealth", "generation", "defense" +} + +func NewStructCapabilityError(structId, capability string) *StructCapabilityError { + return &StructCapabilityError{ + StructId: structId, + Capability: capability, + } +} + +func (e *StructCapabilityError) Error() string { + return fmt.Sprintf("struct (%s) has no %s system", e.StructId, e.Capability) +} + +func (e *StructCapabilityError) Code() uint32 { return 1260 } + +func (e *StructCapabilityError) LogFields() []interface{} { + return []interface{}{ + "error_type", "struct_capability", + "struct_id", e.StructId, + "capability", e.Capability, + } +} + +func (e *StructCapabilityError) Unwrap() error { return ErrStructCapability } + +// ============================================================================= +// 8. FleetCommandError +// ============================================================================= + +// FleetCommandError indicates a fleet command struct issue. +type FleetCommandError struct { + FleetId string + StructId string // The struct attempting action (optional) + Reason string // "no_command_struct", "command_offline" +} + +func NewFleetCommandError(fleetId, reason string) *FleetCommandError { + return &FleetCommandError{ + FleetId: fleetId, + Reason: reason, + } +} + +func (e *FleetCommandError) WithStructId(structId string) *FleetCommandError { + e.StructId = structId + return e +} + +func (e *FleetCommandError) Error() string { + switch e.Reason { + case "no_command_struct": + return fmt.Sprintf("fleet (%s) needs a command struct before deploy", e.FleetId) + case "command_offline": + return fmt.Sprintf("fleet (%s) needs an online command struct before deploy", e.FleetId) + default: + return fmt.Sprintf("fleet (%s) command error: %s", e.FleetId, e.Reason) + } +} + +func (e *FleetCommandError) Code() uint32 { return 1450 } + +func (e *FleetCommandError) LogFields() []interface{} { + return []interface{}{ + "error_type", "fleet_command", + "fleet_id", e.FleetId, + "struct_id", e.StructId, + "reason", e.Reason, + } +} + +func (e *FleetCommandError) Unwrap() error { return ErrFleetCommand } + +// ============================================================================= +// 9. FleetStateError +// ============================================================================= + +// FleetStateError indicates an invalid fleet state for an operation. +type FleetStateError struct { + FleetId string + State string // "on_station", "in_transit", "in_queue" + Action string // "build", "raid", "deploy" + Position uint64 // Queue position for raid errors (optional) +} + +func NewFleetStateError(fleetId, state, action string) *FleetStateError { + return &FleetStateError{ + FleetId: fleetId, + State: state, + Action: action, + } +} + +func (e *FleetStateError) WithPosition(pos uint64) *FleetStateError { + e.Position = pos + return e +} + +func (e *FleetStateError) Error() string { + return fmt.Sprintf("fleet (%s) cannot %s while %s", e.FleetId, e.Action, e.State) +} + +func (e *FleetStateError) Code() uint32 { return 1453 } + +func (e *FleetStateError) LogFields() []interface{} { + return []interface{}{ + "error_type", "fleet_state", + "fleet_id", e.FleetId, + "state", e.State, + "action", e.Action, + "position", e.Position, + } +} + +func (e *FleetStateError) Unwrap() error { return ErrFleetState } + +// ============================================================================= +// 10. StructOwnershipError +// ============================================================================= + +// StructOwnershipError indicates a struct ownership mismatch. +type StructOwnershipError struct { + StructId string + ExpectedOwner string + ActualOwner string + LocationType string // "fleet" or "planet" + LocationId string +} + +func NewStructOwnershipError(structId, expectedOwner, actualOwner string) *StructOwnershipError { + return &StructOwnershipError{ + StructId: structId, + ExpectedOwner: expectedOwner, + ActualOwner: actualOwner, + } +} + +func (e *StructOwnershipError) WithLocation(locationType, locationId string) *StructOwnershipError { + e.LocationType = locationType + e.LocationId = locationId + return e +} + +func (e *StructOwnershipError) Error() string { + return fmt.Sprintf("struct owner must match %s", e.LocationType) +} + +func (e *StructOwnershipError) Code() uint32 { return 1301 } + +func (e *StructOwnershipError) LogFields() []interface{} { + return []interface{}{ + "error_type", "struct_ownership", + "struct_id", e.StructId, + "expected_owner", e.ExpectedOwner, + "actual_owner", e.ActualOwner, + "location_type", e.LocationType, + "location_id", e.LocationId, + } +} + +func (e *StructOwnershipError) Unwrap() error { return ErrStructOwnership } + +// ============================================================================= +// 11. StructLocationError +// ============================================================================= + +// StructLocationError indicates an invalid struct location/ambit. +type StructLocationError struct { + StructId string + StructType uint64 + Ambit string + LocationType string + LocationId string + Reason string // "invalid_ambit", "invalid_location", "command_struct_fleet_only", "outside_planet" +} + +func NewStructLocationError(structType uint64, ambit, reason string) *StructLocationError { + return &StructLocationError{ + StructType: structType, + Ambit: ambit, + Reason: reason, + } +} + +func (e *StructLocationError) WithStruct(structId string) *StructLocationError { + e.StructId = structId + return e +} + +func (e *StructLocationError) WithLocation(locationType, locationId string) *StructLocationError { + e.LocationType = locationType + e.LocationId = locationId + return e +} + +func (e *StructLocationError) Error() string { + switch e.Reason { + case "invalid_ambit": + return fmt.Sprintf("struct cannot exist in ambit (%s) based on struct type (%d)", e.Ambit, e.StructType) + case "command_struct_fleet_only": + return "command structs can only be built directly in the fleet" + case "outside_planet": + return "struct type cannot exist outside a planet" + default: + return fmt.Sprintf("struct type (%d) cannot exist in this location: %s", e.StructType, e.Reason) + } +} + +func (e *StructLocationError) Code() uint32 { return 1302 } + +func (e *StructLocationError) LogFields() []interface{} { + return []interface{}{ + "error_type", "struct_location", + "struct_id", e.StructId, + "struct_type", e.StructType, + "ambit", e.Ambit, + "location_type", e.LocationType, + "location_id", e.LocationId, + "reason", e.Reason, + } +} + +func (e *StructLocationError) Unwrap() error { return ErrStructLocation } + +// ============================================================================= +// 12. CombatTargetingError +// ============================================================================= + +// CombatTargetingError indicates a combat targeting issue. +type CombatTargetingError struct { + AttackerId string + TargetId string + WeaponSystem string + Reason string // "destroyed", "unreachable", "blocked", "hidden", "out_of_range", "incomplete_targeting" + IsCounter bool // True if counter-attack check + AttackerAmbit string + TargetAmbit string +} + +func NewCombatTargetingError(attackerId, targetId, weaponSystem, reason string) *CombatTargetingError { + return &CombatTargetingError{ + AttackerId: attackerId, + TargetId: targetId, + WeaponSystem: weaponSystem, + Reason: reason, + } +} + +func (e *CombatTargetingError) AsCounter() *CombatTargetingError { + e.IsCounter = true + return e +} + +func (e *CombatTargetingError) WithAmbits(attackerAmbit, targetAmbit string) *CombatTargetingError { + e.AttackerAmbit = attackerAmbit + e.TargetAmbit = targetAmbit + return e +} + +func (e *CombatTargetingError) Error() string { + attackerType := "attacker" + if e.IsCounter { + attackerType = "counter-attacker" + } + return fmt.Sprintf("target struct (%s) is %s from %s struct (%s)", e.TargetId, e.Reason, attackerType, e.AttackerId) +} + +func (e *CombatTargetingError) Code() uint32 { return 1400 } + +func (e *CombatTargetingError) LogFields() []interface{} { + return []interface{}{ + "error_type", "combat_targeting", + "attacker_id", e.AttackerId, + "target_id", e.TargetId, + "weapon_system", e.WeaponSystem, + "reason", e.Reason, + "is_counter", e.IsCounter, + "attacker_ambit", e.AttackerAmbit, + "target_ambit", e.TargetAmbit, + } +} + +func (e *CombatTargetingError) Unwrap() error { return ErrCombatTargeting } + +// ============================================================================= +// 13. StructBuildError +// ============================================================================= + +// StructBuildError indicates a struct build issue. +type StructBuildError struct { + StructType uint64 + LocationType string // "fleet" or "planet" + LocationId string + Slot uint64 + Ambit string + Reason string // "slot_occupied", "slot_unavailable", "invalid_ambit", "command_exists", "type_unsupported" + ExistingStructId string // When slot is occupied (optional) +} + +func NewStructBuildError(structType uint64, locationType, locationId, reason string) *StructBuildError { + return &StructBuildError{ + StructType: structType, + LocationType: locationType, + LocationId: locationId, + Reason: reason, + } +} + +func (e *StructBuildError) WithSlot(slot uint64) *StructBuildError { + e.Slot = slot + return e +} + +func (e *StructBuildError) WithAmbit(ambit string) *StructBuildError { + e.Ambit = ambit + return e +} + +func (e *StructBuildError) WithExistingStruct(structId string) *StructBuildError { + e.ExistingStructId = structId + return e +} + +func (e *StructBuildError) Error() string { + switch e.Reason { + case "slot_occupied": + return fmt.Sprintf("the %s (%s) already has a struct on that slot", e.LocationType, e.LocationId) + case "slot_unavailable": + return fmt.Sprintf("the %s (%s) doesn't have that slot available to build on", e.LocationType, e.LocationId) + case "invalid_ambit": + return "struct build was initiated on a non-existent ambit" + case "command_exists": + return fmt.Sprintf("the %s (%s) already has a command struct", e.LocationType, e.LocationId) + case "type_unsupported": + return "we're not building these yet" + default: + return fmt.Sprintf("struct build failed on %s (%s): %s", e.LocationType, e.LocationId, e.Reason) + } +} + +func (e *StructBuildError) Code() uint32 { return 1350 } + +func (e *StructBuildError) LogFields() []interface{} { + return []interface{}{ + "error_type", "struct_build", + "struct_type", e.StructType, + "location_type", e.LocationType, + "location_id", e.LocationId, + "slot", e.Slot, + "ambit", e.Ambit, + "reason", e.Reason, + "existing_struct_id", e.ExistingStructId, + } +} + +func (e *StructBuildError) Unwrap() error { return ErrStructBuild } + +// ============================================================================= +// 14. PlayerHaltedError +// ============================================================================= + +// PlayerHaltedError indicates a player is halted and cannot perform actions. +type PlayerHaltedError struct { + PlayerId string + StructId string // Optional, when action is struct-related + Action string +} + +func NewPlayerHaltedError(playerId, action string) *PlayerHaltedError { + return &PlayerHaltedError{ + PlayerId: playerId, + Action: action, + } +} + +func (e *PlayerHaltedError) WithStruct(structId string) *PlayerHaltedError { + e.StructId = structId + return e +} + +func (e *PlayerHaltedError) Error() string { + if e.StructId != "" { + return fmt.Sprintf("struct (%s) cannot perform actions while player (%s) is halted", e.StructId, e.PlayerId) + } + return fmt.Sprintf("cannot perform actions while player (%s) is halted", e.PlayerId) +} + +func (e *PlayerHaltedError) Code() uint32 { return 1151 } + +func (e *PlayerHaltedError) LogFields() []interface{} { + return []interface{}{ + "error_type", "player_halted", + "player_id", e.PlayerId, + "struct_id", e.StructId, + "action", e.Action, + } +} + +func (e *PlayerHaltedError) Unwrap() error { return ErrPlayerHalted } + +// ============================================================================= +// 15. PlayerRequiredError +// ============================================================================= + +// PlayerRequiredError indicates a player account is required for an action. +type PlayerRequiredError struct { + Address string + Action string // "build", "guild_update", "guild_create", "substation_action" +} + +func NewPlayerRequiredError(address, action string) *PlayerRequiredError { + return &PlayerRequiredError{ + Address: address, + Action: action, + } +} + +func (e *PlayerRequiredError) Error() string { + return fmt.Sprintf("%s requires player account but none associated with %s", e.Action, e.Address) +} + +func (e *PlayerRequiredError) Code() uint32 { return 1150 } + +func (e *PlayerRequiredError) LogFields() []interface{} { + return []interface{}{ + "error_type", "player_required", + "address", e.Address, + "action", e.Action, + } +} + +func (e *PlayerRequiredError) Unwrap() error { return ErrPlayerRequired } + +// ============================================================================= +// 16. AddressValidationError +// ============================================================================= + +// AddressValidationError indicates an address validation failure. +type AddressValidationError struct { + Address string + ExpectedPlayerId string + ActualPlayerId string + Reason string // "invalid_format", "not_registered", "wrong_player", "proof_mismatch", "signature_invalid", "already_registered" +} + +func NewAddressValidationError(address, reason string) *AddressValidationError { + return &AddressValidationError{ + Address: address, + Reason: reason, + } +} + +func (e *AddressValidationError) WithPlayers(expected, actual string) *AddressValidationError { + e.ExpectedPlayerId = expected + e.ActualPlayerId = actual + return e +} + +func (e *AddressValidationError) Error() string { + switch e.Reason { + case "invalid_format": + return fmt.Sprintf("address (%s) couldn't be validated as a real address", e.Address) + case "not_registered": + return fmt.Sprintf("address (%s) is not associated with a player", e.Address) + case "wrong_player": + return fmt.Sprintf("address (%s) is associated with player %s instead of player %s", + e.Address, e.ActualPlayerId, e.ExpectedPlayerId) + case "proof_mismatch": + return fmt.Sprintf("proof mismatch for address %s", e.Address) + case "signature_invalid": + return "proof signature verification failure" + case "already_registered": + return fmt.Sprintf("address (%s) already has an account", e.Address) + default: + return fmt.Sprintf("address validation failed for %s: %s", e.Address, e.Reason) + } +} + +func (e *AddressValidationError) Code() uint32 { return 1750 } + +func (e *AddressValidationError) LogFields() []interface{} { + return []interface{}{ + "error_type", "address_validation", + "address", e.Address, + "expected_player_id", e.ExpectedPlayerId, + "actual_player_id", e.ActualPlayerId, + "reason", e.Reason, + } +} + +func (e *AddressValidationError) Unwrap() error { return ErrAddressValidation } + +// ============================================================================= +// 17. GuildMembershipError +// ============================================================================= + +// GuildMembershipError indicates a guild membership issue. +type GuildMembershipError struct { + GuildId string + PlayerId string + JoinType string // "invite", "request", "proxy", "direct" + Reason string // "wrong_type", "already_member", "not_allowed", "minimum_not_met", "not_member", "is_owner" + InfusionId string // For infusion-related errors (optional) + ReactorId string // For reactor-related errors (optional) + MinimumRequired uint64 // For minimum not met (optional) + ActualAmount uint64 // For minimum not met (optional) +} + +func NewGuildMembershipError(guildId, playerId, reason string) *GuildMembershipError { + return &GuildMembershipError{ + GuildId: guildId, + PlayerId: playerId, + Reason: reason, + } +} + +func (e *GuildMembershipError) WithJoinType(joinType string) *GuildMembershipError { + e.JoinType = joinType + return e +} + +func (e *GuildMembershipError) WithInfusion(infusionId string) *GuildMembershipError { + e.InfusionId = infusionId + return e +} + +func (e *GuildMembershipError) WithReactor(reactorId string) *GuildMembershipError { + e.ReactorId = reactorId + return e +} + +func (e *GuildMembershipError) WithMinimum(required, actual uint64) *GuildMembershipError { + e.MinimumRequired = required + e.ActualAmount = actual + return e +} + +func (e *GuildMembershipError) Error() string { + switch e.Reason { + case "already_member": + return fmt.Sprintf("player (%s) already a member of guild (%s)", e.PlayerId, e.GuildId) + case "not_member": + return fmt.Sprintf("player (%s) not a member of guild (%s)", e.PlayerId, e.GuildId) + case "is_owner": + return fmt.Sprintf("player (%s) is the owner of guild (%s), cannot be removed", e.PlayerId, e.GuildId) + case "wrong_type": + return fmt.Sprintf("membership application is incorrect type for %s approval", e.JoinType) + case "minimum_not_met": + return "join infusion minimum not met" + case "not_allowed": + return fmt.Sprintf("guild (%s) is not currently allowing %s", e.GuildId, e.JoinType) + default: + return fmt.Sprintf("guild membership error for player (%s) in guild (%s): %s", e.PlayerId, e.GuildId, e.Reason) + } +} + +func (e *GuildMembershipError) Code() uint32 { return 1501 } + +func (e *GuildMembershipError) LogFields() []interface{} { + return []interface{}{ + "error_type", "guild_membership", + "guild_id", e.GuildId, + "player_id", e.PlayerId, + "join_type", e.JoinType, + "reason", e.Reason, + "infusion_id", e.InfusionId, + "reactor_id", e.ReactorId, + "minimum_required", e.MinimumRequired, + "actual_amount", e.ActualAmount, + } +} + +func (e *GuildMembershipError) Unwrap() error { return ErrGuildMembership } + +// ============================================================================= +// 18. GuildUpdateError +// ============================================================================= + +// GuildUpdateError indicates a guild update failure. +type GuildUpdateError struct { + GuildId string + PlayerId string + Field string // "owner", "endpoint", "entry_substation", "join_minimum" + Reason string + NewOwner string // For owner change errors (optional) +} + +func NewGuildUpdateError(guildId, playerId, field, reason string) *GuildUpdateError { + return &GuildUpdateError{ + GuildId: guildId, + PlayerId: playerId, + Field: field, + Reason: reason, + } +} + +func (e *GuildUpdateError) WithNewOwner(newOwner string) *GuildUpdateError { + e.NewOwner = newOwner + return e +} + +func (e *GuildUpdateError) Error() string { + if e.Field == "owner" && e.NewOwner != "" { + return fmt.Sprintf("guild could not change to new owner (%s) because they weren't found", e.NewOwner) + } + return fmt.Sprintf("calling player (%s) has no permissions to update guild (%s)", e.PlayerId, e.GuildId) +} + +func (e *GuildUpdateError) Code() uint32 { return 1500 } + +func (e *GuildUpdateError) LogFields() []interface{} { + return []interface{}{ + "error_type", "guild_update", + "guild_id", e.GuildId, + "player_id", e.PlayerId, + "field", e.Field, + "reason", e.Reason, + "new_owner", e.NewOwner, + } +} + +func (e *GuildUpdateError) Unwrap() error { return ErrGuildUpdate } + +// ============================================================================= +// 19. AllocationError +// ============================================================================= + +// AllocationError indicates an allocation operation failure. +type AllocationError struct { + AllocationId string + SourceId string + DestinationId string // For destination-related errors (optional) + Reason string // "capacity_exceeded", "automated_conflict", "immutable_source", "immutable_index", "immutable_type", "same_destination", "not_exists", "not_connected" + Field string // Which field was problematic (optional) + OldValue string + NewValue string + AvailableCapacity uint64 // For capacity errors (optional) + RequestedPower uint64 // For capacity errors (optional) +} + +func NewAllocationError(sourceId, reason string) *AllocationError { + return &AllocationError{ + SourceId: sourceId, + Reason: reason, + } +} + +func (e *AllocationError) WithAllocation(allocationId string) *AllocationError { + e.AllocationId = allocationId + return e +} + +func (e *AllocationError) WithDestination(destinationId string) *AllocationError { + e.DestinationId = destinationId + return e +} + +func (e *AllocationError) WithCapacity(available, requested uint64) *AllocationError { + e.AvailableCapacity = available + e.RequestedPower = requested + return e +} + +func (e *AllocationError) WithFieldChange(field, oldVal, newVal string) *AllocationError { + e.Field = field + e.OldValue = oldVal + e.NewValue = newVal + return e +} + +func (e *AllocationError) Error() string { + switch e.Reason { + case "capacity_exceeded": + return fmt.Sprintf("allocation source (%s) does not have capacity (%d) for power (%d)", + e.SourceId, e.AvailableCapacity, e.RequestedPower) + case "automated_conflict": + return fmt.Sprintf("allocation source (%s) cannot have automated allocation with other allocations in place", e.SourceId) + case "immutable_source": + return fmt.Sprintf("source object (%s vs %s) should never change during allocation update", e.OldValue, e.NewValue) + case "immutable_index": + return fmt.Sprintf("allocation index (%s vs %s) should never change during allocation update", e.OldValue, e.NewValue) + case "immutable_type": + return fmt.Sprintf("allocation type (%s vs %s) should never change during allocation update", e.OldValue, e.NewValue) + case "same_destination": + return fmt.Sprintf("destination substation (%s) cannot change to same destination", e.DestinationId) + case "not_exists": + return "trying to set an allocation that doesn't exist yet" + case "not_connected": + return fmt.Sprintf("allocation (%s) must not be connected to a substation during transfer", e.AllocationId) + default: + return fmt.Sprintf("allocation error on source (%s): %s", e.SourceId, e.Reason) + } +} + +func (e *AllocationError) Code() uint32 { return 1550 } + +func (e *AllocationError) LogFields() []interface{} { + return []interface{}{ + "error_type", "allocation", + "allocation_id", e.AllocationId, + "source_id", e.SourceId, + "destination_id", e.DestinationId, + "reason", e.Reason, + "field", e.Field, + "old_value", e.OldValue, + "new_value", e.NewValue, + "available_capacity", e.AvailableCapacity, + "requested_power", e.RequestedPower, + } +} + +func (e *AllocationError) Unwrap() error { return ErrAllocationCreate } + +// ============================================================================= +// 20. ReactorError +// ============================================================================= + +// ReactorError indicates a reactor operation failure. +type ReactorError struct { + Operation string // "infuse", "defuse", "migrate", "cancel_defusion", "required" + ReactorId string + Address string // Delegator or validator address (optional) + AddressType string // "delegator" or "validator" (optional) + Denom string + ExpectedDenom string + Amount uint64 + Balance uint64 // For balance comparison (optional) + Height int64 // For height-related errors (optional) + Reason string +} + +func NewReactorError(operation, reason string) *ReactorError { + return &ReactorError{ + Operation: operation, + Reason: reason, + } +} + +func (e *ReactorError) WithReactor(reactorId string) *ReactorError { + e.ReactorId = reactorId + return e +} + +func (e *ReactorError) WithAddress(address, addressType string) *ReactorError { + e.Address = address + e.AddressType = addressType + return e +} + +func (e *ReactorError) WithDenom(denom, expected string) *ReactorError { + e.Denom = denom + e.ExpectedDenom = expected + return e +} + +func (e *ReactorError) WithAmount(amount uint64) *ReactorError { + e.Amount = amount + return e +} + +func (e *ReactorError) WithBalance(balance uint64) *ReactorError { + e.Balance = balance + return e +} + +func (e *ReactorError) WithHeight(height int64) *ReactorError { + e.Height = height + return e +} + +func (e *ReactorError) Error() string { + switch e.Reason { + case "invalid_address": + return fmt.Sprintf("invalid %s address: %s", e.AddressType, e.Address) + case "invalid_amount": + return "invalid delegation amount" + case "invalid_denom": + return fmt.Sprintf("invalid coin denomination: got %s, expected %s", e.Denom, e.ExpectedDenom) + case "invalid_height": + return "invalid height" + case "balance_exceeded": + return "amount is greater than the unbonding delegation entry balance" + case "already_processed": + return "unbonding delegation is already processed" + case "entry_not_found": + return fmt.Sprintf("unbonding delegation entry not found at block height %d", e.Height) + case "required": + return fmt.Sprintf("reactor required but none associated with %s", e.Address) + default: + return fmt.Sprintf("reactor %s failed: %s", e.Operation, e.Reason) + } +} + +func (e *ReactorError) Code() uint32 { return 1600 } + +func (e *ReactorError) LogFields() []interface{} { + return []interface{}{ + "error_type", "reactor", + "operation", e.Operation, + "reactor_id", e.ReactorId, + "address", e.Address, + "address_type", e.AddressType, + "denom", e.Denom, + "expected_denom", e.ExpectedDenom, + "amount", e.Amount, + "balance", e.Balance, + "height", e.Height, + "reason", e.Reason, + } +} + +func (e *ReactorError) Unwrap() error { return ErrReactor } + +// ============================================================================= +// 21. WorkFailureError +// ============================================================================= + +// WorkFailureError indicates a proof-of-work verification failure. +type WorkFailureError struct { + Operation string // "mine", "refine", "build", "raid" + StructId string + PlanetId string // Optional + HashInput string +} + +func NewWorkFailureError(operation, structId, hashInput string) *WorkFailureError { + return &WorkFailureError{ + Operation: operation, + StructId: structId, + HashInput: hashInput, + } +} + +func (e *WorkFailureError) WithPlanet(planetId string) *WorkFailureError { + e.PlanetId = planetId + return e +} + +func (e *WorkFailureError) Error() string { + return fmt.Sprintf("work failure for input (%s) when trying to %s on struct %s", e.HashInput, e.Operation, e.StructId) +} + +func (e *WorkFailureError) Code() uint32 { return 1800 } + +func (e *WorkFailureError) LogFields() []interface{} { + return []interface{}{ + "error_type", "work_failure", + "operation", e.Operation, + "struct_id", e.StructId, + "planet_id", e.PlanetId, + "hash_input", e.HashInput, + } +} + +func (e *WorkFailureError) Unwrap() error { return ErrWorkFailure } + +// ============================================================================= +// 22. ProviderAccessError +// ============================================================================= + +// ProviderAccessError indicates a provider access denial. +type ProviderAccessError struct { + ProviderId string + AccessPolicy string // "openMarket", "guildMarket", "closedMarket" + PlayerId string + GuildId string + Reason string // "no_account", "guild_not_approved", "market_closed" +} + +func NewProviderAccessError(providerId, reason string) *ProviderAccessError { + return &ProviderAccessError{ + ProviderId: providerId, + Reason: reason, + } +} + +func (e *ProviderAccessError) WithPlayer(playerId string) *ProviderAccessError { + e.PlayerId = playerId + return e +} + +func (e *ProviderAccessError) WithGuild(guildId string) *ProviderAccessError { + e.GuildId = guildId + return e +} + +func (e *ProviderAccessError) WithPolicy(policy string) *ProviderAccessError { + e.AccessPolicy = policy + return e +} + +func (e *ProviderAccessError) Error() string { + switch e.Reason { + case "no_account": + return fmt.Sprintf("calling address has no account for provider (%s)", e.ProviderId) + case "guild_not_approved": + return fmt.Sprintf("calling account is not a member of an approved guild for provider (%s)", e.ProviderId) + case "market_closed": + return fmt.Sprintf("provider (%s) is not accepting new agreements", e.ProviderId) + default: + return fmt.Sprintf("provider (%s) access denied: %s", e.ProviderId, e.Reason) + } +} + +func (e *ProviderAccessError) Code() uint32 { return 1700 } + +func (e *ProviderAccessError) LogFields() []interface{} { + return []interface{}{ + "error_type", "provider_access", + "provider_id", e.ProviderId, + "access_policy", e.AccessPolicy, + "player_id", e.PlayerId, + "guild_id", e.GuildId, + "reason", e.Reason, + } +} + +func (e *ProviderAccessError) Unwrap() error { return ErrProviderAccess } + +// ============================================================================= +// 23. ParameterValidationError +// ============================================================================= + +// ParameterValidationError indicates a parameter validation failure. +type ParameterValidationError struct { + Parameter string // "capacity", "duration" + Value uint64 + Minimum uint64 // Optional + Maximum uint64 // Optional + ProviderId string // Optional + SubstationId string // Optional, for capacity checks + Reason string // "below_minimum", "above_maximum", "exceeds_available" +} + +func NewParameterValidationError(parameter string, value uint64, reason string) *ParameterValidationError { + return &ParameterValidationError{ + Parameter: parameter, + Value: value, + Reason: reason, + } +} + +func (e *ParameterValidationError) WithRange(min, max uint64) *ParameterValidationError { + e.Minimum = min + e.Maximum = max + return e +} + +func (e *ParameterValidationError) WithProvider(providerId string) *ParameterValidationError { + e.ProviderId = providerId + return e +} + +func (e *ParameterValidationError) WithSubstation(substationId string) *ParameterValidationError { + e.SubstationId = substationId + return e +} + +func (e *ParameterValidationError) Error() string { + switch e.Reason { + case "below_minimum": + return fmt.Sprintf("%s (%d) cannot be lower than minimum %s (%d)", e.Parameter, e.Value, e.Parameter, e.Minimum) + case "above_maximum": + return fmt.Sprintf("%s (%d) cannot be greater than maximum %s (%d)", e.Parameter, e.Value, e.Parameter, e.Maximum) + case "exceeds_available": + return fmt.Sprintf("desired %s (%d) is beyond what substation (%s) can support (%d)", + e.Parameter, e.Value, e.SubstationId, e.Maximum) + default: + return fmt.Sprintf("parameter %s validation failed: %s", e.Parameter, e.Reason) + } +} + +func (e *ParameterValidationError) Code() uint32 { return 1710 } + +func (e *ParameterValidationError) LogFields() []interface{} { + return []interface{}{ + "error_type", "parameter_validation", + "parameter", e.Parameter, + "value", e.Value, + "minimum", e.Minimum, + "maximum", e.Maximum, + "provider_id", e.ProviderId, + "substation_id", e.SubstationId, + "reason", e.Reason, + } +} + +func (e *ParameterValidationError) Unwrap() error { return ErrParameterValidation } + +// ============================================================================= +// 24. PlanetStateError +// ============================================================================= + +// PlanetStateError indicates an invalid planet state for an operation. +type PlanetStateError struct { + PlanetId string + State string // "complete", "empty", "has_ore" + Action string // "mine", "explore", "infuse" +} + +func NewPlanetStateError(planetId, state, action string) *PlanetStateError { + return &PlanetStateError{ + PlanetId: planetId, + State: state, + Action: action, + } +} + +func (e *PlanetStateError) Error() string { + switch e.State { + case "complete": + return fmt.Sprintf("planet (%s) is already complete, move on bud, no work to be done here", e.PlanetId) + case "empty": + return fmt.Sprintf("planet (%s) is empty, nothing to mine", e.PlanetId) + case "has_ore": + return fmt.Sprintf("new planet cannot be explored while current planet (%s) has ore available for mining", e.PlanetId) + default: + return fmt.Sprintf("planet (%s) cannot %s while %s", e.PlanetId, e.Action, e.State) + } +} + +func (e *PlanetStateError) Code() uint32 { return 1650 } + +func (e *PlanetStateError) LogFields() []interface{} { + return []interface{}{ + "error_type", "planet_state", + "planet_id", e.PlanetId, + "state", e.State, + "action", e.Action, + } +} + +func (e *PlanetStateError) Unwrap() error { return ErrPlanetState } + +// ============================================================================= +// 25. FuelInfuseError +// ============================================================================= + +// FuelInfuseError indicates a fuel infusion failure. +type FuelInfuseError struct { + StructId string + Amount string + Denom string + Reason string // "invalid_amount", "invalid_denom", "transfer_failed" + Details string // Additional error details (optional) +} + +func NewFuelInfuseError(structId, amount, reason string) *FuelInfuseError { + return &FuelInfuseError{ + StructId: structId, + Amount: amount, + Reason: reason, + } +} + +func (e *FuelInfuseError) WithDenom(denom string) *FuelInfuseError { + e.Denom = denom + return e +} + +func (e *FuelInfuseError) WithDetails(details string) *FuelInfuseError { + e.Details = details + return e +} + +func (e *FuelInfuseError) Error() string { + switch e.Reason { + case "invalid_amount": + return fmt.Sprintf("infuse amount (%s) is invalid", e.Amount) + case "invalid_denom": + return fmt.Sprintf("infuse amount (%s) is invalid, %s is not a fuel", e.Amount, e.Denom) + case "transfer_failed": + if e.Details != "" { + return fmt.Sprintf("infuse failed: %s", e.Details) + } + return "infuse failed" + default: + return fmt.Sprintf("fuel infuse error on struct (%s): %s", e.StructId, e.Reason) + } +} + +func (e *FuelInfuseError) Code() uint32 { return 1270 } + +func (e *FuelInfuseError) LogFields() []interface{} { + return []interface{}{ + "error_type", "fuel_infuse", + "struct_id", e.StructId, + "amount", e.Amount, + "denom", e.Denom, + "reason", e.Reason, + "details", e.Details, + } +} + +func (e *FuelInfuseError) Unwrap() error { return ErrStructInfuse } diff --git a/x/structs/types/errors_structured_test.go b/x/structs/types/errors_structured_test.go new file mode 100644 index 0000000..a7c0855 --- /dev/null +++ b/x/structs/types/errors_structured_test.go @@ -0,0 +1,897 @@ +package types + +import ( + "errors" + "testing" +) + +// ============================================================================= +// Test Helpers +// ============================================================================= + +// assertContains checks if substr is in s +func assertContains(t *testing.T, s, substr string) { + t.Helper() + if len(substr) == 0 { + return + } + found := false + for i := 0; i <= len(s)-len(substr); i++ { + if s[i:i+len(substr)] == substr { + found = true + break + } + } + if !found { + t.Errorf("expected %q to contain %q", s, substr) + } +} + +// assertErrorIs checks if err wraps target +func assertErrorIs(t *testing.T, err, target error) { + t.Helper() + if !errors.Is(err, target) { + t.Errorf("expected error to wrap %v, got %v", target, err) + } +} + +// assertCode checks if the error code matches +func assertCode(t *testing.T, got, expected uint32) { + t.Helper() + if got != expected { + t.Errorf("expected code %d, got %d", expected, got) + } +} + +// assertLogFieldsContain checks if LogFields contains the expected keys +func assertLogFieldsContain(t *testing.T, fields []interface{}, keys ...string) { + t.Helper() + fieldMap := make(map[string]bool) + for i := 0; i < len(fields)-1; i += 2 { + if key, ok := fields[i].(string); ok { + fieldMap[key] = true + } + } + for _, key := range keys { + if !fieldMap[key] { + t.Errorf("expected LogFields to contain key %q", key) + } + } +} + +// ============================================================================= +// ObjectNotFoundError Tests +// ============================================================================= + +func TestObjectNotFoundError(t *testing.T) { + err := NewObjectNotFoundError("player", "player-123") + + // Test Error() message + assertContains(t, err.Error(), "player") + assertContains(t, err.Error(), "player-123") + assertContains(t, err.Error(), "not found") + + // Test Code() + assertCode(t, err.Code(), 1050) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "object_type", "object_id") + + // Test Unwrap() + assertErrorIs(t, err, ErrObjectNotFound) +} + +func TestObjectNotFoundError_WithMethods(t *testing.T) { + err := NewObjectNotFoundError("struct", "struct-456"). + WithIndex(42). + WithContext("during migration") + + assertContains(t, err.Error(), "struct") + assertContains(t, err.Error(), "during migration") + + if err.ObjectIndex != 42 { + t.Errorf("expected ObjectIndex 42, got %d", err.ObjectIndex) + } +} + +// ============================================================================= +// InsufficientChargeError Tests +// ============================================================================= + +func TestInsufficientChargeError(t *testing.T) { + err := NewInsufficientChargeError("player-1", 100, 50, "build") + + // Test Error() message + assertContains(t, err.Error(), "player-1") + assertContains(t, err.Error(), "100") + assertContains(t, err.Error(), "50") + + // Test Code() + assertCode(t, err.Code(), 1200) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "player_id", "required", "available", "action") + + // Test Unwrap() + assertErrorIs(t, err, ErrInsufficientCharge) +} + +func TestInsufficientChargeError_WithStructType(t *testing.T) { + err := NewInsufficientChargeError("player-1", 200, 100, "activate"). + WithStructType(5) + + assertContains(t, err.Error(), "struct type (5)") + assertContains(t, err.Error(), "activate") + + if err.StructType != 5 { + t.Errorf("expected StructType 5, got %d", err.StructType) + } +} + +// ============================================================================= +// PermissionError Tests +// ============================================================================= + +func TestPermissionError(t *testing.T) { + err := NewPermissionError("address", "cosmos1abc", "substation", "sub-1", 8, "manage") + + // Test Error() message + assertContains(t, err.Error(), "address") + assertContains(t, err.Error(), "cosmos1abc") + assertContains(t, err.Error(), "substation") + assertContains(t, err.Error(), "sub-1") + + // Test Code() + assertCode(t, err.Code(), 1100) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "caller_type", "caller_id", "target_type", "target_id", "permission", "action") + + // Test Unwrap() + assertErrorIs(t, err, ErrPermission) +} + +func TestPermissionError_NoTarget(t *testing.T) { + err := NewPermissionError("player", "player-1", "", "", 4, "play") + + // Should not contain target info when empty + assertContains(t, err.Error(), "player") + assertContains(t, err.Error(), "play permission") +} + +func TestPermissionError_WithMethods(t *testing.T) { + err := NewPermissionError("player", "player-1", "guild", "guild-1", 16, "invite"). + WithRequiredLevel(3). + WithGuildId("guild-2"). + WithAssociationTarget("player-2") + + if err.RequiredLevel != 3 { + t.Errorf("expected RequiredLevel 3, got %d", err.RequiredLevel) + } + if err.GuildId != "guild-2" { + t.Errorf("expected GuildId guild-2, got %s", err.GuildId) + } + if err.AssociationTargetId != "player-2" { + t.Errorf("expected AssociationTargetId player-2, got %s", err.AssociationTargetId) + } +} + +// ============================================================================= +// PlayerPowerError Tests +// ============================================================================= + +func TestPlayerPowerError(t *testing.T) { + err := NewPlayerPowerError("player-1", "offline") + + // Test Error() message + assertContains(t, err.Error(), "player-1") + assertContains(t, err.Error(), "offline") + + // Test Code() + assertCode(t, err.Code(), 1201) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "player_id", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrPlayerPowerOffline) +} + +func TestPlayerPowerError_WithCapacity(t *testing.T) { + err := NewPlayerPowerError("player-1", "capacity_exceeded"). + WithCapacity(100, 50) + + if err.Required != 100 { + t.Errorf("expected Required 100, got %d", err.Required) + } + if err.Available != 50 { + t.Errorf("expected Available 50, got %d", err.Available) + } +} + +// ============================================================================= +// PlayerAffordabilityError Tests +// ============================================================================= + +func TestPlayerAffordabilityError(t *testing.T) { + err := NewPlayerAffordabilityError("player-1", "agreement_open", "1000alpha") + + // Test Error() message + assertContains(t, err.Error(), "player-1") + assertContains(t, err.Error(), "agreement_open") + + // Test Code() + assertCode(t, err.Code(), 1203) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "player_id", "action", "required") + + // Test Unwrap() + assertErrorIs(t, err, ErrPlayerAffordability) +} + +// ============================================================================= +// StructStateError Tests +// ============================================================================= + +func TestStructStateError(t *testing.T) { + err := NewStructStateError("struct-1", "built", "building", "build_complete") + + // Test Error() message + assertContains(t, err.Error(), "struct-1") + assertContains(t, err.Error(), "built") + assertContains(t, err.Error(), "building") + + // Test Code() + assertCode(t, err.Code(), 1250) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "struct_id", "current_state", "required_state", "action") + + // Test Unwrap() + assertErrorIs(t, err, ErrStructState) +} + +// ============================================================================= +// StructCapabilityError Tests +// ============================================================================= + +func TestStructCapabilityError(t *testing.T) { + err := NewStructCapabilityError("struct-1", "stealth") + + // Test Error() message + assertContains(t, err.Error(), "struct-1") + assertContains(t, err.Error(), "stealth") + + // Test Code() + assertCode(t, err.Code(), 1260) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "struct_id", "capability") + + // Test Unwrap() + assertErrorIs(t, err, ErrStructCapability) +} + +// ============================================================================= +// FleetCommandError Tests +// ============================================================================= + +func TestFleetCommandError(t *testing.T) { + err := NewFleetCommandError("fleet-1", "no_command_struct") + + // Test Error() message + assertContains(t, err.Error(), "fleet-1") + + // Test Code() + assertCode(t, err.Code(), 1450) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "fleet_id", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrFleetCommand) +} + +// ============================================================================= +// FleetStateError Tests +// ============================================================================= + +func TestFleetStateError(t *testing.T) { + err := NewFleetStateError("fleet-1", "raiding", "build") + + // Test Error() message + assertContains(t, err.Error(), "fleet-1") + assertContains(t, err.Error(), "raiding") + + // Test Code() + assertCode(t, err.Code(), 1453) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "fleet_id", "state", "action") + + // Test Unwrap() + assertErrorIs(t, err, ErrFleetState) +} + +// ============================================================================= +// StructOwnershipError Tests +// ============================================================================= + +func TestStructOwnershipError(t *testing.T) { + err := NewStructOwnershipError("struct-1", "fleet-1", "fleet-2") + + // Test Error() message contains location type + assertContains(t, err.Error(), "struct owner must match") + + // Test Code() + assertCode(t, err.Code(), 1301) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "struct_id", "expected_owner", "actual_owner") + + // Test Unwrap() + assertErrorIs(t, err, ErrStructOwnership) +} + +// ============================================================================= +// StructLocationError Tests +// ============================================================================= + +func TestStructLocationError(t *testing.T) { + err := NewStructLocationError(5, "space", "invalid_ambit") + + // Test Error() message + assertContains(t, err.Error(), "struct type") + assertContains(t, err.Error(), "5") + + // Test Code() + assertCode(t, err.Code(), 1302) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "struct_type", "ambit", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrStructLocation) +} + +func TestStructLocationError_WithMethods(t *testing.T) { + err := NewStructLocationError(3, "land", "out_of_range"). + WithStruct("struct-1"). + WithLocation("planet", "planet-1") + + if err.StructId != "struct-1" { + t.Errorf("expected StructId struct-1, got %s", err.StructId) + } + if err.LocationType != "planet" { + t.Errorf("expected LocationType planet, got %s", err.LocationType) + } + if err.LocationId != "planet-1" { + t.Errorf("expected LocationId planet-1, got %s", err.LocationId) + } +} + +// ============================================================================= +// CombatTargetingError Tests +// ============================================================================= + +func TestCombatTargetingError(t *testing.T) { + err := NewCombatTargetingError("struct-1", "struct-2", "laser", "out_of_range") + + // Test Error() message + assertContains(t, err.Error(), "struct-1") + assertContains(t, err.Error(), "struct-2") + + // Test Code() + assertCode(t, err.Code(), 1400) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "attacker_id", "target_id", "weapon_system", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrCombatTargeting) +} + +func TestCombatTargetingError_AsCounter(t *testing.T) { + err := NewCombatTargetingError("struct-1", "struct-2", "cannon", "destroyed"). + AsCounter() + + if !err.IsCounter { + t.Errorf("expected IsCounter true, got false") + } +} + +// ============================================================================= +// StructBuildError Tests +// ============================================================================= + +func TestStructBuildError(t *testing.T) { + err := NewStructBuildError(5, "fleet", "fleet-1", "slot_occupied") + + // Test Error() message + assertContains(t, err.Error(), "fleet") + assertContains(t, err.Error(), "fleet-1") + + // Test Code() + assertCode(t, err.Code(), 1350) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "struct_type", "location_type", "location_id", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrStructBuild) +} + +func TestStructBuildError_WithSlot(t *testing.T) { + err := NewStructBuildError(7, "fleet", "fleet-1", "command_exists"). + WithSlot(3) + + if err.Slot != 3 { + t.Errorf("expected Slot 3, got %d", err.Slot) + } +} + +// ============================================================================= +// PlayerHaltedError Tests +// ============================================================================= + +func TestPlayerHaltedError(t *testing.T) { + err := NewPlayerHaltedError("player-1", "struct_build") + + // Test Error() message + assertContains(t, err.Error(), "player-1") + assertContains(t, err.Error(), "halted") + + // Test Code() + assertCode(t, err.Code(), 1151) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "player_id", "action") + + // Test Unwrap() + assertErrorIs(t, err, ErrPlayerHalted) +} + +func TestPlayerHaltedError_WithStruct(t *testing.T) { + err := NewPlayerHaltedError("player-1", "activate"). + WithStruct("struct-1") + + if err.StructId != "struct-1" { + t.Errorf("expected StructId struct-1, got %s", err.StructId) + } +} + +// ============================================================================= +// PlayerRequiredError Tests +// ============================================================================= + +func TestPlayerRequiredError(t *testing.T) { + err := NewPlayerRequiredError("cosmos1abc", "guild_create") + + // Test Error() message + assertContains(t, err.Error(), "cosmos1abc") + assertContains(t, err.Error(), "player") + + // Test Code() + assertCode(t, err.Code(), 1150) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "address", "action") + + // Test Unwrap() + assertErrorIs(t, err, ErrPlayerRequired) +} + +// ============================================================================= +// AddressValidationError Tests +// ============================================================================= + +func TestAddressValidationError(t *testing.T) { + err := NewAddressValidationError("cosmos1abc", "not_registered") + + // Test Error() message + assertContains(t, err.Error(), "cosmos1abc") + assertContains(t, err.Error(), "not associated with a player") + + // Test Code() + assertCode(t, err.Code(), 1750) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "address", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrAddressValidation) +} + +func TestAddressValidationError_WithMethods(t *testing.T) { + err := NewAddressValidationError("cosmos1abc", "wrong_player"). + WithPlayers("player-1", "player-2") + + if err.ExpectedPlayerId != "player-1" { + t.Errorf("expected ExpectedPlayerId player-1, got %s", err.ExpectedPlayerId) + } + if err.ActualPlayerId != "player-2" { + t.Errorf("expected ActualPlayerId player-2, got %s", err.ActualPlayerId) + } +} + +// ============================================================================= +// GuildMembershipError Tests +// ============================================================================= + +func TestGuildMembershipError(t *testing.T) { + err := NewGuildMembershipError("guild-1", "player-1", "already_member") + + // Test Error() message + assertContains(t, err.Error(), "guild-1") + assertContains(t, err.Error(), "player-1") + + // Test Code() + assertCode(t, err.Code(), 1501) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "guild_id", "player_id", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrGuildMembership) +} + +func TestGuildMembershipError_WithJoinType(t *testing.T) { + err := NewGuildMembershipError("guild-1", "player-1", "wrong_join_type"). + WithJoinType("invite") + + if err.JoinType != "invite" { + t.Errorf("expected JoinType invite, got %s", err.JoinType) + } +} + +// ============================================================================= +// GuildUpdateError Tests +// ============================================================================= + +func TestGuildUpdateError(t *testing.T) { + err := NewGuildUpdateError("guild-1", "player-1", "owner_id", "invalid_player") + + // Test Error() message + assertContains(t, err.Error(), "guild-1") + assertContains(t, err.Error(), "player-1") + + // Test Code() + assertCode(t, err.Code(), 1500) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "guild_id", "player_id", "field", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrGuildUpdate) +} + +// ============================================================================= +// AllocationError Tests +// ============================================================================= + +func TestAllocationError(t *testing.T) { + err := NewAllocationError("sub-1", "capacity_exceeded") + + // Test Error() message + assertContains(t, err.Error(), "sub-1") + assertContains(t, err.Error(), "capacity") + + // Test Code() + assertCode(t, err.Code(), 1550) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "source_id", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrAllocationCreate) +} + +func TestAllocationError_WithMethods(t *testing.T) { + err := NewAllocationError("sub-1", "capacity"). + WithAllocation("alloc-1"). + WithCapacity(50, 100) + + if err.AllocationId != "alloc-1" { + t.Errorf("expected AllocationId alloc-1, got %s", err.AllocationId) + } + if err.RequestedPower != 100 { + t.Errorf("expected RequestedPower 100, got %d", err.RequestedPower) + } + if err.AvailableCapacity != 50 { + t.Errorf("expected AvailableCapacity 50, got %d", err.AvailableCapacity) + } +} + +// ============================================================================= +// ReactorError Tests +// ============================================================================= + +func TestReactorError(t *testing.T) { + err := NewReactorError("infuse", "invalid_amount") + + // Test Error() message + assertContains(t, err.Error(), "invalid delegation amount") + + // Test Code() + assertCode(t, err.Code(), 1600) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "operation", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrReactor) +} + +func TestReactorError_WithMethods(t *testing.T) { + err := NewReactorError("defuse", "insufficient_balance"). + WithReactor("reactor-1"). + WithAmount(1000). + WithDenom("alpha", "beta") + + if err.ReactorId != "reactor-1" { + t.Errorf("expected ReactorId reactor-1, got %s", err.ReactorId) + } + if err.Amount != 1000 { + t.Errorf("expected Amount 1000, got %d", err.Amount) + } + if err.Denom != "alpha" { + t.Errorf("expected Denom alpha, got %s", err.Denom) + } + if err.ExpectedDenom != "beta" { + t.Errorf("expected ExpectedDenom beta, got %s", err.ExpectedDenom) + } +} + +// ============================================================================= +// WorkFailureError Tests +// ============================================================================= + +func TestWorkFailureError(t *testing.T) { + err := NewWorkFailureError("build", "struct-1", "input-hash") + + // Test Error() message + assertContains(t, err.Error(), "build") + assertContains(t, err.Error(), "struct-1") + + // Test Code() + assertCode(t, err.Code(), 1800) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "operation", "struct_id", "hash_input") + + // Test Unwrap() + assertErrorIs(t, err, ErrWorkFailure) +} + +// ============================================================================= +// ProviderAccessError Tests +// ============================================================================= + +func TestProviderAccessError(t *testing.T) { + err := NewProviderAccessError("provider-1", "closed_market") + + // Test Error() message + assertContains(t, err.Error(), "provider-1") + assertContains(t, err.Error(), "closed_market") + + // Test Code() + assertCode(t, err.Code(), 1700) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "provider_id", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrProviderAccess) +} + +func TestProviderAccessError_WithMethods(t *testing.T) { + err := NewProviderAccessError("provider-1", "guild_not_allowed"). + WithPlayer("player-1"). + WithGuild("guild-1") + + if err.PlayerId != "player-1" { + t.Errorf("expected PlayerId player-1, got %s", err.PlayerId) + } + if err.GuildId != "guild-1" { + t.Errorf("expected GuildId guild-1, got %s", err.GuildId) + } +} + +// ============================================================================= +// ParameterValidationError Tests +// ============================================================================= + +func TestParameterValidationError(t *testing.T) { + err := NewParameterValidationError("capacity", 500, "above_maximum") + + // Test Error() message + assertContains(t, err.Error(), "capacity") + assertContains(t, err.Error(), "500") + + // Test Code() + assertCode(t, err.Code(), 1710) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "parameter", "value", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrParameterValidation) +} + +func TestParameterValidationError_WithMethods(t *testing.T) { + err := NewParameterValidationError("duration", 100, "below_minimum"). + WithRange(200, 1000). + WithSubstation("sub-1") + + if err.Minimum != 200 { + t.Errorf("expected Minimum 200, got %d", err.Minimum) + } + if err.Maximum != 1000 { + t.Errorf("expected Maximum 1000, got %d", err.Maximum) + } + if err.SubstationId != "sub-1" { + t.Errorf("expected SubstationId sub-1, got %s", err.SubstationId) + } +} + +// ============================================================================= +// PlanetStateError Tests +// ============================================================================= + +func TestPlanetStateError(t *testing.T) { + err := NewPlanetStateError("planet-1", "complete", "explore") + + // Test Error() message + assertContains(t, err.Error(), "planet-1") + assertContains(t, err.Error(), "complete") + + // Test Code() + assertCode(t, err.Code(), 1650) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "planet_id", "state", "action") + + // Test Unwrap() + assertErrorIs(t, err, ErrPlanetState) +} + +// ============================================================================= +// FuelInfuseError Tests +// ============================================================================= + +func TestFuelInfuseError(t *testing.T) { + err := NewFuelInfuseError("struct-1", "100", "invalid_fuel_type") + + // Test Error() message + assertContains(t, err.Error(), "struct-1") + assertContains(t, err.Error(), "invalid_fuel_type") + + // Test Code() + assertCode(t, err.Code(), 1270) + + // Test LogFields() + fields := err.LogFields() + assertLogFieldsContain(t, fields, "error_type", "struct_id", "amount", "reason") + + // Test Unwrap() + assertErrorIs(t, err, ErrStructInfuse) +} + +// ============================================================================= +// Interface Implementation Tests +// ============================================================================= + +func TestStructuredErrorInterface(t *testing.T) { + // Verify all error types implement StructuredError + var _ StructuredError = &ObjectNotFoundError{} + var _ StructuredError = &InsufficientChargeError{} + var _ StructuredError = &PermissionError{} + var _ StructuredError = &PlayerPowerError{} + var _ StructuredError = &PlayerAffordabilityError{} + var _ StructuredError = &StructStateError{} + var _ StructuredError = &StructCapabilityError{} + var _ StructuredError = &FleetCommandError{} + var _ StructuredError = &FleetStateError{} + var _ StructuredError = &StructOwnershipError{} + var _ StructuredError = &StructLocationError{} + var _ StructuredError = &CombatTargetingError{} + var _ StructuredError = &StructBuildError{} + var _ StructuredError = &PlayerHaltedError{} + var _ StructuredError = &PlayerRequiredError{} + var _ StructuredError = &AddressValidationError{} + var _ StructuredError = &GuildMembershipError{} + var _ StructuredError = &GuildUpdateError{} + var _ StructuredError = &AllocationError{} + var _ StructuredError = &ReactorError{} + var _ StructuredError = &WorkFailureError{} + var _ StructuredError = &ProviderAccessError{} + var _ StructuredError = &ParameterValidationError{} + var _ StructuredError = &PlanetStateError{} + var _ StructuredError = &FuelInfuseError{} +} + +// ============================================================================= +// Error Chaining Tests +// ============================================================================= + +func TestMethodChaining(t *testing.T) { + // Test that method chaining returns the same pointer and allows fluent calls + err := NewObjectNotFoundError("player", "player-1"). + WithIndex(42). + WithContext("test context") + + if err.ObjectIndex != 42 { + t.Errorf("expected ObjectIndex 42, got %d", err.ObjectIndex) + } + if err.Context != "test context" { + t.Errorf("expected Context 'test context', got %s", err.Context) + } + + // Verify error message still works after chaining + assertContains(t, err.Error(), "player") + assertContains(t, err.Error(), "test context") +} + +// ============================================================================= +// Code Uniqueness Tests +// ============================================================================= + +func TestErrorCodesAreUnique(t *testing.T) { + codes := map[uint32]string{ + NewObjectNotFoundError("", "").Code(): "ObjectNotFoundError", + NewInsufficientChargeError("", 0, 0, "").Code(): "InsufficientChargeError", + NewPermissionError("", "", "", "", 0, "").Code(): "PermissionError", + NewPlayerPowerError("", "").Code(): "PlayerPowerError", + NewPlayerAffordabilityError("", "", "").Code(): "PlayerAffordabilityError", + NewStructStateError("", "", "", "").Code(): "StructStateError", + NewStructCapabilityError("", "").Code(): "StructCapabilityError", + NewFleetCommandError("", "").Code(): "FleetCommandError", + NewFleetStateError("", "", "").Code(): "FleetStateError", + NewStructOwnershipError("", "", "").Code(): "StructOwnershipError", + NewStructLocationError(0, "", "").Code(): "StructLocationError", + NewCombatTargetingError("", "", "", "").Code(): "CombatTargetingError", + NewStructBuildError(0, "", "", "").Code(): "StructBuildError", + NewPlayerHaltedError("", "").Code(): "PlayerHaltedError", + NewPlayerRequiredError("", "").Code(): "PlayerRequiredError", + NewAddressValidationError("", "").Code(): "AddressValidationError", + NewGuildMembershipError("", "", "").Code(): "GuildMembershipError", + NewGuildUpdateError("", "", "", "").Code(): "GuildUpdateError", + NewAllocationError("", "").Code(): "AllocationError", + NewReactorError("", "").Code(): "ReactorError", + NewWorkFailureError("", "", "").Code(): "WorkFailureError", + NewProviderAccessError("", "").Code(): "ProviderAccessError", + NewParameterValidationError("", 0, "").Code(): "ParameterValidationError", + NewPlanetStateError("", "", "").Code(): "PlanetStateError", + NewFuelInfuseError("", "", "").Code(): "FuelInfuseError", + } + + // This test verifies we have 25 unique codes + if len(codes) != 25 { + t.Errorf("expected 25 unique error codes, got %d", len(codes)) + } +} From f8caf997a712969e479f8e1e803e39f765ffc2de Mon Sep 17 00:00:00 2001 From: abstrct Date: Tue, 27 Jan 2026 21:45:56 -0500 Subject: [PATCH 04/14] refactor: migrate error handling in types to structured error types --- x/structs/types/fleet.go | 3 +-- x/structs/types/provider.go | 17 ++++++++--------- x/structs/types/struct_type.go | 7 +++---- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/x/structs/types/fleet.go b/x/structs/types/fleet.go index b381ab5..9972a88 100644 --- a/x/structs/types/fleet.go +++ b/x/structs/types/fleet.go @@ -2,7 +2,6 @@ package types import ( //sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" ) func (fleet *Fleet) SetSlot(structure Struct) (err error) { @@ -17,7 +16,7 @@ func (fleet *Fleet) SetSlot(structure Struct) (err error) { case Ambit_space: fleet.Space[structure.Slot] = structure.Id default: - err = sdkerrors.Wrapf(ErrStructAction, "Struct cannot exist in the defined ambit (%s) ", structure.OperatingAmbit) + err = NewStructLocationError(structure.Type, structure.OperatingAmbit.String(), "invalid_ambit").WithStruct(structure.Id) } return diff --git a/x/structs/types/provider.go b/x/structs/types/provider.go index 8427b2c..ecd3cae 100644 --- a/x/structs/types/provider.go +++ b/x/structs/types/provider.go @@ -2,7 +2,6 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "cosmossdk.io/math" ) @@ -28,7 +27,7 @@ func (provider *Provider) SetRate(rate sdk.Coin) error { func (provider *Provider) SetCapacityRange(minimum uint64, maximum uint64) error { if minimum > maximum { - return sdkerrors.Wrapf(ErrInvalidParameters, "Minimum Capacity (%d) cannot be larger than Maximum Capacity (%d)", minimum, maximum) + return NewParameterValidationError("capacity_minimum", minimum, "exceeds_maximum").WithRange(0, maximum) } if minimum == 0 { @@ -48,7 +47,7 @@ func (provider *Provider) SetCapacityRange(minimum uint64, maximum uint64) error func (provider *Provider) SetCapacityMaximum(maximum uint64) error { if provider.CapacityMinimum > maximum { - return sdkerrors.Wrapf(ErrInvalidParameters, "Minimum Capacity (%d) cannot be larger than Maximum Capacity (%d)", provider.CapacityMinimum, maximum) + return NewParameterValidationError("capacity_maximum", maximum, "below_minimum").WithRange(provider.CapacityMinimum, 0) } if maximum == 0 { @@ -62,7 +61,7 @@ func (provider *Provider) SetCapacityMaximum(maximum uint64) error { func (provider *Provider) SetCapacityMinimum(minimum uint64) error { if minimum > provider.CapacityMaximum { - return sdkerrors.Wrapf(ErrInvalidParameters, "Minimum Capacity (%d) cannot be larger than Maximum Capacity (%d)", minimum, provider.CapacityMaximum) + return NewParameterValidationError("capacity_minimum", minimum, "exceeds_maximum").WithRange(0, provider.CapacityMaximum) } if minimum == 0 { @@ -77,7 +76,7 @@ func (provider *Provider) SetCapacityMinimum(minimum uint64) error { func (provider *Provider) SetDurationRange(minimum uint64, maximum uint64) error { if minimum > maximum { - return sdkerrors.Wrapf(ErrInvalidParameters, "Minimum Duration (%d) cannot be larger than Maximum Duration (%d)", minimum, maximum) + return NewParameterValidationError("duration_minimum", minimum, "exceeds_maximum").WithRange(0, maximum) } if minimum == 0 { @@ -97,7 +96,7 @@ func (provider *Provider) SetDurationRange(minimum uint64, maximum uint64) error func (provider *Provider) SetDurationMaximum(maximum uint64) error { if provider.DurationMinimum > maximum { - return sdkerrors.Wrapf(ErrInvalidParameters, "Minimum Duration (%d) cannot be larger than Maximum Duration (%d)", provider.DurationMinimum, maximum) + return NewParameterValidationError("duration_maximum", maximum, "below_minimum").WithRange(provider.DurationMinimum, 0) } if maximum == 0 { @@ -110,7 +109,7 @@ func (provider *Provider) SetDurationMaximum(maximum uint64) error { func (provider *Provider) SetDurationMinimum(minimum uint64) error { if minimum > provider.DurationMaximum { - return sdkerrors.Wrapf(ErrInvalidParameters, "Minimum Duration (%d) cannot be larger than Maximum Duration (%d)", minimum, provider.DurationMaximum) + return NewParameterValidationError("duration_minimum", minimum, "exceeds_maximum").WithRange(0, provider.DurationMaximum) } if minimum == 0 { @@ -127,7 +126,7 @@ func (provider *Provider) SetProviderCancellationPenalty(penalty math.LegacyDec) // 1 <= Provider Cancellation Policy => 0 if (!penalty.GTE(math.LegacyZeroDec())) || (!penalty.LTE(one)) { - return sdkerrors.Wrapf(ErrInvalidParameters, "Provider Cancellation Penalty (%f) must be between 1 and 0", penalty) + return NewParameterValidationError("provider_cancellation_penalty", 0, "out_of_range") } provider.ProviderCancellationPenalty = penalty @@ -140,7 +139,7 @@ func (provider *Provider) SetConsumerCancellationPenalty(penalty math.LegacyDec) // 1 <= Provider Cancellation Policy => 0 if (!penalty.GTE(math.LegacyZeroDec())) || (!penalty.LTE(one)) { - return sdkerrors.Wrapf(ErrInvalidParameters, "Consumer Cancellation Penalty (%f) must be between 1 and 0", penalty) + return NewParameterValidationError("consumer_cancellation_penalty", 0, "out_of_range") } provider.ConsumerCancellationPenalty = penalty diff --git a/x/structs/types/struct_type.go b/x/structs/types/struct_type.go index 8102cdf..ccafa45 100644 --- a/x/structs/types/struct_type.go +++ b/x/structs/types/struct_type.go @@ -2,7 +2,6 @@ package types import ( //sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "github.com/nethruster/go-fraction" "fmt" ) @@ -12,14 +11,14 @@ func (structType *StructType) VerifyWeaponSystem(weaponSystem TechWeaponSystem) switch weaponSystem { case TechWeaponSystem_primaryWeapon: if (structType.PrimaryWeapon == TechActiveWeaponry_noActiveWeaponry) { - err = sdkerrors.Wrapf(ErrObjectNotFound, "No valid primary weapon system") + err = NewStructCapabilityError(fmt.Sprintf("struct_type_%d", structType.Id), "primary_weapon") } case TechWeaponSystem_secondaryWeapon: if (structType.SecondaryWeapon == TechActiveWeaponry_noActiveWeaponry) { - err = sdkerrors.Wrapf(ErrObjectNotFound, "No valid secondary weapon system") + err = NewStructCapabilityError(fmt.Sprintf("struct_type_%d", structType.Id), "secondary_weapon") } default: - err = sdkerrors.Wrapf(ErrObjectNotFound, "No valid weapon system provided") + err = NewStructCapabilityError(fmt.Sprintf("struct_type_%d", structType.Id), "weapon_system") } return } From abec6027d72175b709a1645bb7c2618348528c8d Mon Sep 17 00:00:00 2001 From: abstrct Date: Tue, 27 Jan 2026 22:24:44 -0500 Subject: [PATCH 05/14] Fixed a weapon verification issue in attack --- x/structs/keeper/msg_server_struct_attack.go | 47 +++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/x/structs/keeper/msg_server_struct_attack.go b/x/structs/keeper/msg_server_struct_attack.go index c317d8b..3e521b8 100644 --- a/x/structs/keeper/msg_server_struct_attack.go +++ b/x/structs/keeper/msg_server_struct_attack.go @@ -32,19 +32,26 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac // Is the Struct & Owner online? readinessError := structure.ReadinessCheck() if (readinessError != nil) { - k.DischargePlayer(ctx, structure.GetOwnerId()) return &types.MsgStructAttackResponse{}, readinessError } if !structure.IsCommandable() { - k.DischargePlayer(ctx, structure.GetOwnerId()) return &types.MsgStructAttackResponse{}, types.NewFleetCommandError(structure.GetFleet().GetFleetId(), "command_offline").WithStructId(structure.GetStructId()) } + weaponSystem, weaponSystemExists := types.TechWeaponSystem_enum[msg.WeaponSystem] + if !weaponSystemExists { + return &types.MsgStructAttackResponse{}, types.NewParameterValidationError("weapon_system", 0, "invalid") + } + + weaponSystemError := structure.GetStructType().VerifyWeaponSystem(weaponSystem) + if weaponSystemError != nil { + return &types.MsgStructAttackResponse{}, weaponSystemError + } + playerCharge := k.GetPlayerCharge(ctx, structure.GetOwnerId()) - if (playerCharge < structure.GetStructType().GetWeaponCharge(types.TechWeaponSystem_enum[msg.WeaponSystem])) { - k.DischargePlayer(ctx, structure.GetOwnerId()) - return &types.MsgStructAttackResponse{}, types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetWeaponCharge(types.TechWeaponSystem_enum[msg.WeaponSystem]), playerCharge, "attack").WithStructType(structure.GetTypeId()) + if (playerCharge < structure.GetStructType().GetWeaponCharge(weaponSystem)) { + return &types.MsgStructAttackResponse{}, types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetWeaponCharge(weaponSystem), playerCharge, "attack").WithStructType(structure.GetTypeId()) } // Jump out of Stealth Mode for the attack @@ -52,21 +59,20 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac var eventAttackDetail *types.EventAttackDetail eventAttackDetail = structure.GetEventAttackDetail() - eventAttackDetail.SetBaseDetails(structure.GetOwnerId(), structure.GetStructId(), structure.GetTypeId(), structure.GetLocationType(), structure.GetLocationId(), structure.GetOperatingAmbit(), structure.GetSlot(), types.TechWeaponSystem_enum[msg.WeaponSystem], structure.GetStructType().GetWeaponControl(types.TechWeaponSystem_enum[msg.WeaponSystem]), structure.GetStructType().GetWeapon(types.TechWeaponSystem_enum[msg.WeaponSystem])) + eventAttackDetail.SetBaseDetails(structure.GetOwnerId(), structure.GetStructId(), structure.GetTypeId(), structure.GetLocationType(), structure.GetLocationId(), structure.GetOperatingAmbit(), structure.GetSlot(), weaponSystem, structure.GetStructType().GetWeaponControl(weaponSystem), structure.GetStructType().GetWeapon(weaponSystem)) structure.ManualLoadEventAttackDetail(eventAttackDetail) var targetWasPlanetary bool var targetWasOnPlanet *PlanetCache - if uint64(len(msg.TargetStructId)) != structure.GetStructType().GetWeaponTargets(types.TechWeaponSystem_enum[msg.WeaponSystem]) { - k.DischargePlayer(ctx, structure.GetOwnerId()) + if uint64(len(msg.TargetStructId)) != structure.GetStructType().GetWeaponTargets(weaponSystem) { return &types.MsgStructAttackResponse{}, types.NewCombatTargetingError(structure.GetStructId(), "", msg.WeaponSystem, "incomplete_targeting") } // Begin taking shots. Most weapons only use a single shot but some perform multiple. - for shot := uint64(0); shot < (structure.GetStructType().GetWeaponTargets(types.TechWeaponSystem_enum[msg.WeaponSystem])); shot++ { - k.logger.Info("Attack Action", "structId", msg.OperatingStructId, "shot", shot, "shots", structure.GetStructType().GetWeaponTargets(types.TechWeaponSystem_enum[msg.WeaponSystem]), "target", msg.TargetStructId[shot] ) + for shot := uint64(0); shot < (structure.GetStructType().GetWeaponTargets(weaponSystem)); shot++ { + k.logger.Info("Attack Action", "structId", msg.OperatingStructId, "shot", shot, "shots", structure.GetStructType().GetWeaponTargets(weaponSystem), "target", msg.TargetStructId[shot] ) // Load the Target Struct cache object targetStructure := k.GetStructCacheFromId(ctx, msg.TargetStructId[shot]) @@ -80,15 +86,14 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac /* Can the attacker attack? */ // Check that the Structs are within attacking range of each other // This includes both a weapon<->ambit check, and a fleet<->planet - targetingError := structure.CanAttack(&targetStructure, types.TechWeaponSystem_enum[msg.WeaponSystem]) + targetingError := structure.CanAttack(&targetStructure, weaponSystem) if (targetingError != nil) { - k.DischargePlayer(ctx, structure.GetOwnerId()) return &types.MsgStructAttackResponse{}, targetingError } k.logger.Info("Struct Targetable", "target", msg.TargetStructId[shot]) - if (targetStructure.CanEvade(&structure, types.TechWeaponSystem_enum[msg.WeaponSystem])) { + if (targetStructure.CanEvade(&structure, weaponSystem)) { k.logger.Info("Struct Evaded", "target", msg.TargetStructId[shot]) structure.GetEventAttackDetail().AppendShot(targetStructure.FlushEventAttackShotDetail()) continue @@ -97,8 +102,8 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac attackBlocked := false // Check to make sure the attack is either counterable, blockable, or both. Otherwise skip this section - k.logger.Info("Struct Attacker Status", "structId", structure.GetStructId(), "blockable", (structure.GetStructType().GetWeaponBlockable(types.TechWeaponSystem_enum[msg.WeaponSystem])), "counterable",(structure.GetStructType().GetWeaponCounterable(types.TechWeaponSystem_enum[msg.WeaponSystem]))) - if ((structure.GetStructType().GetWeaponBlockable(types.TechWeaponSystem_enum[msg.WeaponSystem])) || (structure.GetStructType().GetWeaponCounterable(types.TechWeaponSystem_enum[msg.WeaponSystem]))) { + k.logger.Info("Struct Attacker Status", "structId", structure.GetStructId(), "blockable", (structure.GetStructType().GetWeaponBlockable(weaponSystem)), "counterable",(structure.GetStructType().GetWeaponCounterable(weaponSystem))) + if ((structure.GetStructType().GetWeaponBlockable(weaponSystem)) || (structure.GetStructType().GetWeaponCounterable(weaponSystem))) { // Check the Defenders defenderPlayer := targetStructure.GetOwner() @@ -114,14 +119,14 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac defenderReadinessError := defender.ReadinessCheck() if (defenderReadinessError == nil) { k.logger.Info("Defender seems ready to defend") - if (!attackBlocked && (structure.GetStructType().GetWeaponBlockable(types.TechWeaponSystem_enum[msg.WeaponSystem]))) { + if (!attackBlocked && (structure.GetStructType().GetWeaponBlockable(weaponSystem))) { k.logger.Info("Defender to attempt a block!") - attackBlocked = defender.AttemptBlock(&structure, types.TechWeaponSystem_enum[msg.WeaponSystem], &targetStructure) + attackBlocked = defender.AttemptBlock(&structure, weaponSystem, &targetStructure) } } - if (structure.GetStructType().GetWeaponCounterable(types.TechWeaponSystem_enum[msg.WeaponSystem])) { + if (structure.GetStructType().GetWeaponCounterable(weaponSystem)) { k.logger.Info("Defender trying to counter!.. ") counterErrors := defender.CanCounterAttack(&structure) if (counterErrors == nil) { @@ -138,13 +143,13 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac // Turns out, my Struct wasn't attacking because I forgot the part of Attack that attacks. if (!attackBlocked && structure.IsOnline()) { k.logger.Info("Moving forward with the attack", "target", msg.TargetStructId[shot]) - targetStructure.TakeAttackDamage(&structure, types.TechWeaponSystem_enum[msg.WeaponSystem]) + targetStructure.TakeAttackDamage(&structure, weaponSystem) } else { k.logger.Info("Attack against target was blocked", "target", msg.TargetStructId[shot]) } - if (structure.GetStructType().GetWeaponCounterable(types.TechWeaponSystem_enum[msg.WeaponSystem])) { + if (structure.GetStructType().GetWeaponCounterable(weaponSystem)) { k.logger.Info("Target trying to Counter now!") counterErrors := targetStructure.CanCounterAttack(&structure) if (counterErrors == nil) { @@ -165,7 +170,7 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac } // Recoil Damage - structure.TakeRecoilDamage(types.TechWeaponSystem_enum[msg.WeaponSystem]) + structure.TakeRecoilDamage(weaponSystem) // Check for Planetary Damage, namely Defense Cannons if (targetWasPlanetary) { From 79543b88aabfa44366dde3cba32b7a9474b3c541 Mon Sep 17 00:00:00 2001 From: abstrct Date: Tue, 27 Jan 2026 22:38:54 -0500 Subject: [PATCH 06/14] Fixed target struct lookup vulnerability --- x/structs/keeper/msg_server_struct_attack.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x/structs/keeper/msg_server_struct_attack.go b/x/structs/keeper/msg_server_struct_attack.go index 3e521b8..8f6888c 100644 --- a/x/structs/keeper/msg_server_struct_attack.go +++ b/x/structs/keeper/msg_server_struct_attack.go @@ -75,6 +75,9 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac k.logger.Info("Attack Action", "structId", msg.OperatingStructId, "shot", shot, "shots", structure.GetStructType().GetWeaponTargets(weaponSystem), "target", msg.TargetStructId[shot] ) // Load the Target Struct cache object targetStructure := k.GetStructCacheFromId(ctx, msg.TargetStructId[shot]) + if !targetStructure.LoadStruct() { + return &types.MsgStructAttackResponse{}, types.NewObjectNotFoundError("struct", msg.TargetStructId[shot]) + } targetStructure.ManualLoadEventAttackDetail(eventAttackDetail) eventAttackDetail.SetTargetPlayerId(targetStructure.GetOwnerId()) From e3cf4d677882b63b01d1ffc0bf339a28becdf613 Mon Sep 17 00:00:00 2001 From: abstrct Date: Wed, 28 Jan 2026 00:32:36 -0500 Subject: [PATCH 07/14] Adding a consistent ID() function to all cache systems. --- x/structs/keeper/agreement_cache.go | 4 ++++ x/structs/keeper/fleet_cache.go | 4 ++++ x/structs/keeper/grid_cache.go | 4 ++++ x/structs/keeper/guild_cache.go | 4 ++++ x/structs/keeper/guild_membership_cache.go | 4 ++++ x/structs/keeper/infusion_cache.go | 4 ++++ x/structs/keeper/planet_cache.go | 4 ++++ x/structs/keeper/player_cache.go | 4 ++++ x/structs/keeper/provider_cache.go | 4 ++++ x/structs/keeper/struct_cache.go | 4 ++++ x/structs/keeper/substation_cache.go | 4 ++++ 11 files changed, 44 insertions(+) diff --git a/x/structs/keeper/agreement_cache.go b/x/structs/keeper/agreement_cache.go index 55d0b01..49f9af8 100644 --- a/x/structs/keeper/agreement_cache.go +++ b/x/structs/keeper/agreement_cache.go @@ -102,6 +102,10 @@ func (cache *AgreementCache) IsChanged() bool { return cache.AnyChange } +func (cache *AgreementCache) ID() string { + return cache.AgreementId +} + func (cache *AgreementCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/fleet_cache.go b/x/structs/keeper/fleet_cache.go index 927d54a..3af2c37 100644 --- a/x/structs/keeper/fleet_cache.go +++ b/x/structs/keeper/fleet_cache.go @@ -91,6 +91,10 @@ func (cache *FleetCache) IsChanged() bool { return cache.AnyChange } +func (cache *FleetCache) ID() string { + return cache.FleetId +} + func (cache *FleetCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/grid_cache.go b/x/structs/keeper/grid_cache.go index aab83b6..0d55d76 100644 --- a/x/structs/keeper/grid_cache.go +++ b/x/structs/keeper/grid_cache.go @@ -171,6 +171,10 @@ func (cache *GridCache) IsChanged() bool { return cache.AnyChange } +func (cache *GridCache) ID() string { + return cache.ObjectId +} + func (cache *GridCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/guild_cache.go b/x/structs/keeper/guild_cache.go index ccc7d55..74d2c7b 100644 --- a/x/structs/keeper/guild_cache.go +++ b/x/structs/keeper/guild_cache.go @@ -92,6 +92,10 @@ func (cache *GuildCache) IsChanged() bool { return cache.AnyChange } +func (cache *GuildCache) ID() string { + return cache.GuildId +} + func (cache *GuildCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/guild_membership_cache.go b/x/structs/keeper/guild_membership_cache.go index e567e83..0b2de88 100644 --- a/x/structs/keeper/guild_membership_cache.go +++ b/x/structs/keeper/guild_membership_cache.go @@ -210,6 +210,10 @@ func (cache *GuildMembershipApplicationCache) IsChanged() bool { return cache.AnyChange } +func (cache *GuildMembershipApplicationCache) ID() string { + return cache.GuildMembershipApplication.GuildId + "/" + cache.GuildMembershipApplication.PlayerId +} + func (cache *GuildMembershipApplicationCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/infusion_cache.go b/x/structs/keeper/infusion_cache.go index 0a99668..ecc8663 100644 --- a/x/structs/keeper/infusion_cache.go +++ b/x/structs/keeper/infusion_cache.go @@ -138,6 +138,10 @@ func (cache *InfusionCache) IsChanged() bool { return cache.AnyChange } +func (cache *InfusionCache) ID() string { + return cache.DestinationId + "/" + cache.Address +} + func (cache *InfusionCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/planet_cache.go b/x/structs/keeper/planet_cache.go index a1454c1..7c33ec7 100644 --- a/x/structs/keeper/planet_cache.go +++ b/x/structs/keeper/planet_cache.go @@ -236,6 +236,10 @@ func (cache *PlanetCache) IsChanged() bool { return cache.AnyChange } +func (cache *PlanetCache) ID() string { + return cache.PlanetId +} + func (cache *PlanetCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/player_cache.go b/x/structs/keeper/player_cache.go index 9971bc5..6845af7 100644 --- a/x/structs/keeper/player_cache.go +++ b/x/structs/keeper/player_cache.go @@ -180,6 +180,10 @@ func (cache *PlayerCache) IsChanged() bool { return cache.AnyChange } +func (cache *PlayerCache) ID() string { + return cache.PlayerId +} + func (cache *PlayerCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/provider_cache.go b/x/structs/keeper/provider_cache.go index 908a654..9f604a8 100644 --- a/x/structs/keeper/provider_cache.go +++ b/x/structs/keeper/provider_cache.go @@ -96,6 +96,10 @@ func (cache *ProviderCache) IsChanged() bool { return cache.AnyChange } +func (cache *ProviderCache) ID() string { + return cache.ProviderId +} + func (cache *ProviderCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/struct_cache.go b/x/structs/keeper/struct_cache.go index a0dc89f..bafd1c5 100644 --- a/x/structs/keeper/struct_cache.go +++ b/x/structs/keeper/struct_cache.go @@ -325,6 +325,10 @@ func (cache *StructCache) IsChanged() bool { return cache.AnyChange } +func (cache *StructCache) ID() string { + return cache.StructId +} + func (cache *StructCache) Changed() { cache.AnyChange = true } diff --git a/x/structs/keeper/substation_cache.go b/x/structs/keeper/substation_cache.go index 0597105..4cb385b 100644 --- a/x/structs/keeper/substation_cache.go +++ b/x/structs/keeper/substation_cache.go @@ -92,6 +92,10 @@ func (cache *SubstationCache) IsChanged() bool { return cache.AnyChange } +func (cache *SubstationCache) ID() string { + return cache.SubstationId +} + func (cache *SubstationCache) Changed() { cache.AnyChange = true } From 073b0fd486117a8b6f1704c900a8fa3e4d31b3b4 Mon Sep 17 00:00:00 2001 From: abstrct Date: Wed, 28 Jan 2026 11:42:31 -0500 Subject: [PATCH 08/14] Improvements to the attack commit system so that each struct only commits once. --- x/structs/keeper/msg_server_struct_attack.go | 48 +++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/x/structs/keeper/msg_server_struct_attack.go b/x/structs/keeper/msg_server_struct_attack.go index 8f6888c..9f9b010 100644 --- a/x/structs/keeper/msg_server_struct_attack.go +++ b/x/structs/keeper/msg_server_struct_attack.go @@ -70,13 +70,26 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac return &types.MsgStructAttackResponse{}, types.NewCombatTargetingError(structure.GetStructId(), "", msg.WeaponSystem, "incomplete_targeting") } + structCacheMap := make(map[string]*StructCache) + structCacheMap[structure.GetStructId()] = &structure + pendingCommits := make([]*StructCache, 0, 32) + pendingCommits = append(pendingCommits, &structure) + // Begin taking shots. Most weapons only use a single shot but some perform multiple. for shot := uint64(0); shot < (structure.GetStructType().GetWeaponTargets(weaponSystem)); shot++ { k.logger.Info("Attack Action", "structId", msg.OperatingStructId, "shot", shot, "shots", structure.GetStructType().GetWeaponTargets(weaponSystem), "target", msg.TargetStructId[shot] ) - // Load the Target Struct cache object - targetStructure := k.GetStructCacheFromId(ctx, msg.TargetStructId[shot]) - if !targetStructure.LoadStruct() { - return &types.MsgStructAttackResponse{}, types.NewObjectNotFoundError("struct", msg.TargetStructId[shot]) + + var targetStructure *StructCache + if cached, exists := structCacheMap[msg.TargetStructId[shot]]; exists { + targetStructure = cached + } else { + newTarget := k.GetStructCacheFromId(ctx, msg.TargetStructId[shot]) + targetStructure = &newTarget + if !targetStructure.LoadStruct() { + return &types.MsgStructAttackResponse{}, types.NewObjectNotFoundError("struct", msg.TargetStructId[shot]) + } + structCacheMap[msg.TargetStructId[shot]] = targetStructure + pendingCommits = append(pendingCommits, targetStructure) } targetStructure.ManualLoadEventAttackDetail(eventAttackDetail) @@ -89,7 +102,7 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac /* Can the attacker attack? */ // Check that the Structs are within attacking range of each other // This includes both a weapon<->ambit check, and a fleet<->planet - targetingError := structure.CanAttack(&targetStructure, weaponSystem) + targetingError := structure.CanAttack(targetStructure, weaponSystem) if (targetingError != nil) { return &types.MsgStructAttackResponse{}, targetingError } @@ -114,6 +127,13 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac for _, defender := range defenders { k.logger.Info("Defender at Location", "defender", defender.GetStructId(), "locationId", defender.GetLocationId()) + if cachedDefender, exists := structCacheMap[defender.GetStructId()]; exists { + defender = cachedDefender + } else { + structCacheMap[defender.GetStructId()] = defender + pendingCommits = append(pendingCommits, defender) + } + defender.Defender = true defender.ManualLoadOwner(defenderPlayer) defender.ManualLoadEventAttackDetail(eventAttackDetail) @@ -124,7 +144,7 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac k.logger.Info("Defender seems ready to defend") if (!attackBlocked && (structure.GetStructType().GetWeaponBlockable(weaponSystem))) { k.logger.Info("Defender to attempt a block!") - attackBlocked = defender.AttemptBlock(&structure, weaponSystem, &targetStructure) + attackBlocked = defender.AttemptBlock(&structure, weaponSystem, targetStructure) } } @@ -137,8 +157,7 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac structure.TakeCounterAttackDamage(defender) } } - - defender.Commit() + //defender.Commit() } } @@ -157,7 +176,7 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac counterErrors := targetStructure.CanCounterAttack(&structure) if (counterErrors == nil) { k.logger.Info("Target Countering!") - structure.TakeCounterAttackDamage(&targetStructure) + structure.TakeCounterAttackDamage(targetStructure) } } @@ -168,8 +187,7 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac targetWasOnPlanet = targetStructure.GetPlanet() } - // Possibly over committing if the same target is hit multiple times. - targetStructure.Commit() + //targetStructure.Commit() } // Recoil Damage @@ -182,7 +200,13 @@ func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttac _ = ctx.EventManager().EmitTypedEvent(&types.EventAttack{EventAttackDetail: eventAttackDetail}) - structure.Commit() + //structure.Commit() + // Commit Struct caches + for _, pendingStruct := range pendingCommits { + if pendingStruct.IsChanged() { + pendingStruct.Commit() + } + } k.DischargePlayer(ctx, structure.GetOwnerId()) From 0b59a2bad992062a8b4e54c1b05948ba48e55b8f Mon Sep 17 00:00:00 2001 From: abstrct Date: Wed, 28 Jan 2026 22:47:26 -0500 Subject: [PATCH 09/14] Fixing events and making hashing open nbd --- api/structs/structs/events.pulsar.go | 1417 ++++++++++++++++- proto/structs/structs/events.proto | 9 + proto/structs/structs/struct.proto | 1 - .../client/cli/tx_planet_raid_compute.go | 116 +- .../client/cli/tx_struct_build_compute.go | 145 +- .../client/cli/tx_struct_mine_compute.go | 129 +- .../client/cli/tx_struct_refine_compute.go | 131 +- x/structs/keeper/grid.go | 4 + .../keeper/msg_server_planet_raid_complete.go | 142 +- .../msg_server_struct_build_complete.go | 144 +- .../msg_server_struct_ore_miner_complete.go | 89 +- ...msg_server_struct_ore_refinery_complete.go | 9 +- x/structs/keeper/planet_attribute.go | 4 + x/structs/keeper/struct_attribute.go | 4 + x/structs/keeper/struct_cache.go | 13 +- x/structs/simulation/operations.go | 4 +- x/structs/types/events.pb.go | 860 ++++++++-- x/structs/types/work.go | 68 +- 18 files changed, 2545 insertions(+), 744 deletions(-) diff --git a/api/structs/structs/events.pulsar.go b/api/structs/structs/events.pulsar.go index 86265dd..081b46a 100644 --- a/api/structs/structs/events.pulsar.go +++ b/api/structs/structs/events.pulsar.go @@ -30246,6 +30246,1101 @@ func (x *fastReflection_EventRaidDetail) ProtoMethods() *protoiface.Methods { } } +var ( + md_EventHashSuccess protoreflect.MessageDescriptor + fd_EventHashSuccess_eventHashSuccessDetail protoreflect.FieldDescriptor +) + +func init() { + file_structs_structs_events_proto_init() + md_EventHashSuccess = File_structs_structs_events_proto.Messages().ByName("EventHashSuccess") + fd_EventHashSuccess_eventHashSuccessDetail = md_EventHashSuccess.Fields().ByName("eventHashSuccessDetail") +} + +var _ protoreflect.Message = (*fastReflection_EventHashSuccess)(nil) + +type fastReflection_EventHashSuccess EventHashSuccess + +func (x *EventHashSuccess) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventHashSuccess)(x) +} + +func (x *EventHashSuccess) slowProtoReflect() protoreflect.Message { + mi := &file_structs_structs_events_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_EventHashSuccess_messageType fastReflection_EventHashSuccess_messageType +var _ protoreflect.MessageType = fastReflection_EventHashSuccess_messageType{} + +type fastReflection_EventHashSuccess_messageType struct{} + +func (x fastReflection_EventHashSuccess_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventHashSuccess)(nil) +} +func (x fastReflection_EventHashSuccess_messageType) New() protoreflect.Message { + return new(fastReflection_EventHashSuccess) +} +func (x fastReflection_EventHashSuccess_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventHashSuccess +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventHashSuccess) Descriptor() protoreflect.MessageDescriptor { + return md_EventHashSuccess +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventHashSuccess) Type() protoreflect.MessageType { + return _fastReflection_EventHashSuccess_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventHashSuccess) New() protoreflect.Message { + return new(fastReflection_EventHashSuccess) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventHashSuccess) Interface() protoreflect.ProtoMessage { + return (*EventHashSuccess)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventHashSuccess) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.EventHashSuccessDetail != nil { + value := protoreflect.ValueOfMessage(x.EventHashSuccessDetail.ProtoReflect()) + if !f(fd_EventHashSuccess_eventHashSuccessDetail, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventHashSuccess) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "structs.structs.EventHashSuccess.eventHashSuccessDetail": + return x.EventHashSuccessDetail != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccess")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccess does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventHashSuccess) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "structs.structs.EventHashSuccess.eventHashSuccessDetail": + x.EventHashSuccessDetail = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccess")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccess does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventHashSuccess) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "structs.structs.EventHashSuccess.eventHashSuccessDetail": + value := x.EventHashSuccessDetail + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccess")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccess does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventHashSuccess) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "structs.structs.EventHashSuccess.eventHashSuccessDetail": + x.EventHashSuccessDetail = value.Message().Interface().(*EventHashSuccessDetail) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccess")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccess does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventHashSuccess) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "structs.structs.EventHashSuccess.eventHashSuccessDetail": + if x.EventHashSuccessDetail == nil { + x.EventHashSuccessDetail = new(EventHashSuccessDetail) + } + return protoreflect.ValueOfMessage(x.EventHashSuccessDetail.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccess")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccess does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventHashSuccess) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "structs.structs.EventHashSuccess.eventHashSuccessDetail": + m := new(EventHashSuccessDetail) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccess")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccess does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventHashSuccess) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in structs.structs.EventHashSuccess", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventHashSuccess) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventHashSuccess) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventHashSuccess) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventHashSuccess) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventHashSuccess) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.EventHashSuccessDetail != nil { + l = options.Size(x.EventHashSuccessDetail) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventHashSuccess) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.EventHashSuccessDetail != nil { + encoded, err := options.Marshal(x.EventHashSuccessDetail) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventHashSuccess) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, 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 protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventHashSuccess: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventHashSuccess: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field EventHashSuccessDetail", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.EventHashSuccessDetail == nil { + x.EventHashSuccessDetail = &EventHashSuccessDetail{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.EventHashSuccessDetail); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventHashSuccessDetail protoreflect.MessageDescriptor + fd_EventHashSuccessDetail_callerAddress protoreflect.FieldDescriptor + fd_EventHashSuccessDetail_category protoreflect.FieldDescriptor + fd_EventHashSuccessDetail_difficulty protoreflect.FieldDescriptor + fd_EventHashSuccessDetail_objectId protoreflect.FieldDescriptor + fd_EventHashSuccessDetail_planetId protoreflect.FieldDescriptor +) + +func init() { + file_structs_structs_events_proto_init() + md_EventHashSuccessDetail = File_structs_structs_events_proto.Messages().ByName("EventHashSuccessDetail") + fd_EventHashSuccessDetail_callerAddress = md_EventHashSuccessDetail.Fields().ByName("callerAddress") + fd_EventHashSuccessDetail_category = md_EventHashSuccessDetail.Fields().ByName("category") + fd_EventHashSuccessDetail_difficulty = md_EventHashSuccessDetail.Fields().ByName("difficulty") + fd_EventHashSuccessDetail_objectId = md_EventHashSuccessDetail.Fields().ByName("objectId") + fd_EventHashSuccessDetail_planetId = md_EventHashSuccessDetail.Fields().ByName("planetId") +} + +var _ protoreflect.Message = (*fastReflection_EventHashSuccessDetail)(nil) + +type fastReflection_EventHashSuccessDetail EventHashSuccessDetail + +func (x *EventHashSuccessDetail) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventHashSuccessDetail)(x) +} + +func (x *EventHashSuccessDetail) slowProtoReflect() protoreflect.Message { + mi := &file_structs_structs_events_proto_msgTypes[60] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_EventHashSuccessDetail_messageType fastReflection_EventHashSuccessDetail_messageType +var _ protoreflect.MessageType = fastReflection_EventHashSuccessDetail_messageType{} + +type fastReflection_EventHashSuccessDetail_messageType struct{} + +func (x fastReflection_EventHashSuccessDetail_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventHashSuccessDetail)(nil) +} +func (x fastReflection_EventHashSuccessDetail_messageType) New() protoreflect.Message { + return new(fastReflection_EventHashSuccessDetail) +} +func (x fastReflection_EventHashSuccessDetail_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventHashSuccessDetail +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventHashSuccessDetail) Descriptor() protoreflect.MessageDescriptor { + return md_EventHashSuccessDetail +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventHashSuccessDetail) Type() protoreflect.MessageType { + return _fastReflection_EventHashSuccessDetail_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventHashSuccessDetail) New() protoreflect.Message { + return new(fastReflection_EventHashSuccessDetail) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventHashSuccessDetail) Interface() protoreflect.ProtoMessage { + return (*EventHashSuccessDetail)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventHashSuccessDetail) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CallerAddress != "" { + value := protoreflect.ValueOfString(x.CallerAddress) + if !f(fd_EventHashSuccessDetail_callerAddress, value) { + return + } + } + if x.Category != "" { + value := protoreflect.ValueOfString(x.Category) + if !f(fd_EventHashSuccessDetail_category, value) { + return + } + } + if x.Difficulty != uint64(0) { + value := protoreflect.ValueOfUint64(x.Difficulty) + if !f(fd_EventHashSuccessDetail_difficulty, value) { + return + } + } + if x.ObjectId != "" { + value := protoreflect.ValueOfString(x.ObjectId) + if !f(fd_EventHashSuccessDetail_objectId, value) { + return + } + } + if x.PlanetId != "" { + value := protoreflect.ValueOfString(x.PlanetId) + if !f(fd_EventHashSuccessDetail_planetId, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventHashSuccessDetail) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "structs.structs.EventHashSuccessDetail.callerAddress": + return x.CallerAddress != "" + case "structs.structs.EventHashSuccessDetail.category": + return x.Category != "" + case "structs.structs.EventHashSuccessDetail.difficulty": + return x.Difficulty != uint64(0) + case "structs.structs.EventHashSuccessDetail.objectId": + return x.ObjectId != "" + case "structs.structs.EventHashSuccessDetail.planetId": + return x.PlanetId != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccessDetail")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccessDetail does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventHashSuccessDetail) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "structs.structs.EventHashSuccessDetail.callerAddress": + x.CallerAddress = "" + case "structs.structs.EventHashSuccessDetail.category": + x.Category = "" + case "structs.structs.EventHashSuccessDetail.difficulty": + x.Difficulty = uint64(0) + case "structs.structs.EventHashSuccessDetail.objectId": + x.ObjectId = "" + case "structs.structs.EventHashSuccessDetail.planetId": + x.PlanetId = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccessDetail")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccessDetail does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventHashSuccessDetail) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "structs.structs.EventHashSuccessDetail.callerAddress": + value := x.CallerAddress + return protoreflect.ValueOfString(value) + case "structs.structs.EventHashSuccessDetail.category": + value := x.Category + return protoreflect.ValueOfString(value) + case "structs.structs.EventHashSuccessDetail.difficulty": + value := x.Difficulty + return protoreflect.ValueOfUint64(value) + case "structs.structs.EventHashSuccessDetail.objectId": + value := x.ObjectId + return protoreflect.ValueOfString(value) + case "structs.structs.EventHashSuccessDetail.planetId": + value := x.PlanetId + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccessDetail")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccessDetail does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventHashSuccessDetail) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "structs.structs.EventHashSuccessDetail.callerAddress": + x.CallerAddress = value.Interface().(string) + case "structs.structs.EventHashSuccessDetail.category": + x.Category = value.Interface().(string) + case "structs.structs.EventHashSuccessDetail.difficulty": + x.Difficulty = value.Uint() + case "structs.structs.EventHashSuccessDetail.objectId": + x.ObjectId = value.Interface().(string) + case "structs.structs.EventHashSuccessDetail.planetId": + x.PlanetId = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccessDetail")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccessDetail does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventHashSuccessDetail) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "structs.structs.EventHashSuccessDetail.callerAddress": + panic(fmt.Errorf("field callerAddress of message structs.structs.EventHashSuccessDetail is not mutable")) + case "structs.structs.EventHashSuccessDetail.category": + panic(fmt.Errorf("field category of message structs.structs.EventHashSuccessDetail is not mutable")) + case "structs.structs.EventHashSuccessDetail.difficulty": + panic(fmt.Errorf("field difficulty of message structs.structs.EventHashSuccessDetail is not mutable")) + case "structs.structs.EventHashSuccessDetail.objectId": + panic(fmt.Errorf("field objectId of message structs.structs.EventHashSuccessDetail is not mutable")) + case "structs.structs.EventHashSuccessDetail.planetId": + panic(fmt.Errorf("field planetId of message structs.structs.EventHashSuccessDetail is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccessDetail")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccessDetail does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventHashSuccessDetail) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "structs.structs.EventHashSuccessDetail.callerAddress": + return protoreflect.ValueOfString("") + case "structs.structs.EventHashSuccessDetail.category": + return protoreflect.ValueOfString("") + case "structs.structs.EventHashSuccessDetail.difficulty": + return protoreflect.ValueOfUint64(uint64(0)) + case "structs.structs.EventHashSuccessDetail.objectId": + return protoreflect.ValueOfString("") + case "structs.structs.EventHashSuccessDetail.planetId": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventHashSuccessDetail")) + } + panic(fmt.Errorf("message structs.structs.EventHashSuccessDetail does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventHashSuccessDetail) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in structs.structs.EventHashSuccessDetail", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventHashSuccessDetail) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventHashSuccessDetail) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventHashSuccessDetail) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventHashSuccessDetail) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventHashSuccessDetail) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.CallerAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Category) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Difficulty != 0 { + n += 1 + runtime.Sov(uint64(x.Difficulty)) + } + l = len(x.ObjectId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.PlanetId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventHashSuccessDetail) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.PlanetId) > 0 { + i -= len(x.PlanetId) + copy(dAtA[i:], x.PlanetId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PlanetId))) + i-- + dAtA[i] = 0x2a + } + if len(x.ObjectId) > 0 { + i -= len(x.ObjectId) + copy(dAtA[i:], x.ObjectId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ObjectId))) + i-- + dAtA[i] = 0x22 + } + if x.Difficulty != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.Difficulty)) + i-- + dAtA[i] = 0x18 + } + if len(x.Category) > 0 { + i -= len(x.Category) + copy(dAtA[i:], x.Category) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Category))) + i-- + dAtA[i] = 0x12 + } + if len(x.CallerAddress) > 0 { + i -= len(x.CallerAddress) + copy(dAtA[i:], x.CallerAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CallerAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventHashSuccessDetail) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, 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 protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventHashSuccessDetail: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventHashSuccessDetail: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CallerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CallerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Category", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Category = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Difficulty", wireType) + } + x.Difficulty = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.Difficulty |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ObjectId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PlanetId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.PlanetId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.0 @@ -33020,6 +34115,108 @@ func (x *EventRaidDetail) GetStatus() RaidStatus { return RaidStatus_initiated } +type EventHashSuccess struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EventHashSuccessDetail *EventHashSuccessDetail `protobuf:"bytes,1,opt,name=eventHashSuccessDetail,proto3" json:"eventHashSuccessDetail,omitempty"` +} + +func (x *EventHashSuccess) Reset() { + *x = EventHashSuccess{} + if protoimpl.UnsafeEnabled { + mi := &file_structs_structs_events_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventHashSuccess) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventHashSuccess) ProtoMessage() {} + +// Deprecated: Use EventHashSuccess.ProtoReflect.Descriptor instead. +func (*EventHashSuccess) Descriptor() ([]byte, []int) { + return file_structs_structs_events_proto_rawDescGZIP(), []int{59} +} + +func (x *EventHashSuccess) GetEventHashSuccessDetail() *EventHashSuccessDetail { + if x != nil { + return x.EventHashSuccessDetail + } + return nil +} + +type EventHashSuccessDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CallerAddress string `protobuf:"bytes,1,opt,name=callerAddress,proto3" json:"callerAddress,omitempty"` + Category string `protobuf:"bytes,2,opt,name=category,proto3" json:"category,omitempty"` + Difficulty uint64 `protobuf:"varint,3,opt,name=difficulty,proto3" json:"difficulty,omitempty"` + ObjectId string `protobuf:"bytes,4,opt,name=objectId,proto3" json:"objectId,omitempty"` + PlanetId string `protobuf:"bytes,5,opt,name=planetId,proto3" json:"planetId,omitempty"` +} + +func (x *EventHashSuccessDetail) Reset() { + *x = EventHashSuccessDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_structs_structs_events_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventHashSuccessDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventHashSuccessDetail) ProtoMessage() {} + +// Deprecated: Use EventHashSuccessDetail.ProtoReflect.Descriptor instead. +func (*EventHashSuccessDetail) Descriptor() ([]byte, []int) { + return file_structs_structs_events_proto_rawDescGZIP(), []int{60} +} + +func (x *EventHashSuccessDetail) GetCallerAddress() string { + if x != nil { + return x.CallerAddress + } + return "" +} + +func (x *EventHashSuccessDetail) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *EventHashSuccessDetail) GetDifficulty() uint64 { + if x != nil { + return x.Difficulty + } + return 0 +} + +func (x *EventHashSuccessDetail) GetObjectId() string { + if x != nil { + return x.ObjectId + } + return "" +} + +func (x *EventHashSuccessDetail) GetPlanetId() string { + if x != nil { + return x.PlanetId + } + return "" +} + var File_structs_structs_events_proto protoreflect.FileDescriptor var file_structs_structs_events_proto_rawDesc = []byte{ @@ -33681,18 +34878,37 @@ var file_structs_structs_events_proto_rawDesc = []byte{ 0x61, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x72, 0x61, 0x69, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0xa1, 0x01, 0x0a, 0x13, - 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x73, 0x42, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x73, 0xa2, 0x02, 0x03, 0x53, 0x53, 0x58, 0xaa, 0x02, 0x0f, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0xca, 0x02, 0x0f, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x5c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0xe2, 0x02, - 0x1b, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x5c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x10, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x73, 0x0a, 0x10, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x5f, 0x0a, 0x16, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x16, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x22, 0xb2, 0x01, 0x0a, 0x16, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x53, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x63, + 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1e, 0x0a, + 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x1a, 0x0a, + 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x74, 0x49, 0x64, 0x42, 0xa1, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x42, 0x0b, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x20, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0xa2, 0x02, + 0x03, 0x53, 0x53, 0x58, 0xaa, 0x02, 0x0f, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0xca, 0x02, 0x0f, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, + 0x5c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0xe2, 0x02, 0x1b, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x73, 0x5c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x10, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, + 0x3a, 0x3a, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -33707,7 +34923,7 @@ func file_structs_structs_events_proto_rawDescGZIP() []byte { return file_structs_structs_events_proto_rawDescData } -var file_structs_structs_events_proto_msgTypes = make([]protoimpl.MessageInfo, 59) +var file_structs_structs_events_proto_msgTypes = make([]protoimpl.MessageInfo, 61) var file_structs_structs_events_proto_goTypes = []interface{}{ (*EventAllocation)(nil), // 0: structs.structs.EventAllocation (*EventAgreement)(nil), // 1: structs.structs.EventAgreement @@ -33768,67 +34984,69 @@ var file_structs_structs_events_proto_goTypes = []interface{}{ (*EventAttackDefenderCounterDetail)(nil), // 56: structs.structs.EventAttackDefenderCounterDetail (*EventRaid)(nil), // 57: structs.structs.EventRaid (*EventRaidDetail)(nil), // 58: structs.structs.EventRaidDetail - (*Allocation)(nil), // 59: structs.structs.Allocation - (*Agreement)(nil), // 60: structs.structs.Agreement - (*Fleet)(nil), // 61: structs.structs.Fleet - (*Guild)(nil), // 62: structs.structs.Guild - (*Infusion)(nil), // 63: structs.structs.Infusion - (*Planet)(nil), // 64: structs.structs.Planet - (*PlanetAttributeRecord)(nil), // 65: structs.structs.PlanetAttributeRecord - (*Player)(nil), // 66: structs.structs.Player - (*Provider)(nil), // 67: structs.structs.Provider - (*Reactor)(nil), // 68: structs.structs.Reactor - (*Struct)(nil), // 69: structs.structs.Struct - (*StructAttributeRecord)(nil), // 70: structs.structs.StructAttributeRecord - (*StructDefender)(nil), // 71: structs.structs.StructDefender - (*StructType)(nil), // 72: structs.structs.StructType - (*Substation)(nil), // 73: structs.structs.Substation - (*timestamppb.Timestamp)(nil), // 74: google.protobuf.Timestamp - (*PermissionRecord)(nil), // 75: structs.structs.PermissionRecord - (*GridRecord)(nil), // 76: structs.structs.GridRecord - (*AddressAssociation)(nil), // 77: structs.structs.AddressAssociation - (*AddressActivity)(nil), // 78: structs.structs.AddressActivity - (*GuildMembershipApplication)(nil), // 79: structs.structs.GuildMembershipApplication - (ObjectType)(0), // 80: structs.structs.objectType - (Ambit)(0), // 81: structs.structs.ambit - (TechWeaponSystem)(0), // 82: structs.structs.techWeaponSystem - (TechWeaponControl)(0), // 83: structs.structs.techWeaponControl - (TechActiveWeaponry)(0), // 84: structs.structs.techActiveWeaponry - (TechUnitDefenses)(0), // 85: structs.structs.techUnitDefenses - (TechPlanetaryDefenses)(0), // 86: structs.structs.techPlanetaryDefenses - (TechPassiveWeaponry)(0), // 87: structs.structs.techPassiveWeaponry - (RaidStatus)(0), // 88: structs.structs.raidStatus + (*EventHashSuccess)(nil), // 59: structs.structs.EventHashSuccess + (*EventHashSuccessDetail)(nil), // 60: structs.structs.EventHashSuccessDetail + (*Allocation)(nil), // 61: structs.structs.Allocation + (*Agreement)(nil), // 62: structs.structs.Agreement + (*Fleet)(nil), // 63: structs.structs.Fleet + (*Guild)(nil), // 64: structs.structs.Guild + (*Infusion)(nil), // 65: structs.structs.Infusion + (*Planet)(nil), // 66: structs.structs.Planet + (*PlanetAttributeRecord)(nil), // 67: structs.structs.PlanetAttributeRecord + (*Player)(nil), // 68: structs.structs.Player + (*Provider)(nil), // 69: structs.structs.Provider + (*Reactor)(nil), // 70: structs.structs.Reactor + (*Struct)(nil), // 71: structs.structs.Struct + (*StructAttributeRecord)(nil), // 72: structs.structs.StructAttributeRecord + (*StructDefender)(nil), // 73: structs.structs.StructDefender + (*StructType)(nil), // 74: structs.structs.StructType + (*Substation)(nil), // 75: structs.structs.Substation + (*timestamppb.Timestamp)(nil), // 76: google.protobuf.Timestamp + (*PermissionRecord)(nil), // 77: structs.structs.PermissionRecord + (*GridRecord)(nil), // 78: structs.structs.GridRecord + (*AddressAssociation)(nil), // 79: structs.structs.AddressAssociation + (*AddressActivity)(nil), // 80: structs.structs.AddressActivity + (*GuildMembershipApplication)(nil), // 81: structs.structs.GuildMembershipApplication + (ObjectType)(0), // 82: structs.structs.objectType + (Ambit)(0), // 83: structs.structs.ambit + (TechWeaponSystem)(0), // 84: structs.structs.techWeaponSystem + (TechWeaponControl)(0), // 85: structs.structs.techWeaponControl + (TechActiveWeaponry)(0), // 86: structs.structs.techActiveWeaponry + (TechUnitDefenses)(0), // 87: structs.structs.techUnitDefenses + (TechPlanetaryDefenses)(0), // 88: structs.structs.techPlanetaryDefenses + (TechPassiveWeaponry)(0), // 89: structs.structs.techPassiveWeaponry + (RaidStatus)(0), // 90: structs.structs.raidStatus } var file_structs_structs_events_proto_depIdxs = []int32{ - 59, // 0: structs.structs.EventAllocation.allocation:type_name -> structs.structs.Allocation - 60, // 1: structs.structs.EventAgreement.agreement:type_name -> structs.structs.Agreement - 61, // 2: structs.structs.EventFleet.fleet:type_name -> structs.structs.Fleet - 62, // 3: structs.structs.EventGuild.guild:type_name -> structs.structs.Guild - 63, // 4: structs.structs.EventInfusion.infusion:type_name -> structs.structs.Infusion - 64, // 5: structs.structs.EventPlanet.planet:type_name -> structs.structs.Planet - 65, // 6: structs.structs.EventPlanetAttribute.planetAttributeRecord:type_name -> structs.structs.PlanetAttributeRecord - 66, // 7: structs.structs.EventPlayer.player:type_name -> structs.structs.Player - 67, // 8: structs.structs.EventProvider.provider:type_name -> structs.structs.Provider - 68, // 9: structs.structs.EventReactor.reactor:type_name -> structs.structs.Reactor - 69, // 10: structs.structs.EventStruct.structure:type_name -> structs.structs.Struct - 70, // 11: structs.structs.EventStructAttribute.structAttributeRecord:type_name -> structs.structs.StructAttributeRecord - 71, // 12: structs.structs.EventStructDefender.structDefender:type_name -> structs.structs.StructDefender - 72, // 13: structs.structs.EventStructType.structType:type_name -> structs.structs.StructType - 73, // 14: structs.structs.EventSubstation.substation:type_name -> structs.structs.Substation + 61, // 0: structs.structs.EventAllocation.allocation:type_name -> structs.structs.Allocation + 62, // 1: structs.structs.EventAgreement.agreement:type_name -> structs.structs.Agreement + 63, // 2: structs.structs.EventFleet.fleet:type_name -> structs.structs.Fleet + 64, // 3: structs.structs.EventGuild.guild:type_name -> structs.structs.Guild + 65, // 4: structs.structs.EventInfusion.infusion:type_name -> structs.structs.Infusion + 66, // 5: structs.structs.EventPlanet.planet:type_name -> structs.structs.Planet + 67, // 6: structs.structs.EventPlanetAttribute.planetAttributeRecord:type_name -> structs.structs.PlanetAttributeRecord + 68, // 7: structs.structs.EventPlayer.player:type_name -> structs.structs.Player + 69, // 8: structs.structs.EventProvider.provider:type_name -> structs.structs.Provider + 70, // 9: structs.structs.EventReactor.reactor:type_name -> structs.structs.Reactor + 71, // 10: structs.structs.EventStruct.structure:type_name -> structs.structs.Struct + 72, // 11: structs.structs.EventStructAttribute.structAttributeRecord:type_name -> structs.structs.StructAttributeRecord + 73, // 12: structs.structs.EventStructDefender.structDefender:type_name -> structs.structs.StructDefender + 74, // 13: structs.structs.EventStructType.structType:type_name -> structs.structs.StructType + 75, // 14: structs.structs.EventSubstation.substation:type_name -> structs.structs.Substation 16, // 15: structs.structs.EventTime.eventTimeDetail:type_name -> structs.structs.EventTimeDetail - 74, // 16: structs.structs.EventTimeDetail.blockTime:type_name -> google.protobuf.Timestamp - 75, // 17: structs.structs.EventPermission.permissionRecord:type_name -> structs.structs.PermissionRecord - 76, // 18: structs.structs.EventGrid.gridRecord:type_name -> structs.structs.GridRecord + 76, // 16: structs.structs.EventTimeDetail.blockTime:type_name -> google.protobuf.Timestamp + 77, // 17: structs.structs.EventPermission.permissionRecord:type_name -> structs.structs.PermissionRecord + 78, // 18: structs.structs.EventGrid.gridRecord:type_name -> structs.structs.GridRecord 20, // 19: structs.structs.EventProviderAddress.eventProviderAddressDetail:type_name -> structs.structs.EventProviderAddressDetail 22, // 20: structs.structs.EventProviderGrantGuild.eventProviderGrantGuildDetail:type_name -> structs.structs.EventProviderGrantGuildDetail 24, // 21: structs.structs.EventProviderRevokeGuild.eventProviderRevokeGuildDetail:type_name -> structs.structs.EventProviderRevokeGuildDetail - 77, // 22: structs.structs.EventAddressAssociation.addressAssociation:type_name -> structs.structs.AddressAssociation - 78, // 23: structs.structs.EventAddressActivity.addressActivity:type_name -> structs.structs.AddressActivity + 79, // 22: structs.structs.EventAddressAssociation.addressAssociation:type_name -> structs.structs.AddressAssociation + 80, // 23: structs.structs.EventAddressActivity.addressActivity:type_name -> structs.structs.AddressActivity 31, // 24: structs.structs.EventGuildBankAddress.eventGuildBankAddressDetail:type_name -> structs.structs.EventGuildBankAddressDetail 33, // 25: structs.structs.EventGuildBankMint.eventGuildBankMintDetail:type_name -> structs.structs.EventGuildBankMintDetail 35, // 26: structs.structs.EventGuildBankRedeem.eventGuildBankRedeemDetail:type_name -> structs.structs.EventGuildBankRedeemDetail 37, // 27: structs.structs.EventGuildBankConfiscateAndBurn.eventGuildBankConfiscateAndBurnDetail:type_name -> structs.structs.EventGuildBankConfiscateAndBurnDetail - 79, // 28: structs.structs.EventGuildMembershipApplication.guildMembershipApplication:type_name -> structs.structs.GuildMembershipApplication + 81, // 28: structs.structs.EventGuildMembershipApplication.guildMembershipApplication:type_name -> structs.structs.GuildMembershipApplication 40, // 29: structs.structs.EventOreMine.eventOreMineDetail:type_name -> structs.structs.EventOreMineDetail 42, // 30: structs.structs.EventAlphaRefine.eventAlphaRefineDetail:type_name -> structs.structs.EventAlphaRefineDetail 44, // 31: structs.structs.EventAlphaInfuse.eventAlphaInfuseDetail:type_name -> structs.structs.EventAlphaInfuseDetail @@ -33837,31 +35055,32 @@ var file_structs_structs_events_proto_depIdxs = []int32{ 50, // 34: structs.structs.EventOreMigrate.eventOreMigrateDetail:type_name -> structs.structs.EventOreMigrateDetail 52, // 35: structs.structs.EventStructDefenderClear.structDefenderClearDetail:type_name -> structs.structs.EventStructDefenderClearDetail 54, // 36: structs.structs.EventAttack.eventAttackDetail:type_name -> structs.structs.EventAttackDetail - 80, // 37: structs.structs.EventAttackDetail.attackerStructLocationType:type_name -> structs.structs.objectType - 81, // 38: structs.structs.EventAttackDetail.attackerStructOperatingAmbit:type_name -> structs.structs.ambit - 82, // 39: structs.structs.EventAttackDetail.weaponSystem:type_name -> structs.structs.techWeaponSystem - 83, // 40: structs.structs.EventAttackDetail.weaponControl:type_name -> structs.structs.techWeaponControl - 84, // 41: structs.structs.EventAttackDetail.activeWeaponry:type_name -> structs.structs.techActiveWeaponry + 82, // 37: structs.structs.EventAttackDetail.attackerStructLocationType:type_name -> structs.structs.objectType + 83, // 38: structs.structs.EventAttackDetail.attackerStructOperatingAmbit:type_name -> structs.structs.ambit + 84, // 39: structs.structs.EventAttackDetail.weaponSystem:type_name -> structs.structs.techWeaponSystem + 85, // 40: structs.structs.EventAttackDetail.weaponControl:type_name -> structs.structs.techWeaponControl + 86, // 41: structs.structs.EventAttackDetail.activeWeaponry:type_name -> structs.structs.techActiveWeaponry 55, // 42: structs.structs.EventAttackDetail.eventAttackShotDetail:type_name -> structs.structs.EventAttackShotDetail - 80, // 43: structs.structs.EventAttackShotDetail.targetStructLocationType:type_name -> structs.structs.objectType - 81, // 44: structs.structs.EventAttackShotDetail.targetStructOperatingAmbit:type_name -> structs.structs.ambit - 85, // 45: structs.structs.EventAttackShotDetail.evadedCause:type_name -> structs.structs.techUnitDefenses - 86, // 46: structs.structs.EventAttackShotDetail.evadedByPlanetaryDefensesCause:type_name -> structs.structs.techPlanetaryDefenses - 80, // 47: structs.structs.EventAttackShotDetail.blockedByStructLocationType:type_name -> structs.structs.objectType - 81, // 48: structs.structs.EventAttackShotDetail.blockedByStructOperatingAmbit:type_name -> structs.structs.ambit + 82, // 43: structs.structs.EventAttackShotDetail.targetStructLocationType:type_name -> structs.structs.objectType + 83, // 44: structs.structs.EventAttackShotDetail.targetStructOperatingAmbit:type_name -> structs.structs.ambit + 87, // 45: structs.structs.EventAttackShotDetail.evadedCause:type_name -> structs.structs.techUnitDefenses + 88, // 46: structs.structs.EventAttackShotDetail.evadedByPlanetaryDefensesCause:type_name -> structs.structs.techPlanetaryDefenses + 82, // 47: structs.structs.EventAttackShotDetail.blockedByStructLocationType:type_name -> structs.structs.objectType + 83, // 48: structs.structs.EventAttackShotDetail.blockedByStructOperatingAmbit:type_name -> structs.structs.ambit 56, // 49: structs.structs.EventAttackShotDetail.eventAttackDefenderCounterDetail:type_name -> structs.structs.EventAttackDefenderCounterDetail - 85, // 50: structs.structs.EventAttackShotDetail.damageReductionCause:type_name -> structs.structs.techUnitDefenses - 87, // 51: structs.structs.EventAttackShotDetail.targetCounterCause:type_name -> structs.structs.techPassiveWeaponry - 87, // 52: structs.structs.EventAttackShotDetail.postDestructionDamageCause:type_name -> structs.structs.techPassiveWeaponry - 80, // 53: structs.structs.EventAttackDefenderCounterDetail.counterByStructLocationType:type_name -> structs.structs.objectType - 81, // 54: structs.structs.EventAttackDefenderCounterDetail.counterByStructOperatingAmbit:type_name -> structs.structs.ambit + 87, // 50: structs.structs.EventAttackShotDetail.damageReductionCause:type_name -> structs.structs.techUnitDefenses + 89, // 51: structs.structs.EventAttackShotDetail.targetCounterCause:type_name -> structs.structs.techPassiveWeaponry + 89, // 52: structs.structs.EventAttackShotDetail.postDestructionDamageCause:type_name -> structs.structs.techPassiveWeaponry + 82, // 53: structs.structs.EventAttackDefenderCounterDetail.counterByStructLocationType:type_name -> structs.structs.objectType + 83, // 54: structs.structs.EventAttackDefenderCounterDetail.counterByStructOperatingAmbit:type_name -> structs.structs.ambit 58, // 55: structs.structs.EventRaid.eventRaidDetail:type_name -> structs.structs.EventRaidDetail - 88, // 56: structs.structs.EventRaidDetail.status:type_name -> structs.structs.raidStatus - 57, // [57:57] is the sub-list for method output_type - 57, // [57:57] is the sub-list for method input_type - 57, // [57:57] is the sub-list for extension type_name - 57, // [57:57] is the sub-list for extension extendee - 0, // [0:57] is the sub-list for field type_name + 90, // 56: structs.structs.EventRaidDetail.status:type_name -> structs.structs.raidStatus + 60, // 57: structs.structs.EventHashSuccess.eventHashSuccessDetail:type_name -> structs.structs.EventHashSuccessDetail + 58, // [58:58] is the sub-list for method output_type + 58, // [58:58] is the sub-list for method input_type + 58, // [58:58] is the sub-list for extension type_name + 58, // [58:58] is the sub-list for extension extendee + 0, // [0:58] is the sub-list for field type_name } func init() { file_structs_structs_events_proto_init() } @@ -34594,6 +35813,30 @@ func file_structs_structs_events_proto_init() { return nil } } + file_structs_structs_events_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventHashSuccess); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_structs_structs_events_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventHashSuccessDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -34601,7 +35844,7 @@ func file_structs_structs_events_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_structs_structs_events_proto_rawDesc, NumEnums: 0, - NumMessages: 59, + NumMessages: 61, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/structs/structs/events.proto b/proto/structs/structs/events.proto index fed684d..77aa103 100644 --- a/proto/structs/structs/events.proto +++ b/proto/structs/structs/events.proto @@ -215,4 +215,13 @@ option go_package = "structs/x/structs/types"; string fleetId = 1; string planetId = 2; raidStatus status = 3; + } + + message EventHashSuccess { EventHashSuccessDetail eventHashSuccessDetail = 1;} + message EventHashSuccessDetail { + string callerAddress = 1; + string category = 2; + uint64 difficulty = 3; + string objectId = 4; + string planetId = 5; } \ No newline at end of file diff --git a/proto/structs/structs/struct.proto b/proto/structs/structs/struct.proto index 4fd2fd4..6056830 100644 --- a/proto/structs/structs/struct.proto +++ b/proto/structs/structs/struct.proto @@ -144,7 +144,6 @@ message StructDefenders { repeated StructDefender structDefenders = 1; } - message StructAttributeRecord { string attributeId = 1; uint64 value = 2; diff --git a/x/structs/client/cli/tx_planet_raid_compute.go b/x/structs/client/cli/tx_planet_raid_compute.go index 41b9b27..f33077c 100644 --- a/x/structs/client/cli/tx_planet_raid_compute.go +++ b/x/structs/client/cli/tx_planet_raid_compute.go @@ -7,22 +7,22 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" "structs/x/structs/types" + "github.com/spf13/cobra" + //sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "context" "fmt" "time" - "crypto/sha256" - "encoding/hex" + "crypto/sha256" + "encoding/hex" ) var _ = strconv.Itoa(0) - func CmdPlanetRaidCompute() *cobra.Command { cmd := &cobra.Command{ Use: "planet-raid-compute [fleet id]", @@ -40,7 +40,7 @@ func CmdPlanetRaidCompute() *cobra.Command { return err } - difficultyTargetStart, _ := cmd.Flags().GetInt("difficulty_target_start") + difficultyTargetStart, _ := cmd.Flags().GetInt("difficulty_target_start") queryClient := types.NewQueryClient(clientCtx) @@ -57,66 +57,67 @@ func CmdPlanetRaidCompute() *cobra.Command { var performingFleet types.Fleet performingFleet = performing_fleet_res.Fleet - planet_params := &types.QueryGetPlanetRequest{ - Id: performingFleet.LocationId, - } - - Planet_res, _ := queryClient.Planet(context.Background(), planet_params) - planet := Planet_res.Planet - planetAttributes := Planet_res.PlanetAttributes + planet_params := &types.QueryGetPlanetRequest{ + Id: performingFleet.LocationId, + } - if (planetAttributes.BlockStartRaid == 0) { - fmt.Printf("Planet (%s) has no Active raid \n", performingFleet.LocationId) - return nil - } + Planet_res, _ := queryClient.Planet(context.Background(), planet_params) + planet := Planet_res.Planet + planetAttributes := Planet_res.PlanetAttributes - currentBlockResponse, _ := queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) - currentBlock := currentBlockResponse.BlockHeight - fmt.Printf("Raid process against planet %s activated on %d, current block is %d \n", planet.Id, planetAttributes.BlockStartRaid, currentBlock) - currentAge := currentBlock - planetAttributes.BlockStartRaid - currentDifficulty := types.CalculateDifficulty(float64(currentAge), planetAttributes.PlanetaryShield)//structType.BuildDifficulty) - fmt.Printf("Raid difficulty is %d \n", currentDifficulty) + if planetAttributes.BlockStartRaid == 0 { + fmt.Printf("Planet (%s) has no Active raid \n", performingFleet.LocationId) + return nil + } + currentBlockResponse, _ := queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) + currentBlock := currentBlockResponse.BlockHeight + fmt.Printf("Raid process against planet %s activated on %d, current block is %d \n", planet.Id, planetAttributes.BlockStartRaid, currentBlock) + currentAge := currentBlock - planetAttributes.BlockStartRaid + currentDifficulty := types.CalculateDifficulty(float64(currentAge), planetAttributes.PlanetaryShield) //structType.BuildDifficulty) + fmt.Printf("Raid difficulty is %d \n", currentDifficulty) - activeRaidBlockString := strconv.FormatUint(planetAttributes.BlockStartRaid, 10) - fmt.Println("Starting Raiding...") + activeRaidBlockString := strconv.FormatUint(planetAttributes.BlockStartRaid, 10) + fmt.Println("Starting Raiding...") - var newDifficulty int + var newDifficulty int var i int = 0 - for { - if i > 0 { // the condition stops matching - break // break out of the loop - } + for { + if i > 0 { // the condition stops matching + break // break out of the loop + } -COMPUTE: + COMPUTE: i = i + 1 - if (i % 20000) == 0 { - currentBlockResponse, _ = queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) - currentBlock = currentBlockResponse.BlockHeight - currentAge = currentBlock - planetAttributes.BlockStartRaid - newDifficulty = types.CalculateDifficulty(float64(currentAge), planetAttributes.PlanetaryShield) - - if currentDifficulty != newDifficulty { - currentDifficulty = newDifficulty - fmt.Printf("Difficulty Change: %d \n", currentDifficulty) - } - - if (difficultyTargetStart > 0 ) { - if (difficultyTargetStart > currentDifficulty) { - time.Sleep(5 * time.Minute) - goto COMPUTE - } - } - - } + if (i % 20000) == 0 { + currentBlockResponse, _ = queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) + currentBlock = currentBlockResponse.BlockHeight + currentAge = currentBlock - planetAttributes.BlockStartRaid + newDifficulty = types.CalculateDifficulty(float64(currentAge), planetAttributes.PlanetaryShield) + + if currentDifficulty != newDifficulty { + currentDifficulty = newDifficulty + fmt.Printf("Difficulty Change: %d \n", currentDifficulty) + } + + if difficultyTargetStart > 0 { + if difficultyTargetStart > currentDifficulty { + time.Sleep(5 * time.Minute) + goto COMPUTE + } + } + + } newHash := sha256.New() - newInput := performingFleet.Id + "@" + planet.Id + "RAID" + activeRaidBlockString + "NONCE" + strconv.Itoa(i) + newInput := performingFleet.Id + "@" + planet.Id + "RAID" + activeRaidBlockString + "NONCE" + strconv.Itoa(i) newHash.Write([]byte(newInput)) newHashOutput := hex.EncodeToString(newHash.Sum(nil)) - if (!types.HashBuildAndCheckDifficulty(newInput, newHashOutput, currentAge, planetAttributes.PlanetaryShield)) { goto COMPUTE } + if valid, _ := types.HashBuildAndCheckDifficulty(newInput, newHashOutput, currentAge, planetAttributes.PlanetaryShield); !valid { + goto COMPUTE + } fmt.Println("") fmt.Println("Raid Complete!") @@ -126,20 +127,19 @@ COMPUTE: argProof = newHashOutput } - msg := &types.MsgPlanetRaidComplete{ - Creator: clientCtx.GetFromAddress().String(), - FleetId: argFleetId, - Proof: argProof, - Nonce: argNonce, - } + Creator: clientCtx.GetFromAddress().String(), + FleetId: argFleetId, + Proof: argProof, + Nonce: argNonce, + } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } flags.AddTxFlagsToCmd(cmd) - cmd.Flags().IntP("difficulty_target_start", "D", 0, "Do not start the compute process until difficulty reaches this level (1-64)") + cmd.Flags().IntP("difficulty_target_start", "D", 0, "Do not start the compute process until difficulty reaches this level (1-64)") return cmd } diff --git a/x/structs/client/cli/tx_struct_build_compute.go b/x/structs/client/cli/tx_struct_build_compute.go index bbf8357..719cad5 100644 --- a/x/structs/client/cli/tx_struct_build_compute.go +++ b/x/structs/client/cli/tx_struct_build_compute.go @@ -7,22 +7,22 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" "structs/x/structs/types" + "github.com/spf13/cobra" + //sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "context" "fmt" "time" - "crypto/sha256" - "encoding/hex" + "crypto/sha256" + "encoding/hex" ) var _ = strconv.Itoa(0) - func CmdStructBuildCompute() *cobra.Command { cmd := &cobra.Command{ Use: "struct-build-compute [struct ID]", @@ -40,17 +40,15 @@ func CmdStructBuildCompute() *cobra.Command { return err } - difficultyTargetStart, _ := cmd.Flags().GetInt("difficulty_target_start") + difficultyTargetStart, _ := cmd.Flags().GetInt("difficulty_target_start") queryClient := types.NewQueryClient(clientCtx) - // Load the Struct performing_structure_params := &types.QueryGetStructRequest{ Id: argStructId, } - performing_structure_res, performing_structure_err := queryClient.Struct(context.Background(), performing_structure_params) if performing_structure_err != nil { return performing_structure_err @@ -59,83 +57,84 @@ func CmdStructBuildCompute() *cobra.Command { var performingStructure types.Struct performingStructure = performing_structure_res.Struct - fmt.Printf("Loaded Struct (%s) for building process \n", performingStructure.Id) + fmt.Printf("Loaded Struct (%s) for building process \n", performingStructure.Id) - struct_attribute_status_params := &types.QueryGetStructAttributeRequest{ - StructId: argStructId, - AttributeType: "status", - } - - status_res, _ := queryClient.StructAttribute(context.Background(), struct_attribute_status_params) - status := status_res.Attribute + struct_attribute_status_params := &types.QueryGetStructAttributeRequest{ + StructId: argStructId, + AttributeType: "status", + } - if (status&uint64(types.StructStateBuilt) != 0) { - fmt.Printf("Struct (%s) is already built \n", performingStructure.Id) - return nil - } + status_res, _ := queryClient.StructAttribute(context.Background(), struct_attribute_status_params) + status := status_res.Attribute - struct_attribute_block_start_params := &types.QueryGetStructAttributeRequest{ - StructId: argStructId, - AttributeType: "blockStartBuild", - } + if status&uint64(types.StructStateBuilt) != 0 { + fmt.Printf("Struct (%s) is already built \n", performingStructure.Id) + return nil + } - buildStartBlock_res, _ := queryClient.StructAttribute(context.Background(), struct_attribute_block_start_params) - buildStartBlock := buildStartBlock_res.Attribute + struct_attribute_block_start_params := &types.QueryGetStructAttributeRequest{ + StructId: argStructId, + AttributeType: "blockStartBuild", + } - struct_type_params := &types.QueryGetStructTypeRequest{ - Id: performingStructure.Type, - } + buildStartBlock_res, _ := queryClient.StructAttribute(context.Background(), struct_attribute_block_start_params) + buildStartBlock := buildStartBlock_res.Attribute - structType_res, _ := queryClient.StructType(context.Background(), struct_type_params) - structType := structType_res.StructType + struct_type_params := &types.QueryGetStructTypeRequest{ + Id: performingStructure.Type, + } - currentBlockResponse, _ := queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) - currentBlock := currentBlockResponse.BlockHeight - fmt.Printf("Build process activated on %d, current block is %d \n", buildStartBlock, currentBlock) - currentAge := currentBlock - buildStartBlock - currentDifficulty := types.CalculateDifficulty(float64(currentAge), structType.BuildDifficulty) - fmt.Printf("Building difficulty is %d \n", currentDifficulty) + structType_res, _ := queryClient.StructType(context.Background(), struct_type_params) + structType := structType_res.StructType + currentBlockResponse, _ := queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) + currentBlock := currentBlockResponse.BlockHeight + fmt.Printf("Build process activated on %d, current block is %d \n", buildStartBlock, currentBlock) + currentAge := currentBlock - buildStartBlock + currentDifficulty := types.CalculateDifficulty(float64(currentAge), structType.BuildDifficulty) + fmt.Printf("Building difficulty is %d \n", currentDifficulty) - buildStartBlockString := strconv.FormatUint(buildStartBlock , 10) - fmt.Println("Starting Building...") + buildStartBlockString := strconv.FormatUint(buildStartBlock, 10) + fmt.Println("Starting Building...") - var newDifficulty int + var newDifficulty int var i int = 0 - for { - if i > 0 { // the condition stops matching - break // break out of the loop - } + for { + if i > 0 { // the condition stops matching + break // break out of the loop + } -COMPUTE: + COMPUTE: i = i + 1 - if (i % 20000) == 0 { - currentBlockResponse, _ = queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) - currentBlock = currentBlockResponse.BlockHeight - currentAge = currentBlock - buildStartBlock - newDifficulty = types.CalculateDifficulty(float64(currentAge), structType.BuildDifficulty) - - if currentDifficulty != newDifficulty { - currentDifficulty = newDifficulty - fmt.Printf("Difficulty Change: %d \n", currentDifficulty) - } - - if (difficultyTargetStart > 0 ) { - if (difficultyTargetStart > currentDifficulty) { - time.Sleep(5 * time.Minute) - goto COMPUTE - } - } - - } + if (i % 20000) == 0 { + currentBlockResponse, _ = queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) + currentBlock = currentBlockResponse.BlockHeight + currentAge = currentBlock - buildStartBlock + newDifficulty = types.CalculateDifficulty(float64(currentAge), structType.BuildDifficulty) + + if currentDifficulty != newDifficulty { + currentDifficulty = newDifficulty + fmt.Printf("Difficulty Change: %d \n", currentDifficulty) + } + + if difficultyTargetStart > 0 { + if difficultyTargetStart > currentDifficulty { + time.Sleep(5 * time.Minute) + goto COMPUTE + } + } + + } newHash := sha256.New() - newInput := performingStructure.Id + "BUILD" + buildStartBlockString + "NONCE" + strconv.Itoa(i) + newInput := performingStructure.Id + "BUILD" + buildStartBlockString + "NONCE" + strconv.Itoa(i) newHash.Write([]byte(newInput)) newHashOutput := hex.EncodeToString(newHash.Sum(nil)) - if (!types.HashBuildAndCheckDifficulty(newInput, newHashOutput, currentAge, structType.BuildDifficulty)) { goto COMPUTE } + if valid, _ := types.HashBuildAndCheckDifficulty(newInput, newHashOutput, currentAge, structType.BuildDifficulty); !valid { + goto COMPUTE + } fmt.Println("") fmt.Println("Building Complete!") @@ -145,23 +144,19 @@ COMPUTE: argProof = newHashOutput } - - msg := &types.MsgStructBuildComplete{ - Creator: clientCtx.GetFromAddress().String(), - StructId: argStructId, - Proof: argProof, - Nonce: argNonce, - } - - + Creator: clientCtx.GetFromAddress().String(), + StructId: argStructId, + Proof: argProof, + Nonce: argNonce, + } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } flags.AddTxFlagsToCmd(cmd) - cmd.Flags().IntP("difficulty_target_start", "D", 0, "Do not start the compute process until difficulty reaches this level (1-64)") + cmd.Flags().IntP("difficulty_target_start", "D", 0, "Do not start the compute process until difficulty reaches this level (1-64)") return cmd } diff --git a/x/structs/client/cli/tx_struct_mine_compute.go b/x/structs/client/cli/tx_struct_mine_compute.go index 74e20e2..54ea936 100644 --- a/x/structs/client/cli/tx_struct_mine_compute.go +++ b/x/structs/client/cli/tx_struct_mine_compute.go @@ -7,22 +7,22 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" "structs/x/structs/types" + "github.com/spf13/cobra" + //sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "context" "fmt" "time" - "crypto/sha256" - "encoding/hex" + "crypto/sha256" + "encoding/hex" ) var _ = strconv.Itoa(0) - func CmdStructMineCompute() *cobra.Command { cmd := &cobra.Command{ Use: "struct-ore-mine-compute [struct ID]", @@ -40,17 +40,15 @@ func CmdStructMineCompute() *cobra.Command { return err } - difficultyTargetStart, _ := cmd.Flags().GetInt("difficulty_target_start") + difficultyTargetStart, _ := cmd.Flags().GetInt("difficulty_target_start") queryClient := types.NewQueryClient(clientCtx) - // Load the Struct performing_structure_params := &types.QueryGetStructRequest{ Id: argStructId, } - performing_structure_res, performing_structure_err := queryClient.Struct(context.Background(), performing_structure_params) if performing_structure_err != nil { return performing_structure_err @@ -59,79 +57,77 @@ func CmdStructMineCompute() *cobra.Command { var performingStructure types.Struct performingStructure = performing_structure_res.Struct - fmt.Printf("Loaded Struct (%s) for mining process \n", performingStructure.Id) - - - struct_attribute_block_start_params := &types.QueryGetStructAttributeRequest{ - StructId: argStructId, - AttributeType: "blockStartOreMine", - } - - mineStartBlock_res, _ := queryClient.StructAttribute(context.Background(), struct_attribute_block_start_params) - mineStartBlock := mineStartBlock_res.Attribute - - if (mineStartBlock == 0) { - fmt.Printf("Struct (%s) has no Active mining system \n", performingStructure.Id) - return nil - } + fmt.Printf("Loaded Struct (%s) for mining process \n", performingStructure.Id) + struct_attribute_block_start_params := &types.QueryGetStructAttributeRequest{ + StructId: argStructId, + AttributeType: "blockStartOreMine", + } - struct_type_params := &types.QueryGetStructTypeRequest{ - Id: performingStructure.Type, - } + mineStartBlock_res, _ := queryClient.StructAttribute(context.Background(), struct_attribute_block_start_params) + mineStartBlock := mineStartBlock_res.Attribute - structType_res, _ := queryClient.StructType(context.Background(), struct_type_params) - structType := structType_res.StructType + if mineStartBlock == 0 { + fmt.Printf("Struct (%s) has no Active mining system \n", performingStructure.Id) + return nil + } + struct_type_params := &types.QueryGetStructTypeRequest{ + Id: performingStructure.Type, + } - currentBlockResponse, _ := queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) - currentBlock := currentBlockResponse.BlockHeight - fmt.Printf("Mining process activated on %d, current block is %d \n", mineStartBlock, currentBlock) - currentAge := currentBlock - mineStartBlock - currentDifficulty := types.CalculateDifficulty(float64(currentAge), structType.OreMiningDifficulty) - fmt.Printf("Mining difficulty is %d \n", currentDifficulty) + structType_res, _ := queryClient.StructType(context.Background(), struct_type_params) + structType := structType_res.StructType + currentBlockResponse, _ := queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) + currentBlock := currentBlockResponse.BlockHeight + fmt.Printf("Mining process activated on %d, current block is %d \n", mineStartBlock, currentBlock) + currentAge := currentBlock - mineStartBlock + currentDifficulty := types.CalculateDifficulty(float64(currentAge), structType.OreMiningDifficulty) + fmt.Printf("Mining difficulty is %d \n", currentDifficulty) - activeMiningSystemBlockString := strconv.FormatUint(mineStartBlock , 10) - fmt.Println("Starting Mining...") + activeMiningSystemBlockString := strconv.FormatUint(mineStartBlock, 10) + fmt.Println("Starting Mining...") - var newDifficulty int + var newDifficulty int var i int = 0 - for { - if i > 0 { // the condition stops matching - break // break out of the loop - } + for { + if i > 0 { // the condition stops matching + break // break out of the loop + } -COMPUTE: + COMPUTE: i = i + 1 - if (i % 20000) == 0 { - currentBlockResponse, _ = queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) - currentBlock = currentBlockResponse.BlockHeight - currentAge = currentBlock - mineStartBlock - newDifficulty = types.CalculateDifficulty(float64(currentAge), structType.OreMiningDifficulty) + if (i % 20000) == 0 { + currentBlockResponse, _ = queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) + currentBlock = currentBlockResponse.BlockHeight + currentAge = currentBlock - mineStartBlock + newDifficulty = types.CalculateDifficulty(float64(currentAge), structType.OreMiningDifficulty) - if currentDifficulty != newDifficulty { - currentDifficulty = newDifficulty - fmt.Printf("Difficulty Change: %d \n", currentDifficulty) - } + if currentDifficulty != newDifficulty { + currentDifficulty = newDifficulty + fmt.Printf("Difficulty Change: %d \n", currentDifficulty) + } - if (difficultyTargetStart > 0 ) { - if (difficultyTargetStart > currentDifficulty) { - time.Sleep(5 * time.Minute) - goto COMPUTE - } - } + if difficultyTargetStart > 0 { + if difficultyTargetStart > currentDifficulty { + time.Sleep(5 * time.Minute) + goto COMPUTE + } + } - } + } newHash := sha256.New() - newInput := performingStructure.Id + "MINE" + activeMiningSystemBlockString + "NONCE" + strconv.Itoa(i) + newInput := performingStructure.Id + "MINE" + activeMiningSystemBlockString + "NONCE" + strconv.Itoa(i) newHash.Write([]byte(newInput)) newHashOutput := hex.EncodeToString(newHash.Sum(nil)) - if (!types.HashBuildAndCheckDifficulty(newInput, newHashOutput, currentAge, structType.OreMiningDifficulty)) { goto COMPUTE } + if valid, _ := types.HashBuildAndCheckDifficulty(newInput, newHashOutput, currentAge, structType.OreMiningDifficulty); !valid { + goto COMPUTE + } fmt.Println("") fmt.Println("Mining Complete!") @@ -141,22 +137,19 @@ COMPUTE: argProof = newHashOutput } - - msg := &types.MsgStructOreMinerComplete{ - Creator: clientCtx.GetFromAddress().String(), - StructId: argStructId, - Proof: argProof, - Nonce: argNonce, - } - + Creator: clientCtx.GetFromAddress().String(), + StructId: argStructId, + Proof: argProof, + Nonce: argNonce, + } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } flags.AddTxFlagsToCmd(cmd) - cmd.Flags().IntP("difficulty_target_start", "D", 0, "Do not start the compute process until difficulty reaches this level (1-64)") + cmd.Flags().IntP("difficulty_target_start", "D", 0, "Do not start the compute process until difficulty reaches this level (1-64)") return cmd } diff --git a/x/structs/client/cli/tx_struct_refine_compute.go b/x/structs/client/cli/tx_struct_refine_compute.go index 57573f1..daddfbf 100644 --- a/x/structs/client/cli/tx_struct_refine_compute.go +++ b/x/structs/client/cli/tx_struct_refine_compute.go @@ -7,22 +7,22 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" "structs/x/structs/types" + "github.com/spf13/cobra" + //sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "context" "fmt" "time" - "crypto/sha256" - "encoding/hex" + "crypto/sha256" + "encoding/hex" ) var _ = strconv.Itoa(0) - func CmdStructRefineCompute() *cobra.Command { cmd := &cobra.Command{ Use: "struct-ore-refine-compute [struct ID]", @@ -40,17 +40,15 @@ func CmdStructRefineCompute() *cobra.Command { return err } - difficultyTargetStart, _ := cmd.Flags().GetInt("difficulty_target_start") + difficultyTargetStart, _ := cmd.Flags().GetInt("difficulty_target_start") queryClient := types.NewQueryClient(clientCtx) - // Load the Struct performing_structure_params := &types.QueryGetStructRequest{ Id: argStructId, } - performing_structure_res, performing_structure_err := queryClient.Struct(context.Background(), performing_structure_params) if performing_structure_err != nil { return performing_structure_err @@ -59,76 +57,76 @@ func CmdStructRefineCompute() *cobra.Command { var performingStructure types.Struct performingStructure = performing_structure_res.Struct - fmt.Printf("Loaded Struct (%s) for refining process \n", performingStructure.Id) - - struct_attribute_block_start_params := &types.QueryGetStructAttributeRequest{ - StructId: argStructId, - AttributeType: "blockStartOreRefine", - } - - refineStartBlock_res, _ := queryClient.StructAttribute(context.Background(), struct_attribute_block_start_params) - refineStartBlock := refineStartBlock_res.Attribute + fmt.Printf("Loaded Struct (%s) for refining process \n", performingStructure.Id) + struct_attribute_block_start_params := &types.QueryGetStructAttributeRequest{ + StructId: argStructId, + AttributeType: "blockStartOreRefine", + } - if (refineStartBlock == 0) { - fmt.Printf("Struct (%s) has no Active refining system \n", performingStructure.Id) - return nil - } + refineStartBlock_res, _ := queryClient.StructAttribute(context.Background(), struct_attribute_block_start_params) + refineStartBlock := refineStartBlock_res.Attribute - struct_type_params := &types.QueryGetStructTypeRequest{ - Id: performingStructure.Type, - } + if refineStartBlock == 0 { + fmt.Printf("Struct (%s) has no Active refining system \n", performingStructure.Id) + return nil + } - structType_res, _ := queryClient.StructType(context.Background(), struct_type_params) - structType := structType_res.StructType + struct_type_params := &types.QueryGetStructTypeRequest{ + Id: performingStructure.Type, + } - currentBlockResponse, _ := queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) - currentBlock := currentBlockResponse.BlockHeight - fmt.Printf("Refining process activated on %d, current block is %d \n", refineStartBlock, currentBlock) - currentAge := currentBlock - refineStartBlock - currentDifficulty := types.CalculateDifficulty(float64(currentAge), structType.OreRefiningDifficulty) - fmt.Printf("Refining difficulty is %d \n", currentDifficulty) + structType_res, _ := queryClient.StructType(context.Background(), struct_type_params) + structType := structType_res.StructType + currentBlockResponse, _ := queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) + currentBlock := currentBlockResponse.BlockHeight + fmt.Printf("Refining process activated on %d, current block is %d \n", refineStartBlock, currentBlock) + currentAge := currentBlock - refineStartBlock + currentDifficulty := types.CalculateDifficulty(float64(currentAge), structType.OreRefiningDifficulty) + fmt.Printf("Refining difficulty is %d \n", currentDifficulty) - activeRefiningSystemBlockString := strconv.FormatUint(refineStartBlock, 10) - fmt.Println("Starting Refining...") + activeRefiningSystemBlockString := strconv.FormatUint(refineStartBlock, 10) + fmt.Println("Starting Refining...") - var newDifficulty int + var newDifficulty int var i int = 0 - for { - if i > 0 { // the condition stops matching - break // break out of the loop - } + for { + if i > 0 { // the condition stops matching + break // break out of the loop + } -COMPUTE: + COMPUTE: i = i + 1 - if (i % 20000) == 0 { - currentBlockResponse, _ = queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) - currentBlock = currentBlockResponse.BlockHeight - currentAge = currentBlock - refineStartBlock - newDifficulty = types.CalculateDifficulty(float64(currentAge), structType.OreRefiningDifficulty) - - if currentDifficulty != newDifficulty { - currentDifficulty = newDifficulty - fmt.Printf("Difficulty Change: %d \n", currentDifficulty) - } - - if (difficultyTargetStart > 0 ) { - if (difficultyTargetStart > currentDifficulty) { - time.Sleep(5 * time.Minute) - goto COMPUTE - } - } - - } + if (i % 20000) == 0 { + currentBlockResponse, _ = queryClient.GetBlockHeight(context.Background(), &types.QueryBlockHeight{}) + currentBlock = currentBlockResponse.BlockHeight + currentAge = currentBlock - refineStartBlock + newDifficulty = types.CalculateDifficulty(float64(currentAge), structType.OreRefiningDifficulty) + + if currentDifficulty != newDifficulty { + currentDifficulty = newDifficulty + fmt.Printf("Difficulty Change: %d \n", currentDifficulty) + } + + if difficultyTargetStart > 0 { + if difficultyTargetStart > currentDifficulty { + time.Sleep(5 * time.Minute) + goto COMPUTE + } + } + + } newHash := sha256.New() - newInput := performingStructure.Id + "REFINE" + activeRefiningSystemBlockString + "NONCE" + strconv.Itoa(i) + newInput := performingStructure.Id + "REFINE" + activeRefiningSystemBlockString + "NONCE" + strconv.Itoa(i) newHash.Write([]byte(newInput)) newHashOutput := hex.EncodeToString(newHash.Sum(nil)) - if (!types.HashBuildAndCheckDifficulty(newInput, newHashOutput, currentAge, structType.OreRefiningDifficulty)) { goto COMPUTE } + if valid, _ := types.HashBuildAndCheckDifficulty(newInput, newHashOutput, currentAge, structType.OreRefiningDifficulty); !valid { + goto COMPUTE + } fmt.Println("") fmt.Println("Refining Complete!") @@ -138,20 +136,19 @@ COMPUTE: argProof = newHashOutput } - msg := &types.MsgStructOreRefineryComplete{ - Creator: clientCtx.GetFromAddress().String(), - StructId: argStructId, - Proof: argProof, - Nonce: argNonce, - } + Creator: clientCtx.GetFromAddress().String(), + StructId: argStructId, + Proof: argProof, + Nonce: argNonce, + } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } flags.AddTxFlagsToCmd(cmd) - cmd.Flags().IntP("difficulty_target_start", "D", 0, "Do not start the compute process until difficulty reaches this level (1-64)") + cmd.Flags().IntP("difficulty_target_start", "D", 0, "Do not start the compute process until difficulty reaches this level (1-64)") return cmd } diff --git a/x/structs/keeper/grid.go b/x/structs/keeper/grid.go index 5859766..b134211 100644 --- a/x/structs/keeper/grid.go +++ b/x/structs/keeper/grid.go @@ -53,6 +53,10 @@ func (k Keeper) GetGridAttribute(ctx context.Context, gridAttributeId string) (a func (k Keeper) ClearGridAttribute(ctx context.Context, gridAttributeId string) { gridAttributeStore := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.GridAttributeKey)) gridAttributeStore.Delete([]byte(gridAttributeId)) + + ctxSDK := sdk.UnwrapSDKContext(ctx) + _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventGrid{&types.GridRecord{AttributeId: gridAttributeId, Value: 0}}) + k.logger.Info("Grid Change (Clear)", "gridAttributeId", gridAttributeId) } func (k Keeper) SetGridAttribute(ctx context.Context, gridAttributeId string, amount uint64) { diff --git a/x/structs/keeper/msg_server_planet_raid_complete.go b/x/structs/keeper/msg_server_planet_raid_complete.go index 3184de4..809d02d 100644 --- a/x/structs/keeper/msg_server_planet_raid_complete.go +++ b/x/structs/keeper/msg_server_planet_raid_complete.go @@ -2,92 +2,94 @@ package keeper import ( "context" - "strconv" + "strconv" - //"fmt" + //"fmt" - sdk "github.com/cosmos/cosmos-sdk/types" "structs/x/structs/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) /* - message MsgPlanetRaidComplete { - option (cosmos.msg.v1.signer) = "creator"; + message MsgPlanetRaidComplete { + option (cosmos.msg.v1.signer) = "creator"; - string creator = 1; - string planetId = 2; - string playerId = 3; - string proof = 4; - string nonce = 5; - } + string creator = 1; + string planetId = 2; + string playerId = 3; + string proof = 4; + string nonce = 5; + } - message MsgPlanetRaidCompleteResponse { Planet planet = 1 [(gogoproto.nullable) = false]; } + message MsgPlanetRaidCompleteResponse { Planet planet = 1 [(gogoproto.nullable) = false]; } */ func (k msgServer) PlanetRaidComplete(goCtx context.Context, msg *types.MsgPlanetRaidComplete) (*types.MsgPlanetRaidCompleteResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - // Add an Active Address record to the - // indexer for UI requirements + // Add an Active Address record to the + // indexer for UI requirements k.AddressEmitActivity(ctx, msg.Creator) - // Load Fleet - fleet, fleetLoadError := k.GetFleetCacheFromId(ctx, msg.FleetId) - if (fleetLoadError != nil) { - return &types.MsgPlanetRaidCompleteResponse{}, fleetLoadError - } - - // Check calling address can use Fleet - permissionError := fleet.GetOwner().CanBeHashedBy(msg.Creator) - if (permissionError != nil) { - return &types.MsgPlanetRaidCompleteResponse{}, permissionError - } - - if fleet.GetOwner().IsHalted() { - return &types.MsgPlanetRaidCompleteResponse{}, types.NewPlayerHaltedError(fleet.GetOwnerId(), "planet_raid_complete") - } - - // check that the fleet is Away - if fleet.IsOnStation() { - return &types.MsgPlanetRaidCompleteResponse{}, types.NewFleetStateError(fleet.GetFleetId(), "on_station", "raid_complete") - } - - // check that forward pointer for the fleet is "" - if (fleet.GetFleet().LocationListForward != "") { - return &types.MsgPlanetRaidCompleteResponse{}, types.NewFleetStateError(fleet.GetFleetId(), "not_first_in_queue", "raid_complete").WithPosition(0) - } - - // check that the player is online - if fleet.GetOwner().IsOffline() { - return &types.MsgPlanetRaidCompleteResponse{}, types.NewPlayerPowerError(fleet.GetOwnerId(), "offline") - } - - - raidedPlanet := fleet.GetPlanet().GetPlanetId() - blockStartRaidString := strconv.FormatUint(fleet.GetPlanet().GetBlockStartRaid() , 10) - hashInput := msg.FleetId + "@" + fleet.GetPlanet().GetPlanetId() + "RAID" + blockStartRaidString + "NONCE" + msg.Nonce - - currentAge := uint64(ctx.BlockHeight()) - fleet.GetPlanet().GetBlockStartRaid() - if (!types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, fleet.GetPlanet().GetPlanetaryShield())) { - //fleet.GetOwner().Halt() - _ = ctx.EventManager().EmitTypedEvent(&types.EventRaid{&types.EventRaidDetail{FleetId: fleet.GetFleetId(), PlanetId: raidedPlanet, Status: types.RaidStatus_ongoing}}) - return &types.MsgPlanetRaidCompleteResponse{}, types.NewWorkFailureError("raid", fleet.GetFleetId(), hashInput).WithPlanet(fleet.GetPlanet().GetPlanetId()) - } - - // Award the Ore from the defender to attacker - amountStolen := fleet.GetPlanet().GetOwner().GetStoredOre() - fleet.GetOwner().StoredOreIncrement(amountStolen) - fleet.GetPlanet().GetOwner().StoredOreEmpty() - - _ = ctx.EventManager().EmitTypedEvent(&types.EventOreTheft{&types.EventOreTheftDetail{VictimPlayerId: fleet.GetPlanet().GetOwnerId(), VictimPrimaryAddress: fleet.GetPlanet().GetOwner().GetPrimaryAddress(), ThiefPlayerId: fleet.GetOwnerId(), ThiefPrimaryAddress: fleet.GetOwner().GetPrimaryAddress(), Amount: amountStolen}}) - - // Move the Fleet back to Station - fleet.SetLocationToPlanet(fleet.GetOwner().GetPlanet()) - fleet.Commit() - - _ = ctx.EventManager().EmitTypedEvent(&types.EventRaid{&types.EventRaidDetail{FleetId: fleet.GetFleetId(), PlanetId: raidedPlanet, Status: types.RaidStatus_raidSuccessful}}) - + // Load Fleet + fleet, fleetLoadError := k.GetFleetCacheFromId(ctx, msg.FleetId) + if fleetLoadError != nil { + return &types.MsgPlanetRaidCompleteResponse{}, fleetLoadError + } + + // Check calling address can use Fleet + /* + permissionError := fleet.GetOwner().CanBeHashedBy(msg.Creator) + if (permissionError != nil) { + return &types.MsgPlanetRaidCompleteResponse{}, permissionError + } + */ + + if fleet.GetOwner().IsHalted() { + return &types.MsgPlanetRaidCompleteResponse{}, types.NewPlayerHaltedError(fleet.GetOwnerId(), "planet_raid_complete") + } + + // check that the fleet is Away + if fleet.IsOnStation() { + return &types.MsgPlanetRaidCompleteResponse{}, types.NewFleetStateError(fleet.GetFleetId(), "on_station", "raid_complete") + } + + // check that forward pointer for the fleet is "" + if fleet.GetFleet().LocationListForward != "" { + return &types.MsgPlanetRaidCompleteResponse{}, types.NewFleetStateError(fleet.GetFleetId(), "not_first_in_queue", "raid_complete").WithPosition(0) + } + + // check that the player is online + if fleet.GetOwner().IsOffline() { + return &types.MsgPlanetRaidCompleteResponse{}, types.NewPlayerPowerError(fleet.GetOwnerId(), "offline") + } + + raidedPlanet := fleet.GetPlanet().GetPlanetId() + blockStartRaidString := strconv.FormatUint(fleet.GetPlanet().GetBlockStartRaid(), 10) + hashInput := msg.FleetId + "@" + fleet.GetPlanet().GetPlanetId() + "RAID" + blockStartRaidString + "NONCE" + msg.Nonce + + currentAge := uint64(ctx.BlockHeight()) - fleet.GetPlanet().GetBlockStartRaid() + valid, achievedDifficulty := types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, fleet.GetPlanet().GetPlanetaryShield()); + if !valid { + //_ = ctx.EventManager().EmitTypedEvent(&types.EventRaid{&types.EventRaidDetail{FleetId: fleet.GetFleetId(), PlanetId: raidedPlanet, Status: types.RaidStatus_ongoing}}) + return &types.MsgPlanetRaidCompleteResponse{}, types.NewWorkFailureError("raid", fleet.GetFleetId(), hashInput).WithPlanet(fleet.GetPlanet().GetPlanetId()) + } + + // Award the Ore from the defender to attacker + amountStolen := fleet.GetPlanet().GetOwner().GetStoredOre() + fleet.GetOwner().StoredOreIncrement(amountStolen) + fleet.GetPlanet().GetOwner().StoredOreEmpty() + + _ = ctx.EventManager().EmitTypedEvent(&types.EventOreTheft{&types.EventOreTheftDetail{VictimPlayerId: fleet.GetPlanet().GetOwnerId(), VictimPrimaryAddress: fleet.GetPlanet().GetOwner().GetPrimaryAddress(), ThiefPlayerId: fleet.GetOwnerId(), ThiefPrimaryAddress: fleet.GetOwner().GetPrimaryAddress(), Amount: amountStolen}}) + + // Move the Fleet back to Station + fleet.SetLocationToPlanet(fleet.GetOwner().GetPlanet()) + fleet.Commit() + + _ = ctx.EventManager().EmitTypedEvent(&types.EventRaid{&types.EventRaidDetail{FleetId: fleet.GetFleetId(), PlanetId: raidedPlanet, Status: types.RaidStatus_raidSuccessful}}) + _ = ctx.EventManager().EmitTypedEvent(&types.EventHashSuccess{&types.EventHashSuccessDetail{CallerAddress: msg.Creator, Category: "raid", Difficulty: achievedDifficulty, ObjectId: msg.FleetId, PlanetId: raidedPlanet }}) return &types.MsgPlanetRaidCompleteResponse{Fleet: fleet.GetFleet(), Planet: fleet.GetPlanet().GetPlanet(), OreStolen: amountStolen}, nil } diff --git a/x/structs/keeper/msg_server_struct_build_complete.go b/x/structs/keeper/msg_server_struct_build_complete.go index c82c237..12188c0 100644 --- a/x/structs/keeper/msg_server_struct_build_complete.go +++ b/x/structs/keeper/msg_server_struct_build_complete.go @@ -2,83 +2,89 @@ package keeper import ( "context" - "strconv" - sdk "github.com/cosmos/cosmos-sdk/types" + "strconv" "structs/x/structs/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) func (k msgServer) StructBuildComplete(goCtx context.Context, msg *types.MsgStructBuildComplete) (*types.MsgStructStatusResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - // Add an Active Address record to the - // indexer for UI requirements + // Add an Active Address record to the + // indexer for UI requirements k.AddressEmitActivity(ctx, msg.Creator) - // load struct - structure := k.GetStructCacheFromId(ctx, msg.StructId) - - // Check to see if the caller has permissions to proceed - permissionError := structure.CanBeHashedBy(msg.Creator) - if (permissionError != nil) { - return &types.MsgStructStatusResponse{}, permissionError - } - - if !structure.LoadStruct(){ - return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct", msg.StructId) - } - - if structure.GetOwner().IsHalted() { - return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_build_complete").WithStruct(msg.StructId) - } - - if structure.IsBuilt() { - structure.GetOwner().Discharge() - structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "built", "building", "build_complete") - } - - - // Check Player Charge - /* - if (structure.GetOwner().GetCharge() < structure.GetStructType().ActivateCharge) { - err := types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().ActivateCharge, structure.GetOwner().GetCharge(), "struct_build_complete").WithStructType(structure.GetStructType().Id) - structure.GetOwner().Discharge() - structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, err - } - */ - - if structure.GetOwner().IsOffline(){ - return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "offline") - } - - // Remove the BuildDraw load - structure.GetOwner().StructsLoadDecrement(structure.GetStructType().BuildDraw) - - if !structure.GetOwner().CanSupportLoadAddition(structure.GetStructType().PassiveDraw) { - structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) - //structure.GetOwner().Discharge() - structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "capacity_exceeded").WithCapacity(structure.GetStructType().PassiveDraw, structure.GetOwner().GetAvailableCapacity()) - } - - // Check the Proof - buildStartBlockString := strconv.FormatUint(structure.GetBlockStartBuild() , 10) - hashInput := structure.GetStructId() + "BUILD" + buildStartBlockString + "NONCE" + msg.Nonce - - currentAge := uint64(ctx.BlockHeight()) - structure.GetBlockStartBuild() - - if (!types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().BuildDifficulty)) { - structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) - //structure.GetOwner().Discharge() - //structure.GetOwner().Halt() - structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, types.NewWorkFailureError("build", structure.GetStructId(), hashInput) - } - - structure.StatusAddBuilt() - structure.GoOnline() - structure.Commit() + // load struct + structure := k.GetStructCacheFromId(ctx, msg.StructId) + + // Check to see if the caller has permissions to proceed + /* + callerID, isOwner, permissionError := structure.CanBeHashedBy(msg.Creator) + if (permissionError != nil) { + return &types.MsgStructStatusResponse{}, permissionError + } + */ + + if !structure.LoadStruct() { + return &types.MsgStructStatusResponse{}, types.NewObjectNotFoundError("struct", msg.StructId) + } + + if structure.GetOwner().IsHalted() { + return &types.MsgStructStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_build_complete").WithStruct(msg.StructId) + } + + if structure.IsBuilt() { + structure.GetOwner().Discharge() + structure.GetOwner().Commit() + return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "built", "building", "build_complete") + } + + // Check Player Charge + /* + if (structure.GetOwner().GetCharge() < structure.GetStructType().ActivateCharge) { + err := types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().ActivateCharge, structure.GetOwner().GetCharge(), "struct_build_complete").WithStructType(structure.GetStructType().Id) + structure.GetOwner().Discharge() + structure.GetOwner().Commit() + return &types.MsgStructStatusResponse{}, err + } + */ + + if structure.GetOwner().IsOffline() { + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "offline") + } + + // Remove the BuildDraw load + structure.GetOwner().StructsLoadDecrement(structure.GetStructType().BuildDraw) + + if !structure.GetOwner().CanSupportLoadAddition(structure.GetStructType().PassiveDraw) { + structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) + //structure.GetOwner().Discharge() + structure.GetOwner().Commit() + return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "capacity_exceeded").WithCapacity(structure.GetStructType().PassiveDraw, structure.GetOwner().GetAvailableCapacity()) + } + + // Check the Proof + buildStartBlockString := strconv.FormatUint(structure.GetBlockStartBuild(), 10) + hashInput := structure.GetStructId() + "BUILD" + buildStartBlockString + "NONCE" + msg.Nonce + + currentAge := uint64(ctx.BlockHeight()) - structure.GetBlockStartBuild() + + valid, achievedDifficulty := types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().BuildDifficulty) + if !valid { + structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) + //structure.GetOwner().Discharge() + //structure.GetOwner().Halt() + structure.GetOwner().Commit() + return &types.MsgStructStatusResponse{}, types.NewWorkFailureError("build", structure.GetStructId(), hashInput) + } + + structure.StatusAddBuilt() + structure.GoOnline() + structure.Commit() + + _ = ctx.EventManager().EmitTypedEvent(&types.EventHashSuccess{&types.EventHashSuccessDetail{CallerAddress: msg.Creator, Category: "build", Difficulty: achievedDifficulty, ObjectId: msg.StructId }}) + return &types.MsgStructStatusResponse{Struct: structure.GetStruct()}, nil } diff --git a/x/structs/keeper/msg_server_struct_ore_miner_complete.go b/x/structs/keeper/msg_server_struct_ore_miner_complete.go index 300f434..2d35b67 100644 --- a/x/structs/keeper/msg_server_struct_ore_miner_complete.go +++ b/x/structs/keeper/msg_server_struct_ore_miner_complete.go @@ -2,60 +2,65 @@ package keeper import ( "context" - "strconv" + "strconv" - //"fmt" + //"fmt" - sdk "github.com/cosmos/cosmos-sdk/types" "structs/x/structs/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) func (k msgServer) StructOreMinerComplete(goCtx context.Context, msg *types.MsgStructOreMinerComplete) (*types.MsgStructOreMinerStatusResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - // Add an Active Address record to the - // indexer for UI requirements + // Add an Active Address record to the + // indexer for UI requirements k.AddressEmitActivity(ctx, msg.Creator) structure := k.GetStructCacheFromId(ctx, msg.StructId) - // Check to see if the caller has permissions to proceed - permissionError := structure.CanBeHashedBy(msg.Creator) - if (permissionError != nil) { - return &types.MsgStructOreMinerStatusResponse{}, permissionError - } - - if structure.GetOwner().IsHalted() { - return &types.MsgStructOreMinerStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "ore_mine_complete").WithStruct(msg.StructId) - } - - // Is the Struct & Owner online? - readinessError := structure.ReadinessCheck() - if (readinessError != nil) { - k.DischargePlayer(ctx, structure.GetOwnerId()) - return &types.MsgStructOreMinerStatusResponse{}, readinessError - } - - miningReadinessError := structure.CanOreMinePlanet() - if (miningReadinessError != nil) { - k.DischargePlayer(ctx, structure.GetOwnerId()) - return &types.MsgStructOreMinerStatusResponse{}, miningReadinessError - } - - activeOreMiningSystemBlockString := strconv.FormatUint(structure.GetBlockStartOreMine() , 10) - hashInput := msg.StructId + "MINE" + activeOreMiningSystemBlockString + "NONCE" + msg.Nonce - - currentAge := uint64(ctx.BlockHeight()) - structure.GetBlockStartOreMine() - if (!types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().GetOreMiningDifficulty())) { - //structure.GetOwner().Halt() - return &types.MsgStructOreMinerStatusResponse{}, types.NewWorkFailureError("mine", structure.StructId, hashInput) - } - - // Got this far, let's reward the player with some Ore - structure.OreMinePlanet() - structure.Commit() - - _ = ctx.EventManager().EmitTypedEvent(&types.EventOreMine{&types.EventOreMineDetail{PlayerId: structure.GetOwnerId(), PrimaryAddress: structure.GetOwner().GetPrimaryAddress(), Amount: 1}}) + // Check to see if the caller has permissions to proceed + /* + callerID, isOwner, permissionError := structure.CanBeHashedBy(msg.Creator) + if (permissionError != nil) { + return &types.MsgStructOreMinerStatusResponse{}, permissionError + } + */ + + if structure.GetOwner().IsHalted() { + return &types.MsgStructOreMinerStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "ore_mine_complete").WithStruct(msg.StructId) + } + + // Is the Struct & Owner online? + readinessError := structure.ReadinessCheck() + if readinessError != nil { + k.DischargePlayer(ctx, structure.GetOwnerId()) + return &types.MsgStructOreMinerStatusResponse{}, readinessError + } + + miningReadinessError := structure.CanOreMinePlanet() + if miningReadinessError != nil { + k.DischargePlayer(ctx, structure.GetOwnerId()) + return &types.MsgStructOreMinerStatusResponse{}, miningReadinessError + } + + activeOreMiningSystemBlockString := strconv.FormatUint(structure.GetBlockStartOreMine(), 10) + hashInput := msg.StructId + "MINE" + activeOreMiningSystemBlockString + "NONCE" + msg.Nonce + + currentAge := uint64(ctx.BlockHeight()) - structure.GetBlockStartOreMine() + + valid, achievedDifficulty := types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().GetOreMiningDifficulty()); + if !valid { + return &types.MsgStructOreMinerStatusResponse{}, types.NewWorkFailureError("mine", structure.StructId, hashInput) + } + + // Got this far, let's reward the player with some Ore + structure.OreMinePlanet() + structure.Commit() + + _ = ctx.EventManager().EmitTypedEvent(&types.EventOreMine{&types.EventOreMineDetail{PlayerId: structure.GetOwnerId(), PrimaryAddress: structure.GetOwner().GetPrimaryAddress(), Amount: 1}}) + _ = ctx.EventManager().EmitTypedEvent(&types.EventHashSuccess{&types.EventHashSuccessDetail{CallerAddress: msg.Creator, Category: "mine", Difficulty: achievedDifficulty, ObjectId: msg.StructId }}) return &types.MsgStructOreMinerStatusResponse{Struct: structure.GetStruct()}, nil } diff --git a/x/structs/keeper/msg_server_struct_ore_refinery_complete.go b/x/structs/keeper/msg_server_struct_ore_refinery_complete.go index ce7b1eb..3bd181d 100644 --- a/x/structs/keeper/msg_server_struct_ore_refinery_complete.go +++ b/x/structs/keeper/msg_server_struct_ore_refinery_complete.go @@ -21,10 +21,12 @@ func (k msgServer) StructOreRefineryComplete(goCtx context.Context, msg *types.M structure := k.GetStructCacheFromId(ctx, msg.StructId) // Check to see if the caller has permissions to proceed - permissionError := structure.CanBeHashedBy(msg.Creator) + /* + callerID, isOwner, permissionError := structure.CanBeHashedBy(msg.Creator) if (permissionError != nil) { return &types.MsgStructOreRefineryStatusResponse{}, permissionError } + */ if structure.GetOwner().IsHalted() { return &types.MsgStructOreRefineryStatusResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "ore_refine_complete").WithStruct(msg.StructId) @@ -47,8 +49,8 @@ func (k msgServer) StructOreRefineryComplete(goCtx context.Context, msg *types.M hashInput := structure.StructId + "REFINE" + activeOreRefiningSystemBlockString + "NONCE" + msg.Nonce currentAge := uint64(ctx.BlockHeight()) - structure.GetBlockStartOreRefine() - if (!types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().GetOreRefiningDifficulty())) { - //structure.GetOwner().Halt() + valid, achievedDifficulty := types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().GetOreRefiningDifficulty()) + if !valid { return &types.MsgStructOreRefineryStatusResponse{}, types.NewWorkFailureError("refine", structure.StructId, hashInput) } @@ -57,6 +59,7 @@ func (k msgServer) StructOreRefineryComplete(goCtx context.Context, msg *types.M structure.Commit() _ = ctx.EventManager().EmitTypedEvent(&types.EventAlphaRefine{&types.EventAlphaRefineDetail{PlayerId: structure.GetOwnerId(), PrimaryAddress: structure.GetOwner().GetPrimaryAddress(), Amount: 1}}) + _ = ctx.EventManager().EmitTypedEvent(&types.EventHashSuccess{&types.EventHashSuccessDetail{CallerAddress: msg.Creator, Category: "refine", Difficulty: achievedDifficulty, ObjectId: msg.StructId }}) return &types.MsgStructOreRefineryStatusResponse{Struct: structure.GetStruct()}, nil } diff --git a/x/structs/keeper/planet_attribute.go b/x/structs/keeper/planet_attribute.go index 782a75b..c69e553 100644 --- a/x/structs/keeper/planet_attribute.go +++ b/x/structs/keeper/planet_attribute.go @@ -49,6 +49,10 @@ func (k Keeper) GetPlanetAttribute(ctx context.Context, planetAttributeId string func (k Keeper) ClearPlanetAttribute(ctx context.Context, planetAttributeId string) () { planetAttributeStore := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.PlanetAttributeKey)) planetAttributeStore.Delete([]byte(planetAttributeId)) + + ctxSDK := sdk.UnwrapSDKContext(ctx) + _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventPlanetAttribute{&types.PlanetAttributeRecord{AttributeId: planetAttributeId, Value: 0}}) + k.logger.Info("Planet Change (Clear)", "planetAttributeId", planetAttributeId) } diff --git a/x/structs/keeper/struct_attribute.go b/x/structs/keeper/struct_attribute.go index 26a08df..d513725 100644 --- a/x/structs/keeper/struct_attribute.go +++ b/x/structs/keeper/struct_attribute.go @@ -54,6 +54,10 @@ func (k Keeper) GetStructAttribute(ctx context.Context, structAttributeId string func (k Keeper) ClearStructAttribute(ctx context.Context, structAttributeId string) () { structAttributeStore := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.StructAttributeKey)) structAttributeStore.Delete([]byte(structAttributeId)) + + ctxSDK := sdk.UnwrapSDKContext(ctx) + _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventStructAttribute{&types.StructAttributeRecord{AttributeId: structAttributeId, Value: 0}}) + k.logger.Info("Struct Change (Clear)", "structAttributeId", structAttributeId) } diff --git a/x/structs/keeper/struct_cache.go b/x/structs/keeper/struct_cache.go index bafd1c5..4c4c557 100644 --- a/x/structs/keeper/struct_cache.go +++ b/x/structs/keeper/struct_cache.go @@ -793,24 +793,25 @@ func (cache *StructCache) CanBePlayedBy(address string) (error) { return nil } -func (cache *StructCache) CanBeHashedBy(address string) (error) { - +func (cache *StructCache) CanBeHashedBy(address string) (string, bool, error) { + owner := true // Make sure the address calling this has Hash permissions if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionHash)) { - return types.NewPermissionError("address", address, "", "", uint64(types.PermissionHash), "hash") + return "", owner, types.NewPermissionError("address", address, "", "", uint64(types.PermissionHash), "hash") } callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) if (err != nil) { - return err + return "", owner, err } if (callingPlayer.PlayerId != cache.GetOwnerId()) { + owner = false if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionHash)) { - return types.NewPermissionError("player", callingPlayer.PlayerId, "player", cache.GetOwnerId(), uint64(types.PermissionHash), "hash") + return callingPlayer.PlayerId, owner, types.NewPermissionError("player", callingPlayer.PlayerId, "player", cache.GetOwnerId(), uint64(types.PermissionHash), "hash") } } - return nil + return cache.GetOwnerId(), owner, nil } /* Game Functions */ diff --git a/x/structs/simulation/operations.go b/x/structs/simulation/operations.go index 526b70b..5b43015 100644 --- a/x/structs/simulation/operations.go +++ b/x/structs/simulation/operations.go @@ -902,7 +902,7 @@ func SimulateCommandShipBuildComplete( proof = hex.EncodeToString(hash.Sum(nil)) // Check if proof meets difficulty - if types.HashBuildAndCheckDifficulty(hashInput, proof, currentAge, structCache.GetStructType().BuildDifficulty) { + if valid, _ := types.HashBuildAndCheckDifficulty(hashInput, proof, currentAge, structCache.GetStructType().BuildDifficulty); valid { break } } @@ -1812,7 +1812,7 @@ func SimulateMsgStructBuildComplete( nonce = fmt.Sprintf("%d", r.Int63()) hashInput := structure.Id + nonce proof = types.HashBuild(hashInput) - if types.HashBuildAndCheckDifficulty(hashInput, proof, currentAge, structCache.GetStructType().BuildDifficulty) { + if valid, _ := types.HashBuildAndCheckDifficulty(hashInput, proof, currentAge, structCache.GetStructType().BuildDifficulty); valid { break } } diff --git a/x/structs/types/events.pb.go b/x/structs/types/events.pb.go index bfd362a..5332518 100644 --- a/x/structs/types/events.pb.go +++ b/x/structs/types/events.pb.go @@ -3321,6 +3321,126 @@ func (m *EventRaidDetail) GetStatus() RaidStatus { return RaidStatus_initiated } +type EventHashSuccess struct { + EventHashSuccessDetail *EventHashSuccessDetail `protobuf:"bytes,1,opt,name=eventHashSuccessDetail,proto3" json:"eventHashSuccessDetail,omitempty"` +} + +func (m *EventHashSuccess) Reset() { *m = EventHashSuccess{} } +func (m *EventHashSuccess) String() string { return proto.CompactTextString(m) } +func (*EventHashSuccess) ProtoMessage() {} +func (*EventHashSuccess) Descriptor() ([]byte, []int) { + return fileDescriptor_dd7c2ee201e0d8dd, []int{59} +} +func (m *EventHashSuccess) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventHashSuccess) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventHashSuccess.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 *EventHashSuccess) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventHashSuccess.Merge(m, src) +} +func (m *EventHashSuccess) XXX_Size() int { + return m.Size() +} +func (m *EventHashSuccess) XXX_DiscardUnknown() { + xxx_messageInfo_EventHashSuccess.DiscardUnknown(m) +} + +var xxx_messageInfo_EventHashSuccess proto.InternalMessageInfo + +func (m *EventHashSuccess) GetEventHashSuccessDetail() *EventHashSuccessDetail { + if m != nil { + return m.EventHashSuccessDetail + } + return nil +} + +type EventHashSuccessDetail struct { + CallerAddress string `protobuf:"bytes,1,opt,name=callerAddress,proto3" json:"callerAddress,omitempty"` + Category string `protobuf:"bytes,2,opt,name=category,proto3" json:"category,omitempty"` + Difficulty uint64 `protobuf:"varint,3,opt,name=difficulty,proto3" json:"difficulty,omitempty"` + ObjectId string `protobuf:"bytes,4,opt,name=objectId,proto3" json:"objectId,omitempty"` + PlanetId string `protobuf:"bytes,5,opt,name=planetId,proto3" json:"planetId,omitempty"` +} + +func (m *EventHashSuccessDetail) Reset() { *m = EventHashSuccessDetail{} } +func (m *EventHashSuccessDetail) String() string { return proto.CompactTextString(m) } +func (*EventHashSuccessDetail) ProtoMessage() {} +func (*EventHashSuccessDetail) Descriptor() ([]byte, []int) { + return fileDescriptor_dd7c2ee201e0d8dd, []int{60} +} +func (m *EventHashSuccessDetail) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventHashSuccessDetail) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventHashSuccessDetail.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 *EventHashSuccessDetail) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventHashSuccessDetail.Merge(m, src) +} +func (m *EventHashSuccessDetail) XXX_Size() int { + return m.Size() +} +func (m *EventHashSuccessDetail) XXX_DiscardUnknown() { + xxx_messageInfo_EventHashSuccessDetail.DiscardUnknown(m) +} + +var xxx_messageInfo_EventHashSuccessDetail proto.InternalMessageInfo + +func (m *EventHashSuccessDetail) GetCallerAddress() string { + if m != nil { + return m.CallerAddress + } + return "" +} + +func (m *EventHashSuccessDetail) GetCategory() string { + if m != nil { + return m.Category + } + return "" +} + +func (m *EventHashSuccessDetail) GetDifficulty() uint64 { + if m != nil { + return m.Difficulty + } + return 0 +} + +func (m *EventHashSuccessDetail) GetObjectId() string { + if m != nil { + return m.ObjectId + } + return "" +} + +func (m *EventHashSuccessDetail) GetPlanetId() string { + if m != nil { + return m.PlanetId + } + return "" +} + func init() { proto.RegisterType((*EventAllocation)(nil), "structs.structs.EventAllocation") proto.RegisterType((*EventAgreement)(nil), "structs.structs.EventAgreement") @@ -3381,170 +3501,177 @@ func init() { proto.RegisterType((*EventAttackDefenderCounterDetail)(nil), "structs.structs.EventAttackDefenderCounterDetail") proto.RegisterType((*EventRaid)(nil), "structs.structs.EventRaid") proto.RegisterType((*EventRaidDetail)(nil), "structs.structs.EventRaidDetail") + proto.RegisterType((*EventHashSuccess)(nil), "structs.structs.EventHashSuccess") + proto.RegisterType((*EventHashSuccessDetail)(nil), "structs.structs.EventHashSuccessDetail") } func init() { proto.RegisterFile("structs/structs/events.proto", fileDescriptor_dd7c2ee201e0d8dd) } var fileDescriptor_dd7c2ee201e0d8dd = []byte{ - // 2522 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xdb, 0x73, 0x1c, 0x47, - 0xf5, 0xf6, 0xfa, 0x2a, 0x1d, 0x59, 0xb2, 0xd4, 0xb6, 0xe5, 0xf5, 0xca, 0x5a, 0xed, 0xaf, 0xed, - 0xf8, 0xe7, 0x18, 0x23, 0x25, 0x0e, 0x49, 0x51, 0x81, 0xa2, 0x4a, 0x17, 0xdf, 0x02, 0x8e, 0x55, - 0x2d, 0x25, 0x81, 0x14, 0x24, 0xf4, 0xee, 0xb4, 0x56, 0x83, 0x66, 0x67, 0xb6, 0x66, 0x7a, 0x65, - 0xb6, 0x80, 0x27, 0xaa, 0xa0, 0xa8, 0xe2, 0x92, 0x2a, 0x28, 0x1e, 0x78, 0x49, 0xf1, 0xc6, 0x63, - 0xfe, 0x8c, 0x3c, 0xe6, 0x89, 0xe2, 0x89, 0x8b, 0xfd, 0xc0, 0xbf, 0x41, 0xf5, 0x65, 0x66, 0xba, - 0x67, 0x7a, 0x66, 0x37, 0x06, 0xc2, 0x4b, 0xac, 0xfe, 0xce, 0x77, 0xbe, 0xe9, 0x73, 0xfa, 0xf4, - 0xe9, 0x9e, 0xc9, 0xc2, 0xb5, 0x84, 0xc7, 0xa3, 0x1e, 0x4f, 0x36, 0xd2, 0x7f, 0xd9, 0x31, 0x0b, - 0x79, 0xb2, 0x3e, 0x8c, 0x23, 0x1e, 0xa1, 0x0b, 0x1a, 0x5d, 0xd7, 0xff, 0xb6, 0x96, 0xe8, 0xc0, - 0x0f, 0xa3, 0x0d, 0xf9, 0x5f, 0xc5, 0x69, 0x5d, 0xea, 0x47, 0xfd, 0x48, 0xfe, 0xb9, 0x21, 0xfe, - 0xd2, 0xe8, 0xb5, 0x7e, 0x14, 0xf5, 0x03, 0xb6, 0x41, 0x87, 0xfe, 0x06, 0x0d, 0xc3, 0x88, 0x53, - 0xee, 0x47, 0x61, 0x92, 0x5a, 0x8b, 0x4f, 0x1d, 0xd2, 0x98, 0x0e, 0x52, 0xeb, 0x9a, 0xf6, 0x95, - 0xa3, 0xee, 0xe8, 0x60, 0x83, 0xfb, 0x03, 0x96, 0x70, 0x3a, 0x18, 0x6a, 0xc2, 0x6a, 0xd1, 0x9d, - 0x7a, 0x5e, 0xcc, 0x92, 0xcc, 0xbf, 0x64, 0xee, 0xc7, 0x8c, 0x0d, 0x58, 0xc8, 0x35, 0xa1, 0x53, - 0x22, 0x04, 0x41, 0xd4, 0x93, 0x33, 0xd4, 0x8c, 0x95, 0x22, 0xe3, 0x20, 0x60, 0x2c, 0x75, 0x6f, - 0x15, 0x8d, 0xfd, 0xd8, 0xf7, 0xaa, 0x1c, 0xfb, 0x23, 0x3f, 0x48, 0x8d, 0xed, 0xa2, 0xd1, 0x0f, - 0x0f, 0x46, 0x49, 0xfe, 0xd4, 0x92, 0xf0, 0x11, 0x1b, 0x27, 0x55, 0x73, 0x1e, 0xb2, 0x78, 0xe0, - 0x27, 0x86, 0x77, 0x39, 0xa9, 0x01, 0x1d, 0xb3, 0xb8, 0xc6, 0x1a, 0x66, 0x21, 0x95, 0x66, 0x36, - 0x8c, 0xa3, 0x63, 0xdf, 0xcb, 0xbc, 0x4b, 0x19, 0x8f, 0x19, 0xed, 0xf1, 0xa8, 0x52, 0x5c, 0xfd, - 0x5b, 0x35, 0xf5, 0x64, 0xd4, 0x4d, 0xb8, 0x91, 0x6e, 0xfc, 0x36, 0x5c, 0xb8, 0x27, 0xea, 0x6e, - 0x33, 0x5b, 0x07, 0xf4, 0x35, 0x80, 0x7c, 0x55, 0x9a, 0x8d, 0x4e, 0xe3, 0xd6, 0xdc, 0xdd, 0x95, - 0xf5, 0x42, 0x3d, 0xae, 0xe7, 0x0e, 0xc4, 0xa0, 0xe3, 0xb7, 0x60, 0x41, 0xe9, 0xa5, 0x0b, 0x8f, - 0xbe, 0x0a, 0xb3, 0x59, 0x15, 0x68, 0xb5, 0x56, 0x59, 0x2d, 0x65, 0x90, 0x9c, 0x8c, 0xdf, 0x04, - 0x90, 0x5a, 0xf7, 0x45, 0x05, 0xa0, 0x3b, 0x70, 0x46, 0x96, 0x82, 0xd6, 0x58, 0x2e, 0x69, 0x48, - 0x1a, 0x51, 0xa4, 0xcc, 0xf7, 0x81, 0x28, 0x02, 0xe1, 0x2b, 0xab, 0xa1, 0xd2, 0x57, 0xd2, 0x88, - 0x22, 0xe1, 0xfb, 0x30, 0x2f, 0x7d, 0x1f, 0xe9, 0x1a, 0x41, 0xaf, 0xc3, 0x4c, 0x5a, 0x2f, 0x5a, - 0xe1, 0x6a, 0x49, 0x21, 0x25, 0x93, 0x8c, 0x8a, 0xbf, 0x01, 0x73, 0x52, 0x67, 0x57, 0xae, 0x37, - 0xda, 0x80, 0xb3, 0x6a, 0xe5, 0xb5, 0xc6, 0x95, 0x92, 0x86, 0x22, 0x12, 0x4d, 0xc3, 0x1c, 0x2e, - 0x19, 0xfe, 0x9b, 0x9c, 0xc7, 0x7e, 0x77, 0xc4, 0x19, 0xfa, 0x2e, 0x5c, 0x1e, 0xda, 0x10, 0x61, - 0xbd, 0x28, 0x4e, 0xa3, 0xbb, 0x59, 0xa1, 0x5b, 0x60, 0x13, 0xb7, 0x88, 0x39, 0xeb, 0x31, 0x8b, - 0xf5, 0xac, 0xc7, 0x2c, 0xae, 0x9b, 0xf5, 0x98, 0xc5, 0x44, 0xd3, 0xb2, 0xec, 0xed, 0xea, 0x3a, - 0x16, 0xd9, 0x4b, 0x6b, 0xba, 0x32, 0x7b, 0x29, 0x99, 0x64, 0x54, 0xbc, 0x05, 0xe7, 0xa5, 0x0e, - 0x51, 0xf5, 0x8e, 0xee, 0xc2, 0x39, 0x5d, 0xfa, 0x5a, 0xa5, 0x59, 0x52, 0xd1, 0x54, 0x92, 0x12, - 0xf1, 0x8e, 0x8e, 0x65, 0x4f, 0x12, 0xd0, 0xeb, 0x30, 0xab, 0xa8, 0xa3, 0x98, 0x55, 0x86, 0xa3, - 0xb8, 0x24, 0x67, 0x66, 0xeb, 0xa0, 0x2c, 0xd6, 0x3a, 0x24, 0x36, 0x34, 0x61, 0x1d, 0xf6, 0x5c, - 0x6c, 0xe2, 0x16, 0xc1, 0x1f, 0xc0, 0x45, 0xe3, 0xa9, 0x3b, 0xec, 0x80, 0x85, 0x22, 0x9b, 0x0f, - 0x60, 0x21, 0xb1, 0x10, 0xfd, 0xb4, 0xb5, 0x8a, 0xa7, 0xa5, 0x34, 0x52, 0x70, 0xcb, 0x76, 0xbe, - 0xa2, 0xed, 0x8f, 0x87, 0x4c, 0xec, 0xfc, 0x24, 0x1b, 0x55, 0xee, 0xfc, 0xdc, 0x81, 0x18, 0xf4, - 0x5c, 0x2f, 0x6b, 0x31, 0x52, 0x2f, 0x1b, 0x55, 0xeb, 0x65, 0x14, 0x62, 0xd0, 0xf1, 0x7b, 0x30, - 0x2b, 0xf5, 0xf6, 0xfd, 0x01, 0x43, 0x6f, 0xc1, 0x05, 0x96, 0x0e, 0x76, 0x18, 0xa7, 0x7e, 0xa0, - 0xe5, 0x3a, 0x25, 0xb9, 0x7b, 0x36, 0x8f, 0x14, 0x1d, 0xf1, 0x53, 0x3d, 0xd1, 0x1c, 0x42, 0x1d, - 0x98, 0xeb, 0x06, 0x51, 0xef, 0xe8, 0x21, 0xf3, 0xfb, 0x87, 0x6a, 0x7f, 0x9e, 0x22, 0x26, 0x84, - 0xb6, 0x60, 0x56, 0x0e, 0x85, 0x53, 0xf3, 0xa4, 0xee, 0x62, 0xea, 0xb4, 0x5c, 0x4f, 0x4f, 0xcb, - 0xf5, 0xfd, 0xf4, 0xb4, 0xdc, 0x9a, 0xf9, 0xf4, 0xaf, 0x6b, 0x27, 0x3e, 0xfa, 0xdb, 0x5a, 0x83, - 0xe4, 0x6e, 0xf8, 0xfb, 0xfa, 0xc1, 0xbb, 0xd9, 0xf9, 0x81, 0x1e, 0xc3, 0x62, 0x7e, 0x9a, 0x58, - 0xd5, 0xf3, 0x7f, 0xe5, 0x3d, 0x52, 0x20, 0x92, 0x92, 0x2b, 0x7e, 0xa8, 0x73, 0xf6, 0x20, 0xf6, - 0x3d, 0x91, 0x7d, 0x71, 0x3c, 0x5a, 0xaa, 0xe5, 0xec, 0x3f, 0xc8, 0x28, 0xc4, 0xa0, 0xe3, 0x9f, - 0x36, 0xd2, 0xe6, 0xa3, 0xf7, 0xe3, 0xa6, 0x3a, 0xe8, 0xd1, 0x11, 0xb4, 0x98, 0x03, 0xb7, 0x16, - 0xe5, 0x4b, 0xee, 0x45, 0x71, 0xba, 0x90, 0x1a, 0x39, 0xfc, 0xb3, 0x06, 0xb4, 0xaa, 0x5d, 0x51, - 0x1b, 0x20, 0x6d, 0x17, 0x8f, 0x54, 0x84, 0xb3, 0xc4, 0x40, 0xd0, 0x4d, 0x58, 0xe8, 0x45, 0x41, - 0x40, 0x39, 0x8b, 0x69, 0xb0, 0x1b, 0x45, 0x81, 0x5c, 0xb9, 0x59, 0x52, 0x40, 0xc5, 0xf2, 0x33, - 0x1a, 0x87, 0x7e, 0xd8, 0x97, 0xa4, 0x53, 0x92, 0x64, 0x42, 0xf8, 0x37, 0x0d, 0xb8, 0x62, 0x4d, - 0xe4, 0x41, 0x4c, 0xd3, 0xc3, 0x85, 0xc3, 0x2a, 0x73, 0x9b, 0xac, 0xa4, 0xac, 0xd7, 0x27, 0xa5, - 0xe8, 0x45, 0xea, 0x45, 0xf1, 0x77, 0x60, 0xb5, 0xd6, 0x7f, 0x62, 0x72, 0x9a, 0x70, 0x4e, 0x1e, - 0x77, 0x8f, 0x3c, 0x9d, 0x95, 0x74, 0x88, 0x7f, 0xdb, 0x80, 0xa6, 0xa5, 0x4d, 0xd8, 0x71, 0x74, - 0xc4, 0x54, 0xb4, 0x4f, 0xa1, 0xcd, 0x2a, 0x6c, 0x56, 0xb8, 0x1b, 0xf5, 0xe1, 0x96, 0xdc, 0xc8, - 0x04, 0x59, 0xfc, 0x3e, 0xb4, 0xeb, 0x15, 0xfe, 0x8d, 0x88, 0x37, 0x60, 0xc9, 0x38, 0xf3, 0x1e, - 0xd2, 0x80, 0x33, 0x0f, 0xb5, 0x60, 0x46, 0x1d, 0x69, 0x99, 0x58, 0x36, 0xc6, 0xaf, 0x00, 0x32, - 0x1c, 0x08, 0x4b, 0x46, 0x83, 0x09, 0x1e, 0x2f, 0xeb, 0xa3, 0x68, 0x87, 0x05, 0x8c, 0x33, 0x41, - 0x8d, 0xba, 0x3f, 0x60, 0x3d, 0x9e, 0x53, 0xd3, 0x31, 0x0e, 0x75, 0xad, 0xe9, 0x62, 0xdf, 0x4c, - 0x92, 0xa8, 0xe7, 0xab, 0x8e, 0xba, 0x07, 0x88, 0x96, 0x50, 0x9d, 0xf1, 0xeb, 0xe5, 0x5b, 0x55, - 0x89, 0x4a, 0x1c, 0xee, 0xb8, 0xab, 0xb7, 0x7a, 0x4a, 0xef, 0x71, 0xff, 0xd8, 0xe7, 0x63, 0xd1, - 0x74, 0xa9, 0x0d, 0x55, 0x36, 0xdd, 0x82, 0x2b, 0x29, 0x3a, 0xe2, 0x9f, 0x37, 0xe0, 0x72, 0x7e, - 0x21, 0xdb, 0xa2, 0xe1, 0x51, 0xda, 0x50, 0x42, 0x58, 0x61, 0x2e, 0x83, 0x55, 0x4d, 0x77, 0xdc, - 0xd5, 0xe4, 0xf6, 0x21, 0x75, 0x82, 0xf8, 0x57, 0x0d, 0x58, 0xa9, 0x71, 0x36, 0xab, 0xa4, 0x61, - 0x55, 0x09, 0x5a, 0x07, 0xd4, 0xa5, 0xe1, 0xd1, 0xb6, 0xab, 0xa5, 0x38, 0x2c, 0xe8, 0x06, 0xcc, - 0x0b, 0x74, 0x3f, 0x3a, 0x62, 0xa1, 0xd1, 0x58, 0x6c, 0x10, 0xff, 0x48, 0x97, 0x52, 0x36, 0x9d, - 0xc7, 0x7e, 0xc8, 0x11, 0x83, 0x26, 0x2b, 0xa1, 0x56, 0x4a, 0x5e, 0x9e, 0x90, 0x92, 0xdc, 0x81, - 0x54, 0x4a, 0xe1, 0xdf, 0xa5, 0x5b, 0xdd, 0x61, 0xac, 0xc9, 0x44, 0x07, 0xe6, 0xe8, 0x20, 0x1a, - 0x89, 0xd7, 0x86, 0xe1, 0x21, 0x95, 0x29, 0x38, 0x4d, 0x4c, 0x28, 0x67, 0xc8, 0x40, 0x65, 0xe4, - 0x19, 0x43, 0x42, 0xd6, 0x66, 0x39, 0x5d, 0xd8, 0x2c, 0xd9, 0xe9, 0x93, 0x4d, 0x8b, 0x30, 0x8f, - 0xb1, 0x41, 0x76, 0xfa, 0x14, 0xf0, 0x69, 0x4e, 0x1f, 0xa7, 0x0b, 0xa9, 0x91, 0xc3, 0xbf, 0x4f, - 0x4f, 0x1f, 0xa7, 0xf9, 0x7f, 0x98, 0x9e, 0x4f, 0x1a, 0xb0, 0x66, 0x4f, 0x6c, 0x3b, 0x0a, 0x0f, - 0xfc, 0xa4, 0x47, 0x39, 0xdb, 0x0c, 0xbd, 0xad, 0x51, 0x1c, 0xa2, 0x5f, 0x36, 0xe0, 0x25, 0x56, - 0xcf, 0xb1, 0xb2, 0xf6, 0xc6, 0x84, 0xac, 0x55, 0x78, 0x93, 0xe9, 0x1e, 0x82, 0x3f, 0x6e, 0xc0, - 0x4b, 0x53, 0x09, 0xfe, 0x97, 0xd3, 0xda, 0x84, 0x73, 0xba, 0x35, 0xe9, 0xac, 0xa6, 0x43, 0xfc, - 0x6b, 0x2b, 0xa9, 0x8f, 0xd9, 0xa0, 0xcb, 0xe2, 0xe4, 0xd0, 0x1f, 0x6e, 0x0e, 0x87, 0x81, 0xaf, - 0x5f, 0x8d, 0x8f, 0xa0, 0xd5, 0xaf, 0xb4, 0x56, 0x96, 0x5f, 0xb5, 0x20, 0xa9, 0x91, 0xc3, 0x3d, - 0xfd, 0x02, 0xf4, 0x24, 0x66, 0x8f, 0xfd, 0x90, 0x89, 0xde, 0xcf, 0x8c, 0xb1, 0xb5, 0x7a, 0xd7, - 0xdd, 0xab, 0x67, 0x51, 0x89, 0xc3, 0x1d, 0x0f, 0x75, 0xf7, 0xb1, 0xd0, 0xba, 0x83, 0x4c, 0x5c, - 0xaa, 0x86, 0xb1, 0x3f, 0xa0, 0xf1, 0x58, 0xf7, 0xcd, 0xf4, 0x52, 0x65, 0xa3, 0x68, 0x19, 0xce, - 0xaa, 0xc4, 0xeb, 0x65, 0xd0, 0x23, 0x9c, 0xc0, 0xa2, 0xfe, 0xe2, 0x30, 0x3c, 0xa4, 0x84, 0x1d, - 0x88, 0xd0, 0x3e, 0x84, 0x65, 0x56, 0xc0, 0xac, 0xf0, 0xfe, 0xdf, 0x1d, 0x5e, 0x89, 0x4e, 0x2a, - 0x64, 0x30, 0x87, 0x65, 0xb7, 0xc7, 0x17, 0x17, 0xaa, 0xfc, 0x40, 0x50, 0x08, 0x55, 0x61, 0x53, - 0x87, 0x6a, 0xd2, 0x49, 0x85, 0x8c, 0x1d, 0xaa, 0x69, 0xf9, 0xe2, 0x42, 0xdd, 0x61, 0xe5, 0x50, - 0x15, 0x36, 0x75, 0xa8, 0x26, 0x9d, 0x54, 0xc8, 0xe0, 0x6f, 0x9b, 0xa1, 0x9a, 0x16, 0x47, 0x38, - 0x8d, 0x09, 0xe1, 0x9c, 0xb4, 0xc2, 0xe9, 0xeb, 0x8f, 0x18, 0x4f, 0x62, 0xb6, 0x7f, 0xc8, 0x0e, - 0x38, 0x7a, 0x17, 0x2e, 0x32, 0x13, 0xb0, 0x02, 0xb9, 0x51, 0xb9, 0xfb, 0x0c, 0x2e, 0x71, 0x09, - 0xe0, 0x7f, 0x34, 0xf4, 0x6b, 0xbe, 0x8d, 0xa3, 0xbb, 0x70, 0xe9, 0xd8, 0xef, 0x71, 0x7f, 0xb0, - 0xeb, 0x0a, 0xc3, 0x69, 0x13, 0x41, 0x6b, 0x3c, 0x5d, 0x65, 0xbd, 0x86, 0x36, 0x8a, 0x5e, 0x81, - 0x8b, 0xfc, 0xd0, 0x67, 0x07, 0x05, 0x69, 0x75, 0x3b, 0x71, 0x99, 0xc4, 0x4d, 0x46, 0xc1, 0xf6, - 0x89, 0x64, 0x83, 0x46, 0x32, 0xcf, 0x58, 0xc9, 0x8c, 0xf4, 0x7b, 0xaf, 0xec, 0x31, 0xfd, 0x98, - 0xaa, 0x4f, 0x27, 0xcc, 0x86, 0xac, 0x84, 0xde, 0xac, 0x69, 0x67, 0x06, 0x9b, 0xb8, 0x45, 0xf0, - 0x1f, 0xd3, 0xcb, 0x66, 0xd1, 0xf2, 0x1f, 0xd9, 0x02, 0x77, 0x60, 0x29, 0x0a, 0x3c, 0x67, 0xf2, - 0xca, 0x06, 0x23, 0x29, 0xa7, 0xad, 0xa4, 0xfc, 0x22, 0xbd, 0x79, 0xd9, 0x9f, 0x69, 0xb6, 0x03, - 0x46, 0x63, 0x34, 0x80, 0xab, 0x49, 0x19, 0x9e, 0xe6, 0xfd, 0x6a, 0xaf, 0xca, 0x8d, 0x54, 0x2b, - 0xe2, 0xb7, 0xf5, 0xab, 0x55, 0xa5, 0xb3, 0x88, 0xd9, 0x93, 0xb0, 0x1f, 0xf6, 0x15, 0x2b, 0x4b, - 0x60, 0xd9, 0x80, 0x3f, 0xd4, 0xef, 0x3a, 0x9b, 0x9c, 0xd3, 0xde, 0x11, 0xda, 0x85, 0x25, 0x96, - 0x0f, 0xad, 0x28, 0x70, 0x45, 0x0b, 0x30, 0x98, 0xa4, 0xec, 0x8c, 0xff, 0x3c, 0xab, 0x5f, 0xd8, - 0x4c, 0x14, 0xdd, 0x86, 0x45, 0x2a, 0xc7, 0x2c, 0x2e, 0xcc, 0xb1, 0x84, 0x8b, 0xbb, 0xbc, 0x8d, - 0xc9, 0x4f, 0x5e, 0xaa, 0x09, 0x38, 0x2c, 0xa8, 0x0b, 0x2d, 0x1b, 0xfd, 0x96, 0xfe, 0xe2, 0x2d, - 0xfd, 0xc4, 0xea, 0x2f, 0x38, 0x3e, 0xae, 0xa8, 0x57, 0x3a, 0x41, 0xd9, 0x3a, 0xf3, 0xa7, 0x7f, - 0x7e, 0x72, 0xbb, 0x41, 0x6a, 0x54, 0xd0, 0x9b, 0xd0, 0x74, 0x5b, 0xb3, 0x0d, 0x57, 0x69, 0x47, - 0x14, 0xae, 0xd9, 0xb6, 0x27, 0x43, 0x16, 0x53, 0xee, 0x87, 0xfd, 0xcd, 0x41, 0xd7, 0x57, 0x3b, - 0x72, 0xc1, 0xf1, 0xe1, 0x9b, 0x0a, 0x6b, 0x3a, 0xb9, 0x5a, 0x89, 0x72, 0xca, 0xf6, 0x82, 0x88, - 0x37, 0xcf, 0xba, 0x52, 0x26, 0x2c, 0xe8, 0x1e, 0x9c, 0x7f, 0xca, 0xe8, 0x30, 0x0a, 0xf7, 0xc6, - 0x09, 0x67, 0x83, 0xe6, 0x39, 0x39, 0x85, 0xf2, 0x77, 0x2d, 0xce, 0x7a, 0x87, 0xef, 0x19, 0x44, - 0x62, 0xb9, 0xa1, 0x87, 0x30, 0xaf, 0xc6, 0xdb, 0x51, 0xc8, 0xe3, 0x28, 0x68, 0xce, 0x48, 0x1d, - 0x5c, 0xa3, 0xa3, 0x99, 0xc4, 0x76, 0x44, 0xdf, 0x84, 0x05, 0x2a, 0xde, 0x47, 0x99, 0x62, 0xc5, - 0xe3, 0xe6, 0xac, 0x94, 0xba, 0xee, 0x94, 0xda, 0xb4, 0xa8, 0xa4, 0xe0, 0x9a, 0x75, 0x30, 0x55, - 0x81, 0x7b, 0x87, 0x51, 0x7a, 0x24, 0x40, 0xe7, 0x54, 0x75, 0x07, 0x2b, 0xb2, 0x89, 0x5b, 0x04, - 0xbd, 0x01, 0xcb, 0x31, 0xeb, 0x45, 0x7e, 0xb0, 0x43, 0x07, 0xb4, 0xcf, 0xf6, 0xa3, 0x4d, 0x9d, - 0xdf, 0xe6, 0x5c, 0xa7, 0x71, 0x6b, 0x86, 0x54, 0x58, 0x11, 0x86, 0xf3, 0xa6, 0xa5, 0x79, 0x5e, - 0xae, 0x8e, 0x85, 0xa1, 0x1d, 0x58, 0x35, 0xc7, 0x3b, 0x2c, 0xe1, 0x71, 0x34, 0x66, 0x5e, 0xf6, - 0x88, 0x79, 0xf9, 0x88, 0x7a, 0x12, 0x7a, 0x17, 0x6e, 0xaa, 0xff, 0x7f, 0x40, 0xe3, 0xb1, 0xec, - 0x18, 0x09, 0xdb, 0xa6, 0x61, 0x18, 0x85, 0xa5, 0x19, 0x2f, 0x48, 0xb9, 0x29, 0xd9, 0x68, 0x0b, - 0xae, 0xd5, 0x31, 0x9b, 0x17, 0x64, 0x44, 0xb5, 0x1c, 0xe4, 0xc1, 0x97, 0xeb, 0xec, 0xe5, 0x88, - 0x17, 0xe5, 0x14, 0x3f, 0x9f, 0x93, 0xd9, 0x6e, 0xb2, 0x73, 0x71, 0xc9, 0x6e, 0x37, 0xbb, 0xc6, - 0xd9, 0xc2, 0x69, 0xdc, 0x67, 0x3c, 0x63, 0x22, 0x75, 0xb6, 0xd8, 0x28, 0xfe, 0xc3, 0xa2, 0x3e, - 0xb9, 0x4a, 0x15, 0x91, 0x29, 0x14, 0x5a, 0x5b, 0x01, 0x15, 0xb3, 0x32, 0x11, 0xa3, 0xad, 0x95, - 0x70, 0xf4, 0x01, 0x34, 0x4d, 0xec, 0x05, 0x5b, 0x5a, 0xa5, 0x86, 0xa8, 0x62, 0x97, 0x2d, 0x6b, - 0x67, 0x15, 0x56, 0xf4, 0x3d, 0x68, 0x99, 0x96, 0x17, 0x69, 0x65, 0x35, 0x02, 0xc5, 0x14, 0x19, - 0x6d, 0xac, 0x84, 0x8b, 0xe3, 0x9b, 0x1d, 0x53, 0x8f, 0x79, 0xb2, 0x7d, 0xcd, 0x10, 0x3d, 0x42, - 0xdb, 0x30, 0xa7, 0xfe, 0xda, 0xa6, 0xa3, 0x84, 0xe9, 0x9e, 0xe4, 0xee, 0x6d, 0xef, 0x84, 0x3e, - 0xd7, 0x05, 0x95, 0x10, 0xd3, 0x0b, 0x7d, 0x1d, 0xae, 0xaa, 0xe1, 0xd6, 0x78, 0xb7, 0x50, 0x7a, - 0x89, 0xec, 0x4d, 0x33, 0xa4, 0x9a, 0x80, 0x42, 0x68, 0x57, 0x1a, 0xd5, 0xac, 0x40, 0xce, 0xea, - 0xa6, 0x73, 0x56, 0x25, 0x17, 0x32, 0x41, 0x4d, 0xbc, 0x3a, 0xcb, 0xff, 0x97, 0xc1, 0x3c, 0xdd, - 0x84, 0xd2, 0xa1, 0xb8, 0x1d, 0xe8, 0x3f, 0xb7, 0xc6, 0x59, 0x79, 0x9e, 0x57, 0xb7, 0x83, 0x92, - 0x41, 0x5c, 0x3f, 0x0b, 0xa0, 0x2c, 0xb8, 0x79, 0xb9, 0x02, 0x2e, 0x13, 0xf2, 0x60, 0xa5, 0x00, - 0x5b, 0xa5, 0xba, 0x30, 0x75, 0xa9, 0xd6, 0xc9, 0x88, 0xd5, 0xa8, 0x30, 0x3f, 0xf2, 0x64, 0xdb, - 0x99, 0x25, 0xd5, 0x04, 0xd4, 0x83, 0xd5, 0x82, 0xb1, 0x50, 0xb6, 0x8b, 0xd3, 0x94, 0x6d, 0xbd, - 0x86, 0x23, 0x75, 0xb2, 0x78, 0x97, 0x9c, 0xa9, 0x93, 0xf5, 0x7b, 0x1b, 0x16, 0x15, 0x1c, 0x67, - 0x0d, 0x4c, 0xb6, 0x9e, 0x19, 0x52, 0xc2, 0xd1, 0x4f, 0xa0, 0x63, 0x5d, 0xb5, 0xf4, 0x35, 0x50, - 0x5c, 0x57, 0x59, 0x7a, 0xf9, 0xbc, 0x28, 0x4f, 0xb7, 0x57, 0xeb, 0xaf, 0x6d, 0x0e, 0x47, 0x32, - 0x51, 0x1a, 0x75, 0x60, 0xce, 0xd3, 0xad, 0x96, 0x06, 0xbc, 0x79, 0x49, 0x7d, 0xbc, 0x31, 0x20, - 0x74, 0x0b, 0x2e, 0xa8, 0x21, 0x61, 0xde, 0xa8, 0x27, 0xbf, 0xb9, 0x5c, 0x96, 0xac, 0x22, 0x8c, - 0xde, 0x81, 0x4b, 0x05, 0x48, 0xed, 0x88, 0xe5, 0x69, 0xf7, 0xa9, 0xd3, 0x5d, 0x74, 0x03, 0x85, - 0x37, 0xaf, 0xa8, 0xcb, 0xbc, 0x1a, 0x89, 0x89, 0xa9, 0xce, 0xa1, 0x23, 0x62, 0x5e, 0xb3, 0x29, - 0x93, 0x5c, 0x84, 0xd1, 0x57, 0xe0, 0x72, 0x01, 0xd2, 0xe7, 0xda, 0x55, 0x29, 0xe8, 0x36, 0xa2, - 0xfb, 0xd0, 0xb6, 0x0c, 0xe5, 0x13, 0xac, 0x25, 0x1f, 0x37, 0x81, 0x85, 0xf6, 0x01, 0x59, 0x0c, - 0x95, 0x94, 0x15, 0x99, 0x94, 0x1b, 0xee, 0x36, 0x41, 0x93, 0xc4, 0xbc, 0x06, 0x39, 0xfc, 0xf3, - 0xe8, 0xf3, 0x12, 0xbb, 0x66, 0x46, 0x9f, 0x57, 0xd8, 0x43, 0x58, 0x1b, 0x46, 0x89, 0x02, 0x54, - 0x5e, 0x4b, 0xb7, 0x85, 0x55, 0xe9, 0x39, 0x89, 0x26, 0xf2, 0xe8, 0xa4, 0x34, 0xdb, 0x2a, 0x8f, - 0x4e, 0xa3, 0xbc, 0xb4, 0xb8, 0x0c, 0xe5, 0x7c, 0xae, 0xe9, 0x4b, 0xcb, 0x54, 0x6c, 0xe4, 0x41, - 0xcb, 0xc9, 0x54, 0xf9, 0xed, 0x7c, 0x8e, 0xfc, 0xd6, 0xe8, 0xe0, 0x8f, 0x4f, 0x43, 0x67, 0xd2, - 0x3e, 0x13, 0xbd, 0xb8, 0xa7, 0x00, 0xa3, 0x17, 0xeb, 0x37, 0xb5, 0x92, 0x41, 0x34, 0x94, 0x02, - 0x68, 0x5c, 0x18, 0x5c, 0x26, 0xd1, 0x8b, 0x0b, 0xf0, 0x0b, 0x5e, 0x1b, 0xea, 0x64, 0x44, 0x2f, - 0xae, 0x30, 0x67, 0x97, 0x87, 0x6a, 0x82, 0xe8, 0xc5, 0x05, 0xe3, 0x8b, 0x5c, 0x21, 0xea, 0x35, - 0x1c, 0xa9, 0x33, 0x2e, 0x12, 0x2e, 0x13, 0xba, 0x01, 0xf3, 0x1a, 0xd6, 0xb5, 0x7a, 0x4e, 0x72, - 0x6d, 0x50, 0xbc, 0x05, 0xf6, 0xaa, 0x76, 0xf9, 0x8c, 0xac, 0xca, 0x4a, 0x7b, 0xf6, 0x9b, 0x09, - 0x42, 0x7d, 0x2f, 0xfb, 0xcd, 0x84, 0x18, 0x4c, 0xf3, 0x9b, 0x89, 0x9c, 0x47, 0x8a, 0x8e, 0xf8, - 0xc7, 0xfa, 0x13, 0x4e, 0x0e, 0x89, 0xeb, 0x80, 0xfc, 0xa9, 0x55, 0xfe, 0x9d, 0x5e, 0x0f, 0xf5, - 0x47, 0x96, 0x50, 0x9a, 0x4e, 0x66, 0x1f, 0x59, 0xe4, 0x18, 0xbd, 0x06, 0x67, 0x13, 0x4e, 0xf9, - 0x28, 0xa9, 0xac, 0x94, 0x98, 0xfa, 0xde, 0x9e, 0xa4, 0x10, 0x4d, 0xdd, 0x7a, 0xf5, 0xd3, 0x67, - 0xed, 0xc6, 0x67, 0xcf, 0xda, 0x8d, 0xbf, 0x3f, 0x6b, 0x37, 0x3e, 0x7a, 0xde, 0x3e, 0xf1, 0xd9, - 0xf3, 0xf6, 0x89, 0xbf, 0x3c, 0x6f, 0x9f, 0x78, 0xff, 0x4a, 0xfa, 0xc3, 0xb6, 0x1f, 0x66, 0x3f, - 0x71, 0xe3, 0xe3, 0x21, 0x4b, 0xba, 0x67, 0xe5, 0x8f, 0x32, 0x5e, 0xfb, 0x57, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x97, 0x27, 0x61, 0xde, 0x66, 0x29, 0x00, 0x00, + // 2604 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcd, 0x73, 0x1c, 0x47, + 0x15, 0xf7, 0x26, 0xfe, 0x90, 0x9e, 0x2c, 0x59, 0x6a, 0xdb, 0xf2, 0x7a, 0x65, 0xad, 0x96, 0x8e, + 0x63, 0x1c, 0x63, 0xa4, 0xc4, 0x21, 0x29, 0x2a, 0x50, 0x54, 0xe9, 0xc3, 0xb6, 0x1c, 0x70, 0xac, + 0x6a, 0x29, 0x09, 0xa4, 0x20, 0xa1, 0x77, 0xa6, 0xb5, 0x1a, 0x34, 0x3b, 0xb3, 0x35, 0xd3, 0x2b, + 0xb3, 0x05, 0x9c, 0xa8, 0x82, 0xa2, 0x8a, 0x8f, 0x54, 0x41, 0x71, 0xe0, 0x92, 0xe2, 0xc6, 0x31, + 0xc5, 0x5f, 0x91, 0x63, 0x4e, 0x14, 0x27, 0x3e, 0xec, 0x03, 0xff, 0x06, 0xd5, 0x1f, 0x33, 0xdb, + 0x3d, 0xd3, 0x33, 0xbb, 0x31, 0x10, 0x2e, 0xb6, 0xfa, 0xf7, 0x7e, 0xef, 0x37, 0xdd, 0xaf, 0x5f, + 0xbf, 0xee, 0xe9, 0x1d, 0xb8, 0x96, 0xf2, 0x64, 0xe8, 0xf1, 0x74, 0x23, 0xfb, 0x9f, 0x9d, 0xb0, + 0x88, 0xa7, 0xeb, 0x83, 0x24, 0xe6, 0x31, 0xba, 0xa0, 0xd1, 0x75, 0xfd, 0x7f, 0x6b, 0x89, 0xf6, + 0x83, 0x28, 0xde, 0x90, 0xff, 0x2a, 0x4e, 0xeb, 0x52, 0x2f, 0xee, 0xc5, 0xf2, 0xcf, 0x0d, 0xf1, + 0x97, 0x46, 0xaf, 0xf5, 0xe2, 0xb8, 0x17, 0xb2, 0x0d, 0x3a, 0x08, 0x36, 0x68, 0x14, 0xc5, 0x9c, + 0xf2, 0x20, 0x8e, 0xd2, 0xcc, 0x5a, 0x7c, 0xea, 0x80, 0x26, 0xb4, 0x9f, 0x59, 0xd7, 0xb4, 0xaf, + 0x6c, 0x75, 0x87, 0x87, 0x1b, 0x3c, 0xe8, 0xb3, 0x94, 0xd3, 0xfe, 0x40, 0x13, 0x56, 0x8b, 0xee, + 0xd4, 0xf7, 0x13, 0x96, 0xe6, 0xfe, 0x25, 0x73, 0x2f, 0x61, 0xac, 0xcf, 0x22, 0xae, 0x09, 0x9d, + 0x12, 0x21, 0x0c, 0x63, 0x4f, 0xf6, 0x50, 0x33, 0x56, 0x8a, 0x8c, 0xc3, 0x90, 0xb1, 0xcc, 0xbd, + 0x55, 0x34, 0xf6, 0x92, 0xc0, 0xaf, 0x72, 0xec, 0x0d, 0x83, 0x30, 0x33, 0xb6, 0x8b, 0xc6, 0x20, + 0x3a, 0x1c, 0xa6, 0xe3, 0xa7, 0x96, 0x84, 0x8f, 0xd9, 0x28, 0xad, 0xea, 0xf3, 0x80, 0x25, 0xfd, + 0x20, 0x35, 0xbc, 0xcb, 0x41, 0x0d, 0xe9, 0x88, 0x25, 0x35, 0xd6, 0x28, 0x1f, 0x52, 0xa9, 0x67, + 0x83, 0x24, 0x3e, 0x09, 0xfc, 0xdc, 0xbb, 0x14, 0xf1, 0x84, 0x51, 0x8f, 0xc7, 0x95, 0xe2, 0xea, + 0xff, 0xaa, 0xae, 0xa7, 0xc3, 0x6e, 0xca, 0x8d, 0x70, 0xe3, 0xb7, 0xe0, 0xc2, 0x5d, 0x91, 0x77, + 0x9b, 0xf9, 0x3c, 0xa0, 0xaf, 0x01, 0x8c, 0x67, 0xa5, 0xd9, 0xe8, 0x34, 0x6e, 0xce, 0xdd, 0x59, + 0x59, 0x2f, 0xe4, 0xe3, 0xfa, 0xd8, 0x81, 0x18, 0x74, 0xfc, 0x26, 0x2c, 0x28, 0xbd, 0x6c, 0xe2, + 0xd1, 0x57, 0x61, 0x36, 0xcf, 0x02, 0xad, 0xd6, 0x2a, 0xab, 0x65, 0x0c, 0x32, 0x26, 0xe3, 0x37, + 0x00, 0xa4, 0xd6, 0x3d, 0x91, 0x01, 0xe8, 0x36, 0x9c, 0x91, 0xa9, 0xa0, 0x35, 0x96, 0x4b, 0x1a, + 0x92, 0x46, 0x14, 0x29, 0xf7, 0xbd, 0x2f, 0x92, 0x40, 0xf8, 0xca, 0x6c, 0xa8, 0xf4, 0x95, 0x34, + 0xa2, 0x48, 0xf8, 0x1e, 0xcc, 0x4b, 0xdf, 0x07, 0x3a, 0x47, 0xd0, 0x6b, 0x30, 0x93, 0xe5, 0x8b, + 0x56, 0xb8, 0x5a, 0x52, 0xc8, 0xc8, 0x24, 0xa7, 0xe2, 0x6f, 0xc0, 0x9c, 0xd4, 0xd9, 0x93, 0xf3, + 0x8d, 0x36, 0xe0, 0xac, 0x9a, 0x79, 0xad, 0x71, 0xa5, 0xa4, 0xa1, 0x88, 0x44, 0xd3, 0x30, 0x87, + 0x4b, 0x86, 0xff, 0x26, 0xe7, 0x49, 0xd0, 0x1d, 0x72, 0x86, 0xbe, 0x0b, 0x97, 0x07, 0x36, 0x44, + 0x98, 0x17, 0x27, 0xd9, 0xe8, 0x6e, 0x54, 0xe8, 0x16, 0xd8, 0xc4, 0x2d, 0x62, 0xf6, 0x7a, 0xc4, + 0x12, 0xdd, 0xeb, 0x11, 0x4b, 0xea, 0x7a, 0x3d, 0x62, 0x09, 0xd1, 0xb4, 0x3c, 0x7a, 0x7b, 0x3a, + 0x8f, 0x45, 0xf4, 0xb2, 0x9c, 0xae, 0x8c, 0x5e, 0x46, 0x26, 0x39, 0x15, 0x6f, 0xc1, 0x79, 0xa9, + 0x43, 0x54, 0xbe, 0xa3, 0x3b, 0x70, 0x4e, 0xa7, 0xbe, 0x56, 0x69, 0x96, 0x54, 0x34, 0x95, 0x64, + 0x44, 0xbc, 0xa3, 0xc7, 0xb2, 0x2f, 0x09, 0xe8, 0x35, 0x98, 0x55, 0xd4, 0x61, 0xc2, 0x2a, 0x87, + 0xa3, 0xb8, 0x64, 0xcc, 0xcc, 0xe7, 0x41, 0x59, 0xac, 0x79, 0x48, 0x6d, 0x68, 0xc2, 0x3c, 0xec, + 0xbb, 0xd8, 0xc4, 0x2d, 0x82, 0xdf, 0x87, 0x8b, 0xc6, 0x53, 0x77, 0xd8, 0x21, 0x8b, 0x44, 0x34, + 0xef, 0xc3, 0x42, 0x6a, 0x21, 0xfa, 0x69, 0x6b, 0x15, 0x4f, 0xcb, 0x68, 0xa4, 0xe0, 0x96, 0xaf, + 0x7c, 0x45, 0x3b, 0x18, 0x0d, 0x98, 0x58, 0xf9, 0x69, 0xde, 0xaa, 0x5c, 0xf9, 0x63, 0x07, 0x62, + 0xd0, 0xc7, 0x7a, 0x79, 0x89, 0x91, 0x7a, 0x79, 0xab, 0x5a, 0x2f, 0xa7, 0x10, 0x83, 0x8e, 0xdf, + 0x85, 0x59, 0xa9, 0x77, 0x10, 0xf4, 0x19, 0x7a, 0x13, 0x2e, 0xb0, 0xac, 0xb1, 0xc3, 0x38, 0x0d, + 0x42, 0x2d, 0xd7, 0x29, 0xc9, 0xdd, 0xb5, 0x79, 0xa4, 0xe8, 0x88, 0x1f, 0xeb, 0x8e, 0x8e, 0x21, + 0xd4, 0x81, 0xb9, 0x6e, 0x18, 0x7b, 0xc7, 0xbb, 0x2c, 0xe8, 0x1d, 0xa9, 0xf5, 0xf9, 0x3c, 0x31, + 0x21, 0xb4, 0x05, 0xb3, 0xb2, 0x29, 0x9c, 0x9a, 0xcf, 0xe9, 0x2a, 0xa6, 0x76, 0xcb, 0xf5, 0x6c, + 0xb7, 0x5c, 0x3f, 0xc8, 0x76, 0xcb, 0xad, 0x99, 0x4f, 0xfe, 0xb6, 0x76, 0xea, 0xc3, 0xbf, 0xaf, + 0x35, 0xc8, 0xd8, 0x0d, 0x7f, 0x5f, 0x3f, 0x78, 0x2f, 0xdf, 0x3f, 0xd0, 0x43, 0x58, 0x1c, 0xef, + 0x26, 0x56, 0xf6, 0x7c, 0xa1, 0xbc, 0x46, 0x0a, 0x44, 0x52, 0x72, 0xc5, 0xbb, 0x3a, 0x66, 0xf7, + 0x93, 0xc0, 0x17, 0xd1, 0x17, 0xdb, 0xa3, 0xa5, 0x5a, 0x8e, 0xfe, 0xfd, 0x9c, 0x42, 0x0c, 0x3a, + 0xfe, 0x69, 0x23, 0x2b, 0x3e, 0x7a, 0x3d, 0x6e, 0xaa, 0x8d, 0x1e, 0x1d, 0x43, 0x8b, 0x39, 0x70, + 0x6b, 0x52, 0xbe, 0xe4, 0x9e, 0x14, 0xa7, 0x0b, 0xa9, 0x91, 0xc3, 0x3f, 0x6b, 0x40, 0xab, 0xda, + 0x15, 0xb5, 0x01, 0xb2, 0x72, 0xf1, 0x40, 0x8d, 0x70, 0x96, 0x18, 0x08, 0xba, 0x01, 0x0b, 0x5e, + 0x1c, 0x86, 0x94, 0xb3, 0x84, 0x86, 0x7b, 0x71, 0x1c, 0xca, 0x99, 0x9b, 0x25, 0x05, 0x54, 0x4c, + 0x3f, 0xa3, 0x49, 0x14, 0x44, 0x3d, 0x49, 0x7a, 0x5e, 0x92, 0x4c, 0x08, 0xff, 0xa6, 0x01, 0x57, + 0xac, 0x8e, 0xdc, 0x4f, 0x68, 0xb6, 0xb9, 0x70, 0x58, 0x65, 0x6e, 0x93, 0x15, 0x94, 0xf5, 0xfa, + 0xa0, 0x14, 0xbd, 0x48, 0xbd, 0x28, 0xfe, 0x0e, 0xac, 0xd6, 0xfa, 0x4f, 0x0c, 0x4e, 0x13, 0xce, + 0xc9, 0xed, 0xee, 0x81, 0xaf, 0xa3, 0x92, 0x35, 0xf1, 0x6f, 0x1b, 0xd0, 0xb4, 0xb4, 0x09, 0x3b, + 0x89, 0x8f, 0x99, 0x1a, 0xed, 0x63, 0x68, 0xb3, 0x0a, 0x9b, 0x35, 0xdc, 0x8d, 0xfa, 0xe1, 0x96, + 0xdc, 0xc8, 0x04, 0x59, 0xfc, 0x1e, 0xb4, 0xeb, 0x15, 0xfe, 0x83, 0x11, 0x6f, 0xc0, 0x92, 0xb1, + 0xe7, 0xed, 0xd2, 0x90, 0x33, 0x1f, 0xb5, 0x60, 0x46, 0x6d, 0x69, 0xb9, 0x58, 0xde, 0xc6, 0x2f, + 0x03, 0x32, 0x1c, 0x08, 0x4b, 0x87, 0xfd, 0x09, 0x1e, 0x2f, 0xe9, 0xad, 0x68, 0x87, 0x85, 0x8c, + 0x33, 0x41, 0x8d, 0xbb, 0x3f, 0x60, 0x1e, 0x1f, 0x53, 0xb3, 0x36, 0x8e, 0x74, 0xae, 0xe9, 0x64, + 0xdf, 0x4c, 0xd3, 0xd8, 0x0b, 0x54, 0x45, 0xdd, 0x07, 0x44, 0x4b, 0xa8, 0x8e, 0xf8, 0x0b, 0xe5, + 0x53, 0x55, 0x89, 0x4a, 0x1c, 0xee, 0xb8, 0xab, 0x97, 0x7a, 0x46, 0xf7, 0x78, 0x70, 0x12, 0xf0, + 0x91, 0x28, 0xba, 0xd4, 0x86, 0x2a, 0x8b, 0x6e, 0xc1, 0x95, 0x14, 0x1d, 0xf1, 0xcf, 0x1b, 0x70, + 0x79, 0x7c, 0x20, 0xdb, 0xa2, 0xd1, 0x71, 0x56, 0x50, 0x22, 0x58, 0x61, 0x2e, 0x83, 0x95, 0x4d, + 0xb7, 0xdd, 0xd9, 0xe4, 0xf6, 0x21, 0x75, 0x82, 0xf8, 0x57, 0x0d, 0x58, 0xa9, 0x71, 0x36, 0xb3, + 0xa4, 0x61, 0x65, 0x09, 0x5a, 0x07, 0xd4, 0xa5, 0xd1, 0xf1, 0xb6, 0xab, 0xa4, 0x38, 0x2c, 0xe8, + 0x3a, 0xcc, 0x0b, 0xf4, 0x20, 0x3e, 0x66, 0x91, 0x51, 0x58, 0x6c, 0x10, 0xff, 0x48, 0xa7, 0x52, + 0xde, 0x9d, 0x87, 0x41, 0xc4, 0x11, 0x83, 0x26, 0x2b, 0xa1, 0x56, 0x48, 0x5e, 0x9a, 0x10, 0x92, + 0xb1, 0x03, 0xa9, 0x94, 0xc2, 0xbf, 0xcb, 0x96, 0xba, 0xc3, 0x58, 0x13, 0x89, 0x0e, 0xcc, 0xd1, + 0x7e, 0x3c, 0x14, 0xaf, 0x0d, 0x83, 0x23, 0x2a, 0x43, 0x70, 0x9a, 0x98, 0xd0, 0x98, 0x21, 0x07, + 0x2a, 0x47, 0x9e, 0x33, 0x24, 0x64, 0x2d, 0x96, 0xd3, 0x85, 0xc5, 0x92, 0xef, 0x3e, 0x79, 0xb7, + 0x08, 0xf3, 0x19, 0xeb, 0xe7, 0xbb, 0x4f, 0x01, 0x9f, 0x66, 0xf7, 0x71, 0xba, 0x90, 0x1a, 0x39, + 0xfc, 0xfb, 0x6c, 0xf7, 0x71, 0x9a, 0xff, 0x8f, 0xe1, 0xf9, 0xb8, 0x01, 0x6b, 0x76, 0xc7, 0xb6, + 0xe3, 0xe8, 0x30, 0x48, 0x3d, 0xca, 0xd9, 0x66, 0xe4, 0x6f, 0x0d, 0x93, 0x08, 0xfd, 0xb2, 0x01, + 0x2f, 0xb2, 0x7a, 0x8e, 0x15, 0xb5, 0xd7, 0x27, 0x44, 0xad, 0xc2, 0x9b, 0x4c, 0xf7, 0x10, 0xfc, + 0x51, 0x03, 0x5e, 0x9c, 0x4a, 0xf0, 0x7f, 0x1c, 0xd6, 0x26, 0x9c, 0xd3, 0xa5, 0x49, 0x47, 0x35, + 0x6b, 0xe2, 0x5f, 0x5b, 0x41, 0x7d, 0xc8, 0xfa, 0x5d, 0x96, 0xa4, 0x47, 0xc1, 0x60, 0x73, 0x30, + 0x08, 0x03, 0xfd, 0x6a, 0x7c, 0x0c, 0xad, 0x5e, 0xa5, 0xb5, 0x32, 0xfd, 0xaa, 0x05, 0x49, 0x8d, + 0x1c, 0xf6, 0xf4, 0x0b, 0xd0, 0xa3, 0x84, 0x3d, 0x0c, 0x22, 0x26, 0x6a, 0x3f, 0x33, 0xda, 0xd6, + 0xec, 0xbd, 0xe0, 0x9e, 0x3d, 0x8b, 0x4a, 0x1c, 0xee, 0x78, 0xa0, 0xab, 0x8f, 0x85, 0xd6, 0x6d, + 0x64, 0xe2, 0x50, 0x35, 0x48, 0x82, 0x3e, 0x4d, 0x46, 0xba, 0x6e, 0x66, 0x87, 0x2a, 0x1b, 0x45, + 0xcb, 0x70, 0x56, 0x05, 0x5e, 0x4f, 0x83, 0x6e, 0xe1, 0x14, 0x16, 0xf5, 0x8d, 0xc3, 0xe0, 0x88, + 0x12, 0x76, 0x28, 0x86, 0xf6, 0x01, 0x2c, 0xb3, 0x02, 0x66, 0x0d, 0xef, 0x8b, 0xee, 0xe1, 0x95, + 0xe8, 0xa4, 0x42, 0x06, 0x73, 0x58, 0x76, 0x7b, 0x7c, 0x7e, 0x43, 0x95, 0x17, 0x04, 0x85, 0xa1, + 0x2a, 0x6c, 0xea, 0xa1, 0x9a, 0x74, 0x52, 0x21, 0x63, 0x0f, 0xd5, 0xb4, 0x7c, 0x7e, 0x43, 0xdd, + 0x61, 0xe5, 0xa1, 0x2a, 0x6c, 0xea, 0xa1, 0x9a, 0x74, 0x52, 0x21, 0x83, 0xbf, 0x6d, 0x0e, 0xd5, + 0xb4, 0x38, 0x86, 0xd3, 0x98, 0x30, 0x9c, 0xe7, 0xac, 0xe1, 0xf4, 0xf4, 0x25, 0xc6, 0xa3, 0x84, + 0x1d, 0x1c, 0xb1, 0x43, 0x8e, 0xde, 0x81, 0x8b, 0xcc, 0x04, 0xac, 0x81, 0x5c, 0xaf, 0x5c, 0x7d, + 0x06, 0x97, 0xb8, 0x04, 0xf0, 0x3f, 0x1b, 0xfa, 0x35, 0xdf, 0xc6, 0xd1, 0x1d, 0xb8, 0x74, 0x12, + 0x78, 0x3c, 0xe8, 0xef, 0xb9, 0x86, 0xe1, 0xb4, 0x89, 0x41, 0x6b, 0x3c, 0x9b, 0x65, 0x3d, 0x87, + 0x36, 0x8a, 0x5e, 0x86, 0x8b, 0xfc, 0x28, 0x60, 0x87, 0x05, 0x69, 0x75, 0x3a, 0x71, 0x99, 0xc4, + 0x49, 0x46, 0xc1, 0xf6, 0x8e, 0x64, 0x83, 0x46, 0x30, 0xcf, 0x58, 0xc1, 0x8c, 0xf5, 0x7b, 0xaf, + 0xac, 0x31, 0xbd, 0x84, 0xaa, 0xab, 0x13, 0x66, 0x43, 0x56, 0x40, 0x6f, 0xd4, 0x94, 0x33, 0x83, + 0x4d, 0xdc, 0x22, 0xf8, 0x8f, 0xd9, 0x61, 0xb3, 0x68, 0xf9, 0xaf, 0x2c, 0x81, 0xdb, 0xb0, 0x14, + 0x87, 0xbe, 0x33, 0x78, 0x65, 0x83, 0x11, 0x94, 0xd3, 0x56, 0x50, 0x7e, 0x91, 0x9d, 0xbc, 0xec, + 0x6b, 0x9a, 0xed, 0x90, 0xd1, 0x04, 0xf5, 0xe1, 0x6a, 0x5a, 0x86, 0xa7, 0x79, 0xbf, 0xda, 0xaf, + 0x72, 0x23, 0xd5, 0x8a, 0xf8, 0x2d, 0xfd, 0x6a, 0x55, 0xe9, 0x2c, 0xc6, 0xec, 0x4b, 0x38, 0x88, + 0x7a, 0x8a, 0x95, 0x07, 0xb0, 0x6c, 0xc0, 0x1f, 0xe8, 0x77, 0x9d, 0x4d, 0xce, 0xa9, 0x77, 0x8c, + 0xf6, 0x60, 0x89, 0x8d, 0x9b, 0xd6, 0x28, 0x70, 0x45, 0x09, 0x30, 0x98, 0xa4, 0xec, 0x8c, 0xff, + 0x32, 0xab, 0x5f, 0xd8, 0x4c, 0x14, 0xdd, 0x82, 0x45, 0x2a, 0xdb, 0x2c, 0x29, 0xf4, 0xb1, 0x84, + 0x8b, 0xb3, 0xbc, 0x8d, 0xc9, 0x2b, 0x2f, 0x55, 0x04, 0x1c, 0x16, 0xd4, 0x85, 0x96, 0x8d, 0x7e, + 0x4b, 0xdf, 0x78, 0x4b, 0x3f, 0x31, 0xfb, 0x0b, 0x8e, 0xcb, 0x15, 0xf5, 0x4a, 0x27, 0x28, 0x5b, + 0x67, 0xfe, 0xf4, 0xaf, 0x8f, 0x6f, 0x35, 0x48, 0x8d, 0x0a, 0x7a, 0x03, 0x9a, 0x6e, 0x6b, 0xbe, + 0xe0, 0x2a, 0xed, 0x88, 0xc2, 0x35, 0xdb, 0xf6, 0x68, 0xc0, 0x12, 0xca, 0x83, 0xa8, 0xb7, 0xd9, + 0xef, 0x06, 0x6a, 0x45, 0x2e, 0x38, 0x2e, 0xbe, 0xa9, 0xb0, 0x66, 0x9d, 0xab, 0x95, 0x28, 0x87, + 0x6c, 0x3f, 0x8c, 0x79, 0xf3, 0xac, 0x2b, 0x64, 0xc2, 0x82, 0xee, 0xc2, 0xf9, 0xc7, 0x8c, 0x0e, + 0xe2, 0x68, 0x7f, 0x94, 0x72, 0xd6, 0x6f, 0x9e, 0x93, 0x5d, 0x28, 0xdf, 0x6b, 0x71, 0xe6, 0x1d, + 0xbd, 0x6b, 0x10, 0x89, 0xe5, 0x86, 0x76, 0x61, 0x5e, 0xb5, 0xb7, 0xe3, 0x88, 0x27, 0x71, 0xd8, + 0x9c, 0x91, 0x3a, 0xb8, 0x46, 0x47, 0x33, 0x89, 0xed, 0x88, 0xbe, 0x09, 0x0b, 0x54, 0xbc, 0x8f, + 0x32, 0xc5, 0x4a, 0x46, 0xcd, 0x59, 0x29, 0xf5, 0x82, 0x53, 0x6a, 0xd3, 0xa2, 0x92, 0x82, 0x6b, + 0x5e, 0xc1, 0x54, 0x06, 0xee, 0x1f, 0xc5, 0xd9, 0x96, 0x00, 0x9d, 0xe7, 0xab, 0x2b, 0x58, 0x91, + 0x4d, 0xdc, 0x22, 0xe8, 0x75, 0x58, 0x4e, 0x98, 0x17, 0x07, 0xe1, 0x0e, 0xed, 0xd3, 0x1e, 0x3b, + 0x88, 0x37, 0x75, 0x7c, 0x9b, 0x73, 0x9d, 0xc6, 0xcd, 0x19, 0x52, 0x61, 0x45, 0x18, 0xce, 0x9b, + 0x96, 0xe6, 0x79, 0x39, 0x3b, 0x16, 0x86, 0x76, 0x60, 0xd5, 0x6c, 0xef, 0xb0, 0x94, 0x27, 0xf1, + 0x88, 0xf9, 0xf9, 0x23, 0xe6, 0xe5, 0x23, 0xea, 0x49, 0xe8, 0x1d, 0xb8, 0xa1, 0x7e, 0x3f, 0xa0, + 0xc9, 0x48, 0x56, 0x8c, 0x94, 0x6d, 0xd3, 0x28, 0x8a, 0xa3, 0x52, 0x8f, 0x17, 0xa4, 0xdc, 0x94, + 0x6c, 0xb4, 0x05, 0xd7, 0xea, 0x98, 0xcd, 0x0b, 0x72, 0x44, 0xb5, 0x1c, 0xe4, 0xc3, 0x97, 0xeb, + 0xec, 0xe5, 0x11, 0x2f, 0xca, 0x2e, 0x7e, 0x36, 0x27, 0xb3, 0xdc, 0xe4, 0xfb, 0xe2, 0x92, 0x5d, + 0x6e, 0xf6, 0x8c, 0xbd, 0x85, 0xd3, 0xa4, 0xc7, 0x78, 0xce, 0x44, 0x6a, 0x6f, 0xb1, 0x51, 0xfc, + 0x87, 0x45, 0xbd, 0x73, 0x95, 0x32, 0x22, 0x57, 0x28, 0x94, 0xb6, 0x02, 0x2a, 0x7a, 0x65, 0x22, + 0x46, 0x59, 0x2b, 0xe1, 0xe8, 0x7d, 0x68, 0x9a, 0xd8, 0x33, 0x96, 0xb4, 0x4a, 0x0d, 0x91, 0xc5, + 0x2e, 0x5b, 0x5e, 0xce, 0x2a, 0xac, 0xe8, 0x7b, 0xd0, 0x32, 0x2d, 0xcf, 0x52, 0xca, 0x6a, 0x04, + 0x8a, 0x21, 0x32, 0xca, 0x58, 0x09, 0x17, 0xdb, 0x37, 0x3b, 0xa1, 0x3e, 0xf3, 0x65, 0xf9, 0x9a, + 0x21, 0xba, 0x85, 0xb6, 0x61, 0x4e, 0xfd, 0xb5, 0x4d, 0x87, 0x29, 0xd3, 0x35, 0xc9, 0x5d, 0xdb, + 0xde, 0x8e, 0x02, 0xae, 0x13, 0x2a, 0x25, 0xa6, 0x17, 0xfa, 0x3a, 0x5c, 0x55, 0xcd, 0xad, 0xd1, + 0x5e, 0x21, 0xf5, 0x52, 0x59, 0x9b, 0x66, 0x48, 0x35, 0x01, 0x45, 0xd0, 0xae, 0x34, 0xaa, 0x5e, + 0x81, 0xec, 0xd5, 0x0d, 0x67, 0xaf, 0x4a, 0x2e, 0x64, 0x82, 0x9a, 0x78, 0x75, 0x96, 0xbf, 0x65, + 0x30, 0x5f, 0x17, 0xa1, 0xac, 0x29, 0x4e, 0x07, 0xfa, 0xcf, 0xad, 0x51, 0x9e, 0x9e, 0xe7, 0xd5, + 0xe9, 0xa0, 0x64, 0x10, 0xc7, 0xcf, 0x02, 0x28, 0x13, 0x6e, 0x5e, 0xce, 0x80, 0xcb, 0x84, 0x7c, + 0x58, 0x29, 0xc0, 0x56, 0xaa, 0x2e, 0x4c, 0x9d, 0xaa, 0x75, 0x32, 0x62, 0x36, 0x2a, 0xcc, 0x0f, + 0x7c, 0x59, 0x76, 0x66, 0x49, 0x35, 0x01, 0x79, 0xb0, 0x5a, 0x30, 0x16, 0xd2, 0x76, 0x71, 0x9a, + 0xb4, 0xad, 0xd7, 0x70, 0x84, 0x4e, 0x26, 0xef, 0x92, 0x33, 0x74, 0x32, 0x7f, 0x6f, 0xc1, 0xa2, + 0x82, 0x93, 0xbc, 0x80, 0xc9, 0xd2, 0x33, 0x43, 0x4a, 0x38, 0xfa, 0x09, 0x74, 0xac, 0xa3, 0x96, + 0x3e, 0x06, 0x8a, 0xe3, 0x2a, 0xcb, 0x0e, 0x9f, 0x17, 0xe5, 0xee, 0xf6, 0x4a, 0xfd, 0xb1, 0xcd, + 0xe1, 0x48, 0x26, 0x4a, 0xa3, 0x0e, 0xcc, 0xf9, 0xba, 0xd4, 0xd2, 0x90, 0x37, 0x2f, 0xa9, 0xcb, + 0x1b, 0x03, 0x42, 0x37, 0xe1, 0x82, 0x6a, 0x12, 0xe6, 0x0f, 0x3d, 0x79, 0xe7, 0x72, 0x59, 0xb2, + 0x8a, 0x30, 0x7a, 0x1b, 0x2e, 0x15, 0x20, 0xb5, 0x22, 0x96, 0xa7, 0x5d, 0xa7, 0x4e, 0x77, 0x51, + 0x0d, 0x14, 0xde, 0xbc, 0xa2, 0x0e, 0xf3, 0xaa, 0x25, 0x3a, 0xa6, 0x2a, 0x87, 0x1e, 0x11, 0xf3, + 0x9b, 0x4d, 0x19, 0xe4, 0x22, 0x8c, 0xbe, 0x02, 0x97, 0x0b, 0x90, 0xde, 0xd7, 0xae, 0x4a, 0x41, + 0xb7, 0x11, 0xdd, 0x83, 0xb6, 0x65, 0x28, 0xef, 0x60, 0x2d, 0xf9, 0xb8, 0x09, 0x2c, 0x74, 0x00, + 0xc8, 0x62, 0xa8, 0xa0, 0xac, 0xc8, 0xa0, 0x5c, 0x77, 0x97, 0x09, 0x9a, 0xa6, 0xe6, 0x31, 0xc8, + 0xe1, 0x3f, 0x1e, 0xfd, 0x38, 0xc5, 0xae, 0x99, 0xa3, 0x1f, 0x67, 0xd8, 0x2e, 0xac, 0x0d, 0xe2, + 0x54, 0x01, 0x2a, 0xae, 0xa5, 0xd3, 0xc2, 0xaa, 0xf4, 0x9c, 0x44, 0x13, 0x71, 0x74, 0x52, 0x9a, + 0x6d, 0x15, 0x47, 0xa7, 0x51, 0x1e, 0x5a, 0x5c, 0x86, 0x72, 0x3c, 0xd7, 0xf4, 0xa1, 0x65, 0x2a, + 0x36, 0xf2, 0xa1, 0xe5, 0x64, 0xaa, 0xf8, 0x76, 0x3e, 0x43, 0x7c, 0x6b, 0x74, 0xf0, 0x47, 0xa7, + 0xa1, 0x33, 0x69, 0x9d, 0x89, 0x5a, 0xec, 0x29, 0xc0, 0xa8, 0xc5, 0xfa, 0x4d, 0xad, 0x64, 0x10, + 0x05, 0xa5, 0x00, 0x1a, 0x07, 0x06, 0x97, 0x49, 0xd4, 0xe2, 0x02, 0xfc, 0x8c, 0xc7, 0x86, 0x3a, + 0x19, 0x51, 0x8b, 0x2b, 0xcc, 0xf9, 0xe1, 0xa1, 0x9a, 0x20, 0x6a, 0x71, 0xc1, 0xf8, 0x2c, 0x47, + 0x88, 0x7a, 0x0d, 0x47, 0xe8, 0x8c, 0x83, 0x84, 0xcb, 0x84, 0xae, 0xc3, 0xbc, 0x86, 0x75, 0xae, + 0x9e, 0x93, 0x5c, 0x1b, 0x14, 0x6f, 0x81, 0x5e, 0xd5, 0x2a, 0x9f, 0x91, 0x59, 0x59, 0x69, 0xcf, + 0xbf, 0x99, 0x20, 0x34, 0xf0, 0xf3, 0x6f, 0x26, 0x44, 0x63, 0x9a, 0x6f, 0x26, 0xc6, 0x3c, 0x52, + 0x74, 0xc4, 0x3f, 0xd6, 0x57, 0x38, 0x63, 0x48, 0x1c, 0x07, 0xe4, 0xa7, 0x56, 0xe3, 0x7b, 0x7a, + 0xdd, 0xd4, 0x97, 0x2c, 0x91, 0x34, 0x3d, 0x97, 0x5f, 0xb2, 0xc8, 0x36, 0x7a, 0x15, 0xce, 0xa6, + 0x9c, 0xf2, 0x61, 0x5a, 0x99, 0x29, 0x09, 0x0d, 0xfc, 0x7d, 0x49, 0x21, 0x9a, 0x9a, 0x5f, 0x2e, + 0xee, 0xd2, 0xf4, 0x68, 0x7f, 0xe8, 0x79, 0x2c, 0x4d, 0xf3, 0xcb, 0x45, 0x03, 0x9b, 0xe6, 0x72, + 0xb1, 0x44, 0x27, 0x15, 0x32, 0xf8, 0xcf, 0x0d, 0x7d, 0xbb, 0x58, 0x32, 0xc9, 0x89, 0xa4, 0x61, + 0x98, 0x7f, 0x8e, 0xa0, 0x03, 0x60, 0x83, 0x22, 0x0c, 0x1e, 0xe5, 0xac, 0x17, 0x27, 0xa3, 0x2c, + 0x0c, 0x59, 0x1b, 0xb5, 0x01, 0xfc, 0xe0, 0xf0, 0x30, 0xf0, 0x86, 0x21, 0x1f, 0xe9, 0xab, 0x54, + 0x03, 0xb1, 0x7e, 0x1e, 0x3e, 0x6d, 0xff, 0x3c, 0x6c, 0x85, 0xf7, 0x8c, 0x1d, 0xde, 0xad, 0x57, + 0x3e, 0x79, 0xd2, 0x6e, 0x7c, 0xfa, 0xa4, 0xdd, 0xf8, 0xc7, 0x93, 0x76, 0xe3, 0xc3, 0xa7, 0xed, + 0x53, 0x9f, 0x3e, 0x6d, 0x9f, 0xfa, 0xeb, 0xd3, 0xf6, 0xa9, 0xf7, 0xae, 0x64, 0x9f, 0x00, 0xfe, + 0x30, 0xff, 0x18, 0x90, 0x8f, 0x06, 0x2c, 0xed, 0x9e, 0x95, 0x9f, 0xaf, 0xbc, 0xfa, 0xef, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x33, 0xf0, 0x67, 0x77, 0x90, 0x2a, 0x00, 0x00, } func (m *EventAllocation) Marshal() (dAtA []byte, err error) { @@ -6116,6 +6243,97 @@ func (m *EventRaidDetail) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *EventHashSuccess) 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 *EventHashSuccess) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventHashSuccess) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EventHashSuccessDetail != nil { + { + size, err := m.EventHashSuccessDetail.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *EventHashSuccessDetail) 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 *EventHashSuccessDetail) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventHashSuccessDetail) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PlanetId) > 0 { + i -= len(m.PlanetId) + copy(dAtA[i:], m.PlanetId) + i = encodeVarintEvents(dAtA, i, uint64(len(m.PlanetId))) + i-- + dAtA[i] = 0x2a + } + if len(m.ObjectId) > 0 { + i -= len(m.ObjectId) + copy(dAtA[i:], m.ObjectId) + i = encodeVarintEvents(dAtA, i, uint64(len(m.ObjectId))) + i-- + dAtA[i] = 0x22 + } + if m.Difficulty != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.Difficulty)) + i-- + dAtA[i] = 0x18 + } + if len(m.Category) > 0 { + i -= len(m.Category) + copy(dAtA[i:], m.Category) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Category))) + i-- + dAtA[i] = 0x12 + } + if len(m.CallerAddress) > 0 { + i -= len(m.CallerAddress) + copy(dAtA[i:], m.CallerAddress) + i = encodeVarintEvents(dAtA, i, uint64(len(m.CallerAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintEvents(dAtA []byte, offset int, v uint64) int { offset -= sovEvents(v) base := offset @@ -7184,6 +7402,47 @@ func (m *EventRaidDetail) Size() (n int) { return n } +func (m *EventHashSuccess) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EventHashSuccessDetail != nil { + l = m.EventHashSuccessDetail.Size() + n += 1 + l + sovEvents(uint64(l)) + } + return n +} + +func (m *EventHashSuccessDetail) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.CallerAddress) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.Category) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.Difficulty != 0 { + n += 1 + sovEvents(uint64(m.Difficulty)) + } + l = len(m.ObjectId) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.PlanetId) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + return n +} + func sovEvents(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -14199,6 +14458,289 @@ func (m *EventRaidDetail) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventHashSuccess) 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 ErrIntOverflowEvents + } + 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: EventHashSuccess: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventHashSuccess: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EventHashSuccessDetail", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EventHashSuccessDetail == nil { + m.EventHashSuccessDetail = &EventHashSuccessDetail{} + } + if err := m.EventHashSuccessDetail.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EventHashSuccessDetail) 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 ErrIntOverflowEvents + } + 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: EventHashSuccessDetail: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventHashSuccessDetail: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Category", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Category = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Difficulty", wireType) + } + m.Difficulty = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Difficulty |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObjectId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PlanetId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PlanetId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipEvents(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/structs/types/work.go b/x/structs/types/work.go index 8333118..8ad73bd 100644 --- a/x/structs/types/work.go +++ b/x/structs/types/work.go @@ -1,49 +1,46 @@ package types import ( - "math" - "crypto/sha256" - "encoding/hex" - + "crypto/sha256" + "encoding/hex" + "math" ) - func HashCheck(input string, hash string) bool { - newHash := sha256.New() - newHash.Write([]byte(input)) - newHashOutput := hex.EncodeToString(newHash.Sum(nil)) + newHash := sha256.New() + newHash.Write([]byte(input)) + newHashOutput := hex.EncodeToString(newHash.Sum(nil)) - return (newHashOutput == hash) + return (newHashOutput == hash) } func HashBuild(input string) string { - newHash := sha256.New() - newHash.Write([]byte(input)) - newHashOutput := hex.EncodeToString(newHash.Sum(nil)) + newHash := sha256.New() + newHash.Write([]byte(input)) + newHashOutput := hex.EncodeToString(newHash.Sum(nil)) - return newHashOutput + return newHashOutput } -func HashBuildAndCheckDifficulty(input string, proof string, age uint64, difficultyRange uint64) bool { - hash := HashBuild(input) - - if (proof != hash) { - return false - } - - difficulty := CalculateDifficulty(float64(age), difficultyRange) +func HashBuildAndCheckDifficulty(input string, proof string, age uint64, difficultyRange uint64) (bool, uint64) { + hash := HashBuild(input) + if proof != hash { + return false, 0 + } - position := 1 - for position <= difficulty { - if (hash[position - 1 : position] != "0") { - return false - } - position++ - } + difficulty := CalculateDifficulty(float64(age), difficultyRange) - return true + // Count leading zeros in the hash, up to the required difficulty + achievedDifficulty := uint64(0) + for position := 1; position <= difficulty; position++ { + if hash[position-1:position] != "0" { + return false, achievedDifficulty + } + achievedDifficulty++ + } + return true, achievedDifficulty } func CalculateDifficulty(activationAge float64, difficultyRange uint64) int { @@ -61,12 +58,9 @@ func CalculateDifficulty(activationAge float64, difficultyRange uint64) int { return difficulty } - -func DifficultyPrefixString(plength int) (s string){ - for i:=len(s);i Date: Wed, 28 Jan 2026 23:21:32 -0500 Subject: [PATCH 10/14] Added health results to attack details (in addition to damage amounts that are already there) --- api/structs/structs/events.pulsar.go | 500 +++- proto/structs/structs/events.proto | 6 + x/structs/keeper/msg_server_struct_attack.go | 410 ++-- x/structs/keeper/struct_cache.go | 2211 +++++++++--------- x/structs/types/event_attack_detail.go | 163 +- x/structs/types/events.pb.go | 480 ++-- 6 files changed, 2139 insertions(+), 1631 deletions(-) diff --git a/api/structs/structs/events.pulsar.go b/api/structs/structs/events.pulsar.go index 081b46a..c4bbd7b 100644 --- a/api/structs/structs/events.pulsar.go +++ b/api/structs/structs/events.pulsar.go @@ -25034,6 +25034,7 @@ var ( fd_EventAttackDetail_planetaryDefenseCannonDamageDestroyedAttacker protoreflect.FieldDescriptor fd_EventAttackDetail_attackerPlayerId protoreflect.FieldDescriptor fd_EventAttackDetail_targetPlayerId protoreflect.FieldDescriptor + fd_EventAttackDetail_attackerHealthAfter protoreflect.FieldDescriptor ) func init() { @@ -25057,6 +25058,7 @@ func init() { fd_EventAttackDetail_planetaryDefenseCannonDamageDestroyedAttacker = md_EventAttackDetail.Fields().ByName("planetaryDefenseCannonDamageDestroyedAttacker") fd_EventAttackDetail_attackerPlayerId = md_EventAttackDetail.Fields().ByName("attackerPlayerId") fd_EventAttackDetail_targetPlayerId = md_EventAttackDetail.Fields().ByName("targetPlayerId") + fd_EventAttackDetail_attackerHealthAfter = md_EventAttackDetail.Fields().ByName("attackerHealthAfter") } var _ protoreflect.Message = (*fastReflection_EventAttackDetail)(nil) @@ -25232,6 +25234,12 @@ func (x *fastReflection_EventAttackDetail) Range(f func(protoreflect.FieldDescri return } } + if x.AttackerHealthAfter != uint64(0) { + value := protoreflect.ValueOfUint64(x.AttackerHealthAfter) + if !f(fd_EventAttackDetail_attackerHealthAfter, value) { + return + } + } } // Has reports whether a field is populated. @@ -25283,6 +25291,8 @@ func (x *fastReflection_EventAttackDetail) Has(fd protoreflect.FieldDescriptor) return x.AttackerPlayerId != "" case "structs.structs.EventAttackDetail.targetPlayerId": return x.TargetPlayerId != "" + case "structs.structs.EventAttackDetail.attackerHealthAfter": + return x.AttackerHealthAfter != uint64(0) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackDetail")) @@ -25335,6 +25345,8 @@ func (x *fastReflection_EventAttackDetail) Clear(fd protoreflect.FieldDescriptor x.AttackerPlayerId = "" case "structs.structs.EventAttackDetail.targetPlayerId": x.TargetPlayerId = "" + case "structs.structs.EventAttackDetail.attackerHealthAfter": + x.AttackerHealthAfter = uint64(0) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackDetail")) @@ -25408,6 +25420,9 @@ func (x *fastReflection_EventAttackDetail) Get(descriptor protoreflect.FieldDesc case "structs.structs.EventAttackDetail.targetPlayerId": value := x.TargetPlayerId return protoreflect.ValueOfString(value) + case "structs.structs.EventAttackDetail.attackerHealthAfter": + value := x.AttackerHealthAfter + return protoreflect.ValueOfUint64(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackDetail")) @@ -25466,6 +25481,8 @@ func (x *fastReflection_EventAttackDetail) Set(fd protoreflect.FieldDescriptor, x.AttackerPlayerId = value.Interface().(string) case "structs.structs.EventAttackDetail.targetPlayerId": x.TargetPlayerId = value.Interface().(string) + case "structs.structs.EventAttackDetail.attackerHealthAfter": + x.AttackerHealthAfter = value.Uint() default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackDetail")) @@ -25526,6 +25543,8 @@ func (x *fastReflection_EventAttackDetail) Mutable(fd protoreflect.FieldDescript panic(fmt.Errorf("field attackerPlayerId of message structs.structs.EventAttackDetail is not mutable")) case "structs.structs.EventAttackDetail.targetPlayerId": panic(fmt.Errorf("field targetPlayerId of message structs.structs.EventAttackDetail is not mutable")) + case "structs.structs.EventAttackDetail.attackerHealthAfter": + panic(fmt.Errorf("field attackerHealthAfter of message structs.structs.EventAttackDetail is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackDetail")) @@ -25576,6 +25595,8 @@ func (x *fastReflection_EventAttackDetail) NewField(fd protoreflect.FieldDescrip return protoreflect.ValueOfString("") case "structs.structs.EventAttackDetail.targetPlayerId": return protoreflect.ValueOfString("") + case "structs.structs.EventAttackDetail.attackerHealthAfter": + return protoreflect.ValueOfUint64(uint64(0)) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackDetail")) @@ -25706,6 +25727,9 @@ func (x *fastReflection_EventAttackDetail) ProtoMethods() *protoiface.Methods { if l > 0 { n += 2 + l + runtime.Sov(uint64(l)) } + if x.AttackerHealthAfter != 0 { + n += 2 + runtime.Sov(uint64(x.AttackerHealthAfter)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -25735,6 +25759,13 @@ func (x *fastReflection_EventAttackDetail) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.AttackerHealthAfter != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.AttackerHealthAfter)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x98 + } if len(x.TargetPlayerId) > 0 { i -= len(x.TargetPlayerId) copy(dAtA[i:], x.TargetPlayerId) @@ -26332,6 +26363,25 @@ func (x *fastReflection_EventAttackDetail) ProtoMethods() *protoiface.Methods { } x.TargetPlayerId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 19: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AttackerHealthAfter", wireType) + } + x.AttackerHealthAfter = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.AttackerHealthAfter |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -26452,6 +26502,9 @@ var ( fd_EventAttackShotDetail_postDestructionDamage protoreflect.FieldDescriptor fd_EventAttackShotDetail_postDestructionDamageDestroyedAttacker protoreflect.FieldDescriptor fd_EventAttackShotDetail_postDestructionDamageCause protoreflect.FieldDescriptor + fd_EventAttackShotDetail_targetHealthBefore protoreflect.FieldDescriptor + fd_EventAttackShotDetail_targetHealthAfter protoreflect.FieldDescriptor + fd_EventAttackShotDetail_blockerHealthAfter protoreflect.FieldDescriptor ) func init() { @@ -26489,6 +26542,9 @@ func init() { fd_EventAttackShotDetail_postDestructionDamage = md_EventAttackShotDetail.Fields().ByName("postDestructionDamage") fd_EventAttackShotDetail_postDestructionDamageDestroyedAttacker = md_EventAttackShotDetail.Fields().ByName("postDestructionDamageDestroyedAttacker") fd_EventAttackShotDetail_postDestructionDamageCause = md_EventAttackShotDetail.Fields().ByName("postDestructionDamageCause") + fd_EventAttackShotDetail_targetHealthBefore = md_EventAttackShotDetail.Fields().ByName("targetHealthBefore") + fd_EventAttackShotDetail_targetHealthAfter = md_EventAttackShotDetail.Fields().ByName("targetHealthAfter") + fd_EventAttackShotDetail_blockerHealthAfter = md_EventAttackShotDetail.Fields().ByName("blockerHealthAfter") } var _ protoreflect.Message = (*fastReflection_EventAttackShotDetail)(nil) @@ -26748,6 +26804,24 @@ func (x *fastReflection_EventAttackShotDetail) Range(f func(protoreflect.FieldDe return } } + if x.TargetHealthBefore != uint64(0) { + value := protoreflect.ValueOfUint64(x.TargetHealthBefore) + if !f(fd_EventAttackShotDetail_targetHealthBefore, value) { + return + } + } + if x.TargetHealthAfter != uint64(0) { + value := protoreflect.ValueOfUint64(x.TargetHealthAfter) + if !f(fd_EventAttackShotDetail_targetHealthAfter, value) { + return + } + } + if x.BlockerHealthAfter != uint64(0) { + value := protoreflect.ValueOfUint64(x.BlockerHealthAfter) + if !f(fd_EventAttackShotDetail_blockerHealthAfter, value) { + return + } + } } // Has reports whether a field is populated. @@ -26827,6 +26901,12 @@ func (x *fastReflection_EventAttackShotDetail) Has(fd protoreflect.FieldDescript return x.PostDestructionDamageDestroyedAttacker != false case "structs.structs.EventAttackShotDetail.postDestructionDamageCause": return x.PostDestructionDamageCause != 0 + case "structs.structs.EventAttackShotDetail.targetHealthBefore": + return x.TargetHealthBefore != uint64(0) + case "structs.structs.EventAttackShotDetail.targetHealthAfter": + return x.TargetHealthAfter != uint64(0) + case "structs.structs.EventAttackShotDetail.blockerHealthAfter": + return x.BlockerHealthAfter != uint64(0) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackShotDetail")) @@ -26907,6 +26987,12 @@ func (x *fastReflection_EventAttackShotDetail) Clear(fd protoreflect.FieldDescri x.PostDestructionDamageDestroyedAttacker = false case "structs.structs.EventAttackShotDetail.postDestructionDamageCause": x.PostDestructionDamageCause = 0 + case "structs.structs.EventAttackShotDetail.targetHealthBefore": + x.TargetHealthBefore = uint64(0) + case "structs.structs.EventAttackShotDetail.targetHealthAfter": + x.TargetHealthAfter = uint64(0) + case "structs.structs.EventAttackShotDetail.blockerHealthAfter": + x.BlockerHealthAfter = uint64(0) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackShotDetail")) @@ -27022,6 +27108,15 @@ func (x *fastReflection_EventAttackShotDetail) Get(descriptor protoreflect.Field case "structs.structs.EventAttackShotDetail.postDestructionDamageCause": value := x.PostDestructionDamageCause return protoreflect.ValueOfEnum((protoreflect.EnumNumber)(value)) + case "structs.structs.EventAttackShotDetail.targetHealthBefore": + value := x.TargetHealthBefore + return protoreflect.ValueOfUint64(value) + case "structs.structs.EventAttackShotDetail.targetHealthAfter": + value := x.TargetHealthAfter + return protoreflect.ValueOfUint64(value) + case "structs.structs.EventAttackShotDetail.blockerHealthAfter": + value := x.BlockerHealthAfter + return protoreflect.ValueOfUint64(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackShotDetail")) @@ -27108,6 +27203,12 @@ func (x *fastReflection_EventAttackShotDetail) Set(fd protoreflect.FieldDescript x.PostDestructionDamageDestroyedAttacker = value.Bool() case "structs.structs.EventAttackShotDetail.postDestructionDamageCause": x.PostDestructionDamageCause = (TechPassiveWeaponry)(value.Enum()) + case "structs.structs.EventAttackShotDetail.targetHealthBefore": + x.TargetHealthBefore = value.Uint() + case "structs.structs.EventAttackShotDetail.targetHealthAfter": + x.TargetHealthAfter = value.Uint() + case "structs.structs.EventAttackShotDetail.blockerHealthAfter": + x.BlockerHealthAfter = value.Uint() default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackShotDetail")) @@ -27196,6 +27297,12 @@ func (x *fastReflection_EventAttackShotDetail) Mutable(fd protoreflect.FieldDesc panic(fmt.Errorf("field postDestructionDamageDestroyedAttacker of message structs.structs.EventAttackShotDetail is not mutable")) case "structs.structs.EventAttackShotDetail.postDestructionDamageCause": panic(fmt.Errorf("field postDestructionDamageCause of message structs.structs.EventAttackShotDetail is not mutable")) + case "structs.structs.EventAttackShotDetail.targetHealthBefore": + panic(fmt.Errorf("field targetHealthBefore of message structs.structs.EventAttackShotDetail is not mutable")) + case "structs.structs.EventAttackShotDetail.targetHealthAfter": + panic(fmt.Errorf("field targetHealthAfter of message structs.structs.EventAttackShotDetail is not mutable")) + case "structs.structs.EventAttackShotDetail.blockerHealthAfter": + panic(fmt.Errorf("field blockerHealthAfter of message structs.structs.EventAttackShotDetail is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackShotDetail")) @@ -27274,6 +27381,12 @@ func (x *fastReflection_EventAttackShotDetail) NewField(fd protoreflect.FieldDes return protoreflect.ValueOfBool(false) case "structs.structs.EventAttackShotDetail.postDestructionDamageCause": return protoreflect.ValueOfEnum(0) + case "structs.structs.EventAttackShotDetail.targetHealthBefore": + return protoreflect.ValueOfUint64(uint64(0)) + case "structs.structs.EventAttackShotDetail.targetHealthAfter": + return protoreflect.ValueOfUint64(uint64(0)) + case "structs.structs.EventAttackShotDetail.blockerHealthAfter": + return protoreflect.ValueOfUint64(uint64(0)) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: structs.structs.EventAttackShotDetail")) @@ -27446,6 +27559,15 @@ func (x *fastReflection_EventAttackShotDetail) ProtoMethods() *protoiface.Method if x.PostDestructionDamageCause != 0 { n += 2 + runtime.Sov(uint64(x.PostDestructionDamageCause)) } + if x.TargetHealthBefore != 0 { + n += 2 + runtime.Sov(uint64(x.TargetHealthBefore)) + } + if x.TargetHealthAfter != 0 { + n += 2 + runtime.Sov(uint64(x.TargetHealthAfter)) + } + if x.BlockerHealthAfter != 0 { + n += 2 + runtime.Sov(uint64(x.BlockerHealthAfter)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -27475,6 +27597,27 @@ func (x *fastReflection_EventAttackShotDetail) ProtoMethods() *protoiface.Method i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.BlockerHealthAfter != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.BlockerHealthAfter)) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x98 + } + if x.TargetHealthAfter != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.TargetHealthAfter)) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x90 + } + if x.TargetHealthBefore != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.TargetHealthBefore)) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x88 + } if x.PostDestructionDamageCause != 0 { i = runtime.EncodeVarint(dAtA, i, uint64(x.PostDestructionDamageCause)) i-- @@ -28466,6 +28609,63 @@ func (x *fastReflection_EventAttackShotDetail) ProtoMethods() *protoiface.Method break } } + case 33: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TargetHealthBefore", wireType) + } + x.TargetHealthBefore = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.TargetHealthBefore |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 34: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TargetHealthAfter", wireType) + } + x.TargetHealthAfter = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.TargetHealthAfter |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 35: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BlockerHealthAfter", wireType) + } + x.BlockerHealthAfter = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.BlockerHealthAfter |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -33507,6 +33707,7 @@ type EventAttackDetail struct { PlanetaryDefenseCannonDamageDestroyedAttacker bool `protobuf:"varint,16,opt,name=planetaryDefenseCannonDamageDestroyedAttacker,proto3" json:"planetaryDefenseCannonDamageDestroyedAttacker,omitempty"` AttackerPlayerId string `protobuf:"bytes,17,opt,name=attackerPlayerId,proto3" json:"attackerPlayerId,omitempty"` TargetPlayerId string `protobuf:"bytes,18,opt,name=targetPlayerId,proto3" json:"targetPlayerId,omitempty"` + AttackerHealthAfter uint64 `protobuf:"varint,19,opt,name=attackerHealthAfter,proto3" json:"attackerHealthAfter,omitempty"` } func (x *EventAttackDetail) Reset() { @@ -33655,6 +33856,13 @@ func (x *EventAttackDetail) GetTargetPlayerId() string { return "" } +func (x *EventAttackDetail) GetAttackerHealthAfter() uint64 { + if x != nil { + return x.AttackerHealthAfter + } + return 0 +} + type EventAttackShotDetail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -33692,6 +33900,9 @@ type EventAttackShotDetail struct { PostDestructionDamage uint64 `protobuf:"varint,30,opt,name=postDestructionDamage,proto3" json:"postDestructionDamage,omitempty"` PostDestructionDamageDestroyedAttacker bool `protobuf:"varint,31,opt,name=postDestructionDamageDestroyedAttacker,proto3" json:"postDestructionDamageDestroyedAttacker,omitempty"` PostDestructionDamageCause TechPassiveWeaponry `protobuf:"varint,32,opt,name=postDestructionDamageCause,proto3,enum=structs.structs.TechPassiveWeaponry" json:"postDestructionDamageCause,omitempty"` + TargetHealthBefore uint64 `protobuf:"varint,33,opt,name=targetHealthBefore,proto3" json:"targetHealthBefore,omitempty"` + TargetHealthAfter uint64 `protobuf:"varint,34,opt,name=targetHealthAfter,proto3" json:"targetHealthAfter,omitempty"` + BlockerHealthAfter uint64 `protobuf:"varint,35,opt,name=blockerHealthAfter,proto3" json:"blockerHealthAfter,omitempty"` } func (x *EventAttackShotDetail) Reset() { @@ -33938,6 +34149,27 @@ func (x *EventAttackShotDetail) GetPostDestructionDamageCause() TechPassiveWeapo return TechPassiveWeaponry_noPassiveWeaponry } +func (x *EventAttackShotDetail) GetTargetHealthBefore() uint64 { + if x != nil { + return x.TargetHealthBefore + } + return 0 +} + +func (x *EventAttackShotDetail) GetTargetHealthAfter() uint64 { + if x != nil { + return x.TargetHealthAfter + } + return 0 +} + +func (x *EventAttackShotDetail) GetBlockerHealthAfter() uint64 { + if x != nil { + return x.BlockerHealthAfter + } + return 0 +} + type EventAttackDefenderCounterDetail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -34623,7 +34855,7 @@ var file_structs_structs_events_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0xd6, 0x09, 0x0a, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x88, 0x0a, 0x0a, 0x11, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x74, @@ -34701,137 +34933,149 @@ var file_structs_structs_events_proto_rawDesc = []byte{ 0x61, 0x63, 0x6b, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x64, 0x22, 0x9a, 0x10, 0x0a, 0x15, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x68, 0x6f, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, - 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x5e, 0x0a, 0x18, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x18, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x5d, 0x0a, 0x1a, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x62, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x16, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x73, 0x2e, 0x61, 0x6d, 0x62, 0x69, 0x74, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x1a, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x62, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x12, 0x43, - 0x0a, 0x0b, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x44, 0x65, - 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x43, 0x61, - 0x75, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x42, 0x79, 0x50, + 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, + 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x13, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x41, 0x66, 0x74, 0x65, 0x72, 0x22, 0xa8, 0x11, 0x0a, 0x15, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x68, 0x6f, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5e, 0x0a, 0x18, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x18, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x5d, 0x0a, + 0x1a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x62, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x73, 0x2e, 0x61, 0x6d, 0x62, 0x69, 0x74, 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x1a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x62, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x10, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x53, 0x6c, 0x6f, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x76, 0x61, 0x64, + 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, + 0x12, 0x43, 0x0a, 0x0b, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x55, 0x6e, 0x69, 0x74, + 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, + 0x43, 0x61, 0x75, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x42, + 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, + 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, + 0x42, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x66, 0x65, 0x6e, + 0x73, 0x65, 0x73, 0x12, 0x6e, 0x0a, 0x1e, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x42, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x42, 0x79, - 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, - 0x73, 0x12, 0x6e, 0x0a, 0x1e, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x42, 0x79, 0x50, 0x6c, 0x61, + 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x74, 0x65, + 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x66, 0x65, 0x6e, + 0x73, 0x65, 0x73, 0x52, 0x1e, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x42, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x43, 0x61, - 0x75, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x74, 0x65, 0x63, 0x68, - 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, - 0x73, 0x52, 0x1e, 0x65, 0x76, 0x61, 0x64, 0x65, 0x64, 0x42, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x65, - 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x43, 0x61, 0x75, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x49, 0x64, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, - 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, - 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x1b, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1b, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x73, 0x2e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x05, 0xa8, - 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x1b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x63, 0x0a, 0x1d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x62, 0x69, 0x74, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, - 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x61, 0x6d, 0x62, 0x69, 0x74, 0x42, 0x05, - 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x1d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x41, - 0x6d, 0x62, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, - 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, - 0x65, 0x64, 0x12, 0x7d, 0x0a, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x6b, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x66, 0x65, + 0x75, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x2c, 0x0a, + 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, + 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, + 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, + 0x1b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x73, 0x2e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, + 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x1b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, + 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, + 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x63, 0x0a, 0x1d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x62, + 0x69, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x61, 0x6d, 0x62, 0x69, 0x74, + 0x42, 0x05, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x1d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, + 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, + 0x67, 0x41, 0x6d, 0x62, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, + 0x64, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, + 0x6f, 0x79, 0x65, 0x64, 0x12, 0x7d, 0x0a, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x6b, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x61, 0x6c, 0x74, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, - 0x61, 0x6c, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x64, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x64, 0x61, - 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, - 0x14, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x74, 0x65, - 0x63, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x52, 0x14, - 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x61, 0x75, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x17, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x0f, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, - 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, - 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x1e, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x1a, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x41, 0x74, 0x74, 0x61, - 0x63, 0x6b, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x24, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x73, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x50, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x57, 0x65, - 0x61, 0x70, 0x6f, 0x6e, 0x72, 0x79, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x61, 0x75, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x18, 0x1c, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x1f, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x41, - 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x70, - 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x6d, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x34, - 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x70, - 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x6d, 0x61, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x26, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, + 0x6c, 0x52, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, + 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x61, + 0x6c, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, + 0x44, 0x65, 0x61, 0x6c, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, + 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x55, 0x0a, 0x14, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, + 0x74, 0x65, 0x63, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, + 0x52, 0x14, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x61, 0x75, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, + 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x28, + 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, + 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x44, 0x61, 0x6d, 0x61, 0x67, + 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x46, + 0x0a, 0x1e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, + 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x41, 0x74, + 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, 0x1b, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x73, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x50, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, + 0x57, 0x65, 0x61, 0x70, 0x6f, 0x6e, 0x72, 0x79, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x61, 0x75, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x18, + 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x1f, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x54, + 0x6f, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x1f, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, + 0x12, 0x34, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x15, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x26, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, + 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x1f, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x65, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x64, 0x0a, 0x1a, - 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x24, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x73, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x50, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x57, 0x65, - 0x61, 0x70, 0x6f, 0x6e, 0x72, 0x79, 0x52, 0x1a, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x61, 0x75, - 0x73, 0x65, 0x22, 0x9f, 0x04, 0x0a, 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, + 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x64, + 0x0a, 0x1a, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x61, 0x75, 0x73, 0x65, 0x18, 0x20, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x73, 0x2e, 0x74, 0x65, 0x63, 0x68, 0x50, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, + 0x57, 0x65, 0x61, 0x70, 0x6f, 0x6e, 0x72, 0x79, 0x52, 0x1a, 0x70, 0x6f, 0x73, 0x74, 0x44, 0x65, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x43, + 0x61, 0x75, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x22, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x41, 0x66, 0x74, + 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x23, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x41, 0x66, 0x74, + 0x65, 0x72, 0x22, 0x9f, 0x04, 0x0a, 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x79, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, diff --git a/proto/structs/structs/events.proto b/proto/structs/structs/events.proto index 77aa103..a3f5d95 100644 --- a/proto/structs/structs/events.proto +++ b/proto/structs/structs/events.proto @@ -146,6 +146,8 @@ option go_package = "structs/x/structs/types"; string attackerPlayerId = 17; string targetPlayerId = 18; + uint64 attackerHealthAfter = 19; + } message EventAttackShotDetail { @@ -194,6 +196,10 @@ option go_package = "structs/x/structs/types"; bool postDestructionDamageDestroyedAttacker = 31; techPassiveWeaponry postDestructionDamageCause = 32; + uint64 targetHealthBefore = 33; + uint64 targetHealthAfter = 34; + uint64 blockerHealthAfter = 35; + } message EventAttackDefenderCounterDetail { diff --git a/x/structs/keeper/msg_server_struct_attack.go b/x/structs/keeper/msg_server_struct_attack.go index 9f9b010..fe57149 100644 --- a/x/structs/keeper/msg_server_struct_attack.go +++ b/x/structs/keeper/msg_server_struct_attack.go @@ -8,213 +8,219 @@ import ( "structs/x/structs/types" ) - func (k msgServer) StructAttack(goCtx context.Context, msg *types.MsgStructAttack) (*types.MsgStructAttackResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - // Add an Active Address record to the - // indexer for UI requirements + // Add an Active Address record to the + // indexer for UI requirements k.AddressEmitActivity(ctx, msg.Creator) - structure := k.GetStructCacheFromId(ctx, msg.OperatingStructId) - - k.logger.Info("Attack Action", "structId", msg.OperatingStructId) - // Check to see if the caller has permissions to proceed - permissionError := structure.CanBePlayedBy(msg.Creator) - if (permissionError != nil) { - return &types.MsgStructAttackResponse{}, permissionError - } - - if structure.GetOwner().IsHalted() { - return &types.MsgStructAttackResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_attack").WithStruct(msg.OperatingStructId) - } - - // Is the Struct & Owner online? - readinessError := structure.ReadinessCheck() - if (readinessError != nil) { - return &types.MsgStructAttackResponse{}, readinessError - } - - if !structure.IsCommandable() { - return &types.MsgStructAttackResponse{}, types.NewFleetCommandError(structure.GetFleet().GetFleetId(), "command_offline").WithStructId(structure.GetStructId()) - } - - weaponSystem, weaponSystemExists := types.TechWeaponSystem_enum[msg.WeaponSystem] - if !weaponSystemExists { - return &types.MsgStructAttackResponse{}, types.NewParameterValidationError("weapon_system", 0, "invalid") - } - - weaponSystemError := structure.GetStructType().VerifyWeaponSystem(weaponSystem) - if weaponSystemError != nil { - return &types.MsgStructAttackResponse{}, weaponSystemError - } - - playerCharge := k.GetPlayerCharge(ctx, structure.GetOwnerId()) - if (playerCharge < structure.GetStructType().GetWeaponCharge(weaponSystem)) { - return &types.MsgStructAttackResponse{}, types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetWeaponCharge(weaponSystem), playerCharge, "attack").WithStructType(structure.GetTypeId()) - } - - // Jump out of Stealth Mode for the attack - structure.StatusRemoveHidden() - - var eventAttackDetail *types.EventAttackDetail - eventAttackDetail = structure.GetEventAttackDetail() - eventAttackDetail.SetBaseDetails(structure.GetOwnerId(), structure.GetStructId(), structure.GetTypeId(), structure.GetLocationType(), structure.GetLocationId(), structure.GetOperatingAmbit(), structure.GetSlot(), weaponSystem, structure.GetStructType().GetWeaponControl(weaponSystem), structure.GetStructType().GetWeapon(weaponSystem)) - - structure.ManualLoadEventAttackDetail(eventAttackDetail) - - var targetWasPlanetary bool - var targetWasOnPlanet *PlanetCache - - if uint64(len(msg.TargetStructId)) != structure.GetStructType().GetWeaponTargets(weaponSystem) { - return &types.MsgStructAttackResponse{}, types.NewCombatTargetingError(structure.GetStructId(), "", msg.WeaponSystem, "incomplete_targeting") - } - - structCacheMap := make(map[string]*StructCache) - structCacheMap[structure.GetStructId()] = &structure - pendingCommits := make([]*StructCache, 0, 32) - pendingCommits = append(pendingCommits, &structure) - - // Begin taking shots. Most weapons only use a single shot but some perform multiple. - for shot := uint64(0); shot < (structure.GetStructType().GetWeaponTargets(weaponSystem)); shot++ { - k.logger.Info("Attack Action", "structId", msg.OperatingStructId, "shot", shot, "shots", structure.GetStructType().GetWeaponTargets(weaponSystem), "target", msg.TargetStructId[shot] ) - - var targetStructure *StructCache - if cached, exists := structCacheMap[msg.TargetStructId[shot]]; exists { - targetStructure = cached - } else { - newTarget := k.GetStructCacheFromId(ctx, msg.TargetStructId[shot]) - targetStructure = &newTarget - if !targetStructure.LoadStruct() { - return &types.MsgStructAttackResponse{}, types.NewObjectNotFoundError("struct", msg.TargetStructId[shot]) - } - structCacheMap[msg.TargetStructId[shot]] = targetStructure - pendingCommits = append(pendingCommits, targetStructure) - } - - targetStructure.ManualLoadEventAttackDetail(eventAttackDetail) - eventAttackDetail.SetTargetPlayerId(targetStructure.GetOwnerId()) - - eventAttackShotDetail := targetStructure.GetEventAttackShotDetail() - structure.ManualLoadEventAttackShotDetail(eventAttackShotDetail) - structure.GetEventAttackShotDetail().SetTargetDetails(targetStructure.GetStructId(), targetStructure.GetTypeId(), targetStructure.GetLocationType(), targetStructure.GetLocationId(), targetStructure.GetOperatingAmbit(), targetStructure.GetSlot()) - - /* Can the attacker attack? */ - // Check that the Structs are within attacking range of each other - // This includes both a weapon<->ambit check, and a fleet<->planet - targetingError := structure.CanAttack(targetStructure, weaponSystem) - if (targetingError != nil) { - return &types.MsgStructAttackResponse{}, targetingError - } - - k.logger.Info("Struct Targetable", "target", msg.TargetStructId[shot]) - - if (targetStructure.CanEvade(&structure, weaponSystem)) { - k.logger.Info("Struct Evaded", "target", msg.TargetStructId[shot]) - structure.GetEventAttackDetail().AppendShot(targetStructure.FlushEventAttackShotDetail()) - continue - } - - attackBlocked := false - - // Check to make sure the attack is either counterable, blockable, or both. Otherwise skip this section - k.logger.Info("Struct Attacker Status", "structId", structure.GetStructId(), "blockable", (structure.GetStructType().GetWeaponBlockable(weaponSystem)), "counterable",(structure.GetStructType().GetWeaponCounterable(weaponSystem))) - if ((structure.GetStructType().GetWeaponBlockable(weaponSystem)) || (structure.GetStructType().GetWeaponCounterable(weaponSystem))) { - - // Check the Defenders - defenderPlayer := targetStructure.GetOwner() - defenders := targetStructure.GetDefenders() - for _, defender := range defenders { - k.logger.Info("Defender at Location", "defender", defender.GetStructId(), "locationId", defender.GetLocationId()) - - if cachedDefender, exists := structCacheMap[defender.GetStructId()]; exists { - defender = cachedDefender - } else { - structCacheMap[defender.GetStructId()] = defender - pendingCommits = append(pendingCommits, defender) - } - - defender.Defender = true - defender.ManualLoadOwner(defenderPlayer) - defender.ManualLoadEventAttackDetail(eventAttackDetail) - defender.ManualLoadEventAttackShotDetail(eventAttackShotDetail) - - defenderReadinessError := defender.ReadinessCheck() - if (defenderReadinessError == nil) { - k.logger.Info("Defender seems ready to defend") - if (!attackBlocked && (structure.GetStructType().GetWeaponBlockable(weaponSystem))) { - k.logger.Info("Defender to attempt a block!") - attackBlocked = defender.AttemptBlock(&structure, weaponSystem, targetStructure) - } - - } - - if (structure.GetStructType().GetWeaponCounterable(weaponSystem)) { - k.logger.Info("Defender trying to counter!.. ") - counterErrors := defender.CanCounterAttack(&structure) - if (counterErrors == nil) { - k.logger.Info("Defender counter-attacking!") - structure.TakeCounterAttackDamage(defender) - } - } - //defender.Commit() - } - } - - // Fun story, I'd actually forgotten this code block after writing all the other function - // Turns out, my Struct wasn't attacking because I forgot the part of Attack that attacks. - if (!attackBlocked && structure.IsOnline()) { - k.logger.Info("Moving forward with the attack", "target", msg.TargetStructId[shot]) - targetStructure.TakeAttackDamage(&structure, weaponSystem) - } else { - k.logger.Info("Attack against target was blocked", "target", msg.TargetStructId[shot]) - } - - - if (structure.GetStructType().GetWeaponCounterable(weaponSystem)) { - k.logger.Info("Target trying to Counter now!") - counterErrors := targetStructure.CanCounterAttack(&structure) - if (counterErrors == nil) { - k.logger.Info("Target Countering!") - structure.TakeCounterAttackDamage(targetStructure) - } - } - - structure.GetEventAttackDetail().AppendShot(targetStructure.FlushEventAttackShotDetail()) - - if (targetStructure.GetStructType().GetCategory() == types.ObjectType_planet) { - targetWasPlanetary = true - targetWasOnPlanet = targetStructure.GetPlanet() - } - - //targetStructure.Commit() - } - - // Recoil Damage - structure.TakeRecoilDamage(weaponSystem) - - // Check for Planetary Damage, namely Defense Cannons - if (targetWasPlanetary) { - targetWasOnPlanet.AttemptDefenseCannon(&structure) - } - - _ = ctx.EventManager().EmitTypedEvent(&types.EventAttack{EventAttackDetail: eventAttackDetail}) - - //structure.Commit() - // Commit Struct caches - for _, pendingStruct := range pendingCommits { - if pendingStruct.IsChanged() { - pendingStruct.Commit() - } - } - - k.DischargePlayer(ctx, structure.GetOwnerId()) - - if (ctx.ExecMode() == sdk.ExecModeCheck) { - //ctx.GasMeter().RefundGas(ctx.GasMeter().GasConsumed(), "Walkin it back") - ctx.GasMeter().ConsumeGas(uint64(200000), "Messin' with the estimator") - } - k.logger.Info("Attack Transaction Gas", "gasMeter", ctx.GasMeter().String(), "execMode", ctx.ExecMode()) + structure := k.GetStructCacheFromId(ctx, msg.OperatingStructId) + + k.logger.Info("Attack Action", "structId", msg.OperatingStructId) + // Check to see if the caller has permissions to proceed + permissionError := structure.CanBePlayedBy(msg.Creator) + if permissionError != nil { + return &types.MsgStructAttackResponse{}, permissionError + } + + if structure.GetOwner().IsHalted() { + return &types.MsgStructAttackResponse{}, types.NewPlayerHaltedError(structure.GetOwnerId(), "struct_attack").WithStruct(msg.OperatingStructId) + } + + // Is the Struct & Owner online? + readinessError := structure.ReadinessCheck() + if readinessError != nil { + return &types.MsgStructAttackResponse{}, readinessError + } + + if !structure.IsCommandable() { + return &types.MsgStructAttackResponse{}, types.NewFleetCommandError(structure.GetFleet().GetFleetId(), "command_offline").WithStructId(structure.GetStructId()) + } + + weaponSystem, weaponSystemExists := types.TechWeaponSystem_enum[msg.WeaponSystem] + if !weaponSystemExists { + return &types.MsgStructAttackResponse{}, types.NewParameterValidationError("weapon_system", 0, "invalid") + } + + weaponSystemError := structure.GetStructType().VerifyWeaponSystem(weaponSystem) + if weaponSystemError != nil { + return &types.MsgStructAttackResponse{}, weaponSystemError + } + + playerCharge := k.GetPlayerCharge(ctx, structure.GetOwnerId()) + if playerCharge < structure.GetStructType().GetWeaponCharge(weaponSystem) { + return &types.MsgStructAttackResponse{}, types.NewInsufficientChargeError(structure.GetOwnerId(), structure.GetStructType().GetWeaponCharge(weaponSystem), playerCharge, "attack").WithStructType(structure.GetTypeId()) + } + + // Jump out of Stealth Mode for the attack + structure.StatusRemoveHidden() + + var eventAttackDetail *types.EventAttackDetail + eventAttackDetail = structure.GetEventAttackDetail() + eventAttackDetail.SetBaseDetails(structure.GetOwnerId(), structure.GetStructId(), structure.GetTypeId(), structure.GetLocationType(), structure.GetLocationId(), structure.GetOperatingAmbit(), structure.GetSlot(), weaponSystem, structure.GetStructType().GetWeaponControl(weaponSystem), structure.GetStructType().GetWeapon(weaponSystem)) + + structure.ManualLoadEventAttackDetail(eventAttackDetail) + + var targetWasPlanetary bool + var targetWasOnPlanet *PlanetCache + + if uint64(len(msg.TargetStructId)) != structure.GetStructType().GetWeaponTargets(weaponSystem) { + return &types.MsgStructAttackResponse{}, types.NewCombatTargetingError(structure.GetStructId(), "", msg.WeaponSystem, "incomplete_targeting") + } + + structCacheMap := make(map[string]*StructCache) + structCacheMap[structure.GetStructId()] = &structure + pendingCommits := make([]*StructCache, 0, 32) + pendingCommits = append(pendingCommits, &structure) + + // Begin taking shots. Most weapons only use a single shot but some perform multiple. + for shot := uint64(0); shot < (structure.GetStructType().GetWeaponTargets(weaponSystem)); shot++ { + k.logger.Info("Attack Action", "structId", msg.OperatingStructId, "shot", shot, "shots", structure.GetStructType().GetWeaponTargets(weaponSystem), "target", msg.TargetStructId[shot]) + + var targetStructure *StructCache + if cached, exists := structCacheMap[msg.TargetStructId[shot]]; exists { + targetStructure = cached + } else { + newTarget := k.GetStructCacheFromId(ctx, msg.TargetStructId[shot]) + targetStructure = &newTarget + if !targetStructure.LoadStruct() { + return &types.MsgStructAttackResponse{}, types.NewObjectNotFoundError("struct", msg.TargetStructId[shot]) + } + structCacheMap[msg.TargetStructId[shot]] = targetStructure + pendingCommits = append(pendingCommits, targetStructure) + } + + targetStructure.ManualLoadEventAttackDetail(eventAttackDetail) + eventAttackDetail.SetTargetPlayerId(targetStructure.GetOwnerId()) + + eventAttackShotDetail := targetStructure.GetEventAttackShotDetail() + structure.ManualLoadEventAttackShotDetail(eventAttackShotDetail) + structure.GetEventAttackShotDetail().SetTargetDetails(targetStructure.GetStructId(), targetStructure.GetTypeId(), targetStructure.GetLocationType(), targetStructure.GetLocationId(), targetStructure.GetOperatingAmbit(), targetStructure.GetSlot()) + + // Initialize target health - will be updated by TakeAttackDamage if hit + currentTargetHealth := targetStructure.GetHealth() + eventAttackShotDetail.SetTargetHealthBefore(currentTargetHealth) + eventAttackShotDetail.SetTargetHealthAfter(currentTargetHealth) + + /* Can the attacker attack? */ + // Check that the Structs are within attacking range of each other + // This includes both a weapon<->ambit check, and a fleet<->planet + targetingError := structure.CanAttack(targetStructure, weaponSystem) + if targetingError != nil { + return &types.MsgStructAttackResponse{}, targetingError + } + + k.logger.Info("Struct Targetable", "target", msg.TargetStructId[shot]) + + if targetStructure.CanEvade(&structure, weaponSystem) { + k.logger.Info("Struct Evaded", "target", msg.TargetStructId[shot]) + structure.GetEventAttackDetail().AppendShot(targetStructure.FlushEventAttackShotDetail()) + continue + } + + attackBlocked := false + + // Check to make sure the attack is either counterable, blockable, or both. Otherwise skip this section + k.logger.Info("Struct Attacker Status", "structId", structure.GetStructId(), "blockable", (structure.GetStructType().GetWeaponBlockable(weaponSystem)), "counterable", (structure.GetStructType().GetWeaponCounterable(weaponSystem))) + if (structure.GetStructType().GetWeaponBlockable(weaponSystem)) || (structure.GetStructType().GetWeaponCounterable(weaponSystem)) { + + // Check the Defenders + defenderPlayer := targetStructure.GetOwner() + defenders := targetStructure.GetDefenders() + for _, defender := range defenders { + k.logger.Info("Defender at Location", "defender", defender.GetStructId(), "locationId", defender.GetLocationId()) + + if cachedDefender, exists := structCacheMap[defender.GetStructId()]; exists { + defender = cachedDefender + } else { + structCacheMap[defender.GetStructId()] = defender + pendingCommits = append(pendingCommits, defender) + } + + defender.Defender = true + defender.ManualLoadOwner(defenderPlayer) + defender.ManualLoadEventAttackDetail(eventAttackDetail) + defender.ManualLoadEventAttackShotDetail(eventAttackShotDetail) + + defenderReadinessError := defender.ReadinessCheck() + if defenderReadinessError == nil { + k.logger.Info("Defender seems ready to defend") + if !attackBlocked && (structure.GetStructType().GetWeaponBlockable(weaponSystem)) { + k.logger.Info("Defender to attempt a block!") + attackBlocked = defender.AttemptBlock(&structure, weaponSystem, targetStructure) + } + + } + + if structure.GetStructType().GetWeaponCounterable(weaponSystem) { + k.logger.Info("Defender trying to counter!.. ") + counterErrors := defender.CanCounterAttack(&structure) + if counterErrors == nil { + k.logger.Info("Defender counter-attacking!") + structure.TakeCounterAttackDamage(defender) + } + } + //defender.Commit() + } + } + + // Fun story, I'd actually forgotten this code block after writing all the other function + // Turns out, my Struct wasn't attacking because I forgot the part of Attack that attacks. + if !attackBlocked && structure.IsOnline() { + k.logger.Info("Moving forward with the attack", "target", msg.TargetStructId[shot]) + targetStructure.TakeAttackDamage(&structure, weaponSystem) + } else { + k.logger.Info("Attack against target was blocked", "target", msg.TargetStructId[shot]) + } + + if structure.GetStructType().GetWeaponCounterable(weaponSystem) { + k.logger.Info("Target trying to Counter now!") + counterErrors := targetStructure.CanCounterAttack(&structure) + if counterErrors == nil { + k.logger.Info("Target Countering!") + structure.TakeCounterAttackDamage(targetStructure) + } + } + + structure.GetEventAttackDetail().AppendShot(targetStructure.FlushEventAttackShotDetail()) + + if targetStructure.GetStructType().GetCategory() == types.ObjectType_planet { + targetWasPlanetary = true + targetWasOnPlanet = targetStructure.GetPlanet() + } + + //targetStructure.Commit() + } + + // Recoil Damage + structure.TakeRecoilDamage(weaponSystem) + + // Check for Planetary Damage, namely Defense Cannons + if targetWasPlanetary { + targetWasOnPlanet.AttemptDefenseCannon(&structure) + } + + // Set attacker's final health after all damage sources have resolved + eventAttackDetail.SetAttackerHealthAfter(structure.GetHealth()) + + _ = ctx.EventManager().EmitTypedEvent(&types.EventAttack{EventAttackDetail: eventAttackDetail}) + + //structure.Commit() + // Commit Struct caches + for _, pendingStruct := range pendingCommits { + if pendingStruct.IsChanged() { + pendingStruct.Commit() + } + } + + k.DischargePlayer(ctx, structure.GetOwnerId()) + + if ctx.ExecMode() == sdk.ExecModeCheck { + //ctx.GasMeter().RefundGas(ctx.GasMeter().GasConsumed(), "Walkin it back") + ctx.GasMeter().ConsumeGas(uint64(200000), "Messin' with the estimator") + } + k.logger.Info("Attack Transaction Gas", "gasMeter", ctx.GasMeter().String(), "execMode", ctx.ExecMode()) return &types.MsgStructAttackResponse{}, nil } diff --git a/x/structs/keeper/struct_cache.go b/x/structs/keeper/struct_cache.go index 4c4c557..3ef627e 100644 --- a/x/structs/keeper/struct_cache.go +++ b/x/structs/keeper/struct_cache.go @@ -3,485 +3,570 @@ package keeper import ( "context" - sdk "github.com/cosmos/cosmos-sdk/types" "structs/x/structs/types" - "github.com/nethruster/go-fraction" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/nethruster/go-fraction" - // Used in Randomness Orb + // Used in Randomness Orb + "bytes" + "encoding/binary" "math/rand" - "bytes" - "encoding/binary" ) - type StructCache struct { - StructId string - K *Keeper - Ctx context.Context - - Ready bool + StructId string + K *Keeper + Ctx context.Context - AnyChange bool + Ready bool - StructureLoaded bool - StructureChanged bool - Structure types.Struct + AnyChange bool - StructTypeLoaded bool - StructType *types.StructType + StructureLoaded bool + StructureChanged bool + Structure types.Struct - OwnerLoaded bool - OwnerChanged bool - Owner *PlayerCache + StructTypeLoaded bool + StructType *types.StructType - FleetLoaded bool - FleetChanged bool - Fleet *FleetCache + OwnerLoaded bool + OwnerChanged bool + Owner *PlayerCache - PlanetLoaded bool - PlanetChanged bool - Planet *PlanetCache + FleetLoaded bool + FleetChanged bool + Fleet *FleetCache - DefendersLoaded bool - Defenders []*StructCache + PlanetLoaded bool + PlanetChanged bool + Planet *PlanetCache - HealthAttributeId string - HealthLoaded bool - HealthChanged bool - Health uint64 + DefendersLoaded bool + Defenders []*StructCache - StatusAttributeId string - StatusLoaded bool - StatusChanged bool - Status types.StructState + HealthAttributeId string + HealthLoaded bool + HealthChanged bool + Health uint64 - BlockStartBuildAttributeId string - BlockStartBuildLoaded bool - BlockStartBuildChanged bool - BlockStartBuild uint64 + StatusAttributeId string + StatusLoaded bool + StatusChanged bool + Status types.StructState - BlockStartOreMineAttributeId string - BlockStartOreMineLoaded bool - BlockStartOreMineChanged bool - BlockStartOreMine uint64 + BlockStartBuildAttributeId string + BlockStartBuildLoaded bool + BlockStartBuildChanged bool + BlockStartBuild uint64 - BlockStartOreRefineAttributeId string - BlockStartOreRefineLoaded bool - BlockStartOreRefineChanged bool - BlockStartOreRefine uint64 + BlockStartOreMineAttributeId string + BlockStartOreMineLoaded bool + BlockStartOreMineChanged bool + BlockStartOreMine uint64 - ProtectedStructIndexAttributeId string - ProtectedStructIndexLoaded bool - ProtectedStructIndexChanged bool - ProtectedStructIndex uint64 + BlockStartOreRefineAttributeId string + BlockStartOreRefineLoaded bool + BlockStartOreRefineChanged bool + BlockStartOreRefine uint64 - Blocker bool - Defender bool + ProtectedStructIndexAttributeId string + ProtectedStructIndexLoaded bool + ProtectedStructIndexChanged bool + ProtectedStructIndex uint64 - // Event Tracking - EventAttackDetailLoaded bool - EventAttackDetail *types.EventAttackDetail + Blocker bool + Defender bool - EventAttackShotDetailLoaded bool - EventAttackShotDetail *types.EventAttackShotDetail + // Event Tracking + EventAttackDetailLoaded bool + EventAttackDetail *types.EventAttackDetail + EventAttackShotDetailLoaded bool + EventAttackShotDetail *types.EventAttackShotDetail } // Build this initial Struct Cache object // This does no validation on the provided structId -func (k *Keeper) GetStructCacheFromId(ctx context.Context, structId string) (StructCache) { - return StructCache{ - StructId: structId, - K: k, - Ctx: ctx, +func (k *Keeper) GetStructCacheFromId(ctx context.Context, structId string) StructCache { + return StructCache{ + StructId: structId, + K: k, + Ctx: ctx, - AnyChange: false, + AnyChange: false, - HealthAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_health, structId), - StatusAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_status, structId), + HealthAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_health, structId), + StatusAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_status, structId), - BlockStartBuildAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartBuild, structId), - BlockStartOreMineAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartOreMine, structId), - BlockStartOreRefineAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartOreRefine, structId), + BlockStartBuildAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartBuild, structId), + BlockStartOreMineAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartOreMine, structId), + BlockStartOreRefineAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartOreRefine, structId), - ProtectedStructIndexAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_protectedStructIndex, structId), - } + ProtectedStructIndexAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_protectedStructIndex, structId), + } } +func (k *Keeper) InitialCommandShipStruct(ctx context.Context, fleet *FleetCache) StructCache { -func (k *Keeper) InitialCommandShipStruct(ctx context.Context, fleet *FleetCache) (StructCache) { + structType, _ := k.GetStructType(ctx, types.CommandStructTypeId) - structType, _ := k.GetStructType(ctx, types.CommandStructTypeId) + structure := types.CreateBaseStruct(&structType, fleet.GetOwner().GetPrimaryAddress(), fleet.GetOwner().GetPlayerId(), structType.Category, types.Ambit_space) + structure.LocationId = fleet.GetFleetId() + structure = k.AppendStruct(ctx, structure) - structure := types.CreateBaseStruct(&structType, fleet.GetOwner().GetPrimaryAddress(), fleet.GetOwner().GetPlayerId(), structType.Category, types.Ambit_space) - structure.LocationId = fleet.GetFleetId() - structure = k.AppendStruct(ctx, structure) + fleet.GetOwner().BuildQuantityIncrement(structType.GetId()) - fleet.GetOwner().BuildQuantityIncrement(structType.GetId()) + var structStatus types.StructState + if fleet.GetOwner().CanSupportLoadAddition(structType.GetPassiveDraw()) { + fleet.GetOwner().StructsLoadIncrement(structType.GetPassiveDraw()) + structStatus = types.StructState(types.StructStateMaterialized | types.StructStateBuilt | types.StructStateOnline) + } else { + structStatus = types.StructState(types.StructStateMaterialized | types.StructStateBuilt) + } - var structStatus types.StructState - if fleet.GetOwner().CanSupportLoadAddition(structType.GetPassiveDraw()) { - fleet.GetOwner().StructsLoadIncrement(structType.GetPassiveDraw()) - structStatus = types.StructState(types.StructStateMaterialized | types.StructStateBuilt | types.StructStateOnline) - } else { - structStatus = types.StructState(types.StructStateMaterialized | types.StructStateBuilt ) - } + // Start to put the pieces together + structCache := StructCache{ + StructId: structure.Id, + K: k, + Ctx: ctx, - // Start to put the pieces together - structCache := StructCache{ - StructId: structure.Id, - K: k, - Ctx: ctx, + AnyChange: true, - AnyChange: true, + Structure: structure, + StructureChanged: false, + StructureLoaded: true, - Structure: structure, - StructureChanged: false, - StructureLoaded: true, + Owner: fleet.GetOwner(), + OwnerLoaded: true, - Owner: fleet.GetOwner(), - OwnerLoaded: true, + Fleet: fleet, + FleetLoaded: true, - Fleet: fleet, - FleetLoaded: true, + // Include the health value + HealthAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_health, structure.Id), + HealthChanged: true, + HealthLoaded: true, + Health: structType.GetMaxHealth(), - // Include the health value - HealthAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_health, structure.Id), - HealthChanged: true, - HealthLoaded: true, - Health: structType.GetMaxHealth(), + // Include the initial status value + StatusAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_status, structure.Id), + StatusChanged: true, + StatusLoaded: true, + Status: structStatus, + } - // Include the initial status value - StatusAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_status, structure.Id), - StatusChanged: true, - StatusLoaded: true, - Status: structStatus, - } - - return structCache + return structCache } - // Build this initial Struct Cache object // This does no validation on the provided structId func (k *Keeper) InitiateStruct(ctx context.Context, creatorAddress string, owner *PlayerCache, structType *types.StructType, ambit types.Ambit, slot uint64) (StructCache, error) { - structure := types.CreateBaseStruct(structType, creatorAddress, owner.GetPlayerId(), structType.Category, ambit) - - switch structType.Category { - case types.ObjectType_planet: - err := owner.GetPlanet().BuildInitiateReadiness(&structure, structType, ambit, slot) - if (err != nil) { - return StructCache{}, err - } - - structure.LocationId = owner.GetPlanetId() - structure.Slot = slot - case types.ObjectType_fleet: - err := owner.GetFleet().BuildInitiateReadiness(&structure, structType, ambit, slot) - if (err != nil) { - return StructCache{}, err - } - - if (structType.Type != types.CommandStruct) { - structure.Slot = slot - } - - structure.LocationId = owner.GetFleetId() - default: - return StructCache{}, types.NewStructBuildError(structType.GetId(), "", "", "type_unsupported") - } - - - // Append Struct - structure = k.AppendStruct(ctx, structure) - - - owner.StructsLoadIncrement(structType.GetBuildDraw()) - owner.BuildQuantityIncrement(structType.GetId()) - - - switch structType.Category { - case types.ObjectType_planet: - // Update the cross reference on the planet - k.logger.Info("Struct Set Slot", "slot", structure.Slot, "planetId", owner.GetPlanet().GetPlanetId()) - err := owner.GetPlanet().SetSlot(structure) - if (err != nil) { - return StructCache{}, err - } - - case types.ObjectType_fleet: - // Update the cross reference on the planet - if (structType.Type == types.CommandStruct) { - owner.GetFleet().SetCommandStruct(structure) - } else { - err := owner.GetFleet().SetSlot(structure) - if (err != nil) { - return StructCache{}, err - } - } - } - - - // Start to put the pieces together - structCache := StructCache{ - StructId: structure.Id, - K: k, - Ctx: ctx, - - AnyChange: true, - - Structure: structure, - StructureChanged: false, - StructureLoaded: true, - - Owner: owner, - OwnerLoaded: true, - - Planet: owner.GetPlanet(), - PlanetLoaded: true, - - Fleet: owner.GetFleet(), - FleetLoaded: true, - - // Include the health value - HealthAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_health, structure.Id), - HealthChanged: true, - HealthLoaded: true, - Health: structType.GetMaxHealth(), - - // Include the initial status value - StatusAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_status, structure.Id), - StatusChanged: true, - StatusLoaded: true, - Status: types.StructState(types.StructStateMaterialized), - - - // include the initial build block value - BlockStartBuildAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartBuild, structure.Id), - BlockStartOreMineAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartOreMine, structure.Id), - BlockStartOreRefineAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartOreRefine, structure.Id), - - ProtectedStructIndexAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_protectedStructIndex, structure.Id), - } - - return structCache, nil -} - - -func (cache *StructCache) Commit() () { - cache.AnyChange = false - - cache.K.logger.Info("Updating Struct From Cache","structId",cache.StructId) - - if (cache.StructureChanged) { - cache.K.SetStruct(cache.Ctx, cache.Structure) - cache.StructureChanged = false - } - - if (cache.Owner != nil && cache.GetOwner().IsChanged()) { - cache.GetOwner().Commit() - } - - if (cache.Planet != nil && cache.GetPlanet().IsChanged()) { - cache.GetPlanet().Commit() - } - - if (cache.Fleet != nil && cache.GetFleet().IsChanged()) { - cache.GetFleet().Commit() - } - - if (cache.HealthChanged) { - cache.K.SetStructAttribute(cache.Ctx, cache.HealthAttributeId, cache.Health) - cache.HealthChanged = false - } - - if (cache.StatusChanged) { - cache.K.SetStructAttribute(cache.Ctx, cache.StatusAttributeId, uint64(cache.Status)) - cache.StatusChanged = false - } - - if (cache.BlockStartBuildChanged) { - cache.K.SetStructAttribute(cache.Ctx, cache.BlockStartBuildAttributeId, cache.BlockStartBuild) - cache.BlockStartBuildChanged = false - } - if (cache.BlockStartOreMineChanged) { - cache.K.SetStructAttribute(cache.Ctx, cache.BlockStartOreMineAttributeId, cache.BlockStartOreMine) - cache.BlockStartOreMineChanged = false - } - if (cache.BlockStartOreRefineChanged) { - cache.K.SetStructAttribute(cache.Ctx, cache.BlockStartOreRefineAttributeId, cache.BlockStartOreRefine) - cache.BlockStartOreRefineChanged = false - } - - if (cache.ProtectedStructIndexChanged) { - cache.K.SetStructAttribute(cache.Ctx, cache.ProtectedStructIndexAttributeId, cache.ProtectedStructIndex) - cache.ProtectedStructIndexChanged = false - } + structure := types.CreateBaseStruct(structType, creatorAddress, owner.GetPlayerId(), structType.Category, ambit) + + switch structType.Category { + case types.ObjectType_planet: + err := owner.GetPlanet().BuildInitiateReadiness(&structure, structType, ambit, slot) + if err != nil { + return StructCache{}, err + } + + structure.LocationId = owner.GetPlanetId() + structure.Slot = slot + case types.ObjectType_fleet: + err := owner.GetFleet().BuildInitiateReadiness(&structure, structType, ambit, slot) + if err != nil { + return StructCache{}, err + } + + if structType.Type != types.CommandStruct { + structure.Slot = slot + } + + structure.LocationId = owner.GetFleetId() + default: + return StructCache{}, types.NewStructBuildError(structType.GetId(), "", "", "type_unsupported") + } + + // Append Struct + structure = k.AppendStruct(ctx, structure) + + owner.StructsLoadIncrement(structType.GetBuildDraw()) + owner.BuildQuantityIncrement(structType.GetId()) + + switch structType.Category { + case types.ObjectType_planet: + // Update the cross reference on the planet + k.logger.Info("Struct Set Slot", "slot", structure.Slot, "planetId", owner.GetPlanet().GetPlanetId()) + err := owner.GetPlanet().SetSlot(structure) + if err != nil { + return StructCache{}, err + } + + case types.ObjectType_fleet: + // Update the cross reference on the planet + if structType.Type == types.CommandStruct { + owner.GetFleet().SetCommandStruct(structure) + } else { + err := owner.GetFleet().SetSlot(structure) + if err != nil { + return StructCache{}, err + } + } + } + + // Start to put the pieces together + structCache := StructCache{ + StructId: structure.Id, + K: k, + Ctx: ctx, + + AnyChange: true, + + Structure: structure, + StructureChanged: false, + StructureLoaded: true, + + Owner: owner, + OwnerLoaded: true, + + Planet: owner.GetPlanet(), + PlanetLoaded: true, + + Fleet: owner.GetFleet(), + FleetLoaded: true, + + // Include the health value + HealthAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_health, structure.Id), + HealthChanged: true, + HealthLoaded: true, + Health: structType.GetMaxHealth(), + + // Include the initial status value + StatusAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_status, structure.Id), + StatusChanged: true, + StatusLoaded: true, + Status: types.StructState(types.StructStateMaterialized), + + // include the initial build block value + BlockStartBuildAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartBuild, structure.Id), + BlockStartOreMineAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartOreMine, structure.Id), + BlockStartOreRefineAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_blockStartOreRefine, structure.Id), + + ProtectedStructIndexAttributeId: GetStructAttributeIDByObjectId(types.StructAttributeType_protectedStructIndex, structure.Id), + } + + return structCache, nil +} + +func (cache *StructCache) Commit() { + cache.AnyChange = false + + cache.K.logger.Info("Updating Struct From Cache", "structId", cache.StructId) + + if cache.StructureChanged { + cache.K.SetStruct(cache.Ctx, cache.Structure) + cache.StructureChanged = false + } + + if cache.Owner != nil && cache.GetOwner().IsChanged() { + cache.GetOwner().Commit() + } + + if cache.Planet != nil && cache.GetPlanet().IsChanged() { + cache.GetPlanet().Commit() + } + + if cache.Fleet != nil && cache.GetFleet().IsChanged() { + cache.GetFleet().Commit() + } + + if cache.HealthChanged { + cache.K.SetStructAttribute(cache.Ctx, cache.HealthAttributeId, cache.Health) + cache.HealthChanged = false + } + + if cache.StatusChanged { + cache.K.SetStructAttribute(cache.Ctx, cache.StatusAttributeId, uint64(cache.Status)) + cache.StatusChanged = false + } + + if cache.BlockStartBuildChanged { + cache.K.SetStructAttribute(cache.Ctx, cache.BlockStartBuildAttributeId, cache.BlockStartBuild) + cache.BlockStartBuildChanged = false + } + if cache.BlockStartOreMineChanged { + cache.K.SetStructAttribute(cache.Ctx, cache.BlockStartOreMineAttributeId, cache.BlockStartOreMine) + cache.BlockStartOreMineChanged = false + } + if cache.BlockStartOreRefineChanged { + cache.K.SetStructAttribute(cache.Ctx, cache.BlockStartOreRefineAttributeId, cache.BlockStartOreRefine) + cache.BlockStartOreRefineChanged = false + } + + if cache.ProtectedStructIndexChanged { + cache.K.SetStructAttribute(cache.Ctx, cache.ProtectedStructIndexAttributeId, cache.ProtectedStructIndex) + cache.ProtectedStructIndexChanged = false + } } func (cache *StructCache) IsChanged() bool { - return cache.AnyChange + return cache.AnyChange } func (cache *StructCache) ID() string { - return cache.StructId + return cache.StructId } func (cache *StructCache) Changed() { - cache.AnyChange = true + cache.AnyChange = true } /* Separate Loading functions for each of the underlying containers */ // Load the core Struct data -func (cache *StructCache) LoadStruct() (bool) { - cache.Structure, cache.StructureLoaded = cache.K.GetStruct(cache.Ctx, cache.StructId) - return cache.StructureLoaded +func (cache *StructCache) LoadStruct() bool { + cache.Structure, cache.StructureLoaded = cache.K.GetStruct(cache.Ctx, cache.StructId) + return cache.StructureLoaded } // Load the Struct Type data -func (cache *StructCache) LoadStructType() (bool) { - newStructType, newStructTypeFound := cache.K.GetStructType(cache.Ctx, cache.GetTypeId()) - cache.StructType = &newStructType - cache.StructTypeLoaded = newStructTypeFound - return cache.StructTypeLoaded +func (cache *StructCache) LoadStructType() bool { + newStructType, newStructTypeFound := cache.K.GetStructType(cache.Ctx, cache.GetTypeId()) + cache.StructType = &newStructType + cache.StructTypeLoaded = newStructTypeFound + return cache.StructTypeLoaded } // Load the Player data -func (cache *StructCache) LoadOwner() (bool) { - newOwner, _ := cache.K.GetPlayerCacheFromId(cache.Ctx, cache.GetOwnerId()) - cache.Owner = &newOwner - cache.OwnerLoaded = true - return cache.OwnerLoaded +func (cache *StructCache) LoadOwner() bool { + newOwner, _ := cache.K.GetPlayerCacheFromId(cache.Ctx, cache.GetOwnerId()) + cache.Owner = &newOwner + cache.OwnerLoaded = true + return cache.OwnerLoaded } // Load the Fleet data -func (cache *StructCache) LoadFleet() (bool) { - newFleet, _ := cache.K.GetFleetCacheFromId(cache.Ctx, cache.GetOwner().GetFleetId()) - cache.Fleet = &newFleet - cache.FleetLoaded = true - return cache.FleetLoaded +func (cache *StructCache) LoadFleet() bool { + newFleet, _ := cache.K.GetFleetCacheFromId(cache.Ctx, cache.GetOwner().GetFleetId()) + cache.Fleet = &newFleet + cache.FleetLoaded = true + return cache.FleetLoaded } // Load the Planet data -func (cache *StructCache) LoadPlanet() (bool) { - switch (cache.GetLocationType()) { - case types.ObjectType_planet: - newPlanet := cache.K.GetPlanetCacheFromId(cache.Ctx, cache.GetLocationId()) - cache.Planet = &newPlanet - cache.PlanetLoaded = true - case types.ObjectType_fleet: - if (cache.GetFleet().GetLocationType() == types.ObjectType_planet) { - newPlanet := cache.K.GetPlanetCacheFromId(cache.Ctx, cache.GetFleet().GetLocationId()) - cache.Planet = &newPlanet - cache.PlanetLoaded = true - } - } - return cache.PlanetLoaded +func (cache *StructCache) LoadPlanet() bool { + switch cache.GetLocationType() { + case types.ObjectType_planet: + newPlanet := cache.K.GetPlanetCacheFromId(cache.Ctx, cache.GetLocationId()) + cache.Planet = &newPlanet + cache.PlanetLoaded = true + case types.ObjectType_fleet: + if cache.GetFleet().GetLocationType() == types.ObjectType_planet { + newPlanet := cache.K.GetPlanetCacheFromId(cache.Ctx, cache.GetFleet().GetLocationId()) + cache.Planet = &newPlanet + cache.PlanetLoaded = true + } + } + return cache.PlanetLoaded } // Load the Defenders data -func (cache *StructCache) LoadDefenders() (bool) { - cache.Defenders = cache.K.GetAllStructCacheDefender(cache.Ctx, cache.GetStructId()) - cache.DefendersLoaded = true - return cache.DefendersLoaded +func (cache *StructCache) LoadDefenders() bool { + cache.Defenders = cache.K.GetAllStructCacheDefender(cache.Ctx, cache.GetStructId()) + cache.DefendersLoaded = true + return cache.DefendersLoaded } // Load the Health record func (cache *StructCache) LoadHealth() { - cache.Health = cache.K.GetStructAttribute(cache.Ctx, cache.HealthAttributeId) - cache.HealthLoaded = true + cache.Health = cache.K.GetStructAttribute(cache.Ctx, cache.HealthAttributeId) + cache.HealthLoaded = true } // Load the Struct Status record func (cache *StructCache) LoadStatus() { - cache.Status = types.StructState(cache.K.GetStructAttribute(cache.Ctx, cache.StatusAttributeId)) - cache.StatusLoaded = true + cache.Status = types.StructState(cache.K.GetStructAttribute(cache.Ctx, cache.StatusAttributeId)) + cache.StatusLoaded = true } // Load the Struct BlockStartBuild record func (cache *StructCache) LoadBlockStartBuild() { - cache.BlockStartBuild = cache.K.GetStructAttribute(cache.Ctx, cache.BlockStartBuildAttributeId) - cache.BlockStartBuildLoaded = true + cache.BlockStartBuild = cache.K.GetStructAttribute(cache.Ctx, cache.BlockStartBuildAttributeId) + cache.BlockStartBuildLoaded = true } // Load the Struct BlockStarOreMine record func (cache *StructCache) LoadBlockStartOreMine() { - cache.BlockStartOreMine = cache.K.GetStructAttribute(cache.Ctx, cache.BlockStartOreMineAttributeId) - cache.BlockStartOreMineLoaded = true + cache.BlockStartOreMine = cache.K.GetStructAttribute(cache.Ctx, cache.BlockStartOreMineAttributeId) + cache.BlockStartOreMineLoaded = true } // Load the Struct BlockStartOreRefine record func (cache *StructCache) LoadBlockStartOreRefine() { - cache.BlockStartOreRefine = cache.K.GetStructAttribute(cache.Ctx, cache.BlockStartOreRefineAttributeId) - cache.BlockStartOreRefineLoaded = true + cache.BlockStartOreRefine = cache.K.GetStructAttribute(cache.Ctx, cache.BlockStartOreRefineAttributeId) + cache.BlockStartOreRefineLoaded = true } // Load the Struct BlockStartOreRefine record func (cache *StructCache) LoadProtectedStructIndex() { - cache.ProtectedStructIndex = cache.K.GetStructAttribute(cache.Ctx, cache.ProtectedStructIndexAttributeId) - cache.ProtectedStructIndexLoaded = true + cache.ProtectedStructIndex = cache.K.GetStructAttribute(cache.Ctx, cache.ProtectedStructIndexAttributeId) + cache.ProtectedStructIndexLoaded = true } // Set the Owner data manually // Useful for loading multiple defenders func (cache *StructCache) ManualLoadOwner(owner *PlayerCache) { - cache.Owner = owner - cache.OwnerLoaded = true + cache.Owner = owner + cache.OwnerLoaded = true } func (cache *StructCache) ManualLoadPlanet(planet *PlanetCache) { - cache.Planet = planet - cache.PlanetLoaded = true + cache.Planet = planet + cache.PlanetLoaded = true } // Set the Event data manually // Used to manage the same event across objects func (cache *StructCache) ManualLoadEventAttackDetail(eventAttackDetail *types.EventAttackDetail) { - cache.EventAttackDetail = eventAttackDetail - cache.EventAttackDetailLoaded = true + cache.EventAttackDetail = eventAttackDetail + cache.EventAttackDetailLoaded = true } func (cache *StructCache) ManualLoadEventAttackShotDetail(eventAttackShotDetail *types.EventAttackShotDetail) { - cache.EventAttackShotDetail = eventAttackShotDetail - cache.EventAttackShotDetailLoaded = true + cache.EventAttackShotDetail = eventAttackShotDetail + cache.EventAttackShotDetailLoaded = true } - /* Getters * These will always perform a Load first on the appropriate data if it hasn't occurred yet. */ -func (cache *StructCache) GetStruct() (types.Struct) { if (!cache.StructureLoaded) { cache.LoadStruct() }; return cache.Structure } -func (cache *StructCache) GetStructId() (string) { return cache.StructId } - -func (cache *StructCache) GetHealth() (uint64) { if (!cache.HealthLoaded) { cache.LoadHealth() }; return cache.Health } -func (cache *StructCache) GetStatus() (types.StructState) { if (!cache.StatusLoaded) { cache.LoadStatus() }; return cache.Status } -func (cache *StructCache) GetBlockStartBuild() (uint64) { if (!cache.BlockStartBuildLoaded) { cache.LoadBlockStartBuild() }; return cache.BlockStartBuild } -func (cache *StructCache) GetBlockStartOreMine() (uint64) { if (!cache.BlockStartOreMineLoaded) { cache.LoadBlockStartOreMine() }; return cache.BlockStartOreMine } -func (cache *StructCache) GetBlockStartOreRefine() (uint64) { if (!cache.BlockStartOreRefineLoaded) { cache.LoadBlockStartOreRefine() }; return cache.BlockStartOreRefine } - -func (cache *StructCache) GetStructType() (*types.StructType) { if (!cache.StructTypeLoaded) { cache.LoadStructType() }; return cache.StructType } -func (cache *StructCache) GetTypeId() (uint64) { if (!cache.StructureLoaded) { cache.LoadStruct() }; return cache.Structure.Type } - -func (cache *StructCache) GetOwner() (*PlayerCache) { if (!cache.OwnerLoaded) { cache.LoadOwner() }; return cache.Owner } -func (cache *StructCache) GetOwnerId() (string) { if (!cache.StructureLoaded) { cache.LoadStruct() }; return cache.Structure.Owner } - -func (cache *StructCache) GetLocationId() (string) { if (!cache.StructureLoaded) { cache.LoadStruct() }; return cache.Structure.LocationId } -func (cache *StructCache) GetLocationType() (types.ObjectType) { if (!cache.StructureLoaded) { cache.LoadStruct() }; return cache.Structure.LocationType } -func (cache *StructCache) GetOperatingAmbit() (types.Ambit) { if (!cache.StructureLoaded) { cache.LoadStruct() }; return cache.Structure.OperatingAmbit } -func (cache *StructCache) GetSlot() (uint64) { if (!cache.StructureLoaded) { cache.LoadStruct() }; return cache.Structure.Slot } - - -func (cache *StructCache) GetPlanet() (*PlanetCache) { if (!cache.PlanetLoaded) { cache.LoadPlanet() }; return cache.Planet } -func (cache *StructCache) GetPlanetId() (string) { return cache.GetPlanet().GetPlanetId() } -func (cache *StructCache) GetFleet() (*FleetCache) { if (!cache.FleetLoaded) { cache.LoadFleet() }; return cache.Fleet } - -func (cache *StructCache) GetDefenders() ([]*StructCache) { if (!cache.DefendersLoaded) { cache.LoadDefenders() }; return cache.Defenders } - -func (cache *StructCache) GetEventAttackDetail() (*types.EventAttackDetail) { if (!cache.EventAttackDetailLoaded) { cache.EventAttackDetail = types.CreateEventAttackDetail(); cache.EventAttackDetailLoaded = true }; return cache.EventAttackDetail } -func (cache *StructCache) GetEventAttackShotDetail() (*types.EventAttackShotDetail) { if (!cache.EventAttackShotDetailLoaded) { cache.EventAttackShotDetail = types.CreateEventAttackShotDetail(cache.StructId); cache.EventAttackShotDetailLoaded = true }; return cache.EventAttackShotDetail } +func (cache *StructCache) GetStruct() types.Struct { + if !cache.StructureLoaded { + cache.LoadStruct() + } + return cache.Structure +} +func (cache *StructCache) GetStructId() string { return cache.StructId } + +func (cache *StructCache) GetHealth() uint64 { + if !cache.HealthLoaded { + cache.LoadHealth() + } + return cache.Health +} +func (cache *StructCache) GetStatus() types.StructState { + if !cache.StatusLoaded { + cache.LoadStatus() + } + return cache.Status +} +func (cache *StructCache) GetBlockStartBuild() uint64 { + if !cache.BlockStartBuildLoaded { + cache.LoadBlockStartBuild() + } + return cache.BlockStartBuild +} +func (cache *StructCache) GetBlockStartOreMine() uint64 { + if !cache.BlockStartOreMineLoaded { + cache.LoadBlockStartOreMine() + } + return cache.BlockStartOreMine +} +func (cache *StructCache) GetBlockStartOreRefine() uint64 { + if !cache.BlockStartOreRefineLoaded { + cache.LoadBlockStartOreRefine() + } + return cache.BlockStartOreRefine +} + +func (cache *StructCache) GetStructType() *types.StructType { + if !cache.StructTypeLoaded { + cache.LoadStructType() + } + return cache.StructType +} +func (cache *StructCache) GetTypeId() uint64 { + if !cache.StructureLoaded { + cache.LoadStruct() + } + return cache.Structure.Type +} + +func (cache *StructCache) GetOwner() *PlayerCache { + if !cache.OwnerLoaded { + cache.LoadOwner() + } + return cache.Owner +} +func (cache *StructCache) GetOwnerId() string { + if !cache.StructureLoaded { + cache.LoadStruct() + } + return cache.Structure.Owner +} + +func (cache *StructCache) GetLocationId() string { + if !cache.StructureLoaded { + cache.LoadStruct() + } + return cache.Structure.LocationId +} +func (cache *StructCache) GetLocationType() types.ObjectType { + if !cache.StructureLoaded { + cache.LoadStruct() + } + return cache.Structure.LocationType +} +func (cache *StructCache) GetOperatingAmbit() types.Ambit { + if !cache.StructureLoaded { + cache.LoadStruct() + } + return cache.Structure.OperatingAmbit +} +func (cache *StructCache) GetSlot() uint64 { + if !cache.StructureLoaded { + cache.LoadStruct() + } + return cache.Structure.Slot +} + +func (cache *StructCache) GetPlanet() *PlanetCache { + if !cache.PlanetLoaded { + cache.LoadPlanet() + } + return cache.Planet +} +func (cache *StructCache) GetPlanetId() string { return cache.GetPlanet().GetPlanetId() } +func (cache *StructCache) GetFleet() *FleetCache { + if !cache.FleetLoaded { + cache.LoadFleet() + } + return cache.Fleet +} + +func (cache *StructCache) GetDefenders() []*StructCache { + if !cache.DefendersLoaded { + cache.LoadDefenders() + } + return cache.Defenders +} + +func (cache *StructCache) GetEventAttackDetail() *types.EventAttackDetail { + if !cache.EventAttackDetailLoaded { + cache.EventAttackDetail = types.CreateEventAttackDetail() + cache.EventAttackDetailLoaded = true + } + return cache.EventAttackDetail +} +func (cache *StructCache) GetEventAttackShotDetail() *types.EventAttackShotDetail { + if !cache.EventAttackShotDetailLoaded { + cache.EventAttackShotDetail = types.CreateEventAttackShotDetail(cache.StructId) + cache.EventAttackShotDetailLoaded = true + } + return cache.EventAttackShotDetail +} /* Setters - SET DOES NOT COMMIT() * These will always perform a Load first on the appropriate data if it hasn't occurred yet. @@ -489,932 +574,938 @@ func (cache *StructCache) GetEventAttackShotDetail() (*types.EventAttackShotDeta // Set the Owner Id data func (cache *StructCache) SetOwnerId(owner string) { - if (!cache.StructureLoaded) { cache.LoadStruct() } + if !cache.StructureLoaded { + cache.LoadStruct() + } - cache.Structure.Owner = owner - cache.StructureChanged = true - cache.Changed() + cache.Structure.Owner = owner + cache.StructureChanged = true + cache.Changed() - // Player object might be stale now - cache.OwnerLoaded = false + // Player object might be stale now + cache.OwnerLoaded = false } func (cache *StructCache) ResetBlockStartOreMine() { - uctx := sdk.UnwrapSDKContext(cache.Ctx) - cache.BlockStartOreMine = uint64(uctx.BlockHeight()) - cache.BlockStartOreMineLoaded = true - cache.BlockStartOreMineChanged = true - cache.Changed() + uctx := sdk.UnwrapSDKContext(cache.Ctx) + cache.BlockStartOreMine = uint64(uctx.BlockHeight()) + cache.BlockStartOreMineLoaded = true + cache.BlockStartOreMineChanged = true + cache.Changed() } func (cache *StructCache) ResetBlockStartOreRefine() { - uctx := sdk.UnwrapSDKContext(cache.Ctx) - cache.BlockStartOreRefine = uint64(uctx.BlockHeight()) - cache.BlockStartOreRefineLoaded = true - cache.BlockStartOreRefineChanged = true - cache.Changed() + uctx := sdk.UnwrapSDKContext(cache.Ctx) + cache.BlockStartOreRefine = uint64(uctx.BlockHeight()) + cache.BlockStartOreRefineLoaded = true + cache.BlockStartOreRefineChanged = true + cache.Changed() } func (cache *StructCache) ClearBlockStartOreMine() { - cache.BlockStartOreMine = 0 - cache.BlockStartOreMineLoaded = true - cache.BlockStartOreMineChanged = true - cache.Changed() + cache.BlockStartOreMine = 0 + cache.BlockStartOreMineLoaded = true + cache.BlockStartOreMineChanged = true + cache.Changed() } func (cache *StructCache) ClearBlockStartOreRefine() { - cache.BlockStartOreRefine = 0 - cache.BlockStartOreRefineLoaded = true - cache.BlockStartOreRefineChanged = true - cache.Changed() + cache.BlockStartOreRefine = 0 + cache.BlockStartOreRefineLoaded = true + cache.BlockStartOreRefineChanged = true + cache.Changed() } -func (cache *StructCache) FlushEventAttackShotDetail() ( *types.EventAttackShotDetail) { - cache.EventAttackShotDetailLoaded = false - return cache.EventAttackShotDetail +func (cache *StructCache) FlushEventAttackShotDetail() *types.EventAttackShotDetail { + cache.EventAttackShotDetailLoaded = false + return cache.EventAttackShotDetail } - - /* Flag Commands for the Status field */ // Does the Struct exist in any State? // This is the most efficient check that a Struct exists func (cache *StructCache) IsMaterialized() bool { - return cache.GetStatus()&types.StructStateMaterialized != 0 + return cache.GetStatus()&types.StructStateMaterialized != 0 } func (cache *StructCache) IsBuilt() bool { - return cache.GetStatus()&types.StructStateBuilt != 0 + return cache.GetStatus()&types.StructStateBuilt != 0 } func (cache *StructCache) IsOnline() bool { - return cache.GetStatus()&types.StructStateOnline != 0 + return cache.GetStatus()&types.StructStateOnline != 0 } func (cache *StructCache) IsCommandable() bool { - if cache.GetStructType().Category == types.ObjectType_fleet { - if !cache.GetFleet().HasCommandStruct() { - return false - } + if cache.GetStructType().Category == types.ObjectType_fleet { + if !cache.GetFleet().HasCommandStruct() { + return false + } - if cache.GetFleet().GetCommandStruct().IsOffline() { - return false - } - } - return true + if cache.GetFleet().GetCommandStruct().IsOffline() { + return false + } + } + return true } func (cache *StructCache) IsOffline() bool { - return !cache.IsOnline() + return !cache.IsOnline() } func (cache *StructCache) IsHidden() bool { - return cache.GetStatus()&types.StructStateHidden != 0 + return cache.GetStatus()&types.StructStateHidden != 0 } func (cache *StructCache) StatusAddBuilt() { - cache.Status = cache.GetStatus() | types.StructStateBuilt - cache.StatusChanged = true - cache.Changed() + cache.Status = cache.GetStatus() | types.StructStateBuilt + cache.StatusChanged = true + cache.Changed() } func (cache *StructCache) StatusAddOnline() { - cache.Status = cache.GetStatus() | types.StructStateOnline - cache.StatusChanged = true - cache.Changed() + cache.Status = cache.GetStatus() | types.StructStateOnline + cache.StatusChanged = true + cache.Changed() } func (cache *StructCache) StatusAddHidden() { - cache.Status = cache.GetStatus() | types.StructStateHidden - cache.StatusChanged = true - cache.Changed() + cache.Status = cache.GetStatus() | types.StructStateHidden + cache.StatusChanged = true + cache.Changed() } func (cache *StructCache) StatusAddDestroyed() { - cache.Status = cache.GetStatus() | types.StructStateDestroyed - cache.StatusChanged = true - cache.Changed() + cache.Status = cache.GetStatus() | types.StructStateDestroyed + cache.StatusChanged = true + cache.Changed() } func (cache *StructCache) StatusRemoveHidden() { - if (cache.IsHidden()) { - cache.Status = cache.Status &^ types.StructStateHidden - cache.StatusChanged = true - cache.Changed() - } + if cache.IsHidden() { + cache.Status = cache.Status &^ types.StructStateHidden + cache.StatusChanged = true + cache.Changed() + } } func (cache *StructCache) StatusRemoveOnline() { - if (cache.IsOnline()) { - cache.Status = cache.Status &^ types.StructStateOnline - cache.StatusChanged = true - cache.Changed() - } + if cache.IsOnline() { + cache.Status = cache.Status &^ types.StructStateOnline + cache.StatusChanged = true + cache.Changed() + } } - - func (cache *StructCache) IsDestroyed() bool { - return cache.GetStatus()&types.StructStateDestroyed != 0 + return cache.GetStatus()&types.StructStateDestroyed != 0 } func (cache *StructCache) GridStatusAddReady() { - cache.K.SetGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_ready, cache.StructId), 1) + cache.K.SetGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_ready, cache.StructId), 1) } func (cache *StructCache) GridStatusRemoveReady() { - cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_ready, cache.StructId )) + cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_ready, cache.StructId)) } - func (cache *StructCache) ActivationReadinessCheck() (err error) { - // Check Struct is Built - if !cache.IsBuilt(){ - return types.NewStructStateError(cache.StructId, "building", "built", "activation") - } + // Check Struct is Built + if !cache.IsBuilt() { + return types.NewStructStateError(cache.StructId, "building", "built", "activation") + } - // Check Struct is Online - if cache.IsOnline(){ - return types.NewStructStateError(cache.StructId, "online", "offline", "activation") - } + // Check Struct is Online + if cache.IsOnline() { + return types.NewStructStateError(cache.StructId, "online", "offline", "activation") + } - // Check Player is Online - if cache.GetOwner().IsOffline() { - return types.NewPlayerPowerError(cache.GetOwnerId(), "offline") - } + // Check Player is Online + if cache.GetOwner().IsOffline() { + return types.NewPlayerPowerError(cache.GetOwnerId(), "offline") + } - // Check Player Capacity - if (!cache.GetOwner().CanSupportLoadAddition(cache.GetStructType().GetPassiveDraw())) { - return types.NewPlayerPowerError(cache.GetOwnerId(), "capacity_exceeded").WithCapacity(cache.GetStructType().GetPassiveDraw(), cache.GetOwner().GetAvailableCapacity()) - } + // Check Player Capacity + if !cache.GetOwner().CanSupportLoadAddition(cache.GetStructType().GetPassiveDraw()) { + return types.NewPlayerPowerError(cache.GetOwnerId(), "capacity_exceeded").WithCapacity(cache.GetStructType().GetPassiveDraw(), cache.GetOwner().GetAvailableCapacity()) + } - return + return } func (cache *StructCache) GoOnline() { - // Add to the players struct load - cache.GetOwner().StructsLoadIncrement(cache.GetStructType().GetPassiveDraw()) - //k.SetGridAttributeIncrement(ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_structsLoad, sudoPlayer.Id), structType.PassiveDraw) - - // Turn on the mining systems - if (cache.GetStructType().HasOreMiningSystem()) { - cache.ResetBlockStartOreMine() - } - - // Turn on the refinery - if (cache.GetStructType().HasOreRefiningSystem()) { - cache.ResetBlockStartOreRefine() - } - - // Raise the planetary shields - if (cache.GetStructType().HasOreReserveDefensesSystem()) { - cache.GetPlanet().PlanetaryShieldIncrement(cache.GetStructType().GetPlanetaryShieldContribution()) - } - - // TODO - // This is the least generic/abstracted part of the code for now. - // Prob need to clean this up down the road - if (cache.GetStructType().HasPlanetaryDefensesSystem()) { - switch (cache.GetStructType().GetPlanetaryDefenses()) { - case types.TechPlanetaryDefenses_defensiveCannon: - cache.GetPlanet().DefensiveCannonQuantityIncrement(1) - case types.TechPlanetaryDefenses_lowOrbitBallisticInterceptorNetwork: - cache.GetPlanet().LowOrbitBallisticsInterceptorNetworkQuantityIncrement(1) - } - } - - - if (cache.GetStructType().HasPowerGenerationSystem()) { - cache.GridStatusAddReady() - } - - // Set the struct status flag to include built - cache.StatusAddOnline() + // Add to the players struct load + cache.GetOwner().StructsLoadIncrement(cache.GetStructType().GetPassiveDraw()) + //k.SetGridAttributeIncrement(ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_structsLoad, sudoPlayer.Id), structType.PassiveDraw) + + // Turn on the mining systems + if cache.GetStructType().HasOreMiningSystem() { + cache.ResetBlockStartOreMine() + } + + // Turn on the refinery + if cache.GetStructType().HasOreRefiningSystem() { + cache.ResetBlockStartOreRefine() + } + + // Raise the planetary shields + if cache.GetStructType().HasOreReserveDefensesSystem() { + cache.GetPlanet().PlanetaryShieldIncrement(cache.GetStructType().GetPlanetaryShieldContribution()) + } + + // TODO + // This is the least generic/abstracted part of the code for now. + // Prob need to clean this up down the road + if cache.GetStructType().HasPlanetaryDefensesSystem() { + switch cache.GetStructType().GetPlanetaryDefenses() { + case types.TechPlanetaryDefenses_defensiveCannon: + cache.GetPlanet().DefensiveCannonQuantityIncrement(1) + case types.TechPlanetaryDefenses_lowOrbitBallisticInterceptorNetwork: + cache.GetPlanet().LowOrbitBallisticsInterceptorNetworkQuantityIncrement(1) + } + } + + if cache.GetStructType().HasPowerGenerationSystem() { + cache.GridStatusAddReady() + } + + // Set the struct status flag to include built + cache.StatusAddOnline() } - func (cache *StructCache) GoOffline() { - // Add to the players struct load - cache.GetOwner().StructsLoadDecrement(cache.GetStructType().GetPassiveDraw()) - //k.SetGridAttributeIncrement(ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_structsLoad, sudoPlayer.Id), structType.PassiveDraw) - - // Turn off the mining systems - if (cache.GetStructType().HasOreMiningSystem()) { - cache.ClearBlockStartOreMine() - } - - // Turn off the refinery - if (cache.GetStructType().HasOreRefiningSystem()) { - cache.ClearBlockStartOreRefine() - } - - // Lower the planetary shields - if (cache.GetStructType().HasOreReserveDefensesSystem()) { - cache.GetPlanet().PlanetaryShieldDecrement(cache.GetStructType().GetPlanetaryShieldContribution()) - } - - // TODO - // This is the least generic/abstracted part of the code for now. - // Prob need to clean this up down the road - if (cache.GetStructType().HasPlanetaryDefensesSystem()) { - switch (cache.GetStructType().GetPlanetaryDefenses()) { - case types.TechPlanetaryDefenses_defensiveCannon: - cache.GetPlanet().DefensiveCannonQuantityDecrement(1) - case types.TechPlanetaryDefenses_lowOrbitBallisticInterceptorNetwork: - cache.GetPlanet().LowOrbitBallisticsInterceptorNetworkQuantityDecrement(1) - } - } - - if (cache.GetStructType().HasPowerGenerationSystem()) { - cache.GridStatusRemoveReady() - - // Remove all allocations - allocations := cache.K.GetAllAllocationBySourceIndex(cache.Ctx, cache.StructId) - cache.K.DestroyAllAllocations(cache.Ctx, allocations) - } - - // Set the struct status flag to include built - cache.StatusRemoveOnline() -} - -func (cache *StructCache) ReadinessCheck() (error) { - if (cache.IsOffline()) { - return types.NewStructStateError(cache.StructId, "offline", "online", "readiness_check") - } else { - if (cache.GetOwner().IsOffline()) { - return types.NewPlayerPowerError(cache.GetOwnerId(), "offline") - } - } - - cache.Ready = true - return nil + // Add to the players struct load + cache.GetOwner().StructsLoadDecrement(cache.GetStructType().GetPassiveDraw()) + //k.SetGridAttributeIncrement(ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_structsLoad, sudoPlayer.Id), structType.PassiveDraw) + + // Turn off the mining systems + if cache.GetStructType().HasOreMiningSystem() { + cache.ClearBlockStartOreMine() + } + + // Turn off the refinery + if cache.GetStructType().HasOreRefiningSystem() { + cache.ClearBlockStartOreRefine() + } + + // Lower the planetary shields + if cache.GetStructType().HasOreReserveDefensesSystem() { + cache.GetPlanet().PlanetaryShieldDecrement(cache.GetStructType().GetPlanetaryShieldContribution()) + } + + // TODO + // This is the least generic/abstracted part of the code for now. + // Prob need to clean this up down the road + if cache.GetStructType().HasPlanetaryDefensesSystem() { + switch cache.GetStructType().GetPlanetaryDefenses() { + case types.TechPlanetaryDefenses_defensiveCannon: + cache.GetPlanet().DefensiveCannonQuantityDecrement(1) + case types.TechPlanetaryDefenses_lowOrbitBallisticInterceptorNetwork: + cache.GetPlanet().LowOrbitBallisticsInterceptorNetworkQuantityDecrement(1) + } + } + + if cache.GetStructType().HasPowerGenerationSystem() { + cache.GridStatusRemoveReady() + + // Remove all allocations + allocations := cache.K.GetAllAllocationBySourceIndex(cache.Ctx, cache.StructId) + cache.K.DestroyAllAllocations(cache.Ctx, allocations) + } + + // Set the struct status flag to include built + cache.StatusRemoveOnline() +} + +func (cache *StructCache) ReadinessCheck() error { + if cache.IsOffline() { + return types.NewStructStateError(cache.StructId, "offline", "online", "readiness_check") + } else { + if cache.GetOwner().IsOffline() { + return types.NewPlayerPowerError(cache.GetOwnerId(), "offline") + } + } + + cache.Ready = true + return nil } /* Rough but Consistent Randomness Check */ func (cache *StructCache) IsSuccessful(successRate fraction.Fraction) bool { - uctx := sdk.UnwrapSDKContext(cache.Ctx) + uctx := sdk.UnwrapSDKContext(cache.Ctx) var seed int64 buf := bytes.NewBuffer(uctx.BlockHeader().AppHash) binary.Read(buf, binary.BigEndian, &seed) - seedOffset := seed + cache.GetOwner().GetNextNonce() + seedOffset := seed + cache.GetOwner().GetNextNonce() randomnessOrb := rand.New(rand.NewSource(seedOffset)) min := 1 max := int(successRate.Denominator()) - randomnessCheck := (int(successRate.Numerator()) <= (randomnessOrb.Intn(max-min+1) + min)) - cache.K.logger.Info("Struct Success-Check Randomness", "structId", cache.GetStructId(), "seed", seed, "offset", cache.GetOwner().GetNextNonce(), "seedOffset", seedOffset, "numerator", successRate.Numerator(), "denominator", successRate.Denominator(), "success", randomnessCheck) + randomnessCheck := (int(successRate.Numerator()) <= (randomnessOrb.Intn(max-min+1) + min)) + cache.K.logger.Info("Struct Success-Check Randomness", "structId", cache.GetStructId(), "seed", seed, "offset", cache.GetOwner().GetNextNonce(), "seedOffset", seedOffset, "numerator", successRate.Numerator(), "denominator", successRate.Denominator(), "success", randomnessCheck) return randomnessCheck } /* Permissions */ -func (cache *StructCache) CanBePlayedBy(address string) (error) { +func (cache *StructCache) CanBePlayedBy(address string) error { - // Make sure the address calling this has Play permissions - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionPlay)) { - return types.NewPermissionError("address", address, "", "", uint64(types.PermissionPlay), "play") - } + // Make sure the address calling this has Play permissions + if !cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionPlay) { + return types.NewPermissionError("address", address, "", "", uint64(types.PermissionPlay), "play") + } - callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) - if (err != nil) { - return err - } - if (callingPlayer.PlayerId != cache.GetOwnerId()) { - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionPlay)) { - return types.NewPermissionError("player", callingPlayer.PlayerId, "player", cache.GetOwnerId(), uint64(types.PermissionPlay), "play") - } - } + callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) + if err != nil { + return err + } + if callingPlayer.PlayerId != cache.GetOwnerId() { + if !cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionPlay) { + return types.NewPermissionError("player", callingPlayer.PlayerId, "player", cache.GetOwnerId(), uint64(types.PermissionPlay), "play") + } + } - return nil + return nil } func (cache *StructCache) CanBeHashedBy(address string) (string, bool, error) { - owner := true - // Make sure the address calling this has Hash permissions - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionHash)) { - return "", owner, types.NewPermissionError("address", address, "", "", uint64(types.PermissionHash), "hash") - } - - callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) - if (err != nil) { - return "", owner, err - } - if (callingPlayer.PlayerId != cache.GetOwnerId()) { - owner = false - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionHash)) { - return callingPlayer.PlayerId, owner, types.NewPermissionError("player", callingPlayer.PlayerId, "player", cache.GetOwnerId(), uint64(types.PermissionHash), "hash") - } - } - - return cache.GetOwnerId(), owner, nil + owner := true + // Make sure the address calling this has Hash permissions + if !cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(address), types.PermissionHash) { + return "", owner, types.NewPermissionError("address", address, "", "", uint64(types.PermissionHash), "hash") + } + + callingPlayer, err := cache.K.GetPlayerCacheFromAddress(cache.Ctx, address) + if err != nil { + return "", owner, err + } + if callingPlayer.PlayerId != cache.GetOwnerId() { + owner = false + if !cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetOwnerId(), callingPlayer.PlayerId), types.PermissionHash) { + return callingPlayer.PlayerId, owner, types.NewPermissionError("player", callingPlayer.PlayerId, "player", cache.GetOwnerId(), uint64(types.PermissionHash), "hash") + } + } + + return cache.GetOwnerId(), owner, nil } /* Game Functions */ -func (cache *StructCache) CanOreMinePlanet() (error) { +func (cache *StructCache) CanOreMinePlanet() error { - if (!cache.GetStructType().HasOreMiningSystem()) { - return types.NewStructCapabilityError(cache.StructId, "mining") - } + if !cache.GetStructType().HasOreMiningSystem() { + return types.NewStructCapabilityError(cache.StructId, "mining") + } - if (cache.GetBlockStartOreMine() == 0) { - return types.NewStructStateError(cache.StructId, "not_mining", "mining", "ore_mine") - } + if cache.GetBlockStartOreMine() == 0 { + return types.NewStructStateError(cache.StructId, "not_mining", "mining", "ore_mine") + } - if (cache.GetPlanet().IsComplete()) { - return types.NewPlanetStateError(cache.GetPlanet().GetPlanetId(), "complete", "mine") - } + if cache.GetPlanet().IsComplete() { + return types.NewPlanetStateError(cache.GetPlanet().GetPlanetId(), "complete", "mine") + } - if (cache.GetPlanet().IsEmptyOfOre()) { - return types.NewPlanetStateError(cache.GetPlanet().GetPlanetId(), "empty", "mine") - } + if cache.GetPlanet().IsEmptyOfOre() { + return types.NewPlanetStateError(cache.GetPlanet().GetPlanetId(), "empty", "mine") + } - return nil + return nil } func (cache *StructCache) OreMinePlanet() { - cache.GetOwner().StoredOreIncrement(1) - cache.GetPlanet().BuriedOreDecrement(1) + cache.GetOwner().StoredOreIncrement(1) + cache.GetPlanet().BuriedOreDecrement(1) - cache.ResetBlockStartOreMine() + cache.ResetBlockStartOreMine() } +func (cache *StructCache) CanOreRefine() error { -func (cache *StructCache) CanOreRefine() (error) { - - if (!cache.GetStructType().HasOreRefiningSystem()) { - return types.NewStructCapabilityError(cache.StructId, "refining") - } + if !cache.GetStructType().HasOreRefiningSystem() { + return types.NewStructCapabilityError(cache.StructId, "refining") + } - if (cache.GetBlockStartOreRefine() == 0) { - return types.NewStructStateError(cache.StructId, "not_refining", "refining", "ore_refine") - } + if cache.GetBlockStartOreRefine() == 0 { + return types.NewStructStateError(cache.StructId, "not_refining", "refining", "ore_refine") + } - if (!cache.GetOwner().HasStoredOre()) { - return types.NewPlayerAffordabilityError(cache.GetOwner().PlayerId, "refine", "ore") - } + if !cache.GetOwner().HasStoredOre() { + return types.NewPlayerAffordabilityError(cache.GetOwner().PlayerId, "refine", "ore") + } - return nil + return nil } func (cache *StructCache) OreRefine() { - cache.GetOwner().StoredOreDecrement(1) - cache.GetOwner().DepositRefinedAlpha() + cache.GetOwner().StoredOreDecrement(1) + cache.GetOwner().DepositRefinedAlpha() - cache.ResetBlockStartOreRefine() + cache.ResetBlockStartOreRefine() } func (cache *StructCache) CanAttack(targetStruct *StructCache, weaponSystem types.TechWeaponSystem) (err error) { - if (targetStruct.IsDestroyed()) { - err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "destroyed") - } else { - if (!cache.GetStructType().CanTargetAmbit(weaponSystem, cache.GetOperatingAmbit(), targetStruct.GetOperatingAmbit())) { - err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "out_of_range").WithAmbits(cache.GetOperatingAmbit().String(), targetStruct.GetOperatingAmbit().String()) - } else { - // Not MVP CanBlockTargeting always returns false - if ((!cache.GetStructType().GetWeaponBlockable(weaponSystem)) && (targetStruct.GetStructType().CanBlockTargeting())) { - err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "blocked") - } else { - if (targetStruct.IsHidden() && (targetStruct.GetOperatingAmbit() != cache.GetOperatingAmbit())) { - err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "hidden") - } - } - } - } - - // Now that the inexpensive checks are done, lets go deeper - if (err == nil) { - switch (cache.GetLocationType()) { - case types.ObjectType_planet: - if (cache.GetPlanet().GetLocationListStart() == targetStruct.GetLocationId()) { - // The enemy fleet is here - } else { - err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") - } - - case types.ObjectType_fleet: - // Is the Fleet at home? - if cache.GetFleet().IsOnStation() { - // If the Fleet is On Station, ensure the enemy is reachable - if cache.GetPlanet().GetLocationListStart() == targetStruct.GetLocationId() { - // The Fleet is on station, and the enemy is reachable - // Proceed with the intended action for the Fleet attacking the target - } else { - err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") - } - // Or is the Fleet out raiding another planet? - } else { - // If the Fleet is away, first check if the target is on the same planet - if cache.GetFleet().GetLocationListForward() == "" && cache.GetPlanetId() == targetStruct.GetPlanetId() { - // Target has reached the planetary raid - // Proceed with the intended action for the Fleet attacking the target - // Otherwise check if the target is adjacent (either forward or backward) - } else if cache.GetFleet().GetLocationListForward() == targetStruct.GetLocationId() || cache.GetFleet().GetLocationListBackward() == targetStruct.GetLocationId() { - // The target is to either side of the Fleet - // Proceed with the intended action for the Fleet attacking the target - } else { - err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") - } - } - default: - err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") - } - } - return + if targetStruct.IsDestroyed() { + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "destroyed") + } else { + if !cache.GetStructType().CanTargetAmbit(weaponSystem, cache.GetOperatingAmbit(), targetStruct.GetOperatingAmbit()) { + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "out_of_range").WithAmbits(cache.GetOperatingAmbit().String(), targetStruct.GetOperatingAmbit().String()) + } else { + // Not MVP CanBlockTargeting always returns false + if (!cache.GetStructType().GetWeaponBlockable(weaponSystem)) && (targetStruct.GetStructType().CanBlockTargeting()) { + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "blocked") + } else { + if targetStruct.IsHidden() && (targetStruct.GetOperatingAmbit() != cache.GetOperatingAmbit()) { + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "hidden") + } + } + } + } + + // Now that the inexpensive checks are done, lets go deeper + if err == nil { + switch cache.GetLocationType() { + case types.ObjectType_planet: + if cache.GetPlanet().GetLocationListStart() == targetStruct.GetLocationId() { + // The enemy fleet is here + } else { + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") + } + + case types.ObjectType_fleet: + // Is the Fleet at home? + if cache.GetFleet().IsOnStation() { + // If the Fleet is On Station, ensure the enemy is reachable + if cache.GetPlanet().GetLocationListStart() == targetStruct.GetLocationId() { + // The Fleet is on station, and the enemy is reachable + // Proceed with the intended action for the Fleet attacking the target + } else { + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") + } + // Or is the Fleet out raiding another planet? + } else { + // If the Fleet is away, first check if the target is on the same planet + if cache.GetFleet().GetLocationListForward() == "" && cache.GetPlanetId() == targetStruct.GetPlanetId() { + // Target has reached the planetary raid + // Proceed with the intended action for the Fleet attacking the target + // Otherwise check if the target is adjacent (either forward or backward) + } else if cache.GetFleet().GetLocationListForward() == targetStruct.GetLocationId() || cache.GetFleet().GetLocationListBackward() == targetStruct.GetLocationId() { + // The target is to either side of the Fleet + // Proceed with the intended action for the Fleet attacking the target + } else { + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") + } + } + default: + err = types.NewCombatTargetingError(cache.StructId, targetStruct.StructId, weaponSystem.String(), "unreachable") + } + } + return } - func (cache *StructCache) CanCounterAttack(attackerStruct *StructCache) (err error) { - if (attackerStruct.IsDestroyed() || cache.IsDestroyed()) { - cache.K.logger.Info("Counter Struct or Attacker Struct is already destroyed", "counterStruct", cache.StructId, "target", attackerStruct.StructId) - err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "destroyed").AsCounter() - } else { - if (!cache.GetStructType().CanCounterTargetAmbit(cache.GetOperatingAmbit(), attackerStruct.GetOperatingAmbit())) { - cache.K.logger.Info("Attacker Struct cannot be hit from Counter Struct using this weapon system", "target", attackerStruct.StructId, "counterStruct", cache.StructId) - err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "out_of_range").AsCounter().WithAmbits(cache.GetOperatingAmbit().String(), attackerStruct.GetOperatingAmbit().String()) - } - } - - // Now that the inexpensive checks are done, lets go deeper - if (err == nil) { - switch (cache.GetLocationType()) { - case types.ObjectType_planet: - if (cache.GetPlanet().GetLocationListStart() == attackerStruct.GetLocationId()) { - // The enemy fleet is here - } else { - err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() - } - - case types.ObjectType_fleet: - // Is the Fleet at home? - if cache.GetFleet().IsOnStation() { - // If the Fleet is On Station, ensure the enemy is reachable - if cache.GetPlanet().GetLocationListStart() == attackerStruct.GetLocationId() { - // The Fleet is on station, and the enemy is reachable - // Proceed with the intended action for the Fleet attacking the target - } else { - err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() - } - // Or is the Fleet out raiding another planet? - } else { - // If the Fleet is away, first check if the target is on the same planet - if cache.GetFleet().GetLocationListForward() == "" && cache.GetPlanetId() == attackerStruct.GetPlanetId() { - // Target has reached the planetary raid - // Proceed with the intended action for the Fleet attacking the target - // Otherwise check if the target is adjacent (either forward or backward) - } else if cache.GetFleet().GetLocationListForward() == attackerStruct.GetLocationId() || cache.GetFleet().GetLocationListBackward() == attackerStruct.GetLocationId() { - // The target is to either side of the Fleet - // Proceed with the intended action for the Fleet attacking the target - } else { - err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() - } - } - default: - err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() - } - } - return + if attackerStruct.IsDestroyed() || cache.IsDestroyed() { + cache.K.logger.Info("Counter Struct or Attacker Struct is already destroyed", "counterStruct", cache.StructId, "target", attackerStruct.StructId) + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "destroyed").AsCounter() + } else { + if !cache.GetStructType().CanCounterTargetAmbit(cache.GetOperatingAmbit(), attackerStruct.GetOperatingAmbit()) { + cache.K.logger.Info("Attacker Struct cannot be hit from Counter Struct using this weapon system", "target", attackerStruct.StructId, "counterStruct", cache.StructId) + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "out_of_range").AsCounter().WithAmbits(cache.GetOperatingAmbit().String(), attackerStruct.GetOperatingAmbit().String()) + } + } + + // Now that the inexpensive checks are done, lets go deeper + if err == nil { + switch cache.GetLocationType() { + case types.ObjectType_planet: + if cache.GetPlanet().GetLocationListStart() == attackerStruct.GetLocationId() { + // The enemy fleet is here + } else { + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() + } + + case types.ObjectType_fleet: + // Is the Fleet at home? + if cache.GetFleet().IsOnStation() { + // If the Fleet is On Station, ensure the enemy is reachable + if cache.GetPlanet().GetLocationListStart() == attackerStruct.GetLocationId() { + // The Fleet is on station, and the enemy is reachable + // Proceed with the intended action for the Fleet attacking the target + } else { + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() + } + // Or is the Fleet out raiding another planet? + } else { + // If the Fleet is away, first check if the target is on the same planet + if cache.GetFleet().GetLocationListForward() == "" && cache.GetPlanetId() == attackerStruct.GetPlanetId() { + // Target has reached the planetary raid + // Proceed with the intended action for the Fleet attacking the target + // Otherwise check if the target is adjacent (either forward or backward) + } else if cache.GetFleet().GetLocationListForward() == attackerStruct.GetLocationId() || cache.GetFleet().GetLocationListBackward() == attackerStruct.GetLocationId() { + // The target is to either side of the Fleet + // Proceed with the intended action for the Fleet attacking the target + } else { + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() + } + } + default: + err = types.NewCombatTargetingError(cache.StructId, attackerStruct.StructId, "counter", "unreachable").AsCounter() + } + } + return } - func (cache *StructCache) CanEvade(attackerStruct *StructCache, weaponSystem types.TechWeaponSystem) (canEvade bool) { - var successRate fraction.Fraction - switch attackerStruct.GetStructType().GetWeaponControl(weaponSystem) { - case types.TechWeaponControl_guided: - successRate = cache.GetStructType().GetGuidedDefensiveSuccessRate() - case types.TechWeaponControl_unguided: - successRate = cache.GetStructType().GetUnguidedDefensiveSuccessRate() - } + var successRate fraction.Fraction + switch attackerStruct.GetStructType().GetWeaponControl(weaponSystem) { + case types.TechWeaponControl_guided: + successRate = cache.GetStructType().GetGuidedDefensiveSuccessRate() + case types.TechWeaponControl_unguided: + successRate = cache.GetStructType().GetUnguidedDefensiveSuccessRate() + } - if (successRate.Numerator() != int64(0)) { - canEvade = cache.IsSuccessful(successRate) - } + if successRate.Numerator() != int64(0) { + canEvade = cache.IsSuccessful(successRate) + } - cache.GetEventAttackShotDetail().SetEvade(canEvade, cache.GetStructType().GetUnitDefenses()) + cache.GetEventAttackShotDetail().SetEvade(canEvade, cache.GetStructType().GetUnitDefenses()) - // If there has already been an successful evade then don't both evading harder - if (!canEvade) { - // Check for Planetary Defenses - Low Orbit Ballistic Interceptor Network - if (attackerStruct.GetLocationType() == types.ObjectType_fleet) { + // If there has already been an successful evade then don't both evading harder + if !canEvade { + // Check for Planetary Defenses - Low Orbit Ballistic Interceptor Network + if attackerStruct.GetLocationType() == types.ObjectType_fleet { - // Is the Struct at home? Either via their fleet or on the planet directly - if (cache.GetPlanet().GetOwnerId() == cache.GetOwnerId()) { + // Is the Struct at home? Either via their fleet or on the planet directly + if cache.GetPlanet().GetOwnerId() == cache.GetOwnerId() { - // Grab the success rate for the interceptor network. If it returns an error, then the planet doesn't have it - successRate, successRateError := cache.GetPlanet().GetLowOrbitBallisticsInterceptorNetworkSuccessRate() - if (successRateError == nil) { + // Grab the success rate for the interceptor network. If it returns an error, then the planet doesn't have it + successRate, successRateError := cache.GetPlanet().GetLowOrbitBallisticsInterceptorNetworkSuccessRate() + if successRateError == nil { - // Only effective is the Struct is in the Air or Space - if ((attackerStruct.GetOperatingAmbit() == types.Ambit_air) || (attackerStruct.GetOperatingAmbit() == types.Ambit_space)) { + // Only effective is the Struct is in the Air or Space + if (attackerStruct.GetOperatingAmbit() == types.Ambit_air) || (attackerStruct.GetOperatingAmbit() == types.Ambit_space) { - // Only effective if the target is in the Water or on Land - if ((cache.GetOperatingAmbit() == types.Ambit_water) || (cache.GetOperatingAmbit() == types.Ambit_land)) { - canEvade = cache.IsSuccessful(successRate) - cache.GetEventAttackShotDetail().SetEvadeByPlanetaryDefenses(canEvade, types.TechPlanetaryDefenses_lowOrbitBallisticInterceptorNetwork) - } - } - } - } - } - } + // Only effective if the target is in the Water or on Land + if (cache.GetOperatingAmbit() == types.Ambit_water) || (cache.GetOperatingAmbit() == types.Ambit_land) { + canEvade = cache.IsSuccessful(successRate) + cache.GetEventAttackShotDetail().SetEvadeByPlanetaryDefenses(canEvade, types.TechPlanetaryDefenses_lowOrbitBallisticInterceptorNetwork) + } + } + } + } + } + } - return + return } func (cache *StructCache) TakeAttackDamage(attackingStruct *StructCache, weaponSystem types.TechWeaponSystem) (damage uint64) { - if (cache.IsDestroyed()) { return 0 } + if cache.IsDestroyed() { + return 0 + } - for shot := uint64(0); shot < attackingStruct.GetStructType().GetWeaponShots(weaponSystem); shot++ { - if (attackingStruct.IsSuccessful(attackingStruct.GetStructType().GetWeaponShotSuccessRate(weaponSystem))) { - damage = damage + attackingStruct.GetStructType().GetWeaponDamage(weaponSystem) - } - } + // Ensure health is loaded before any modifications + _ = cache.GetHealth() - cache.GetEventAttackShotDetail().SetDamageDealt(damage) + for shot := uint64(0); shot < attackingStruct.GetStructType().GetWeaponShots(weaponSystem); shot++ { + if attackingStruct.IsSuccessful(attackingStruct.GetStructType().GetWeaponShotSuccessRate(weaponSystem)) { + damage = damage + attackingStruct.GetStructType().GetWeaponDamage(weaponSystem) + } + } - if (damage != 0) { - damageReduction := cache.GetStructType().GetAttackReduction() + cache.GetEventAttackShotDetail().SetDamageDealt(damage) - if (damageReduction > 0) { - cache.GetEventAttackShotDetail().SetDamageReduction(damageReduction, cache.GetStructType().GetUnitDefenses()) - } + if damage != 0 { + damageReduction := cache.GetStructType().GetAttackReduction() + if damageReduction > 0 { + cache.GetEventAttackShotDetail().SetDamageReduction(damageReduction, cache.GetStructType().GetUnitDefenses()) + } - if (damageReduction > damage) { - damage = 0 - } else { - damage = damage - damageReduction - } - } + if damageReduction > damage { + damage = 0 + } else { + damage = damage - damageReduction + } + } - cache.GetEventAttackShotDetail().SetDamage(damage) + cache.GetEventAttackShotDetail().SetDamage(damage) - if (damage != 0) { + if damage != 0 { - if (damage > cache.GetHealth()) { - cache.Health = 0 - cache.HealthChanged = true - cache.Changed() + if damage > cache.GetHealth() { + cache.Health = 0 + cache.HealthChanged = true + cache.Changed() - } else { - cache.Health = cache.GetHealth() - damage - cache.HealthChanged = true - cache.Changed() - } + } else { + cache.Health = cache.GetHealth() - damage + cache.HealthChanged = true + cache.Changed() + } - if (cache.Health == 0) { - if (cache.Blocker) { - cache.GetEventAttackShotDetail().SetBlockerDestroyed() - } else { - cache.GetEventAttackShotDetail().SetTargetDestroyed() - } + if cache.Health == 0 { + if cache.Blocker { + cache.GetEventAttackShotDetail().SetBlockerDestroyed() + } else { + cache.GetEventAttackShotDetail().SetTargetDestroyed() + } - // destruction damage from the grave - if (cache.GetStructType().GetPostDestructionDamage() > 0) { - attackingStruct.TakePostDestructionDamage(cache) - } + // destruction damage from the grave + if cache.GetStructType().GetPostDestructionDamage() > 0 { + attackingStruct.TakePostDestructionDamage(cache) + } - cache.DestroyAndCommit() - } + cache.DestroyAndCommit() + } - } + } - return -} + // Always set final health (uses same Blocker pattern as SetBlockerDestroyed/SetTargetDestroyed) + if cache.Blocker { + cache.GetEventAttackShotDetail().SetBlockerHealthAfter(cache.Health) + } else { + cache.GetEventAttackShotDetail().SetTargetHealthAfter(cache.Health) + } + return +} func (cache *StructCache) TakeRecoilDamage(weaponSystem types.TechWeaponSystem) (damage uint64) { - if (cache.IsDestroyed()) { return 0 } + if cache.IsDestroyed() { + return 0 + } - damage = cache.GetStructType().GetWeaponRecoilDamage(weaponSystem) + damage = cache.GetStructType().GetWeaponRecoilDamage(weaponSystem) - if (damage != 0) { + if damage != 0 { - if (damage > cache.GetHealth()) { - cache.Health = 0 - cache.HealthChanged = true - cache.Changed() + if damage > cache.GetHealth() { + cache.Health = 0 + cache.HealthChanged = true + cache.Changed() - } else { - cache.Health = cache.GetHealth() - damage - cache.HealthChanged = true - cache.Changed() - } + } else { + cache.Health = cache.GetHealth() - damage + cache.HealthChanged = true + cache.Changed() + } - if (cache.Health == 0) { - cache.DestroyAndCommit() - } - } + if cache.Health == 0 { + cache.DestroyAndCommit() + } + } - cache.GetEventAttackDetail().SetRecoilDamage(damage, cache.IsDestroyed()) - return + cache.GetEventAttackDetail().SetRecoilDamage(damage, cache.IsDestroyed()) + return } - func (cache *StructCache) TakePostDestructionDamage(attackingStruct *StructCache) (damage uint64) { - if (cache.IsDestroyed()) { return 0 } + if cache.IsDestroyed() { + return 0 + } - damage = cache.GetStructType().GetPostDestructionDamage() + damage = cache.GetStructType().GetPostDestructionDamage() - if (damage != 0) { + if damage != 0 { - if (damage > cache.GetHealth()) { - cache.Health = 0 - cache.HealthChanged = true - cache.Changed() + if damage > cache.GetHealth() { + cache.Health = 0 + cache.HealthChanged = true + cache.Changed() - } else { - cache.Health = cache.GetHealth() - damage - cache.HealthChanged = true - cache.Changed() - } + } else { + cache.Health = cache.GetHealth() - damage + cache.HealthChanged = true + cache.Changed() + } - if (cache.Health == 0) { - cache.DestroyAndCommit() - } + if cache.Health == 0 { + cache.DestroyAndCommit() + } - } + } - cache.GetEventAttackShotDetail().SetPostDestructionDamage(damage, cache.IsDestroyed(), attackingStruct.GetStructType().GetPassiveWeaponry()) + cache.GetEventAttackShotDetail().SetPostDestructionDamage(damage, cache.IsDestroyed(), attackingStruct.GetStructType().GetPassiveWeaponry()) - return + return } - - func (cache *StructCache) TakeCounterAttackDamage(counterStruct *StructCache) (damage uint64) { - if (cache.IsDestroyed()) { return 0 } + if cache.IsDestroyed() { + return 0 + } - damage = counterStruct.GetStructType().GetCounterAttackDamage(cache.GetOperatingAmbit() == counterStruct.GetOperatingAmbit()) - cache.K.logger.Info("Struct Counter-Attack","damage", damage, "counterAttacker", counterStruct.GetStructId(), "target", cache.GetStructId()) + damage = counterStruct.GetStructType().GetCounterAttackDamage(cache.GetOperatingAmbit() == counterStruct.GetOperatingAmbit()) + cache.K.logger.Info("Struct Counter-Attack", "damage", damage, "counterAttacker", counterStruct.GetStructId(), "target", cache.GetStructId()) - if (damage != 0) { + if damage != 0 { - if (damage > cache.GetHealth()) { - cache.Health = 0 - cache.HealthChanged = true - cache.Changed() + if damage > cache.GetHealth() { + cache.Health = 0 + cache.HealthChanged = true + cache.Changed() - } else { - cache.Health = cache.GetHealth() - damage - cache.HealthChanged = true - cache.Changed() - } + } else { + cache.Health = cache.GetHealth() - damage + cache.HealthChanged = true + cache.Changed() + } - if (cache.Health == 0) { - // destruction damage from the grave - cache.K.logger.Info("Struct Destroyed During Counter-Attack", "counterAttacker", counterStruct.GetStructId(), "target", cache.GetStructId()) - if (cache.GetStructType().GetPostDestructionDamage() > 0) { - counterStruct.TakePostDestructionDamage(cache) - } - cache.DestroyAndCommit() - } + if cache.Health == 0 { + // destruction damage from the grave + cache.K.logger.Info("Struct Destroyed During Counter-Attack", "counterAttacker", counterStruct.GetStructId(), "target", cache.GetStructId()) + if cache.GetStructType().GetPostDestructionDamage() > 0 { + counterStruct.TakePostDestructionDamage(cache) + } + cache.DestroyAndCommit() + } - } + } - if (counterStruct.Defender) { - cache.K.logger.Info("Generating a Defender Counter-Attack Record for the event") - cache.GetEventAttackShotDetail().AppendDefenderCounter(counterStruct.StructId, damage, cache.IsDestroyed(), counterStruct.GetTypeId(), counterStruct.GetLocationType(), counterStruct.GetLocationId(), counterStruct.GetOperatingAmbit(), counterStruct.GetSlot()) - } else { - cache.K.logger.Info("Generating a Target Counter-Attack Record for the event") - cache.GetEventAttackShotDetail().AppendTargetCounter(damage, cache.IsDestroyed(), counterStruct.GetStructType().GetPassiveWeaponry()) - } + if counterStruct.Defender { + cache.K.logger.Info("Generating a Defender Counter-Attack Record for the event") + cache.GetEventAttackShotDetail().AppendDefenderCounter(counterStruct.StructId, damage, cache.IsDestroyed(), counterStruct.GetTypeId(), counterStruct.GetLocationType(), counterStruct.GetLocationId(), counterStruct.GetOperatingAmbit(), counterStruct.GetSlot()) + } else { + cache.K.logger.Info("Generating a Target Counter-Attack Record for the event") + cache.GetEventAttackShotDetail().AppendTargetCounter(damage, cache.IsDestroyed(), counterStruct.GetStructType().GetPassiveWeaponry()) + } - return + return } +func (cache *StructCache) TakePlanetaryDefenseCanonDamage(damage uint64) uint64 { + if cache.IsDestroyed() { + return 0 + } -func (cache *StructCache) TakePlanetaryDefenseCanonDamage(damage uint64) (uint64) { - if (cache.IsDestroyed()) { return 0 } - - if (damage != 0) { + if damage != 0 { - if (damage > cache.GetHealth()) { - damage = cache.GetHealth() - cache.Health = 0 - cache.HealthChanged = true - cache.Changed() + if damage > cache.GetHealth() { + damage = cache.GetHealth() + cache.Health = 0 + cache.HealthChanged = true + cache.Changed() - } else { - cache.Health = cache.GetHealth() - damage - cache.HealthChanged = true - cache.Changed() - } + } else { + cache.Health = cache.GetHealth() - damage + cache.HealthChanged = true + cache.Changed() + } - if (cache.Health == 0) { - cache.DestroyAndCommit() - } - } + if cache.Health == 0 { + cache.DestroyAndCommit() + } + } - cache.GetEventAttackDetail().SetPlanetaryDefenseCannonDamage(damage, cache.IsDestroyed()) + cache.GetEventAttackDetail().SetPlanetaryDefenseCannonDamage(damage, cache.IsDestroyed()) - return damage + return damage } - func (cache *StructCache) AttemptBlock(attacker *StructCache, weaponSystem types.TechWeaponSystem, target *StructCache) (blocked bool) { - if (cache.Ready && attacker.Ready) { - if (cache.GetOperatingAmbit() == target.GetOperatingAmbit()) { - blocked = true - cache.Blocker = true - cache.GetEventAttackShotDetail().SetBlocker(cache.StructId, cache.GetTypeId(), cache.GetLocationType(), cache.GetLocationId(), cache.GetOperatingAmbit(), cache.GetSlot()) - cache.TakeAttackDamage(attacker, weaponSystem) - } - } - return + if cache.Ready && attacker.Ready { + if cache.GetOperatingAmbit() == target.GetOperatingAmbit() { + blocked = true + cache.Blocker = true + cache.GetEventAttackShotDetail().SetBlocker(cache.StructId, cache.GetTypeId(), cache.GetLocationType(), cache.GetLocationId(), cache.GetOperatingAmbit(), cache.GetSlot()) + cache.TakeAttackDamage(attacker, weaponSystem) + } + } + return } func (cache *StructCache) DestroyAndCommit() { - // Go Offline - // Most of the destruction process is handled during this sub-process - cache.GoOffline() - - // Drop the Struct Type count for the owner - cache.K.SetStructAttributeDecrement(cache.Ctx, GetStructAttributeIDByObjectIdAndSubIndex(types.StructAttributeType_typeCount, cache.GetOwnerId(), cache.GetStructType().GetId()),1) - - // Don't clear these now, clear them on sweeps? - // "health": StructAttributeType_health, - // "status": StructAttributeType_status, - - // It's possible the build was never complete, so clear out this attribute to be safe - cache.K.ClearStructAttribute(cache.Ctx, cache.BlockStartBuildAttributeId) - - // Destroy mining systems - if (cache.GetStructType().HasOreMiningSystem()) { - cache.K.ClearStructAttribute(cache.Ctx, cache.BlockStartOreMineAttributeId) - } - - // Turn off the refinery - if (cache.GetStructType().HasOreRefiningSystem()) { - cache.K.ClearStructAttribute(cache.Ctx, cache.BlockStartOreRefineAttributeId) - } - - // Clear Defensive Relationships - cache.K.DestroyStructDefender(cache.Ctx, cache.GetStructId()) + // Go Offline + // Most of the destruction process is handled during this sub-process + cache.GoOffline() - // TODO clean this up to be more function based.. but it's fine - if (cache.GetStructType().HasPowerGenerationSystem()) { - // Clear out infusions - cache.K.DestroyAllInfusions(cache.Ctx, cache.K.GetAllInfusionsByDestination(cache.Ctx, cache.StructId)) + // Drop the Struct Type count for the owner + cache.K.SetStructAttributeDecrement(cache.Ctx, GetStructAttributeIDByObjectIdAndSubIndex(types.StructAttributeType_typeCount, cache.GetOwnerId(), cache.GetStructType().GetId()), 1) - // Clear out all remaining allocations - // clearing out all infusions should automatically clear allocations too, - // but some allocations, such as automated ones may still exist - cache.K.DestroyAllAllocations(cache.Ctx, cache.K.GetAllAllocationBySourceIndex(cache.Ctx, cache.StructId)) + // Don't clear these now, clear them on sweeps? + // "health": StructAttributeType_health, + // "status": StructAttributeType_status, - // Clear Load - cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_load, cache.StructId )) - - // Clear Capacity - cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_capacity, cache.StructId )) - - // Clear Fuel - cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_fuel, cache.StructId )) + // It's possible the build was never complete, so clear out this attribute to be safe + cache.K.ClearStructAttribute(cache.Ctx, cache.BlockStartBuildAttributeId) - // Clear Power - cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_power, cache.StructId )) + // Destroy mining systems + if cache.GetStructType().HasOreMiningSystem() { + cache.K.ClearStructAttribute(cache.Ctx, cache.BlockStartOreMineAttributeId) + } - // Clear Allocation Pointer Start + End - cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_allocationPointerStart, cache.StructId )) - cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_allocationPointerEnd, cache.StructId )) - - } - - // Clear Permissions - // This only clears permissions for the current owner, which is likely a problem in the future. - permissionId := GetObjectPermissionIDBytes(cache.StructId, cache.GetOwnerId()) - cache.K.PermissionClearAll(cache.Ctx, permissionId) - - // We're not going to remove it from the location yet, that happens during sweeps + // Turn off the refinery + if cache.GetStructType().HasOreRefiningSystem() { + cache.K.ClearStructAttribute(cache.Ctx, cache.BlockStartOreRefineAttributeId) + } - // Set to Destroyed - cache.StatusAddDestroyed() - - // Might need to do this manually so it doesn't undo some of the above... - //cache.Commit() - if (cache.StructureChanged) { - cache.K.SetStruct(cache.Ctx, cache.Structure) - cache.StructureChanged = false - } - - if (cache.HealthChanged) { - cache.K.SetStructAttribute(cache.Ctx, cache.HealthAttributeId, cache.Health) - cache.HealthChanged = false - } - - if (cache.StatusChanged) { - cache.K.SetStructAttribute(cache.Ctx, cache.StatusAttributeId, uint64(cache.Status)) - cache.StatusChanged = false - } - - - // Can the Struct be a catalyst for raid-end - // cache.GetFleet().Defeat() - // Check for raid win conditions - if (cache.CanTriggerRaidDefeatByDestruction()) { - cache.GetFleet().Defeat() - cache.FleetChanged = true - } - - cache.K.AppendStructDestructionQueue(cache.Ctx, cache.StructId) - - cache.Commit() -} - - -func (cache *StructCache) CanTriggerRaidDefeatByDestruction() (bool) { - if (!cache.GetStructType().GetTriggerRaidDefeatByDestruction()) { return false } - - // Make sure the ship isn't at home - // This win condition only works to defeat the attacking fleet - if (cache.GetPlanet().GetOwnerId() != cache.GetOwnerId()) { - return true - } - return false -} - -func (cache *StructCache) AttemptMove(destinationType types.ObjectType, ambit types.Ambit, slot uint64) (error) { - if (!cache.StructureLoaded) { cache.LoadStruct() } - - if cache.IsOffline() { - return types.NewStructStateError(cache.StructId, "offline", "online", "move") - } - - switch destinationType { - case types.ObjectType_planet: - err := cache.GetOwner().GetPlanet().MoveReadiness(cache, ambit, slot) - if (err != nil) { - return err - } - case types.ObjectType_fleet: - err := cache.GetOwner().GetFleet().MoveReadiness(cache, ambit, slot) - if (err != nil) { - return err - } - default: - return types.NewStructBuildError(cache.GetStructType().GetId(), destinationType.String(), "", "type_unsupported") - } - - switch (cache.Structure.LocationType) { - case types.ObjectType_planet: - cache.GetOwner().GetPlanet().ClearSlot(cache.Structure.OperatingAmbit, cache.Structure.Slot) - cache.GetOwner().Changed() - case types.ObjectType_fleet: - if (cache.GetStructType().Type != types.CommandStruct) { - cache.GetOwner().GetFleet().ClearSlot(cache.Structure.OperatingAmbit, cache.Structure.Slot) - cache.GetOwner().Changed() - } - } - - switch destinationType { - case types.ObjectType_planet: - - cache.Structure.LocationId = cache.GetOwner().GetPlanetId() - cache.Structure.LocationType = destinationType - cache.Structure.OperatingAmbit = ambit - - // Update the cross reference on the planet - err := cache.GetOwner().GetPlanet().SetSlot(cache.Structure) - if (err != nil) { - return err - } - cache.GetOwner().Changed() - - case types.ObjectType_fleet: - - // Update the cross reference on the planet - if (cache.GetStructType().Type == types.CommandStruct) { - cache.Structure.OperatingAmbit = ambit - } else { - - cache.Structure.LocationId = cache.GetOwner().GetFleetId() - cache.Structure.LocationType = destinationType - cache.Structure.OperatingAmbit = ambit - cache.Structure.Slot = slot - - - err := cache.GetOwner().GetFleet().SetSlot(cache.Structure) - if (err != nil) { - return err - } - cache.GetOwner().Changed() - } - - cache.StructureChanged = true - } - - cache.Changed() - return nil + // Clear Defensive Relationships + cache.K.DestroyStructDefender(cache.Ctx, cache.GetStructId()) + + // TODO clean this up to be more function based.. but it's fine + if cache.GetStructType().HasPowerGenerationSystem() { + // Clear out infusions + cache.K.DestroyAllInfusions(cache.Ctx, cache.K.GetAllInfusionsByDestination(cache.Ctx, cache.StructId)) + + // Clear out all remaining allocations + // clearing out all infusions should automatically clear allocations too, + // but some allocations, such as automated ones may still exist + cache.K.DestroyAllAllocations(cache.Ctx, cache.K.GetAllAllocationBySourceIndex(cache.Ctx, cache.StructId)) + + // Clear Load + cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_load, cache.StructId)) + + // Clear Capacity + cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_capacity, cache.StructId)) + + // Clear Fuel + cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_fuel, cache.StructId)) + + // Clear Power + cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_power, cache.StructId)) + + // Clear Allocation Pointer Start + End + cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_allocationPointerStart, cache.StructId)) + cache.K.ClearGridAttribute(cache.Ctx, GetGridAttributeIDByObjectId(types.GridAttributeType_allocationPointerEnd, cache.StructId)) + + } + + // Clear Permissions + // This only clears permissions for the current owner, which is likely a problem in the future. + permissionId := GetObjectPermissionIDBytes(cache.StructId, cache.GetOwnerId()) + cache.K.PermissionClearAll(cache.Ctx, permissionId) + + // We're not going to remove it from the location yet, that happens during sweeps + + // Set to Destroyed + cache.StatusAddDestroyed() + + // Might need to do this manually so it doesn't undo some of the above... + //cache.Commit() + if cache.StructureChanged { + cache.K.SetStruct(cache.Ctx, cache.Structure) + cache.StructureChanged = false + } + + if cache.HealthChanged { + cache.K.SetStructAttribute(cache.Ctx, cache.HealthAttributeId, cache.Health) + cache.HealthChanged = false + } + + if cache.StatusChanged { + cache.K.SetStructAttribute(cache.Ctx, cache.StatusAttributeId, uint64(cache.Status)) + cache.StatusChanged = false + } + + // Can the Struct be a catalyst for raid-end + // cache.GetFleet().Defeat() + // Check for raid win conditions + if cache.CanTriggerRaidDefeatByDestruction() { + cache.GetFleet().Defeat() + cache.FleetChanged = true + } + + cache.K.AppendStructDestructionQueue(cache.Ctx, cache.StructId) + + cache.Commit() +} + +func (cache *StructCache) CanTriggerRaidDefeatByDestruction() bool { + if !cache.GetStructType().GetTriggerRaidDefeatByDestruction() { + return false + } + + // Make sure the ship isn't at home + // This win condition only works to defeat the attacking fleet + if cache.GetPlanet().GetOwnerId() != cache.GetOwnerId() { + return true + } + return false +} + +func (cache *StructCache) AttemptMove(destinationType types.ObjectType, ambit types.Ambit, slot uint64) error { + if !cache.StructureLoaded { + cache.LoadStruct() + } + + if cache.IsOffline() { + return types.NewStructStateError(cache.StructId, "offline", "online", "move") + } + + switch destinationType { + case types.ObjectType_planet: + err := cache.GetOwner().GetPlanet().MoveReadiness(cache, ambit, slot) + if err != nil { + return err + } + case types.ObjectType_fleet: + err := cache.GetOwner().GetFleet().MoveReadiness(cache, ambit, slot) + if err != nil { + return err + } + default: + return types.NewStructBuildError(cache.GetStructType().GetId(), destinationType.String(), "", "type_unsupported") + } + + switch cache.Structure.LocationType { + case types.ObjectType_planet: + cache.GetOwner().GetPlanet().ClearSlot(cache.Structure.OperatingAmbit, cache.Structure.Slot) + cache.GetOwner().Changed() + case types.ObjectType_fleet: + if cache.GetStructType().Type != types.CommandStruct { + cache.GetOwner().GetFleet().ClearSlot(cache.Structure.OperatingAmbit, cache.Structure.Slot) + cache.GetOwner().Changed() + } + } + + switch destinationType { + case types.ObjectType_planet: + + cache.Structure.LocationId = cache.GetOwner().GetPlanetId() + cache.Structure.LocationType = destinationType + cache.Structure.OperatingAmbit = ambit + + // Update the cross reference on the planet + err := cache.GetOwner().GetPlanet().SetSlot(cache.Structure) + if err != nil { + return err + } + cache.GetOwner().Changed() + + case types.ObjectType_fleet: + + // Update the cross reference on the planet + if cache.GetStructType().Type == types.CommandStruct { + cache.Structure.OperatingAmbit = ambit + } else { + + cache.Structure.LocationId = cache.GetOwner().GetFleetId() + cache.Structure.LocationType = destinationType + cache.Structure.OperatingAmbit = ambit + cache.Structure.Slot = slot + + err := cache.GetOwner().GetFleet().SetSlot(cache.Structure) + if err != nil { + return err + } + cache.GetOwner().Changed() + } + + cache.StructureChanged = true + } + + cache.Changed() + return nil } diff --git a/x/structs/types/event_attack_detail.go b/x/structs/types/event_attack_detail.go index 08623bc..a223ec6 100644 --- a/x/structs/types/event_attack_detail.go +++ b/x/structs/types/event_attack_detail.go @@ -6,137 +6,146 @@ import ( "fmt" ) - -func CreateEventAttackDetail() (*EventAttackDetail) { - return &EventAttackDetail{ } +func CreateEventAttackDetail() *EventAttackDetail { + return &EventAttackDetail{} } +func (eventAttackDetail *EventAttackDetail) SetBaseDetails(attackerPlayerId string, attackerStructId string, attackerStructType uint64, attackerStructLocationType ObjectType, attackerStructLocationId string, attackerStructOperatingAmbit Ambit, attackerStructSlot uint64, weaponSystem TechWeaponSystem, weaponControl TechWeaponControl, activeWeaponry TechActiveWeaponry) { + eventAttackDetail.AttackerPlayerId = attackerPlayerId + eventAttackDetail.AttackerStructId = attackerStructId + eventAttackDetail.AttackerStructType = attackerStructType + eventAttackDetail.AttackerStructLocationType = attackerStructLocationType + eventAttackDetail.AttackerStructLocationId = attackerStructLocationId + eventAttackDetail.AttackerStructOperatingAmbit = attackerStructOperatingAmbit + eventAttackDetail.AttackerStructSlot = attackerStructSlot -func (eventAttackDetail *EventAttackDetail) SetBaseDetails(attackerPlayerId string, attackerStructId string, attackerStructType uint64, attackerStructLocationType ObjectType, attackerStructLocationId string, attackerStructOperatingAmbit Ambit, attackerStructSlot uint64, weaponSystem TechWeaponSystem, weaponControl TechWeaponControl, activeWeaponry TechActiveWeaponry) { - - eventAttackDetail.AttackerPlayerId = attackerPlayerId - eventAttackDetail.AttackerStructId = attackerStructId - eventAttackDetail.AttackerStructType = attackerStructType - eventAttackDetail.AttackerStructLocationType = attackerStructLocationType - eventAttackDetail.AttackerStructLocationId = attackerStructLocationId - eventAttackDetail.AttackerStructOperatingAmbit = attackerStructOperatingAmbit - eventAttackDetail.AttackerStructSlot = attackerStructSlot - - eventAttackDetail.WeaponSystem = weaponSystem - eventAttackDetail.WeaponControl = weaponControl - eventAttackDetail.ActiveWeaponry = activeWeaponry + eventAttackDetail.WeaponSystem = weaponSystem + eventAttackDetail.WeaponControl = weaponControl + eventAttackDetail.ActiveWeaponry = activeWeaponry } func (eventAttackDetail *EventAttackDetail) SetTargetPlayerId(targetPlayerId string) { - eventAttackDetail.TargetPlayerId = targetPlayerId + eventAttackDetail.TargetPlayerId = targetPlayerId } func (eventAttackDetail *EventAttackDetail) SetRecoilDamage(recoilDamage uint64, recoilDamageDestroyedAttacker bool) { - eventAttackDetail.RecoilDamageToAttacker = true - eventAttackDetail.RecoilDamage = recoilDamage - eventAttackDetail.RecoilDamageDestroyedAttacker = recoilDamageDestroyedAttacker + eventAttackDetail.RecoilDamageToAttacker = true + eventAttackDetail.RecoilDamage = recoilDamage + eventAttackDetail.RecoilDamageDestroyedAttacker = recoilDamageDestroyedAttacker } func (eventAttackDetail *EventAttackDetail) SetPlanetaryDefenseCannonDamage(planetaryDefenseCannonDamage uint64, planetaryDefenseCannonDamageDestroyedAttacker bool) { - eventAttackDetail.PlanetaryDefenseCannonDamageToAttacker = true - eventAttackDetail.PlanetaryDefenseCannonDamage = planetaryDefenseCannonDamage - eventAttackDetail.PlanetaryDefenseCannonDamageDestroyedAttacker = planetaryDefenseCannonDamageDestroyedAttacker + eventAttackDetail.PlanetaryDefenseCannonDamageToAttacker = true + eventAttackDetail.PlanetaryDefenseCannonDamage = planetaryDefenseCannonDamage + eventAttackDetail.PlanetaryDefenseCannonDamageDestroyedAttacker = planetaryDefenseCannonDamageDestroyedAttacker } +func (eventAttackDetail *EventAttackDetail) SetAttackerHealthAfter(attackerHealthAfter uint64) { + eventAttackDetail.AttackerHealthAfter = attackerHealthAfter +} func (eventAttackDetail *EventAttackDetail) AppendShot(eventAttackShotDetail *EventAttackShotDetail) { - eventAttackDetail.EventAttackShotDetail = append(eventAttackDetail.EventAttackShotDetail, eventAttackShotDetail) + eventAttackDetail.EventAttackShotDetail = append(eventAttackDetail.EventAttackShotDetail, eventAttackShotDetail) } - /* Sub Event - Attack Shots */ -func CreateEventAttackShotDetail(targetStructId string) (*EventAttackShotDetail) { - return &EventAttackShotDetail{ - TargetStructId: targetStructId, - EventAttackDefenderCounterDetail: []*EventAttackDefenderCounterDetail{}, - } +func CreateEventAttackShotDetail(targetStructId string) *EventAttackShotDetail { + return &EventAttackShotDetail{ + TargetStructId: targetStructId, + EventAttackDefenderCounterDetail: []*EventAttackDefenderCounterDetail{}, + } } -func (eventAttackShotDetail *EventAttackShotDetail) SetTargetDetails(targetStructId string, targetStructType uint64, targetStructLocationType ObjectType, targetStructLocationId string, targetStructOperatingAmbit Ambit, targetStructSlot uint64) { - eventAttackShotDetail.TargetStructId = targetStructId - eventAttackShotDetail.TargetStructType = targetStructType - eventAttackShotDetail.TargetStructLocationType = targetStructLocationType - eventAttackShotDetail.TargetStructLocationId = targetStructLocationId - eventAttackShotDetail.TargetStructOperatingAmbit = targetStructOperatingAmbit - eventAttackShotDetail.TargetStructSlot = targetStructSlot +func (eventAttackShotDetail *EventAttackShotDetail) SetTargetDetails(targetStructId string, targetStructType uint64, targetStructLocationType ObjectType, targetStructLocationId string, targetStructOperatingAmbit Ambit, targetStructSlot uint64) { + eventAttackShotDetail.TargetStructId = targetStructId + eventAttackShotDetail.TargetStructType = targetStructType + eventAttackShotDetail.TargetStructLocationType = targetStructLocationType + eventAttackShotDetail.TargetStructLocationId = targetStructLocationId + eventAttackShotDetail.TargetStructOperatingAmbit = targetStructOperatingAmbit + eventAttackShotDetail.TargetStructSlot = targetStructSlot } func (eventAttackShotDetail *EventAttackShotDetail) SetEvade(evaded bool, evadedCause TechUnitDefenses) { - eventAttackShotDetail.Evaded = evaded - eventAttackShotDetail.EvadedCause = evadedCause + eventAttackShotDetail.Evaded = evaded + eventAttackShotDetail.EvadedCause = evadedCause } - func (eventAttackShotDetail *EventAttackShotDetail) SetEvadeByPlanetaryDefenses(evaded bool, evadedCause TechPlanetaryDefenses) { - eventAttackShotDetail.EvadedByPlanetaryDefenses = evaded - eventAttackShotDetail.EvadedByPlanetaryDefensesCause = evadedCause + eventAttackShotDetail.EvadedByPlanetaryDefenses = evaded + eventAttackShotDetail.EvadedByPlanetaryDefensesCause = evadedCause } func (eventAttackShotDetail *EventAttackShotDetail) SetBlocker(blockedByStructId string, blockedByStructType uint64, blockedByStructLocationType ObjectType, blockedByStructLocationId string, blockedByStructOperatingAmbit Ambit, blockedByStructSlot uint64) { - eventAttackShotDetail.BlockedByStructId = blockedByStructId - eventAttackShotDetail.BlockedByStructType = blockedByStructType - eventAttackShotDetail.BlockedByStructLocationType = blockedByStructLocationType - eventAttackShotDetail.BlockedByStructLocationId = blockedByStructLocationId - eventAttackShotDetail.BlockedByStructOperatingAmbit = blockedByStructOperatingAmbit - eventAttackShotDetail.BlockedByStructSlot = blockedByStructSlot - eventAttackShotDetail.Blocked = true + eventAttackShotDetail.BlockedByStructId = blockedByStructId + eventAttackShotDetail.BlockedByStructType = blockedByStructType + eventAttackShotDetail.BlockedByStructLocationType = blockedByStructLocationType + eventAttackShotDetail.BlockedByStructLocationId = blockedByStructLocationId + eventAttackShotDetail.BlockedByStructOperatingAmbit = blockedByStructOperatingAmbit + eventAttackShotDetail.BlockedByStructSlot = blockedByStructSlot + eventAttackShotDetail.Blocked = true } func (eventAttackShotDetail *EventAttackShotDetail) SetBlockerDestroyed() { - eventAttackShotDetail.BlockerDestroyed = true + eventAttackShotDetail.BlockerDestroyed = true } func (eventAttackShotDetail *EventAttackShotDetail) SetTargetDestroyed() { - eventAttackShotDetail.TargetDestroyed = true + eventAttackShotDetail.TargetDestroyed = true } func (eventAttackShotDetail *EventAttackShotDetail) SetDamageReduction(damageReduction uint64, damageReductionCause TechUnitDefenses) { - eventAttackShotDetail.DamageReduction = damageReduction - eventAttackShotDetail.DamageReductionCause = damageReductionCause + eventAttackShotDetail.DamageReduction = damageReduction + eventAttackShotDetail.DamageReductionCause = damageReductionCause } func (eventAttackShotDetail *EventAttackShotDetail) SetDamageDealt(damageDealt uint64) { - eventAttackShotDetail.DamageDealt = damageDealt + eventAttackShotDetail.DamageDealt = damageDealt } func (eventAttackShotDetail *EventAttackShotDetail) SetDamage(damage uint64) { - eventAttackShotDetail.Damage = damage + eventAttackShotDetail.Damage = damage +} + +func (eventAttackShotDetail *EventAttackShotDetail) SetTargetHealthBefore(targetHealthBefore uint64) { + eventAttackShotDetail.TargetHealthBefore = targetHealthBefore +} + +func (eventAttackShotDetail *EventAttackShotDetail) SetTargetHealthAfter(targetHealthAfter uint64) { + eventAttackShotDetail.TargetHealthAfter = targetHealthAfter +} + +func (eventAttackShotDetail *EventAttackShotDetail) SetBlockerHealthAfter(blockerHealthAfter uint64) { + eventAttackShotDetail.BlockerHealthAfter = blockerHealthAfter } func (eventAttackShotDetail *EventAttackShotDetail) SetPostDestructionDamage(postDestructionDamage uint64, postDestructionDamageDestroyedAttacker bool, postDestructionDamageCause TechPassiveWeaponry) { - eventAttackShotDetail.PostDestructionDamageToAttacker = true - eventAttackShotDetail.PostDestructionDamage = postDestructionDamage - eventAttackShotDetail.PostDestructionDamageDestroyedAttacker = postDestructionDamageDestroyedAttacker - eventAttackShotDetail.PostDestructionDamageCause = postDestructionDamageCause + eventAttackShotDetail.PostDestructionDamageToAttacker = true + eventAttackShotDetail.PostDestructionDamage = postDestructionDamage + eventAttackShotDetail.PostDestructionDamageDestroyedAttacker = postDestructionDamageDestroyedAttacker + eventAttackShotDetail.PostDestructionDamageCause = postDestructionDamageCause } func (eventAttackShotDetail *EventAttackShotDetail) AppendDefenderCounter(counterByStructId string, counterDamage uint64, counterDestroyedAttacker bool, counterByStructType uint64, counterByStructLocationType ObjectType, counterByStructLocationId string, counterByStructOperatingAmbit Ambit, counterByStructSlot uint64) { - fmt.Printf("Recording Defensive Counter Attack %s %d %t \n", counterByStructId, counterDamage, counterDestroyedAttacker) - eventAttackDefenderCounterDetail := EventAttackDefenderCounterDetail{ - CounterByStructId: counterByStructId, - CounterByStructType: counterByStructType, - CounterByStructLocationType: counterByStructLocationType, - CounterByStructLocationId: counterByStructLocationId, - CounterByStructOperatingAmbit: counterByStructOperatingAmbit, - CounterByStructSlot: counterByStructSlot, - CounterDamage: counterDamage, - CounterDestroyedAttacker: counterDestroyedAttacker, - } - eventAttackShotDetail.EventAttackDefenderCounterDetail = append(eventAttackShotDetail.EventAttackDefenderCounterDetail, &eventAttackDefenderCounterDetail) + fmt.Printf("Recording Defensive Counter Attack %s %d %t \n", counterByStructId, counterDamage, counterDestroyedAttacker) + eventAttackDefenderCounterDetail := EventAttackDefenderCounterDetail{ + CounterByStructId: counterByStructId, + CounterByStructType: counterByStructType, + CounterByStructLocationType: counterByStructLocationType, + CounterByStructLocationId: counterByStructLocationId, + CounterByStructOperatingAmbit: counterByStructOperatingAmbit, + CounterByStructSlot: counterByStructSlot, + CounterDamage: counterDamage, + CounterDestroyedAttacker: counterDestroyedAttacker, + } + eventAttackShotDetail.EventAttackDefenderCounterDetail = append(eventAttackShotDetail.EventAttackDefenderCounterDetail, &eventAttackDefenderCounterDetail) } func (eventAttackShotDetail *EventAttackShotDetail) AppendTargetCounter(counterDamage uint64, counterDestroyedAttacker bool, passiveWeaponry TechPassiveWeaponry) { - fmt.Printf("Recording Primary Counter Attack %d %t \n", counterDamage, counterDestroyedAttacker) - eventAttackShotDetail.TargetCountered = true - eventAttackShotDetail.TargetCounteredDamage = counterDamage - eventAttackShotDetail.TargetCounterDestroyedAttacker = counterDestroyedAttacker - eventAttackShotDetail.TargetCounterCause = passiveWeaponry + fmt.Printf("Recording Primary Counter Attack %d %t \n", counterDamage, counterDestroyedAttacker) + eventAttackShotDetail.TargetCountered = true + eventAttackShotDetail.TargetCounteredDamage = counterDamage + eventAttackShotDetail.TargetCounterDestroyedAttacker = counterDestroyedAttacker + eventAttackShotDetail.TargetCounterCause = passiveWeaponry } - diff --git a/x/structs/types/events.pb.go b/x/structs/types/events.pb.go index 5332518..c40769c 100644 --- a/x/structs/types/events.pb.go +++ b/x/structs/types/events.pb.go @@ -2664,6 +2664,7 @@ type EventAttackDetail struct { PlanetaryDefenseCannonDamageDestroyedAttacker bool `protobuf:"varint,16,opt,name=planetaryDefenseCannonDamageDestroyedAttacker,proto3" json:"planetaryDefenseCannonDamageDestroyedAttacker,omitempty"` AttackerPlayerId string `protobuf:"bytes,17,opt,name=attackerPlayerId,proto3" json:"attackerPlayerId,omitempty"` TargetPlayerId string `protobuf:"bytes,18,opt,name=targetPlayerId,proto3" json:"targetPlayerId,omitempty"` + AttackerHealthAfter uint64 `protobuf:"varint,19,opt,name=attackerHealthAfter,proto3" json:"attackerHealthAfter,omitempty"` } func (m *EventAttackDetail) Reset() { *m = EventAttackDetail{} } @@ -2825,6 +2826,13 @@ func (m *EventAttackDetail) GetTargetPlayerId() string { return "" } +func (m *EventAttackDetail) GetAttackerHealthAfter() uint64 { + if m != nil { + return m.AttackerHealthAfter + } + return 0 +} + type EventAttackShotDetail struct { TargetStructId string `protobuf:"bytes,1,opt,name=targetStructId,proto3" json:"targetStructId,omitempty"` TargetStructType uint64 `protobuf:"varint,2,opt,name=targetStructType,proto3" json:"targetStructType,omitempty"` @@ -2858,6 +2866,9 @@ type EventAttackShotDetail struct { PostDestructionDamage uint64 `protobuf:"varint,30,opt,name=postDestructionDamage,proto3" json:"postDestructionDamage,omitempty"` PostDestructionDamageDestroyedAttacker bool `protobuf:"varint,31,opt,name=postDestructionDamageDestroyedAttacker,proto3" json:"postDestructionDamageDestroyedAttacker,omitempty"` PostDestructionDamageCause TechPassiveWeaponry `protobuf:"varint,32,opt,name=postDestructionDamageCause,proto3,enum=structs.structs.TechPassiveWeaponry" json:"postDestructionDamageCause,omitempty"` + TargetHealthBefore uint64 `protobuf:"varint,33,opt,name=targetHealthBefore,proto3" json:"targetHealthBefore,omitempty"` + TargetHealthAfter uint64 `protobuf:"varint,34,opt,name=targetHealthAfter,proto3" json:"targetHealthAfter,omitempty"` + BlockerHealthAfter uint64 `protobuf:"varint,35,opt,name=blockerHealthAfter,proto3" json:"blockerHealthAfter,omitempty"` } func (m *EventAttackShotDetail) Reset() { *m = EventAttackShotDetail{} } @@ -3117,6 +3128,27 @@ func (m *EventAttackShotDetail) GetPostDestructionDamageCause() TechPassiveWeapo return TechPassiveWeaponry_noPassiveWeaponry } +func (m *EventAttackShotDetail) GetTargetHealthBefore() uint64 { + if m != nil { + return m.TargetHealthBefore + } + return 0 +} + +func (m *EventAttackShotDetail) GetTargetHealthAfter() uint64 { + if m != nil { + return m.TargetHealthAfter + } + return 0 +} + +func (m *EventAttackShotDetail) GetBlockerHealthAfter() uint64 { + if m != nil { + return m.BlockerHealthAfter + } + return 0 +} + type EventAttackDefenderCounterDetail struct { CounterByStructId string `protobuf:"bytes,1,opt,name=counterByStructId,proto3" json:"counterByStructId,omitempty"` CounterByStructType uint64 `protobuf:"varint,2,opt,name=counterByStructType,proto3" json:"counterByStructType,omitempty"` @@ -3508,170 +3540,174 @@ func init() { func init() { proto.RegisterFile("structs/structs/events.proto", fileDescriptor_dd7c2ee201e0d8dd) } var fileDescriptor_dd7c2ee201e0d8dd = []byte{ - // 2604 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcd, 0x73, 0x1c, 0x47, - 0x15, 0xf7, 0x26, 0xfe, 0x90, 0x9e, 0x2c, 0x59, 0x6a, 0xdb, 0xf2, 0x7a, 0x65, 0xad, 0x96, 0x8e, - 0x63, 0x1c, 0x63, 0xa4, 0xc4, 0x21, 0x29, 0x2a, 0x50, 0x54, 0xe9, 0xc3, 0xb6, 0x1c, 0x70, 0xac, - 0x6a, 0x29, 0x09, 0xa4, 0x20, 0xa1, 0x77, 0xa6, 0xb5, 0x1a, 0x34, 0x3b, 0xb3, 0x35, 0xd3, 0x2b, - 0xb3, 0x05, 0x9c, 0xa8, 0x82, 0xa2, 0x8a, 0x8f, 0x54, 0x41, 0x71, 0xe0, 0x92, 0xe2, 0xc6, 0x31, - 0xc5, 0x5f, 0x91, 0x63, 0x4e, 0x14, 0x27, 0x3e, 0xec, 0x03, 0xff, 0x06, 0xd5, 0x1f, 0x33, 0xdb, - 0x3d, 0xd3, 0x33, 0xbb, 0x31, 0x10, 0x2e, 0xb6, 0xfa, 0xf7, 0x7e, 0xef, 0x37, 0xdd, 0xaf, 0x5f, - 0xbf, 0xee, 0xe9, 0x1d, 0xb8, 0x96, 0xf2, 0x64, 0xe8, 0xf1, 0x74, 0x23, 0xfb, 0x9f, 0x9d, 0xb0, - 0x88, 0xa7, 0xeb, 0x83, 0x24, 0xe6, 0x31, 0xba, 0xa0, 0xd1, 0x75, 0xfd, 0x7f, 0x6b, 0x89, 0xf6, - 0x83, 0x28, 0xde, 0x90, 0xff, 0x2a, 0x4e, 0xeb, 0x52, 0x2f, 0xee, 0xc5, 0xf2, 0xcf, 0x0d, 0xf1, - 0x97, 0x46, 0xaf, 0xf5, 0xe2, 0xb8, 0x17, 0xb2, 0x0d, 0x3a, 0x08, 0x36, 0x68, 0x14, 0xc5, 0x9c, - 0xf2, 0x20, 0x8e, 0xd2, 0xcc, 0x5a, 0x7c, 0xea, 0x80, 0x26, 0xb4, 0x9f, 0x59, 0xd7, 0xb4, 0xaf, - 0x6c, 0x75, 0x87, 0x87, 0x1b, 0x3c, 0xe8, 0xb3, 0x94, 0xd3, 0xfe, 0x40, 0x13, 0x56, 0x8b, 0xee, - 0xd4, 0xf7, 0x13, 0x96, 0xe6, 0xfe, 0x25, 0x73, 0x2f, 0x61, 0xac, 0xcf, 0x22, 0xae, 0x09, 0x9d, - 0x12, 0x21, 0x0c, 0x63, 0x4f, 0xf6, 0x50, 0x33, 0x56, 0x8a, 0x8c, 0xc3, 0x90, 0xb1, 0xcc, 0xbd, - 0x55, 0x34, 0xf6, 0x92, 0xc0, 0xaf, 0x72, 0xec, 0x0d, 0x83, 0x30, 0x33, 0xb6, 0x8b, 0xc6, 0x20, - 0x3a, 0x1c, 0xa6, 0xe3, 0xa7, 0x96, 0x84, 0x8f, 0xd9, 0x28, 0xad, 0xea, 0xf3, 0x80, 0x25, 0xfd, - 0x20, 0x35, 0xbc, 0xcb, 0x41, 0x0d, 0xe9, 0x88, 0x25, 0x35, 0xd6, 0x28, 0x1f, 0x52, 0xa9, 0x67, - 0x83, 0x24, 0x3e, 0x09, 0xfc, 0xdc, 0xbb, 0x14, 0xf1, 0x84, 0x51, 0x8f, 0xc7, 0x95, 0xe2, 0xea, - 0xff, 0xaa, 0xae, 0xa7, 0xc3, 0x6e, 0xca, 0x8d, 0x70, 0xe3, 0xb7, 0xe0, 0xc2, 0x5d, 0x91, 0x77, - 0x9b, 0xf9, 0x3c, 0xa0, 0xaf, 0x01, 0x8c, 0x67, 0xa5, 0xd9, 0xe8, 0x34, 0x6e, 0xce, 0xdd, 0x59, - 0x59, 0x2f, 0xe4, 0xe3, 0xfa, 0xd8, 0x81, 0x18, 0x74, 0xfc, 0x26, 0x2c, 0x28, 0xbd, 0x6c, 0xe2, - 0xd1, 0x57, 0x61, 0x36, 0xcf, 0x02, 0xad, 0xd6, 0x2a, 0xab, 0x65, 0x0c, 0x32, 0x26, 0xe3, 0x37, - 0x00, 0xa4, 0xd6, 0x3d, 0x91, 0x01, 0xe8, 0x36, 0x9c, 0x91, 0xa9, 0xa0, 0x35, 0x96, 0x4b, 0x1a, - 0x92, 0x46, 0x14, 0x29, 0xf7, 0xbd, 0x2f, 0x92, 0x40, 0xf8, 0xca, 0x6c, 0xa8, 0xf4, 0x95, 0x34, - 0xa2, 0x48, 0xf8, 0x1e, 0xcc, 0x4b, 0xdf, 0x07, 0x3a, 0x47, 0xd0, 0x6b, 0x30, 0x93, 0xe5, 0x8b, - 0x56, 0xb8, 0x5a, 0x52, 0xc8, 0xc8, 0x24, 0xa7, 0xe2, 0x6f, 0xc0, 0x9c, 0xd4, 0xd9, 0x93, 0xf3, - 0x8d, 0x36, 0xe0, 0xac, 0x9a, 0x79, 0xad, 0x71, 0xa5, 0xa4, 0xa1, 0x88, 0x44, 0xd3, 0x30, 0x87, - 0x4b, 0x86, 0xff, 0x26, 0xe7, 0x49, 0xd0, 0x1d, 0x72, 0x86, 0xbe, 0x0b, 0x97, 0x07, 0x36, 0x44, - 0x98, 0x17, 0x27, 0xd9, 0xe8, 0x6e, 0x54, 0xe8, 0x16, 0xd8, 0xc4, 0x2d, 0x62, 0xf6, 0x7a, 0xc4, - 0x12, 0xdd, 0xeb, 0x11, 0x4b, 0xea, 0x7a, 0x3d, 0x62, 0x09, 0xd1, 0xb4, 0x3c, 0x7a, 0x7b, 0x3a, - 0x8f, 0x45, 0xf4, 0xb2, 0x9c, 0xae, 0x8c, 0x5e, 0x46, 0x26, 0x39, 0x15, 0x6f, 0xc1, 0x79, 0xa9, - 0x43, 0x54, 0xbe, 0xa3, 0x3b, 0x70, 0x4e, 0xa7, 0xbe, 0x56, 0x69, 0x96, 0x54, 0x34, 0x95, 0x64, - 0x44, 0xbc, 0xa3, 0xc7, 0xb2, 0x2f, 0x09, 0xe8, 0x35, 0x98, 0x55, 0xd4, 0x61, 0xc2, 0x2a, 0x87, - 0xa3, 0xb8, 0x64, 0xcc, 0xcc, 0xe7, 0x41, 0x59, 0xac, 0x79, 0x48, 0x6d, 0x68, 0xc2, 0x3c, 0xec, - 0xbb, 0xd8, 0xc4, 0x2d, 0x82, 0xdf, 0x87, 0x8b, 0xc6, 0x53, 0x77, 0xd8, 0x21, 0x8b, 0x44, 0x34, - 0xef, 0xc3, 0x42, 0x6a, 0x21, 0xfa, 0x69, 0x6b, 0x15, 0x4f, 0xcb, 0x68, 0xa4, 0xe0, 0x96, 0xaf, - 0x7c, 0x45, 0x3b, 0x18, 0x0d, 0x98, 0x58, 0xf9, 0x69, 0xde, 0xaa, 0x5c, 0xf9, 0x63, 0x07, 0x62, - 0xd0, 0xc7, 0x7a, 0x79, 0x89, 0x91, 0x7a, 0x79, 0xab, 0x5a, 0x2f, 0xa7, 0x10, 0x83, 0x8e, 0xdf, - 0x85, 0x59, 0xa9, 0x77, 0x10, 0xf4, 0x19, 0x7a, 0x13, 0x2e, 0xb0, 0xac, 0xb1, 0xc3, 0x38, 0x0d, - 0x42, 0x2d, 0xd7, 0x29, 0xc9, 0xdd, 0xb5, 0x79, 0xa4, 0xe8, 0x88, 0x1f, 0xeb, 0x8e, 0x8e, 0x21, - 0xd4, 0x81, 0xb9, 0x6e, 0x18, 0x7b, 0xc7, 0xbb, 0x2c, 0xe8, 0x1d, 0xa9, 0xf5, 0xf9, 0x3c, 0x31, - 0x21, 0xb4, 0x05, 0xb3, 0xb2, 0x29, 0x9c, 0x9a, 0xcf, 0xe9, 0x2a, 0xa6, 0x76, 0xcb, 0xf5, 0x6c, - 0xb7, 0x5c, 0x3f, 0xc8, 0x76, 0xcb, 0xad, 0x99, 0x4f, 0xfe, 0xb6, 0x76, 0xea, 0xc3, 0xbf, 0xaf, - 0x35, 0xc8, 0xd8, 0x0d, 0x7f, 0x5f, 0x3f, 0x78, 0x2f, 0xdf, 0x3f, 0xd0, 0x43, 0x58, 0x1c, 0xef, - 0x26, 0x56, 0xf6, 0x7c, 0xa1, 0xbc, 0x46, 0x0a, 0x44, 0x52, 0x72, 0xc5, 0xbb, 0x3a, 0x66, 0xf7, - 0x93, 0xc0, 0x17, 0xd1, 0x17, 0xdb, 0xa3, 0xa5, 0x5a, 0x8e, 0xfe, 0xfd, 0x9c, 0x42, 0x0c, 0x3a, - 0xfe, 0x69, 0x23, 0x2b, 0x3e, 0x7a, 0x3d, 0x6e, 0xaa, 0x8d, 0x1e, 0x1d, 0x43, 0x8b, 0x39, 0x70, - 0x6b, 0x52, 0xbe, 0xe4, 0x9e, 0x14, 0xa7, 0x0b, 0xa9, 0x91, 0xc3, 0x3f, 0x6b, 0x40, 0xab, 0xda, - 0x15, 0xb5, 0x01, 0xb2, 0x72, 0xf1, 0x40, 0x8d, 0x70, 0x96, 0x18, 0x08, 0xba, 0x01, 0x0b, 0x5e, - 0x1c, 0x86, 0x94, 0xb3, 0x84, 0x86, 0x7b, 0x71, 0x1c, 0xca, 0x99, 0x9b, 0x25, 0x05, 0x54, 0x4c, - 0x3f, 0xa3, 0x49, 0x14, 0x44, 0x3d, 0x49, 0x7a, 0x5e, 0x92, 0x4c, 0x08, 0xff, 0xa6, 0x01, 0x57, - 0xac, 0x8e, 0xdc, 0x4f, 0x68, 0xb6, 0xb9, 0x70, 0x58, 0x65, 0x6e, 0x93, 0x15, 0x94, 0xf5, 0xfa, - 0xa0, 0x14, 0xbd, 0x48, 0xbd, 0x28, 0xfe, 0x0e, 0xac, 0xd6, 0xfa, 0x4f, 0x0c, 0x4e, 0x13, 0xce, - 0xc9, 0xed, 0xee, 0x81, 0xaf, 0xa3, 0x92, 0x35, 0xf1, 0x6f, 0x1b, 0xd0, 0xb4, 0xb4, 0x09, 0x3b, - 0x89, 0x8f, 0x99, 0x1a, 0xed, 0x63, 0x68, 0xb3, 0x0a, 0x9b, 0x35, 0xdc, 0x8d, 0xfa, 0xe1, 0x96, - 0xdc, 0xc8, 0x04, 0x59, 0xfc, 0x1e, 0xb4, 0xeb, 0x15, 0xfe, 0x83, 0x11, 0x6f, 0xc0, 0x92, 0xb1, - 0xe7, 0xed, 0xd2, 0x90, 0x33, 0x1f, 0xb5, 0x60, 0x46, 0x6d, 0x69, 0xb9, 0x58, 0xde, 0xc6, 0x2f, - 0x03, 0x32, 0x1c, 0x08, 0x4b, 0x87, 0xfd, 0x09, 0x1e, 0x2f, 0xe9, 0xad, 0x68, 0x87, 0x85, 0x8c, - 0x33, 0x41, 0x8d, 0xbb, 0x3f, 0x60, 0x1e, 0x1f, 0x53, 0xb3, 0x36, 0x8e, 0x74, 0xae, 0xe9, 0x64, - 0xdf, 0x4c, 0xd3, 0xd8, 0x0b, 0x54, 0x45, 0xdd, 0x07, 0x44, 0x4b, 0xa8, 0x8e, 0xf8, 0x0b, 0xe5, - 0x53, 0x55, 0x89, 0x4a, 0x1c, 0xee, 0xb8, 0xab, 0x97, 0x7a, 0x46, 0xf7, 0x78, 0x70, 0x12, 0xf0, - 0x91, 0x28, 0xba, 0xd4, 0x86, 0x2a, 0x8b, 0x6e, 0xc1, 0x95, 0x14, 0x1d, 0xf1, 0xcf, 0x1b, 0x70, - 0x79, 0x7c, 0x20, 0xdb, 0xa2, 0xd1, 0x71, 0x56, 0x50, 0x22, 0x58, 0x61, 0x2e, 0x83, 0x95, 0x4d, - 0xb7, 0xdd, 0xd9, 0xe4, 0xf6, 0x21, 0x75, 0x82, 0xf8, 0x57, 0x0d, 0x58, 0xa9, 0x71, 0x36, 0xb3, - 0xa4, 0x61, 0x65, 0x09, 0x5a, 0x07, 0xd4, 0xa5, 0xd1, 0xf1, 0xb6, 0xab, 0xa4, 0x38, 0x2c, 0xe8, - 0x3a, 0xcc, 0x0b, 0xf4, 0x20, 0x3e, 0x66, 0x91, 0x51, 0x58, 0x6c, 0x10, 0xff, 0x48, 0xa7, 0x52, - 0xde, 0x9d, 0x87, 0x41, 0xc4, 0x11, 0x83, 0x26, 0x2b, 0xa1, 0x56, 0x48, 0x5e, 0x9a, 0x10, 0x92, - 0xb1, 0x03, 0xa9, 0x94, 0xc2, 0xbf, 0xcb, 0x96, 0xba, 0xc3, 0x58, 0x13, 0x89, 0x0e, 0xcc, 0xd1, - 0x7e, 0x3c, 0x14, 0xaf, 0x0d, 0x83, 0x23, 0x2a, 0x43, 0x70, 0x9a, 0x98, 0xd0, 0x98, 0x21, 0x07, - 0x2a, 0x47, 0x9e, 0x33, 0x24, 0x64, 0x2d, 0x96, 0xd3, 0x85, 0xc5, 0x92, 0xef, 0x3e, 0x79, 0xb7, - 0x08, 0xf3, 0x19, 0xeb, 0xe7, 0xbb, 0x4f, 0x01, 0x9f, 0x66, 0xf7, 0x71, 0xba, 0x90, 0x1a, 0x39, - 0xfc, 0xfb, 0x6c, 0xf7, 0x71, 0x9a, 0xff, 0x8f, 0xe1, 0xf9, 0xb8, 0x01, 0x6b, 0x76, 0xc7, 0xb6, - 0xe3, 0xe8, 0x30, 0x48, 0x3d, 0xca, 0xd9, 0x66, 0xe4, 0x6f, 0x0d, 0x93, 0x08, 0xfd, 0xb2, 0x01, - 0x2f, 0xb2, 0x7a, 0x8e, 0x15, 0xb5, 0xd7, 0x27, 0x44, 0xad, 0xc2, 0x9b, 0x4c, 0xf7, 0x10, 0xfc, - 0x51, 0x03, 0x5e, 0x9c, 0x4a, 0xf0, 0x7f, 0x1c, 0xd6, 0x26, 0x9c, 0xd3, 0xa5, 0x49, 0x47, 0x35, - 0x6b, 0xe2, 0x5f, 0x5b, 0x41, 0x7d, 0xc8, 0xfa, 0x5d, 0x96, 0xa4, 0x47, 0xc1, 0x60, 0x73, 0x30, - 0x08, 0x03, 0xfd, 0x6a, 0x7c, 0x0c, 0xad, 0x5e, 0xa5, 0xb5, 0x32, 0xfd, 0xaa, 0x05, 0x49, 0x8d, - 0x1c, 0xf6, 0xf4, 0x0b, 0xd0, 0xa3, 0x84, 0x3d, 0x0c, 0x22, 0x26, 0x6a, 0x3f, 0x33, 0xda, 0xd6, - 0xec, 0xbd, 0xe0, 0x9e, 0x3d, 0x8b, 0x4a, 0x1c, 0xee, 0x78, 0xa0, 0xab, 0x8f, 0x85, 0xd6, 0x6d, - 0x64, 0xe2, 0x50, 0x35, 0x48, 0x82, 0x3e, 0x4d, 0x46, 0xba, 0x6e, 0x66, 0x87, 0x2a, 0x1b, 0x45, - 0xcb, 0x70, 0x56, 0x05, 0x5e, 0x4f, 0x83, 0x6e, 0xe1, 0x14, 0x16, 0xf5, 0x8d, 0xc3, 0xe0, 0x88, - 0x12, 0x76, 0x28, 0x86, 0xf6, 0x01, 0x2c, 0xb3, 0x02, 0x66, 0x0d, 0xef, 0x8b, 0xee, 0xe1, 0x95, - 0xe8, 0xa4, 0x42, 0x06, 0x73, 0x58, 0x76, 0x7b, 0x7c, 0x7e, 0x43, 0x95, 0x17, 0x04, 0x85, 0xa1, - 0x2a, 0x6c, 0xea, 0xa1, 0x9a, 0x74, 0x52, 0x21, 0x63, 0x0f, 0xd5, 0xb4, 0x7c, 0x7e, 0x43, 0xdd, - 0x61, 0xe5, 0xa1, 0x2a, 0x6c, 0xea, 0xa1, 0x9a, 0x74, 0x52, 0x21, 0x83, 0xbf, 0x6d, 0x0e, 0xd5, - 0xb4, 0x38, 0x86, 0xd3, 0x98, 0x30, 0x9c, 0xe7, 0xac, 0xe1, 0xf4, 0xf4, 0x25, 0xc6, 0xa3, 0x84, - 0x1d, 0x1c, 0xb1, 0x43, 0x8e, 0xde, 0x81, 0x8b, 0xcc, 0x04, 0xac, 0x81, 0x5c, 0xaf, 0x5c, 0x7d, - 0x06, 0x97, 0xb8, 0x04, 0xf0, 0x3f, 0x1b, 0xfa, 0x35, 0xdf, 0xc6, 0xd1, 0x1d, 0xb8, 0x74, 0x12, - 0x78, 0x3c, 0xe8, 0xef, 0xb9, 0x86, 0xe1, 0xb4, 0x89, 0x41, 0x6b, 0x3c, 0x9b, 0x65, 0x3d, 0x87, - 0x36, 0x8a, 0x5e, 0x86, 0x8b, 0xfc, 0x28, 0x60, 0x87, 0x05, 0x69, 0x75, 0x3a, 0x71, 0x99, 0xc4, - 0x49, 0x46, 0xc1, 0xf6, 0x8e, 0x64, 0x83, 0x46, 0x30, 0xcf, 0x58, 0xc1, 0x8c, 0xf5, 0x7b, 0xaf, - 0xac, 0x31, 0xbd, 0x84, 0xaa, 0xab, 0x13, 0x66, 0x43, 0x56, 0x40, 0x6f, 0xd4, 0x94, 0x33, 0x83, - 0x4d, 0xdc, 0x22, 0xf8, 0x8f, 0xd9, 0x61, 0xb3, 0x68, 0xf9, 0xaf, 0x2c, 0x81, 0xdb, 0xb0, 0x14, - 0x87, 0xbe, 0x33, 0x78, 0x65, 0x83, 0x11, 0x94, 0xd3, 0x56, 0x50, 0x7e, 0x91, 0x9d, 0xbc, 0xec, - 0x6b, 0x9a, 0xed, 0x90, 0xd1, 0x04, 0xf5, 0xe1, 0x6a, 0x5a, 0x86, 0xa7, 0x79, 0xbf, 0xda, 0xaf, - 0x72, 0x23, 0xd5, 0x8a, 0xf8, 0x2d, 0xfd, 0x6a, 0x55, 0xe9, 0x2c, 0xc6, 0xec, 0x4b, 0x38, 0x88, - 0x7a, 0x8a, 0x95, 0x07, 0xb0, 0x6c, 0xc0, 0x1f, 0xe8, 0x77, 0x9d, 0x4d, 0xce, 0xa9, 0x77, 0x8c, - 0xf6, 0x60, 0x89, 0x8d, 0x9b, 0xd6, 0x28, 0x70, 0x45, 0x09, 0x30, 0x98, 0xa4, 0xec, 0x8c, 0xff, - 0x32, 0xab, 0x5f, 0xd8, 0x4c, 0x14, 0xdd, 0x82, 0x45, 0x2a, 0xdb, 0x2c, 0x29, 0xf4, 0xb1, 0x84, - 0x8b, 0xb3, 0xbc, 0x8d, 0xc9, 0x2b, 0x2f, 0x55, 0x04, 0x1c, 0x16, 0xd4, 0x85, 0x96, 0x8d, 0x7e, - 0x4b, 0xdf, 0x78, 0x4b, 0x3f, 0x31, 0xfb, 0x0b, 0x8e, 0xcb, 0x15, 0xf5, 0x4a, 0x27, 0x28, 0x5b, - 0x67, 0xfe, 0xf4, 0xaf, 0x8f, 0x6f, 0x35, 0x48, 0x8d, 0x0a, 0x7a, 0x03, 0x9a, 0x6e, 0x6b, 0xbe, - 0xe0, 0x2a, 0xed, 0x88, 0xc2, 0x35, 0xdb, 0xf6, 0x68, 0xc0, 0x12, 0xca, 0x83, 0xa8, 0xb7, 0xd9, - 0xef, 0x06, 0x6a, 0x45, 0x2e, 0x38, 0x2e, 0xbe, 0xa9, 0xb0, 0x66, 0x9d, 0xab, 0x95, 0x28, 0x87, - 0x6c, 0x3f, 0x8c, 0x79, 0xf3, 0xac, 0x2b, 0x64, 0xc2, 0x82, 0xee, 0xc2, 0xf9, 0xc7, 0x8c, 0x0e, - 0xe2, 0x68, 0x7f, 0x94, 0x72, 0xd6, 0x6f, 0x9e, 0x93, 0x5d, 0x28, 0xdf, 0x6b, 0x71, 0xe6, 0x1d, - 0xbd, 0x6b, 0x10, 0x89, 0xe5, 0x86, 0x76, 0x61, 0x5e, 0xb5, 0xb7, 0xe3, 0x88, 0x27, 0x71, 0xd8, - 0x9c, 0x91, 0x3a, 0xb8, 0x46, 0x47, 0x33, 0x89, 0xed, 0x88, 0xbe, 0x09, 0x0b, 0x54, 0xbc, 0x8f, - 0x32, 0xc5, 0x4a, 0x46, 0xcd, 0x59, 0x29, 0xf5, 0x82, 0x53, 0x6a, 0xd3, 0xa2, 0x92, 0x82, 0x6b, - 0x5e, 0xc1, 0x54, 0x06, 0xee, 0x1f, 0xc5, 0xd9, 0x96, 0x00, 0x9d, 0xe7, 0xab, 0x2b, 0x58, 0x91, - 0x4d, 0xdc, 0x22, 0xe8, 0x75, 0x58, 0x4e, 0x98, 0x17, 0x07, 0xe1, 0x0e, 0xed, 0xd3, 0x1e, 0x3b, - 0x88, 0x37, 0x75, 0x7c, 0x9b, 0x73, 0x9d, 0xc6, 0xcd, 0x19, 0x52, 0x61, 0x45, 0x18, 0xce, 0x9b, - 0x96, 0xe6, 0x79, 0x39, 0x3b, 0x16, 0x86, 0x76, 0x60, 0xd5, 0x6c, 0xef, 0xb0, 0x94, 0x27, 0xf1, - 0x88, 0xf9, 0xf9, 0x23, 0xe6, 0xe5, 0x23, 0xea, 0x49, 0xe8, 0x1d, 0xb8, 0xa1, 0x7e, 0x3f, 0xa0, - 0xc9, 0x48, 0x56, 0x8c, 0x94, 0x6d, 0xd3, 0x28, 0x8a, 0xa3, 0x52, 0x8f, 0x17, 0xa4, 0xdc, 0x94, - 0x6c, 0xb4, 0x05, 0xd7, 0xea, 0x98, 0xcd, 0x0b, 0x72, 0x44, 0xb5, 0x1c, 0xe4, 0xc3, 0x97, 0xeb, - 0xec, 0xe5, 0x11, 0x2f, 0xca, 0x2e, 0x7e, 0x36, 0x27, 0xb3, 0xdc, 0xe4, 0xfb, 0xe2, 0x92, 0x5d, - 0x6e, 0xf6, 0x8c, 0xbd, 0x85, 0xd3, 0xa4, 0xc7, 0x78, 0xce, 0x44, 0x6a, 0x6f, 0xb1, 0x51, 0xfc, - 0x87, 0x45, 0xbd, 0x73, 0x95, 0x32, 0x22, 0x57, 0x28, 0x94, 0xb6, 0x02, 0x2a, 0x7a, 0x65, 0x22, - 0x46, 0x59, 0x2b, 0xe1, 0xe8, 0x7d, 0x68, 0x9a, 0xd8, 0x33, 0x96, 0xb4, 0x4a, 0x0d, 0x91, 0xc5, - 0x2e, 0x5b, 0x5e, 0xce, 0x2a, 0xac, 0xe8, 0x7b, 0xd0, 0x32, 0x2d, 0xcf, 0x52, 0xca, 0x6a, 0x04, - 0x8a, 0x21, 0x32, 0xca, 0x58, 0x09, 0x17, 0xdb, 0x37, 0x3b, 0xa1, 0x3e, 0xf3, 0x65, 0xf9, 0x9a, - 0x21, 0xba, 0x85, 0xb6, 0x61, 0x4e, 0xfd, 0xb5, 0x4d, 0x87, 0x29, 0xd3, 0x35, 0xc9, 0x5d, 0xdb, - 0xde, 0x8e, 0x02, 0xae, 0x13, 0x2a, 0x25, 0xa6, 0x17, 0xfa, 0x3a, 0x5c, 0x55, 0xcd, 0xad, 0xd1, - 0x5e, 0x21, 0xf5, 0x52, 0x59, 0x9b, 0x66, 0x48, 0x35, 0x01, 0x45, 0xd0, 0xae, 0x34, 0xaa, 0x5e, - 0x81, 0xec, 0xd5, 0x0d, 0x67, 0xaf, 0x4a, 0x2e, 0x64, 0x82, 0x9a, 0x78, 0x75, 0x96, 0xbf, 0x65, - 0x30, 0x5f, 0x17, 0xa1, 0xac, 0x29, 0x4e, 0x07, 0xfa, 0xcf, 0xad, 0x51, 0x9e, 0x9e, 0xe7, 0xd5, - 0xe9, 0xa0, 0x64, 0x10, 0xc7, 0xcf, 0x02, 0x28, 0x13, 0x6e, 0x5e, 0xce, 0x80, 0xcb, 0x84, 0x7c, - 0x58, 0x29, 0xc0, 0x56, 0xaa, 0x2e, 0x4c, 0x9d, 0xaa, 0x75, 0x32, 0x62, 0x36, 0x2a, 0xcc, 0x0f, - 0x7c, 0x59, 0x76, 0x66, 0x49, 0x35, 0x01, 0x79, 0xb0, 0x5a, 0x30, 0x16, 0xd2, 0x76, 0x71, 0x9a, - 0xb4, 0xad, 0xd7, 0x70, 0x84, 0x4e, 0x26, 0xef, 0x92, 0x33, 0x74, 0x32, 0x7f, 0x6f, 0xc1, 0xa2, - 0x82, 0x93, 0xbc, 0x80, 0xc9, 0xd2, 0x33, 0x43, 0x4a, 0x38, 0xfa, 0x09, 0x74, 0xac, 0xa3, 0x96, - 0x3e, 0x06, 0x8a, 0xe3, 0x2a, 0xcb, 0x0e, 0x9f, 0x17, 0xe5, 0xee, 0xf6, 0x4a, 0xfd, 0xb1, 0xcd, - 0xe1, 0x48, 0x26, 0x4a, 0xa3, 0x0e, 0xcc, 0xf9, 0xba, 0xd4, 0xd2, 0x90, 0x37, 0x2f, 0xa9, 0xcb, - 0x1b, 0x03, 0x42, 0x37, 0xe1, 0x82, 0x6a, 0x12, 0xe6, 0x0f, 0x3d, 0x79, 0xe7, 0x72, 0x59, 0xb2, - 0x8a, 0x30, 0x7a, 0x1b, 0x2e, 0x15, 0x20, 0xb5, 0x22, 0x96, 0xa7, 0x5d, 0xa7, 0x4e, 0x77, 0x51, - 0x0d, 0x14, 0xde, 0xbc, 0xa2, 0x0e, 0xf3, 0xaa, 0x25, 0x3a, 0xa6, 0x2a, 0x87, 0x1e, 0x11, 0xf3, - 0x9b, 0x4d, 0x19, 0xe4, 0x22, 0x8c, 0xbe, 0x02, 0x97, 0x0b, 0x90, 0xde, 0xd7, 0xae, 0x4a, 0x41, - 0xb7, 0x11, 0xdd, 0x83, 0xb6, 0x65, 0x28, 0xef, 0x60, 0x2d, 0xf9, 0xb8, 0x09, 0x2c, 0x74, 0x00, - 0xc8, 0x62, 0xa8, 0xa0, 0xac, 0xc8, 0xa0, 0x5c, 0x77, 0x97, 0x09, 0x9a, 0xa6, 0xe6, 0x31, 0xc8, - 0xe1, 0x3f, 0x1e, 0xfd, 0x38, 0xc5, 0xae, 0x99, 0xa3, 0x1f, 0x67, 0xd8, 0x2e, 0xac, 0x0d, 0xe2, - 0x54, 0x01, 0x2a, 0xae, 0xa5, 0xd3, 0xc2, 0xaa, 0xf4, 0x9c, 0x44, 0x13, 0x71, 0x74, 0x52, 0x9a, - 0x6d, 0x15, 0x47, 0xa7, 0x51, 0x1e, 0x5a, 0x5c, 0x86, 0x72, 0x3c, 0xd7, 0xf4, 0xa1, 0x65, 0x2a, - 0x36, 0xf2, 0xa1, 0xe5, 0x64, 0xaa, 0xf8, 0x76, 0x3e, 0x43, 0x7c, 0x6b, 0x74, 0xf0, 0x47, 0xa7, - 0xa1, 0x33, 0x69, 0x9d, 0x89, 0x5a, 0xec, 0x29, 0xc0, 0xa8, 0xc5, 0xfa, 0x4d, 0xad, 0x64, 0x10, - 0x05, 0xa5, 0x00, 0x1a, 0x07, 0x06, 0x97, 0x49, 0xd4, 0xe2, 0x02, 0xfc, 0x8c, 0xc7, 0x86, 0x3a, - 0x19, 0x51, 0x8b, 0x2b, 0xcc, 0xf9, 0xe1, 0xa1, 0x9a, 0x20, 0x6a, 0x71, 0xc1, 0xf8, 0x2c, 0x47, - 0x88, 0x7a, 0x0d, 0x47, 0xe8, 0x8c, 0x83, 0x84, 0xcb, 0x84, 0xae, 0xc3, 0xbc, 0x86, 0x75, 0xae, - 0x9e, 0x93, 0x5c, 0x1b, 0x14, 0x6f, 0x81, 0x5e, 0xd5, 0x2a, 0x9f, 0x91, 0x59, 0x59, 0x69, 0xcf, - 0xbf, 0x99, 0x20, 0x34, 0xf0, 0xf3, 0x6f, 0x26, 0x44, 0x63, 0x9a, 0x6f, 0x26, 0xc6, 0x3c, 0x52, - 0x74, 0xc4, 0x3f, 0xd6, 0x57, 0x38, 0x63, 0x48, 0x1c, 0x07, 0xe4, 0xa7, 0x56, 0xe3, 0x7b, 0x7a, - 0xdd, 0xd4, 0x97, 0x2c, 0x91, 0x34, 0x3d, 0x97, 0x5f, 0xb2, 0xc8, 0x36, 0x7a, 0x15, 0xce, 0xa6, - 0x9c, 0xf2, 0x61, 0x5a, 0x99, 0x29, 0x09, 0x0d, 0xfc, 0x7d, 0x49, 0x21, 0x9a, 0x9a, 0x5f, 0x2e, - 0xee, 0xd2, 0xf4, 0x68, 0x7f, 0xe8, 0x79, 0x2c, 0x4d, 0xf3, 0xcb, 0x45, 0x03, 0x9b, 0xe6, 0x72, - 0xb1, 0x44, 0x27, 0x15, 0x32, 0xf8, 0xcf, 0x0d, 0x7d, 0xbb, 0x58, 0x32, 0xc9, 0x89, 0xa4, 0x61, - 0x98, 0x7f, 0x8e, 0xa0, 0x03, 0x60, 0x83, 0x22, 0x0c, 0x1e, 0xe5, 0xac, 0x17, 0x27, 0xa3, 0x2c, - 0x0c, 0x59, 0x1b, 0xb5, 0x01, 0xfc, 0xe0, 0xf0, 0x30, 0xf0, 0x86, 0x21, 0x1f, 0xe9, 0xab, 0x54, - 0x03, 0xb1, 0x7e, 0x1e, 0x3e, 0x6d, 0xff, 0x3c, 0x6c, 0x85, 0xf7, 0x8c, 0x1d, 0xde, 0xad, 0x57, - 0x3e, 0x79, 0xd2, 0x6e, 0x7c, 0xfa, 0xa4, 0xdd, 0xf8, 0xc7, 0x93, 0x76, 0xe3, 0xc3, 0xa7, 0xed, - 0x53, 0x9f, 0x3e, 0x6d, 0x9f, 0xfa, 0xeb, 0xd3, 0xf6, 0xa9, 0xf7, 0xae, 0x64, 0x9f, 0x00, 0xfe, - 0x30, 0xff, 0x18, 0x90, 0x8f, 0x06, 0x2c, 0xed, 0x9e, 0x95, 0x9f, 0xaf, 0xbc, 0xfa, 0xef, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x33, 0xf0, 0x67, 0x77, 0x90, 0x2a, 0x00, 0x00, + // 2659 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4b, 0x6f, 0x1c, 0xc7, + 0x11, 0xd6, 0xea, 0x49, 0x16, 0x45, 0x8a, 0x6c, 0x49, 0xd4, 0x6a, 0x29, 0x2e, 0xe9, 0x96, 0xac, + 0xc8, 0x8a, 0x42, 0xda, 0x72, 0x6c, 0x04, 0x4e, 0x10, 0x80, 0x0f, 0x49, 0x94, 0x13, 0x59, 0x44, + 0x93, 0xb6, 0x13, 0x23, 0xb1, 0xd3, 0x9c, 0xe9, 0x5d, 0x4e, 0x38, 0x3b, 0xb3, 0x98, 0xe9, 0xa5, + 0xb2, 0x48, 0x72, 0x0a, 0x90, 0x07, 0x90, 0x87, 0x81, 0x04, 0xb9, 0x1a, 0xb9, 0xf9, 0x68, 0xe4, + 0x57, 0xf8, 0xe8, 0x63, 0x4e, 0x79, 0x48, 0x87, 0xfc, 0x8d, 0xa0, 0x1f, 0x33, 0xdb, 0x3d, 0xd3, + 0x33, 0xbb, 0x56, 0x12, 0xfb, 0x22, 0xb1, 0xab, 0xbe, 0xfa, 0xa6, 0xab, 0xba, 0xba, 0xaa, 0xa7, + 0x77, 0xe0, 0x5a, 0xca, 0x93, 0x81, 0xc7, 0xd3, 0xf5, 0xec, 0x7f, 0x76, 0xcc, 0x22, 0x9e, 0xae, + 0xf5, 0x93, 0x98, 0xc7, 0xe8, 0x82, 0x96, 0xae, 0xe9, 0xff, 0x5b, 0x0b, 0xb4, 0x17, 0x44, 0xf1, + 0xba, 0xfc, 0x57, 0x61, 0x5a, 0x97, 0xba, 0x71, 0x37, 0x96, 0x7f, 0xae, 0x8b, 0xbf, 0xb4, 0xf4, + 0x5a, 0x37, 0x8e, 0xbb, 0x21, 0x5b, 0xa7, 0xfd, 0x60, 0x9d, 0x46, 0x51, 0xcc, 0x29, 0x0f, 0xe2, + 0x28, 0xcd, 0xb4, 0xc5, 0xa7, 0xf6, 0x69, 0x42, 0x7b, 0x99, 0x76, 0x45, 0xdb, 0xca, 0xd1, 0xc1, + 0xa0, 0xb3, 0xce, 0x83, 0x1e, 0x4b, 0x39, 0xed, 0xf5, 0x35, 0x60, 0xb9, 0x68, 0x4e, 0x7d, 0x3f, + 0x61, 0x69, 0x6e, 0x5f, 0x52, 0x77, 0x13, 0xc6, 0x7a, 0x2c, 0xe2, 0x1a, 0xb0, 0x5a, 0x02, 0x84, + 0x61, 0xec, 0xc9, 0x19, 0x6a, 0xc4, 0x52, 0x11, 0xd1, 0x09, 0x19, 0xcb, 0xcc, 0x5b, 0x45, 0x65, + 0x37, 0x09, 0xfc, 0x2a, 0xc3, 0xee, 0x20, 0x08, 0x33, 0x65, 0xbb, 0xa8, 0x0c, 0xa2, 0xce, 0x20, + 0x1d, 0x3d, 0xb5, 0x44, 0x7c, 0xc4, 0x86, 0x69, 0xd5, 0x9c, 0xfb, 0x2c, 0xe9, 0x05, 0xa9, 0x61, + 0x5d, 0x0e, 0x6a, 0x48, 0x87, 0x2c, 0xa9, 0xd1, 0x46, 0xb9, 0x4b, 0xa5, 0x99, 0xf5, 0x93, 0xf8, + 0x38, 0xf0, 0x73, 0xeb, 0x52, 0xc4, 0x13, 0x46, 0x3d, 0x1e, 0x57, 0x92, 0xab, 0xff, 0xab, 0xa6, + 0x9e, 0x0e, 0x0e, 0x52, 0x6e, 0x84, 0x1b, 0xbf, 0x05, 0x17, 0xee, 0x89, 0xbc, 0xdb, 0xc8, 0xd7, + 0x01, 0x7d, 0x13, 0x60, 0xb4, 0x2a, 0xcd, 0xc6, 0x6a, 0xe3, 0xd6, 0xcc, 0xdd, 0xa5, 0xb5, 0x42, + 0x3e, 0xae, 0x8d, 0x0c, 0x88, 0x01, 0xc7, 0x6f, 0xc2, 0x9c, 0xe2, 0xcb, 0x16, 0x1e, 0x7d, 0x03, + 0xa6, 0xf3, 0x2c, 0xd0, 0x6c, 0xad, 0x32, 0x5b, 0x86, 0x20, 0x23, 0x30, 0x7e, 0x03, 0x40, 0x72, + 0xdd, 0x17, 0x19, 0x80, 0xee, 0xc0, 0x19, 0x99, 0x0a, 0x9a, 0x63, 0xb1, 0xc4, 0x21, 0x61, 0x44, + 0x81, 0x72, 0xdb, 0x07, 0x22, 0x09, 0x84, 0xad, 0xcc, 0x86, 0x4a, 0x5b, 0x09, 0x23, 0x0a, 0x84, + 0xef, 0xc3, 0xac, 0xb4, 0x7d, 0xa8, 0x73, 0x04, 0xbd, 0x06, 0x53, 0x59, 0xbe, 0x68, 0x86, 0xab, + 0x25, 0x86, 0x0c, 0x4c, 0x72, 0x28, 0xfe, 0x36, 0xcc, 0x48, 0x9e, 0x5d, 0xb9, 0xde, 0x68, 0x1d, + 0xce, 0xaa, 0x95, 0xd7, 0x1c, 0x57, 0x4a, 0x1c, 0x0a, 0x48, 0x34, 0x0c, 0x73, 0xb8, 0x64, 0xd8, + 0x6f, 0x70, 0x9e, 0x04, 0x07, 0x03, 0xce, 0xd0, 0x0f, 0xe0, 0x72, 0xdf, 0x16, 0x11, 0xe6, 0xc5, + 0x49, 0xe6, 0xdd, 0xcd, 0x0a, 0xde, 0x02, 0x9a, 0xb8, 0x49, 0xcc, 0x59, 0x0f, 0x59, 0xa2, 0x67, + 0x3d, 0x64, 0x49, 0xdd, 0xac, 0x87, 0x2c, 0x21, 0x1a, 0x96, 0x47, 0x6f, 0x57, 0xe7, 0xb1, 0x88, + 0x5e, 0x96, 0xd3, 0x95, 0xd1, 0xcb, 0xc0, 0x24, 0x87, 0xe2, 0x4d, 0x38, 0x2f, 0x79, 0x88, 0xca, + 0x77, 0x74, 0x17, 0xce, 0xe9, 0xd4, 0xd7, 0x2c, 0xcd, 0x12, 0x8b, 0x86, 0x92, 0x0c, 0x88, 0xb7, + 0xb5, 0x2f, 0x7b, 0x12, 0x80, 0x5e, 0x83, 0x69, 0x05, 0x1d, 0x24, 0xac, 0xd2, 0x1d, 0x85, 0x25, + 0x23, 0x64, 0xbe, 0x0e, 0x4a, 0x63, 0xad, 0x43, 0x6a, 0x8b, 0xc6, 0xac, 0xc3, 0x9e, 0x0b, 0x4d, + 0xdc, 0x24, 0xf8, 0x7d, 0xb8, 0x68, 0x3c, 0x75, 0x9b, 0x75, 0x58, 0x24, 0xa2, 0xf9, 0x00, 0xe6, + 0x52, 0x4b, 0xa2, 0x9f, 0xb6, 0x52, 0xf1, 0xb4, 0x0c, 0x46, 0x0a, 0x66, 0xf9, 0xce, 0x57, 0xb0, + 0xfd, 0x61, 0x9f, 0x89, 0x9d, 0x9f, 0xe6, 0xa3, 0xca, 0x9d, 0x3f, 0x32, 0x20, 0x06, 0x7c, 0xc4, + 0x97, 0x97, 0x18, 0xc9, 0x97, 0x8f, 0xaa, 0xf9, 0x72, 0x08, 0x31, 0xe0, 0xf8, 0x5d, 0x98, 0x96, + 0x7c, 0xfb, 0x41, 0x8f, 0xa1, 0x37, 0xe1, 0x02, 0xcb, 0x06, 0xdb, 0x8c, 0xd3, 0x20, 0xd4, 0x74, + 0xab, 0x25, 0xba, 0x7b, 0x36, 0x8e, 0x14, 0x0d, 0xf1, 0x13, 0x3d, 0xd1, 0x91, 0x08, 0xad, 0xc2, + 0xcc, 0x41, 0x18, 0x7b, 0x47, 0x3b, 0x2c, 0xe8, 0x1e, 0xaa, 0xfd, 0x79, 0x8a, 0x98, 0x22, 0xb4, + 0x09, 0xd3, 0x72, 0x28, 0x8c, 0x9a, 0x27, 0x75, 0x15, 0x53, 0xdd, 0x72, 0x2d, 0xeb, 0x96, 0x6b, + 0xfb, 0x59, 0xb7, 0xdc, 0x9c, 0xfa, 0xf4, 0xef, 0x2b, 0x27, 0x3e, 0xfc, 0xc7, 0x4a, 0x83, 0x8c, + 0xcc, 0xf0, 0x8f, 0xf4, 0x83, 0x77, 0xf3, 0xfe, 0x81, 0x1e, 0xc1, 0xfc, 0xa8, 0x9b, 0x58, 0xd9, + 0xf3, 0x42, 0x79, 0x8f, 0x14, 0x80, 0xa4, 0x64, 0x8a, 0x77, 0x74, 0xcc, 0x1e, 0x24, 0x81, 0x2f, + 0xa2, 0x2f, 0xda, 0xa3, 0xc5, 0x5a, 0x8e, 0xfe, 0x83, 0x1c, 0x42, 0x0c, 0x38, 0xfe, 0x45, 0x23, + 0x2b, 0x3e, 0x7a, 0x3f, 0x6e, 0xa8, 0x46, 0x8f, 0x8e, 0xa0, 0xc5, 0x1c, 0x72, 0x6b, 0x51, 0xbe, + 0xea, 0x5e, 0x14, 0xa7, 0x09, 0xa9, 0xa1, 0xc3, 0xbf, 0x6c, 0x40, 0xab, 0xda, 0x14, 0xb5, 0x01, + 0xb2, 0x72, 0xf1, 0x50, 0x79, 0x38, 0x4d, 0x0c, 0x09, 0xba, 0x09, 0x73, 0x5e, 0x1c, 0x86, 0x94, + 0xb3, 0x84, 0x86, 0xbb, 0x71, 0x1c, 0xca, 0x95, 0x9b, 0x26, 0x05, 0xa9, 0x58, 0x7e, 0x46, 0x93, + 0x28, 0x88, 0xba, 0x12, 0x74, 0x4a, 0x82, 0x4c, 0x11, 0xfe, 0x43, 0x03, 0xae, 0x58, 0x13, 0x79, + 0x90, 0xd0, 0xac, 0xb9, 0x70, 0x58, 0x66, 0x6e, 0x95, 0x15, 0x94, 0xb5, 0xfa, 0xa0, 0x14, 0xad, + 0x48, 0x3d, 0x29, 0xfe, 0x3e, 0x2c, 0xd7, 0xda, 0x8f, 0x0d, 0x4e, 0x13, 0xce, 0xc9, 0x76, 0xf7, + 0xd0, 0xd7, 0x51, 0xc9, 0x86, 0xf8, 0x8f, 0x0d, 0x68, 0x5a, 0xdc, 0x84, 0x1d, 0xc7, 0x47, 0x4c, + 0x79, 0xfb, 0x04, 0xda, 0xac, 0x42, 0x67, 0xb9, 0xbb, 0x5e, 0xef, 0x6e, 0xc9, 0x8c, 0x8c, 0xa1, + 0xc5, 0xef, 0x41, 0xbb, 0x9e, 0xe1, 0xbf, 0xf0, 0x78, 0x1d, 0x16, 0x8c, 0x9e, 0xb7, 0x43, 0x43, + 0xce, 0x7c, 0xd4, 0x82, 0x29, 0xd5, 0xd2, 0x72, 0xb2, 0x7c, 0x8c, 0x5f, 0x06, 0x64, 0x18, 0x10, + 0x96, 0x0e, 0x7a, 0x63, 0x2c, 0x5e, 0xd2, 0xad, 0x68, 0x9b, 0x85, 0x8c, 0x33, 0x01, 0x8d, 0x0f, + 0x7e, 0xcc, 0x3c, 0x3e, 0x82, 0x66, 0x63, 0x1c, 0xe9, 0x5c, 0xd3, 0xc9, 0xbe, 0x91, 0xa6, 0xb1, + 0x17, 0xa8, 0x8a, 0xba, 0x07, 0x88, 0x96, 0xa4, 0x3a, 0xe2, 0xd7, 0xcb, 0xa7, 0xaa, 0x12, 0x94, + 0x38, 0xcc, 0xf1, 0x81, 0xde, 0xea, 0x19, 0xdc, 0xe3, 0xc1, 0x71, 0xc0, 0x87, 0xa2, 0xe8, 0x52, + 0x5b, 0x54, 0x59, 0x74, 0x0b, 0xa6, 0xa4, 0x68, 0x88, 0x7f, 0xd5, 0x80, 0xcb, 0xa3, 0x03, 0xd9, + 0x26, 0x8d, 0x8e, 0xb2, 0x82, 0x12, 0xc1, 0x12, 0x73, 0x29, 0xac, 0x6c, 0xba, 0xe3, 0xce, 0x26, + 0xb7, 0x0d, 0xa9, 0x23, 0xc4, 0xbf, 0x6b, 0xc0, 0x52, 0x8d, 0xb1, 0x99, 0x25, 0x0d, 0x2b, 0x4b, + 0xd0, 0x1a, 0xa0, 0x03, 0x1a, 0x1d, 0x6d, 0xb9, 0x4a, 0x8a, 0x43, 0x83, 0x6e, 0xc0, 0xac, 0x90, + 0xee, 0xc7, 0x47, 0x2c, 0x32, 0x0a, 0x8b, 0x2d, 0xc4, 0x3f, 0xd5, 0xa9, 0x94, 0x4f, 0xe7, 0x51, + 0x10, 0x71, 0xc4, 0xa0, 0xc9, 0x4a, 0x52, 0x2b, 0x24, 0x2f, 0x8d, 0x09, 0xc9, 0xc8, 0x80, 0x54, + 0x52, 0xe1, 0x3f, 0x65, 0x5b, 0xdd, 0xa1, 0xac, 0x89, 0xc4, 0x2a, 0xcc, 0xd0, 0x5e, 0x3c, 0x10, + 0xaf, 0x0d, 0xfd, 0x43, 0x2a, 0x43, 0x70, 0x9a, 0x98, 0xa2, 0x11, 0x42, 0x3a, 0x2a, 0x3d, 0xcf, + 0x11, 0x52, 0x64, 0x6d, 0x96, 0xd3, 0x85, 0xcd, 0x92, 0x77, 0x9f, 0x7c, 0x5a, 0x84, 0xf9, 0x8c, + 0xf5, 0xf2, 0xee, 0x53, 0x90, 0x4f, 0xd2, 0x7d, 0x9c, 0x26, 0xa4, 0x86, 0x0e, 0xff, 0x39, 0xeb, + 0x3e, 0x4e, 0xf5, 0x97, 0x18, 0x9e, 0x4f, 0x1a, 0xb0, 0x62, 0x4f, 0x6c, 0x2b, 0x8e, 0x3a, 0x41, + 0xea, 0x51, 0xce, 0x36, 0x22, 0x7f, 0x73, 0x90, 0x44, 0xe8, 0xb7, 0x0d, 0x78, 0x91, 0xd5, 0x63, + 0xac, 0xa8, 0xbd, 0x3e, 0x26, 0x6a, 0x15, 0xd6, 0x64, 0xb2, 0x87, 0xe0, 0x8f, 0x1a, 0xf0, 0xe2, + 0x44, 0x84, 0xff, 0xe7, 0xb0, 0x36, 0xe1, 0x9c, 0x2e, 0x4d, 0x3a, 0xaa, 0xd9, 0x10, 0xff, 0xde, + 0x0a, 0xea, 0x23, 0xd6, 0x3b, 0x60, 0x49, 0x7a, 0x18, 0xf4, 0x37, 0xfa, 0xfd, 0x30, 0xd0, 0xaf, + 0xc6, 0x47, 0xd0, 0xea, 0x56, 0x6a, 0x2b, 0xd3, 0xaf, 0x9a, 0x90, 0xd4, 0xd0, 0x61, 0x4f, 0xbf, + 0x00, 0x3d, 0x4e, 0xd8, 0xa3, 0x20, 0x62, 0xa2, 0xf6, 0x33, 0x63, 0x6c, 0xad, 0xde, 0x75, 0xf7, + 0xea, 0x59, 0x50, 0xe2, 0x30, 0xc7, 0x7d, 0x5d, 0x7d, 0x2c, 0x69, 0x5d, 0x23, 0x13, 0x87, 0xaa, + 0x7e, 0x12, 0xf4, 0x68, 0x32, 0xd4, 0x75, 0x33, 0x3b, 0x54, 0xd9, 0x52, 0xb4, 0x08, 0x67, 0x55, + 0xe0, 0xf5, 0x32, 0xe8, 0x11, 0x4e, 0x61, 0x5e, 0xdf, 0x38, 0xf4, 0x0f, 0x29, 0x61, 0x1d, 0xe1, + 0xda, 0x07, 0xb0, 0xc8, 0x0a, 0x32, 0xcb, 0xbd, 0xaf, 0xb8, 0xdd, 0x2b, 0xc1, 0x49, 0x05, 0x0d, + 0xe6, 0xb0, 0xe8, 0xb6, 0xf8, 0xe2, 0x5c, 0x95, 0x17, 0x04, 0x05, 0x57, 0x95, 0x6c, 0x62, 0x57, + 0x4d, 0x38, 0xa9, 0xa0, 0xb1, 0x5d, 0x35, 0x35, 0x5f, 0x9c, 0xab, 0xdb, 0xac, 0xec, 0xaa, 0x92, + 0x4d, 0xec, 0xaa, 0x09, 0x27, 0x15, 0x34, 0xf8, 0x7b, 0xa6, 0xab, 0xa6, 0xc6, 0xe1, 0x4e, 0x63, + 0x8c, 0x3b, 0x27, 0x2d, 0x77, 0xba, 0xfa, 0x12, 0xe3, 0x71, 0xc2, 0xf6, 0x0f, 0x59, 0x87, 0xa3, + 0x77, 0xe0, 0x22, 0x33, 0x05, 0x96, 0x23, 0x37, 0x2a, 0x77, 0x9f, 0x81, 0x25, 0x2e, 0x02, 0xfc, + 0xaf, 0x86, 0x7e, 0xcd, 0xb7, 0xe5, 0xe8, 0x2e, 0x5c, 0x3a, 0x0e, 0x3c, 0x1e, 0xf4, 0x76, 0x5d, + 0x6e, 0x38, 0x75, 0xc2, 0x69, 0x2d, 0xcf, 0x56, 0x59, 0xaf, 0xa1, 0x2d, 0x45, 0x2f, 0xc3, 0x45, + 0x7e, 0x18, 0xb0, 0x4e, 0x81, 0x5a, 0x9d, 0x4e, 0x5c, 0x2a, 0x71, 0x92, 0x51, 0x62, 0xbb, 0x23, + 0xd9, 0x42, 0x23, 0x98, 0x67, 0xac, 0x60, 0xc6, 0xfa, 0xbd, 0x57, 0xd6, 0x98, 0x6e, 0x42, 0xd5, + 0xd5, 0x09, 0xb3, 0x45, 0x56, 0x40, 0x6f, 0xd6, 0x94, 0x33, 0x03, 0x4d, 0xdc, 0x24, 0xf8, 0x2f, + 0xd9, 0x61, 0xb3, 0xa8, 0xf9, 0x9f, 0x6c, 0x81, 0x3b, 0xb0, 0x10, 0x87, 0xbe, 0x33, 0x78, 0x65, + 0x85, 0x11, 0x94, 0xd3, 0x56, 0x50, 0x7e, 0x93, 0x9d, 0xbc, 0xec, 0x6b, 0x9a, 0xad, 0x90, 0xd1, + 0x04, 0xf5, 0xe0, 0x6a, 0x5a, 0x16, 0x4f, 0xf2, 0x7e, 0xb5, 0x57, 0x65, 0x46, 0xaa, 0x19, 0xf1, + 0x5b, 0xfa, 0xd5, 0xaa, 0xd2, 0x58, 0xf8, 0xec, 0x4b, 0x71, 0x10, 0x75, 0x15, 0x2a, 0x0f, 0x60, + 0x59, 0x81, 0x3f, 0xd0, 0xef, 0x3a, 0x1b, 0x9c, 0x53, 0xef, 0x08, 0xed, 0xc2, 0x02, 0x1b, 0x0d, + 0x2d, 0x2f, 0x70, 0x45, 0x09, 0x30, 0x90, 0xa4, 0x6c, 0x8c, 0x7f, 0x0d, 0xfa, 0x85, 0xcd, 0x94, + 0xa2, 0xdb, 0x30, 0x4f, 0xe5, 0x98, 0x25, 0x85, 0x39, 0x96, 0xe4, 0xe2, 0x2c, 0x6f, 0xcb, 0xe4, + 0x95, 0x97, 0x2a, 0x02, 0x0e, 0x0d, 0x3a, 0x80, 0x96, 0x2d, 0xfd, 0xae, 0xbe, 0xf1, 0x96, 0x76, + 0x62, 0xf5, 0xe7, 0x1c, 0x97, 0x2b, 0xea, 0x95, 0x4e, 0x40, 0x36, 0xcf, 0x7c, 0xfc, 0xef, 0x4f, + 0x6e, 0x37, 0x48, 0x0d, 0x0b, 0x7a, 0x03, 0x9a, 0x6e, 0x6d, 0xbe, 0xe1, 0x2a, 0xf5, 0x88, 0xc2, + 0x35, 0x5b, 0xf7, 0xb8, 0xcf, 0x12, 0xca, 0x83, 0xa8, 0xbb, 0xd1, 0x3b, 0x08, 0xd4, 0x8e, 0x9c, + 0x73, 0x5c, 0x7c, 0x53, 0xa1, 0xcd, 0x26, 0x57, 0x4b, 0x51, 0x0e, 0xd9, 0x5e, 0x18, 0xf3, 0xe6, + 0x59, 0x57, 0xc8, 0x84, 0x06, 0xdd, 0x83, 0xf3, 0x4f, 0x18, 0xed, 0xc7, 0xd1, 0xde, 0x30, 0xe5, + 0xac, 0xd7, 0x3c, 0x27, 0xa7, 0x50, 0xbe, 0xd7, 0xe2, 0xcc, 0x3b, 0x7c, 0xd7, 0x00, 0x12, 0xcb, + 0x0c, 0xed, 0xc0, 0xac, 0x1a, 0x6f, 0xc5, 0x11, 0x4f, 0xe2, 0xb0, 0x39, 0x25, 0x79, 0x70, 0x0d, + 0x8f, 0x46, 0x12, 0xdb, 0x10, 0x7d, 0x07, 0xe6, 0xa8, 0x78, 0x1f, 0x65, 0x0a, 0x95, 0x0c, 0x9b, + 0xd3, 0x92, 0xea, 0xba, 0x93, 0x6a, 0xc3, 0x82, 0x92, 0x82, 0x69, 0x5e, 0xc1, 0x54, 0x06, 0xee, + 0x1d, 0xc6, 0x59, 0x4b, 0x80, 0xd5, 0x53, 0xd5, 0x15, 0xac, 0x88, 0x26, 0x6e, 0x12, 0xf4, 0x3a, + 0x2c, 0x26, 0xcc, 0x8b, 0x83, 0x70, 0x9b, 0xf6, 0x68, 0x97, 0xed, 0xc7, 0x1b, 0x3a, 0xbe, 0xcd, + 0x99, 0xd5, 0xc6, 0xad, 0x29, 0x52, 0xa1, 0x45, 0x18, 0xce, 0x9b, 0x9a, 0xe6, 0x79, 0xb9, 0x3a, + 0x96, 0x0c, 0x6d, 0xc3, 0xb2, 0x39, 0xde, 0x66, 0x29, 0x4f, 0xe2, 0x21, 0xf3, 0xf3, 0x47, 0xcc, + 0xca, 0x47, 0xd4, 0x83, 0xd0, 0x3b, 0x70, 0x53, 0xfd, 0x7e, 0x40, 0x93, 0xa1, 0xac, 0x18, 0x29, + 0xdb, 0xa2, 0x51, 0x14, 0x47, 0xa5, 0x19, 0xcf, 0x49, 0xba, 0x09, 0xd1, 0x68, 0x13, 0xae, 0xd5, + 0x21, 0x9b, 0x17, 0xa4, 0x47, 0xb5, 0x18, 0xe4, 0xc3, 0xd7, 0xea, 0xf4, 0x65, 0x8f, 0xe7, 0xe5, + 0x14, 0x3f, 0x9f, 0x91, 0x59, 0x6e, 0xf2, 0xbe, 0xb8, 0x60, 0x97, 0x9b, 0x5d, 0xa3, 0xb7, 0x70, + 0x9a, 0x74, 0x19, 0xcf, 0x91, 0x48, 0xf5, 0x16, 0x5b, 0x2a, 0x5a, 0x73, 0x66, 0xbb, 0xc3, 0x68, + 0xc8, 0x0f, 0x37, 0x3a, 0x9c, 0x25, 0xcd, 0x8b, 0xd2, 0x69, 0x97, 0x0a, 0x7f, 0xbc, 0xa0, 0x7b, + 0x5d, 0x29, 0x87, 0xf2, 0x67, 0x16, 0x8a, 0x61, 0x41, 0x2a, 0xfc, 0x30, 0x25, 0x46, 0x21, 0x2c, + 0xc9, 0xd1, 0xfb, 0xd0, 0x34, 0x65, 0xcf, 0x59, 0x04, 0x2b, 0x39, 0x44, 0xde, 0xbb, 0x74, 0x79, + 0x01, 0xac, 0xd0, 0xa2, 0x1f, 0x42, 0xcb, 0xd4, 0x3c, 0x4f, 0xf1, 0xab, 0x21, 0x28, 0x86, 0xc8, + 0x28, 0x7c, 0x25, 0xb9, 0x68, 0xf8, 0xec, 0x98, 0xfa, 0xcc, 0x97, 0x05, 0x6f, 0x8a, 0xe8, 0x11, + 0xda, 0x82, 0x19, 0xf5, 0xd7, 0x16, 0x1d, 0xa4, 0x4c, 0x57, 0x31, 0x77, 0x35, 0x7c, 0x3b, 0x0a, + 0xb8, 0x4e, 0xc1, 0x94, 0x98, 0x56, 0xe8, 0x5b, 0x70, 0x55, 0x0d, 0x37, 0x87, 0xbb, 0x85, 0x64, + 0x4d, 0x65, 0x35, 0x9b, 0x22, 0xd5, 0x00, 0x14, 0x41, 0xbb, 0x52, 0xa9, 0x66, 0x05, 0x72, 0x56, + 0x37, 0x9d, 0xb3, 0x2a, 0x99, 0x90, 0x31, 0x6c, 0xe2, 0x65, 0x5b, 0xfe, 0xfa, 0xc1, 0x7c, 0x5d, + 0xb6, 0xb2, 0xa1, 0x38, 0x4f, 0xe8, 0x3f, 0x37, 0x87, 0x79, 0x7a, 0x9e, 0x57, 0xe7, 0x89, 0x92, + 0x42, 0xec, 0x8a, 0x82, 0x50, 0x26, 0xdc, 0xac, 0xda, 0x15, 0x0e, 0x15, 0xf2, 0x61, 0xa9, 0x20, + 0xb6, 0x52, 0x75, 0x6e, 0xe2, 0x54, 0xad, 0xa3, 0x11, 0xab, 0x51, 0xa1, 0x7e, 0xe8, 0xcb, 0x42, + 0x35, 0x4d, 0xaa, 0x01, 0xc8, 0x83, 0xe5, 0x82, 0xb2, 0x90, 0xb6, 0xf3, 0x93, 0xa4, 0x6d, 0x3d, + 0x87, 0x23, 0x74, 0x32, 0x79, 0x17, 0x9c, 0xa1, 0x93, 0xf9, 0x7b, 0x1b, 0xe6, 0x95, 0x38, 0xc9, + 0x4b, 0x9e, 0x2c, 0x56, 0x53, 0xa4, 0x24, 0x47, 0x3f, 0x87, 0x55, 0xeb, 0x70, 0xa6, 0x0f, 0x8e, + 0xe2, 0x80, 0xcb, 0xb2, 0xe3, 0xea, 0x45, 0xd9, 0x0f, 0x5f, 0xa9, 0x3f, 0xe8, 0x39, 0x0c, 0xc9, + 0x58, 0x6a, 0xb4, 0x0a, 0x33, 0xbe, 0x2e, 0xce, 0x34, 0xe4, 0xcd, 0x4b, 0xea, 0xba, 0xc7, 0x10, + 0xa1, 0x5b, 0x70, 0x41, 0x0d, 0x09, 0xf3, 0x07, 0x9e, 0xbc, 0xa5, 0xb9, 0x2c, 0x51, 0x45, 0x31, + 0x7a, 0x1b, 0x2e, 0x15, 0x44, 0x6a, 0x47, 0x2c, 0x4e, 0xba, 0x4f, 0x9d, 0xe6, 0xa2, 0x1a, 0x28, + 0x79, 0xf3, 0x8a, 0x3a, 0xfe, 0xab, 0x91, 0x98, 0x98, 0xaa, 0x1c, 0xda, 0x23, 0xe6, 0x37, 0x9b, + 0x32, 0xc8, 0x45, 0x31, 0xfa, 0x3a, 0x5c, 0x2e, 0x88, 0x74, 0x27, 0xbc, 0x2a, 0x09, 0xdd, 0x4a, + 0x74, 0x1f, 0xda, 0x96, 0xa2, 0xdc, 0xf3, 0x5a, 0xf2, 0x71, 0x63, 0x50, 0x68, 0x1f, 0x90, 0x85, + 0x50, 0x41, 0x59, 0x92, 0x41, 0xb9, 0xe1, 0x2e, 0x13, 0x34, 0x4d, 0xcd, 0x83, 0x93, 0xc3, 0x7e, + 0xe4, 0xfd, 0x28, 0xc5, 0xae, 0x99, 0xde, 0x8f, 0x32, 0x6c, 0x07, 0x56, 0xfa, 0x71, 0xaa, 0x04, + 0x2a, 0xae, 0xa5, 0xf3, 0xc5, 0xb2, 0xb4, 0x1c, 0x07, 0x13, 0x71, 0x74, 0x42, 0x9a, 0x6d, 0x15, + 0x47, 0xa7, 0x52, 0x1e, 0x73, 0x5c, 0x8a, 0x72, 0x3c, 0x57, 0xf4, 0x31, 0x67, 0x22, 0x34, 0xf2, + 0xa1, 0xe5, 0x44, 0xaa, 0xf8, 0xae, 0x7e, 0x8e, 0xf8, 0xd6, 0xf0, 0x88, 0x23, 0xbb, 0x0a, 0xa8, + 0x3a, 0x31, 0x6c, 0xb2, 0x4e, 0x9c, 0xb0, 0xe6, 0x0b, 0xea, 0xc8, 0x5e, 0xd6, 0x88, 0xb2, 0x6c, + 0x4a, 0xd5, 0xe1, 0x03, 0x4b, 0x78, 0x59, 0x21, 0x7f, 0x0f, 0x51, 0x15, 0xc1, 0x84, 0x5f, 0x57, + 0xec, 0x65, 0x0d, 0xfe, 0xe8, 0x34, 0xac, 0x8e, 0xdb, 0xf5, 0x62, 0x0a, 0x9e, 0x12, 0x18, 0x9d, + 0x41, 0xbf, 0x69, 0x96, 0x14, 0xa2, 0xbc, 0x15, 0x84, 0xc6, 0xf1, 0xc5, 0xa5, 0x12, 0x9d, 0xa1, + 0x20, 0x7e, 0xce, 0x43, 0x4c, 0x1d, 0x8d, 0xe8, 0x0c, 0x15, 0xea, 0xfc, 0x28, 0x53, 0x0d, 0x10, + 0x9d, 0xa1, 0xa0, 0x7c, 0x9e, 0x03, 0x4d, 0x3d, 0x87, 0x23, 0x74, 0xc6, 0xb1, 0xc6, 0xa5, 0x42, + 0x37, 0x60, 0x56, 0x8b, 0xf5, 0xce, 0x39, 0x27, 0xb1, 0xb6, 0x50, 0xbc, 0xc5, 0x7a, 0x55, 0x35, + 0x67, 0x4a, 0xee, 0x91, 0x4a, 0x7d, 0xfe, 0xcd, 0x07, 0xa1, 0x81, 0x9f, 0x7f, 0xf3, 0x21, 0x06, + 0x93, 0x7c, 0xf3, 0x31, 0xc2, 0x91, 0xa2, 0x21, 0xfe, 0x99, 0xbe, 0x82, 0x1a, 0x89, 0xc4, 0xe1, + 0x44, 0x7e, 0x2a, 0x36, 0xfa, 0x9d, 0x41, 0x0f, 0xf5, 0x25, 0x51, 0x24, 0x55, 0x27, 0xf3, 0x4b, + 0x22, 0x39, 0x46, 0xaf, 0xc2, 0xd9, 0x94, 0x53, 0x3e, 0x48, 0x2b, 0x33, 0x25, 0xa1, 0x81, 0xbf, + 0x27, 0x21, 0x44, 0x43, 0xf3, 0xcb, 0xd1, 0x1d, 0x9a, 0x1e, 0xee, 0x0d, 0x3c, 0x8f, 0xa5, 0x69, + 0x7e, 0x39, 0x6a, 0xc8, 0x26, 0xb9, 0x1c, 0x2d, 0xc1, 0x49, 0x05, 0x0d, 0xfe, 0x6b, 0x43, 0xdf, + 0x8e, 0x96, 0x54, 0x72, 0x21, 0x69, 0x18, 0xe6, 0x9f, 0x53, 0xe8, 0x00, 0xd8, 0x42, 0x11, 0x06, + 0x8f, 0x72, 0xd6, 0x8d, 0x93, 0x61, 0x16, 0x86, 0x6c, 0x8c, 0xda, 0x00, 0x7e, 0xd0, 0xe9, 0x04, + 0xde, 0x20, 0xe4, 0x43, 0x7d, 0x15, 0x6c, 0x48, 0xac, 0x9f, 0xb7, 0x4f, 0xdb, 0x3f, 0x6f, 0x5b, + 0xe1, 0x3d, 0x63, 0x87, 0x77, 0xf3, 0x95, 0x4f, 0x9f, 0xb6, 0x1b, 0x9f, 0x3d, 0x6d, 0x37, 0xfe, + 0xf9, 0xb4, 0xdd, 0xf8, 0xf0, 0x59, 0xfb, 0xc4, 0x67, 0xcf, 0xda, 0x27, 0xfe, 0xf6, 0xac, 0x7d, + 0xe2, 0xbd, 0x2b, 0xd9, 0x27, 0x8c, 0x3f, 0xc9, 0x3f, 0x66, 0xe4, 0xc3, 0x3e, 0x4b, 0x0f, 0xce, + 0xca, 0xcf, 0x6f, 0x5e, 0xfd, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x65, 0xec, 0x44, 0x9b, 0x50, + 0x2b, 0x00, 0x00, } func (m *EventAllocation) Marshal() (dAtA []byte, err error) { @@ -5679,6 +5715,13 @@ func (m *EventAttackDetail) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.AttackerHealthAfter != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.AttackerHealthAfter)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x98 + } if len(m.TargetPlayerId) > 0 { i -= len(m.TargetPlayerId) copy(dAtA[i:], m.TargetPlayerId) @@ -5835,6 +5878,27 @@ func (m *EventAttackShotDetail) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.BlockerHealthAfter != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.BlockerHealthAfter)) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x98 + } + if m.TargetHealthAfter != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.TargetHealthAfter)) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x90 + } + if m.TargetHealthBefore != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.TargetHealthBefore)) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x88 + } if m.PostDestructionDamageCause != 0 { i = encodeVarintEvents(dAtA, i, uint64(m.PostDestructionDamageCause)) i-- @@ -7219,6 +7283,9 @@ func (m *EventAttackDetail) Size() (n int) { if l > 0 { n += 2 + l + sovEvents(uint64(l)) } + if m.AttackerHealthAfter != 0 { + n += 2 + sovEvents(uint64(m.AttackerHealthAfter)) + } return n } @@ -7331,6 +7398,15 @@ func (m *EventAttackShotDetail) Size() (n int) { if m.PostDestructionDamageCause != 0 { n += 2 + sovEvents(uint64(m.PostDestructionDamageCause)) } + if m.TargetHealthBefore != 0 { + n += 2 + sovEvents(uint64(m.TargetHealthBefore)) + } + if m.TargetHealthAfter != 0 { + n += 2 + sovEvents(uint64(m.TargetHealthAfter)) + } + if m.BlockerHealthAfter != 0 { + n += 2 + sovEvents(uint64(m.BlockerHealthAfter)) + } return n } @@ -13255,6 +13331,25 @@ func (m *EventAttackDetail) Unmarshal(dAtA []byte) error { } m.TargetPlayerId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 19: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AttackerHealthAfter", wireType) + } + m.AttackerHealthAfter = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.AttackerHealthAfter |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -13989,6 +14084,63 @@ func (m *EventAttackShotDetail) Unmarshal(dAtA []byte) error { break } } + case 33: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetHealthBefore", wireType) + } + m.TargetHealthBefore = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TargetHealthBefore |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 34: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetHealthAfter", wireType) + } + m.TargetHealthAfter = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TargetHealthAfter |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 35: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockerHealthAfter", wireType) + } + m.BlockerHealthAfter = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlockerHealthAfter |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) From da72c47a5df859e2543ba41a8a4dc9dd063b0bf0 Mon Sep 17 00:00:00 2001 From: abstrct Date: Thu, 29 Jan 2026 10:17:39 -0500 Subject: [PATCH 11/14] Upgrade to Cosmos SDKv0.53.5 and IBV v10 --- app/app.go | 33 +- app/app_config.go | 30 +- app/ibc.go | 154 +- docs/static/openapi.yml | 2 +- go.mod | 404 ++-- go.sum | 1655 +++++++++++++---- testutil/keeper/structs.go | 20 +- x/structs/keeper/allocation.go | 3 +- x/structs/keeper/guild_cache.go | 353 ++-- x/structs/keeper/keeper.go | 71 +- .../msg_server_struct_generator_infuse.go | 187 +- x/structs/module/module.go | 38 +- x/structs/module/module_ibc.go | 65 +- x/structs/types/expected_ibc_keeper.go | 21 +- x/structs/types/expected_keepers.go | 63 +- x/structs/types/genesis.go | 3 +- 16 files changed, 1959 insertions(+), 1143 deletions(-) diff --git a/app/app.go b/app/app.go index 3fd53ed..6f8c6fd 100644 --- a/app/app.go +++ b/app/app.go @@ -55,6 +55,7 @@ import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" _ "github.com/cosmos/cosmos-sdk/x/group/module" // import for side-effects + //_ "github.com/cosmos/cosmos-sdk/x/mint" // import for side-effects //mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" _ "github.com/cosmos/cosmos-sdk/x/params" // import for side-effects @@ -65,15 +66,11 @@ import ( slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" _ "github.com/cosmos/cosmos-sdk/x/staking" // import for side-effects stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - _ "github.com/cosmos/ibc-go/modules/capability" // import for side-effects - capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" - _ "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts" // import for side-effects - icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" - icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper" - _ "github.com/cosmos/ibc-go/v8/modules/apps/29-fee" // import for side-effects - ibcfeekeeper "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/keeper" - ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" - ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + _ "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts" // import for side-effects + icacontrollerkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/keeper" + icahostkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/keeper" + ibctransferkeeper "github.com/cosmos/ibc-go/v10/modules/apps/transfer/keeper" + ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" structsmodulekeeper "structs/x/structs/keeper" // this line is used by starport scaffolding # stargate/app/moduleImport @@ -113,7 +110,7 @@ type App struct { DistrKeeper distrkeeper.Keeper ConsensusParamsKeeper consensuskeeper.Keeper - SlashingKeeper slashingkeeper.Keeper + SlashingKeeper slashingkeeper.Keeper //MintKeeper mintkeeper.Keeper GovKeeper *govkeeper.Keeper CrisisKeeper *crisiskeeper.Keeper @@ -126,20 +123,12 @@ type App struct { NFTKeeper nftkeeper.Keeper CircuitBreakerKeeper circuitkeeper.Keeper - // IBC + // IBC (IBC v10 - no capability keeper or fee keeper needed) IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - CapabilityKeeper *capabilitykeeper.Keeper - IBCFeeKeeper ibcfeekeeper.Keeper ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper TransferKeeper ibctransferkeeper.Keeper - // Scoped IBC - ScopedIBCKeeper capabilitykeeper.ScopedKeeper - ScopedIBCTransferKeeper capabilitykeeper.ScopedKeeper - ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper - ScopedICAHostKeeper capabilitykeeper.ScopedKeeper - StructsKeeper structsmodulekeeper.Keeper // this line is used by starport scaffolding # stargate/app/keeperDeclaration @@ -210,7 +199,6 @@ func New( // Passing the getter, the app IBC Keeper will always be accessible. // This needs to be removed after IBC supports App Wiring. app.GetIBCKeeper, - app.GetCapabilityScopedKeeper, // Supply the logger logger, @@ -416,11 +404,6 @@ func (app *App) GetIBCKeeper() *ibckeeper.Keeper { return app.IBCKeeper } -// GetCapabilityScopedKeeper returns the capability scoped keeper. -func (app *App) GetCapabilityScopedKeeper(moduleName string) capabilitykeeper.ScopedKeeper { - return app.CapabilityKeeper.ScopeToModule(moduleName) -} - // SimulationManager implements the SimulationApp interface. func (app *App) SimulationManager() *module.SimulationManager { return app.sm diff --git a/app/app_config.go b/app/app_config.go index 215af60..78b3e01 100644 --- a/app/app_config.go +++ b/app/app_config.go @@ -21,6 +21,7 @@ import ( genutilmodulev1 "cosmossdk.io/api/cosmos/genutil/module/v1" govmodulev1 "cosmossdk.io/api/cosmos/gov/module/v1" groupmodulev1 "cosmossdk.io/api/cosmos/group/module/v1" + //mintmodulev1 "cosmossdk.io/api/cosmos/mint/module/v1" nftmodulev1 "cosmossdk.io/api/cosmos/nft/module/v1" paramsmodulev1 "cosmossdk.io/api/cosmos/params/module/v1" @@ -46,15 +47,14 @@ import ( genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/cosmos/cosmos-sdk/x/group" + //minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" - ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" - ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + icatypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types" + ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" + ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" "google.golang.org/protobuf/types/known/durationpb" // this line is used by starport scaffolding # stargate/app/moduleImport ) @@ -63,12 +63,8 @@ var ( // NOTE: The genutils module must occur after staking so that pools are // properly initialized with tokens from genesis accounts. // NOTE: The genutils module must also occur after auth so that it can access the params from auth. - // NOTE: Capability module must occur first so that it can initialize any capabilities - // so that other modules that want to create or claim capabilities afterwards in InitChain - // can do so safely. genesisModuleOrder = []string{ // cosmos-sdk/ibc modules - capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, distrtypes.ModuleName, @@ -83,7 +79,6 @@ var ( authz.ModuleName, ibctransfertypes.ModuleName, icatypes.ModuleName, - ibcfeetypes.ModuleName, feegrant.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, @@ -102,7 +97,6 @@ var ( // there is nothing left over in the validator fee pool, so as to keep the // CanWithdrawInvariant invariant. // NOTE: staking module is required if HistoricalEntries param > 0 - // NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC) beginBlockers = []string{ // cosmos sdk modules //minttypes.ModuleName, @@ -113,11 +107,9 @@ var ( authz.ModuleName, genutiltypes.ModuleName, // ibc modules - capabilitytypes.ModuleName, ibcexported.ModuleName, ibctransfertypes.ModuleName, icatypes.ModuleName, - ibcfeetypes.ModuleName, // chain modules structsmoduletypes.ModuleName, // this line is used by starport scaffolding # stargate/app/beginBlockers @@ -134,9 +126,7 @@ var ( // ibc modules ibcexported.ModuleName, ibctransfertypes.ModuleName, - capabilitytypes.ModuleName, icatypes.ModuleName, - ibcfeetypes.ModuleName, // chain modules structsmoduletypes.ModuleName, // this line is used by starport scaffolding # stargate/app/endBlockers @@ -144,6 +134,7 @@ var ( preBlockers = []string{ upgradetypes.ModuleName, + authtypes.ModuleName, // Required for SDK v0.53+ // this line is used by starport scaffolding # stargate/app/preBlockers } @@ -157,7 +148,6 @@ var ( {Account: govtypes.ModuleName, Permissions: []string{authtypes.Burner}}, {Account: nft.ModuleName}, {Account: ibctransfertypes.ModuleName, Permissions: []string{authtypes.Minter, authtypes.Burner}}, - {Account: ibcfeetypes.ModuleName}, {Account: icatypes.ModuleName}, {Account: structsmoduletypes.ModuleName, Permissions: []string{authtypes.Minter, authtypes.Burner, authtypes.Staking}}, // this line is used by starport scaffolding # stargate/app/maccPerms @@ -265,10 +255,10 @@ var ( Config: appconfig.WrapAny(&evidencemodulev1.Module{}), }, /* - { - Name: minttypes.ModuleName, - Config: appconfig.WrapAny(&mintmodulev1.Module{}), - }, + { + Name: minttypes.ModuleName, + Config: appconfig.WrapAny(&mintmodulev1.Module{}), + }, */ { Name: group.ModuleName, diff --git a/app/ibc.go b/app/ibc.go index 3d7b65c..ea0114a 100644 --- a/app/ibc.go +++ b/app/ibc.go @@ -4,35 +4,29 @@ import ( "cosmossdk.io/core/appmodule" storetypes "cosmossdk.io/store/types" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/cosmos/ibc-go/modules/capability" - capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - icamodule "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts" - icacontroller "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller" - icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" - icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" - ibcfee "github.com/cosmos/ibc-go/v8/modules/apps/29-fee" - ibcfeekeeper "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/keeper" - ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" - ibctransfer "github.com/cosmos/ibc-go/v8/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v8/modules/core" - ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" - solomachine "github.com/cosmos/ibc-go/v8/modules/light-clients/06-solomachine" - ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + icamodule "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts" + icacontroller "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller" + icacontrollerkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types" + ibctransfer "github.com/cosmos/ibc-go/v10/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v10/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v10/modules/core" + ibcclienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" + ibcconnectiontypes "github.com/cosmos/ibc-go/v10/modules/core/03-connection/types" + porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" + solomachine "github.com/cosmos/ibc-go/v10/modules/light-clients/06-solomachine" + ibctm "github.com/cosmos/ibc-go/v10/modules/light-clients/07-tendermint" // this line is used by starport scaffolding # ibc/app/import structsmodule "structs/x/structs/module" @@ -43,13 +37,10 @@ import ( func (app *App) registerIBCModules() { // set up non depinject support modules store keys if err := app.RegisterStores( - storetypes.NewKVStoreKey(capabilitytypes.StoreKey), storetypes.NewKVStoreKey(ibcexported.StoreKey), storetypes.NewKVStoreKey(ibctransfertypes.StoreKey), - storetypes.NewKVStoreKey(ibcfeetypes.StoreKey), storetypes.NewKVStoreKey(icahosttypes.StoreKey), storetypes.NewKVStoreKey(icacontrollertypes.StoreKey), - storetypes.NewMemoryStoreKey(capabilitytypes.MemStoreKey), storetypes.NewTransientStoreKey(paramstypes.TStoreKey), ); err != nil { panic(err) @@ -63,95 +54,60 @@ func (app *App) registerIBCModules() { app.ParamsKeeper.Subspace(icacontrollertypes.SubModuleName).WithKeyTable(icacontrollertypes.ParamKeyTable()) app.ParamsKeeper.Subspace(icahosttypes.SubModuleName).WithKeyTable(icahosttypes.ParamKeyTable()) - // add capability keeper and ScopeToModule for ibc module - app.CapabilityKeeper = capabilitykeeper.NewKeeper( - app.AppCodec(), - app.GetKey(capabilitytypes.StoreKey), - app.GetMemKey(capabilitytypes.MemStoreKey), - ) - - // add capability keeper and ScopeToModule for ibc module - scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName) - scopedIBCTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) - scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) + authority := authtypes.NewModuleAddress(govtypes.ModuleName).String() - // Create IBC keeper + // Create IBC keeper (IBC v10 - simplified API) app.IBCKeeper = ibckeeper.NewKeeper( app.appCodec, - app.GetKey(ibcexported.StoreKey), + runtime.NewKVStoreService(app.GetKey(ibcexported.StoreKey)), app.GetSubspace(ibcexported.ModuleName), - app.StakingKeeper, app.UpgradeKeeper, - scopedIBCKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - // Register the proposal types - // Deprecated: Avoid adding new handlers, instead use the new proposal flow - // by granting the governance module the right to execute the message. - // See: https://docs.cosmos.network/main/modules/gov#proposal-messages - govRouter := govv1beta1.NewRouter() - govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler) - - app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( - app.appCodec, app.GetKey(ibcfeetypes.StoreKey), - app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware - app.IBCKeeper.ChannelKeeper, - app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, + authority, ) - // Create IBC transfer keeper + // Create IBC transfer keeper (IBC v10) app.TransferKeeper = ibctransferkeeper.NewKeeper( app.appCodec, - app.GetKey(ibctransfertypes.StoreKey), + runtime.NewKVStoreService(app.GetKey(ibctransfertypes.StoreKey)), app.GetSubspace(ibctransfertypes.ModuleName), - app.IBCFeeKeeper, + app.IBCKeeper.ChannelKeeper, // ICS4Wrapper app.IBCKeeper.ChannelKeeper, - app.IBCKeeper.PortKeeper, + app.MsgServiceRouter(), app.AccountKeeper, app.BankKeeper, - scopedIBCTransferKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), + authority, ) - // Create interchain account keepers + // Create interchain account keepers (IBC v10) app.ICAHostKeeper = icahostkeeper.NewKeeper( app.appCodec, - app.GetKey(icahosttypes.StoreKey), + runtime.NewKVStoreService(app.GetKey(icahosttypes.StoreKey)), app.GetSubspace(icahosttypes.SubModuleName), - app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack + app.IBCKeeper.ChannelKeeper, // ICS4Wrapper app.IBCKeeper.ChannelKeeper, - app.IBCKeeper.PortKeeper, app.AccountKeeper, - scopedICAHostKeeper, app.MsgServiceRouter(), - authtypes.NewModuleAddress(govtypes.ModuleName).String(), + app.GRPCQueryRouter(), + authority, ) + app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( app.appCodec, - app.GetKey(icacontrollertypes.StoreKey), + runtime.NewKVStoreService(app.GetKey(icacontrollertypes.StoreKey)), app.GetSubspace(icacontrollertypes.SubModuleName), - app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack + app.IBCKeeper.ChannelKeeper, // ICS4Wrapper app.IBCKeeper.ChannelKeeper, - app.IBCKeeper.PortKeeper, - scopedICAControllerKeeper, app.MsgServiceRouter(), - authtypes.NewModuleAddress(govtypes.ModuleName).String(), + authority, ) - app.GovKeeper.SetLegacyRouter(govRouter) - // Create IBC modules with ibcfee middleware - transferIBCModule := ibcfee.NewIBCMiddleware(ibctransfer.NewIBCModule(app.TransferKeeper), app.IBCFeeKeeper) + // Create IBC modules (IBC v10) + transferIBCModule := ibctransfer.NewIBCModule(app.TransferKeeper) - // integration point for custom authentication modules - var noAuthzModule porttypes.IBCModule - icaControllerIBCModule := ibcfee.NewIBCMiddleware( - icacontroller.NewIBCMiddleware(noAuthzModule, app.ICAControllerKeeper), - app.IBCFeeKeeper, - ) + // ICA Controller stack - v10 uses NewIBCMiddleware directly + icaControllerIBCModule := icacontroller.NewIBCMiddleware(app.ICAControllerKeeper) - icaHostIBCModule := ibcfee.NewIBCMiddleware(icahost.NewIBCModule(app.ICAHostKeeper), app.IBCFeeKeeper) + icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) // Create static IBC router, add transfer route, then set and seal it ibcRouter := porttypes.NewRouter(). @@ -159,26 +115,30 @@ func (app *App) registerIBCModules() { AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) - structsIBCModule := ibcfee.NewIBCMiddleware(structsmodule.NewIBCModule(app.StructsKeeper), app.IBCFeeKeeper) + structsIBCModule := structsmodule.NewIBCModule(app.StructsKeeper) ibcRouter.AddRoute(structsmoduletypes.ModuleName, structsIBCModule) // this line is used by starport scaffolding # ibc/app/module app.IBCKeeper.SetRouter(ibcRouter) - app.ScopedIBCKeeper = scopedIBCKeeper - app.ScopedIBCTransferKeeper = scopedIBCTransferKeeper - app.ScopedICAHostKeeper = scopedICAHostKeeper - app.ScopedICAControllerKeeper = scopedICAControllerKeeper + // Setup light client modules + // Note: localhost is auto-registered by IBC v10 core + clientKeeper := app.IBCKeeper.ClientKeeper + storeProvider := app.IBCKeeper.ClientKeeper.GetStoreProvider() + + tmLightClientModule := ibctm.NewLightClientModule(app.appCodec, storeProvider) + clientKeeper.AddRoute(ibctm.ModuleName, &tmLightClientModule) + + smLightClientModule := solomachine.NewLightClientModule(app.appCodec, storeProvider) + clientKeeper.AddRoute(solomachine.ModuleName, &smLightClientModule) // register IBC modules if err := app.RegisterModules( ibc.NewAppModule(app.IBCKeeper), ibctransfer.NewAppModule(app.TransferKeeper), - ibcfee.NewAppModule(app.IBCFeeKeeper), icamodule.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper), - capability.NewAppModule(app.appCodec, *app.CapabilityKeeper, false), - ibctm.AppModule{}, - solomachine.AppModule{}, + ibctm.NewAppModule(tmLightClientModule), + solomachine.NewAppModule(smLightClientModule), ); err != nil { panic(err) } @@ -191,9 +151,7 @@ func RegisterIBC(registry cdctypes.InterfaceRegistry) map[string]appmodule.AppMo modules := map[string]appmodule.AppModule{ ibcexported.ModuleName: ibc.AppModule{}, ibctransfertypes.ModuleName: ibctransfer.AppModule{}, - ibcfeetypes.ModuleName: ibcfee.AppModule{}, icatypes.ModuleName: icamodule.AppModule{}, - capabilitytypes.ModuleName: capability.AppModule{}, ibctm.ModuleName: ibctm.AppModule{}, solomachine.ModuleName: solomachine.AppModule{}, } diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index 41a3746..6d53b2f 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1 +1 @@ -{"id":"structs","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain structs REST API","title":"HTTP API Console","contact":{"name":"structs"},"version":"version not set"},"paths":{"/blockheight":{"get":{"tags":["Query"],"operationId":"StructsQuery_GetBlockHeight","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryBlockHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AddressRegister":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AddressRegister","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAddressRegister"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAddressRegisterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AddressRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AddressRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAddressRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAddressRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementCapacityDecrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementCapacityDecrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementCapacityDecrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementCapacityIncrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementCapacityIncrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementCapacityIncrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementClose":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementClose","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementDurationIncrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementDurationIncrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementDurationIncrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementOpen":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementOpen","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementOpen"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationDeleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationTransfer":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationTransfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationUpdate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationUpdate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationUpdate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/FleetMove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_FleetMove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgFleetMove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgFleetMoveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankConfiscateAndBurn":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankConfiscateAndBurn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankConfiscateAndBurn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankConfiscateAndBurnResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankMint":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankMint","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankMint"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankMintResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankRedeem":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankRedeem","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankRedeem"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankRedeemResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInvite":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInvite","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInvite"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteApprove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteApprove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteApprove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteDeny":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteDeny","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteDeny"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipJoin":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipJoin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipJoin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipJoinProxy":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipJoinProxy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipJoinProxy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipKick":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipKick","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipKick"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequest":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestApprove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestApprove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestApprove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestDeny":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestDeny","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestDeny"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateEndpoint":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateEndpoint","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateEndpoint"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateEntrySubstationId":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateEntrySubstationId","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateEntrySubstationId"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimumBypassByInvite":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimumBypassByInvite","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByInvite"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimumBypassByRequest":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimumBypassByRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateOwnerId":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateOwnerId","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateOwnerId"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionGrantOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionGrantOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionGrantOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionGrantOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionGrantOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionGrantOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionRevokeOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionRevokeOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionRevokeOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionRevokeOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionRevokeOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionRevokeOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionSetOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionSetOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionSetOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionSetOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionSetOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionSetOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlanetExplore":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlanetExplore","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlanetExplore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlanetExploreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlanetRaidComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlanetRaidComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlanetRaidComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlanetRaidCompleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerResume":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerResume","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerResume"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerResumeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerSend":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerSend","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerUpdatePrimaryAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerUpdatePrimaryAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerUpdatePrimaryAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerUpdatePrimaryAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderGuildGrant":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderGuildGrant","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderGuildGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderGuildRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderGuildRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderGuildRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateAccessPolicy":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateAccessPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateAccessPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateCapacityMaximum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateCapacityMaximum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateCapacityMaximum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateCapacityMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateCapacityMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateCapacityMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateDurationMaximum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateDurationMaximum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateDurationMaximum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateDurationMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateDurationMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateDurationMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderWithdrawBalance":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderWithdrawBalance","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderWithdrawBalance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorBeginMigration":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorBeginMigration","parameters":[{"description":"MsgReactorBeginMigration 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/structs.structs.MsgReactorBeginMigration"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorBeginMigrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorCancelDefusion":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorCancelDefusion","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgReactorCancelDefusion"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorCancelDefusionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorDefuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorDefuse","parameters":[{"description":"MsgReactorDefuse defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgReactorDefuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorDefuseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorInfuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorInfuse","parameters":[{"description":"MsgReactorInfuse 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/structs.structs.MsgReactorInfuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorInfuseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructActivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructActivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructActivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructAttack":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructAttack","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructAttack"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructAttackResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildCancel":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildCancel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildCancel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildInitiate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildInitiate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildInitiate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDeactivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDeactivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDeactivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDefenseClear":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDefenseClear","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDefenseClear"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDefenseSet":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDefenseSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDefenseSet"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructGeneratorInfuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructGeneratorInfuse","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructGeneratorInfuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructGeneratorStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructMove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructMove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructMove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructOreMinerComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructOreMinerComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructOreMinerComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructOreMinerStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructOreRefineryComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructOreRefineryComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructOreRefineryComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructOreRefineryStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructStealthActivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructStealthActivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructStealthActivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructStealthDeactivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructStealthDeactivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructStealthDeactivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationAllocationConnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationAllocationConnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationConnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationConnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationAllocationDisconnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationAllocationDisconnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationDisconnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationDisconnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationDeleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerConnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerConnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerConnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerConnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerDisconnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerDisconnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerDisconnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerDisconnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerMigrate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerMigrate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerMigrate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerMigrateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.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":"StructsMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/address":{"get":{"tags":["Query"],"operationId":"StructsQuery_AddressAll","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/structs.structs.QueryAllAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/address/{address}":{"get":{"tags":["Query"],"summary":"Queries for Addresses.","operationId":"StructsQuery_Address","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/address_by_player/{playerId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_AddressAllByPlayer","parameters":[{"type":"string","name":"playerId","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/agreement":{"get":{"tags":["Query"],"operationId":"StructsQuery_AgreementAll","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/structs.structs.QueryAllAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/agreement/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Agreement items.","operationId":"StructsQuery_Agreement","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/agreement_by_provider/{providerId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_AgreementAllByProvider","parameters":[{"type":"string","name":"providerId","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/allocation":{"get":{"tags":["Query"],"operationId":"StructsQuery_AllocationAll","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/structs.structs.QueryAllAllocationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/allocation/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Allocation items.","operationId":"StructsQuery_Allocation","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetAllocationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/allocation_by_destination/{destinationId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_AllocationAllByDestination","parameters":[{"type":"string","name":"destinationId","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllAllocationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/allocation_by_source/{sourceId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_AllocationAllBySource","parameters":[{"type":"string","name":"sourceId","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllAllocationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/fleet":{"get":{"tags":["Query"],"operationId":"StructsQuery_FleetAll","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/structs.structs.QueryAllFleetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/fleet/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Fleet items.","operationId":"StructsQuery_Fleet","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetFleetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/fleet_by_index/{index}":{"get":{"tags":["Query"],"operationId":"StructsQuery_FleetByIndex","parameters":[{"type":"string","format":"uint64","name":"index","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetFleetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/grid":{"get":{"tags":["Query"],"summary":"Queries a list of all Grid details","operationId":"StructsQuery_GridAll","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/structs.structs.QueryAllGridResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/grid/{attributeId}":{"get":{"tags":["Query"],"summary":"Queries a specific Grid details","operationId":"StructsQuery_Grid","parameters":[{"type":"string","name":"attributeId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetGridResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/guild":{"get":{"tags":["Query"],"operationId":"StructsQuery_GuildAll","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/structs.structs.QueryAllGuildResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/guild/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Guild items.","operationId":"StructsQuery_Guild","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetGuildResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/guild_bank_collateral_address":{"get":{"tags":["Query"],"operationId":"StructsQuery_GuildBankCollateralAddressAll","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/structs.structs.QueryAllGuildBankCollateralAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/guild_bank_collateral_address/{guildId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_GuildBankCollateralAddress","parameters":[{"type":"string","name":"guildId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllGuildBankCollateralAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/guild_membership_application":{"get":{"tags":["Query"],"operationId":"StructsQuery_GuildMembershipApplicationAll","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/structs.structs.QueryAllGuildMembershipApplicationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/guild_membership_application/{guildId}/{playerId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_GuildMembershipApplication","parameters":[{"type":"string","name":"guildId","in":"path","required":true},{"type":"string","name":"playerId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetGuildMembershipApplicationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/infusion":{"get":{"tags":["Query"],"operationId":"StructsQuery_InfusionAll","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/structs.structs.QueryAllInfusionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/infusion/{destinationId}/{address}":{"get":{"tags":["Query"],"summary":"Queries a list of Infusions.","operationId":"StructsQuery_Infusion","parameters":[{"type":"string","name":"destinationId","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetInfusionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/infusion_by_destination/{destinationId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_InfusionAllByDestination","parameters":[{"type":"string","name":"destinationId","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllInfusionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/permission":{"get":{"tags":["Query"],"summary":"Queries a list of all Permissions","operationId":"StructsQuery_PermissionAll","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/structs.structs.QueryAllPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/permission/object/{objectId}":{"get":{"tags":["Query"],"summary":"Queries a list of Permissions based on Object","operationId":"StructsQuery_PermissionByObject","parameters":[{"type":"string","name":"objectId","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/permission/player/{playerId}":{"get":{"tags":["Query"],"summary":"Queries a list of Permissions based on the Player with the permissions","operationId":"StructsQuery_PermissionByPlayer","parameters":[{"type":"string","name":"playerId","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/permission/{permissionId}":{"get":{"tags":["Query"],"summary":"Queries a specific Permission","operationId":"StructsQuery_Permission","parameters":[{"type":"string","name":"permissionId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/planet":{"get":{"tags":["Query"],"operationId":"StructsQuery_PlanetAll","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/structs.structs.QueryAllPlanetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/planet/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Planet items.","operationId":"StructsQuery_Planet","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetPlanetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/planet_attribute":{"get":{"tags":["Query"],"summary":"Queries a list of all Planet Attributes","operationId":"StructsQuery_PlanetAttributeAll","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/structs.structs.QueryAllPlanetAttributeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/planet_attribute/{planetId}/{attributeType}":{"get":{"tags":["Query"],"operationId":"StructsQuery_PlanetAttribute","parameters":[{"type":"string","name":"planetId","in":"path","required":true},{"type":"string","name":"attributeType","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetPlanetAttributeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/planet_by_player/{playerId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_PlanetAllByPlayer","parameters":[{"type":"string","name":"playerId","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllPlanetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/player":{"get":{"tags":["Query"],"operationId":"StructsQuery_PlayerAll","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/structs.structs.QueryAllPlayerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/player/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Player items.","operationId":"StructsQuery_Player","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetPlayerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/player_halted":{"get":{"tags":["Query"],"operationId":"StructsQuery_PlayerHaltedAll","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllPlayerHaltedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/provider":{"get":{"tags":["Query"],"operationId":"StructsQuery_ProviderAll","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/structs.structs.QueryAllProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/provider/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Allocation items.","operationId":"StructsQuery_Provider","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/provider_collateral_address":{"get":{"tags":["Query"],"operationId":"StructsQuery_ProviderCollateralAddressAll","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/structs.structs.QueryAllProviderCollateralAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/provider_collateral_address/{providerId}":{"get":{"tags":["Query"],"operationId":"StructsQuery_ProviderCollateralAddress","parameters":[{"type":"string","name":"providerId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllProviderCollateralAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/provider_earnings_address":{"get":{"tags":["Query"],"operationId":"StructsQuery_ProviderEarningsAddressAll","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/structs.structs.QueryAllProviderEarningsAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/provider_earnings_address/{providerId}":{"get":{"tags":["Query"],"summary":"TODO Requires a lookup table that I don't know if we care about\nrpc ProviderByCollateralAddress (QueryGetProviderByCollateralAddressRequest) returns (QueryGetProviderResponse) {\noption (google.api.http).get = \"/structs/provider_by_collateral_address/{address}\";\n}","operationId":"StructsQuery_ProviderEarningsAddress","parameters":[{"type":"string","name":"providerId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryAllProviderEarningsAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/reactor":{"get":{"tags":["Query"],"operationId":"StructsQuery_ReactorAll","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/structs.structs.QueryAllReactorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/reactor/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Reactor items.","operationId":"StructsQuery_Reactor","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetReactorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/struct":{"get":{"tags":["Query"],"operationId":"StructsQuery_StructAll","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/structs.structs.QueryAllStructResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/struct/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Structs items.","operationId":"StructsQuery_Struct","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetStructResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/struct_attribute":{"get":{"tags":["Query"],"summary":"Queries a list of all Struct Attributes","operationId":"StructsQuery_StructAttributeAll","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/structs.structs.QueryAllStructAttributeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/struct_attribute/{structId}/{attributeType}":{"get":{"tags":["Query"],"operationId":"StructsQuery_StructAttribute","parameters":[{"type":"string","name":"structId","in":"path","required":true},{"type":"string","name":"attributeType","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetStructAttributeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/struct_type":{"get":{"tags":["Query"],"operationId":"StructsQuery_StructTypeAll","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/structs.structs.QueryAllStructTypeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/struct_type/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Struct Types items.","operationId":"StructsQuery_StructType","parameters":[{"type":"string","format":"uint64","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetStructTypeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/structs/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"StructsQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/substation":{"get":{"tags":["Query"],"operationId":"StructsQuery_SubstationAll","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/structs.structs.QueryAllSubstationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/substation/{id}":{"get":{"tags":["Query"],"summary":"Queries a list of Substation items.","operationId":"StructsQuery_Substation","parameters":[{"type":"string","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryGetSubstationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs/validate_signature/{address}/{proofPubKey}/{proofSignature}/{message}":{"get":{"tags":["Query"],"operationId":"StructsQuery_ValidateSignature","parameters":[{"type":"string","name":"address","in":"path","required":true},{"type":"string","name":"proofPubKey","in":"path","required":true},{"type":"string","name":"proofSignature","in":"path","required":true},{"type":"string","name":"message","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.QueryValidateSignatureResponse"}},"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.\n\nSince: cosmos-sdk 0.43","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"}}},"structs.structs.Agreement":{"type":"object","properties":{"allocationId":{"type":"string"},"capacity":{"type":"string","format":"uint64"},"creator":{"type":"string"},"endBlock":{"type":"string","format":"uint64"},"id":{"type":"string"},"owner":{"type":"string"},"providerId":{"type":"string"},"startBlock":{"type":"string","format":"uint64"}}},"structs.structs.Allocation":{"type":"object","properties":{"controller":{"type":"string"},"creator":{"type":"string","title":"Who does this currently belong to"},"destinationId":{"type":"string"},"id":{"type":"string"},"index":{"type":"string","format":"uint64"},"locked":{"type":"boolean","title":"Locking will be needed for IBC"},"sourceObjectId":{"type":"string","title":"Core allocation details"},"type":{"$ref":"#/definitions/structs.structs.allocationType"}}},"structs.structs.Fleet":{"type":"object","properties":{"air":{"type":"array","items":{"type":"string"}},"airSlots":{"type":"string","format":"uint64"},"commandStruct":{"type":"string"},"id":{"type":"string"},"land":{"type":"array","items":{"type":"string"}},"landSlots":{"type":"string","format":"uint64"},"locationId":{"type":"string"},"locationListBackward":{"type":"string","title":"Towards End of List"},"locationListForward":{"type":"string","title":"Towards Planet"},"locationType":{"$ref":"#/definitions/structs.structs.objectType"},"owner":{"type":"string"},"space":{"type":"array","items":{"type":"string"}},"spaceSlots":{"type":"string","format":"uint64"},"status":{"$ref":"#/definitions/structs.structs.fleetStatus"},"water":{"type":"array","items":{"type":"string"}},"waterSlots":{"type":"string","format":"uint64"}}},"structs.structs.GridAttributes":{"type":"object","properties":{"allocationPointerEnd":{"type":"string","format":"uint64"},"allocationPointerStart":{"type":"string","format":"uint64"},"capacity":{"type":"string","format":"uint64"},"checkpointBlock":{"type":"string","format":"uint64"},"connectionCapacity":{"type":"string","format":"uint64"},"connectionCount":{"type":"string","format":"uint64"},"fuel":{"type":"string","format":"uint64"},"lastAction":{"type":"string","format":"uint64"},"load":{"type":"string","format":"uint64"},"nonce":{"type":"string","format":"uint64"},"ore":{"type":"string","format":"uint64"},"power":{"type":"string","format":"uint64"},"proxyNonce":{"type":"string","format":"uint64"},"ready":{"type":"string","format":"uint64"},"structsLoad":{"type":"string","format":"uint64"}}},"structs.structs.GridRecord":{"type":"object","properties":{"attributeId":{"type":"string"},"value":{"type":"string","format":"uint64"}}},"structs.structs.Guild":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"entrySubstationId":{"type":"string"},"id":{"type":"string"},"index":{"type":"string","format":"uint64"},"joinInfusionMinimum":{"type":"string","format":"uint64"},"joinInfusionMinimumBypassByInvite":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"},"joinInfusionMinimumBypassByRequest":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"},"owner":{"type":"string"},"primaryReactorId":{"type":"string"}}},"structs.structs.GuildMembershipApplication":{"type":"object","properties":{"guildId":{"type":"string"},"joinType":{"title":"Invite | Request","$ref":"#/definitions/structs.structs.guildJoinType"},"playerId":{"type":"string"},"proposer":{"type":"string"},"registrationStatus":{"$ref":"#/definitions/structs.structs.registrationStatus"},"substationId":{"type":"string"}}},"structs.structs.Infusion":{"type":"object","properties":{"address":{"type":"string"},"commission":{"type":"string"},"defusing":{"type":"string","format":"uint64"},"destinationId":{"type":"string"},"destinationType":{"$ref":"#/definitions/structs.structs.objectType"},"fuel":{"type":"string","format":"uint64"},"playerId":{"type":"string"},"power":{"type":"string","format":"uint64"},"ratio":{"type":"string","format":"uint64"}}},"structs.structs.InternalAddressAssociation":{"type":"object","properties":{"address":{"type":"string"},"objectId":{"type":"string"}}},"structs.structs.MsgAddressRegister":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"},"proofPubKey":{"type":"string"},"proofSignature":{"type":"string"}}},"structs.structs.MsgAddressRegisterResponse":{"type":"object"},"structs.structs.MsgAddressRevoke":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAddressRevokeResponse":{"type":"object"},"structs.structs.MsgAgreementCapacityDecrease":{"type":"object","properties":{"agreementId":{"type":"string"},"capacityDecrease":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementCapacityIncrease":{"type":"object","properties":{"agreementId":{"type":"string"},"capacityIncrease":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementClose":{"type":"object","properties":{"agreementId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementDurationIncrease":{"type":"object","properties":{"agreementId":{"type":"string"},"creator":{"type":"string"},"durationIncrease":{"type":"string","format":"uint64"}}},"structs.structs.MsgAgreementOpen":{"type":"object","properties":{"capacity":{"type":"string","format":"uint64"},"creator":{"type":"string"},"duration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgAgreementResponse":{"type":"object"},"structs.structs.MsgAllocationCreate":{"type":"object","properties":{"allocationType":{"$ref":"#/definitions/structs.structs.allocationType"},"controller":{"type":"string"},"creator":{"type":"string"},"power":{"type":"string","format":"uint64"},"sourceObjectId":{"type":"string"}}},"structs.structs.MsgAllocationCreateResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationDelete":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAllocationDeleteResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationTransfer":{"type":"object","properties":{"allocationId":{"type":"string"},"controller":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAllocationTransferResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationUpdate":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"power":{"type":"string","format":"uint64"}}},"structs.structs.MsgAllocationUpdateResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgFleetMove":{"type":"object","properties":{"creator":{"type":"string"},"destinationLocationId":{"type":"string"},"fleetId":{"type":"string"}}},"structs.structs.MsgFleetMoveResponse":{"type":"object","properties":{"fleet":{"$ref":"#/definitions/structs.structs.Fleet"}}},"structs.structs.MsgGuildBankConfiscateAndBurn":{"type":"object","properties":{"address":{"type":"string"},"amountToken":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankConfiscateAndBurnResponse":{"type":"object"},"structs.structs.MsgGuildBankMint":{"type":"object","properties":{"amountAlpha":{"type":"string","format":"uint64"},"amountToken":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankMintResponse":{"type":"object"},"structs.structs.MsgGuildBankRedeem":{"type":"object","properties":{"amountToken":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankRedeemResponse":{"type":"object"},"structs.structs.MsgGuildCreate":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"entrySubstationId":{"type":"string"}}},"structs.structs.MsgGuildCreateResponse":{"type":"object","properties":{"guildId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInvite":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteApprove":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteDeny":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipJoin":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"infusionId":{"type":"array","items":{"type":"string"}},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipJoinProxy":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"proofPubKey":{"type":"string"},"proofSignature":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipKick":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequest":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestApprove":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestDeny":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipResponse":{"type":"object","properties":{"guildMembershipApplication":{"$ref":"#/definitions/structs.structs.GuildMembershipApplication"}}},"structs.structs.MsgGuildUpdateEndpoint":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"guildId":{"type":"string"}}},"structs.structs.MsgGuildUpdateEntrySubstationId":{"type":"object","properties":{"creator":{"type":"string"},"entrySubstationId":{"type":"string"},"guildId":{"type":"string"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimum":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"joinInfusionMinimum":{"type":"string","format":"uint64"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByInvite":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"guildJoinBypassLevel":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByRequest":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"guildJoinBypassLevel":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"}}},"structs.structs.MsgGuildUpdateOwnerId":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.MsgGuildUpdateResponse":{"type":"object"},"structs.structs.MsgPermissionGrantOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionGrantOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPermissionResponse":{"type":"object"},"structs.structs.MsgPermissionRevokeOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionRevokeOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPermissionSetOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionSetOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPlanetExplore":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgPlanetExploreResponse":{"type":"object","properties":{"planet":{"$ref":"#/definitions/structs.structs.Planet"}}},"structs.structs.MsgPlanetRaidComplete":{"type":"object","properties":{"creator":{"type":"string"},"fleetId":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"}}},"structs.structs.MsgPlanetRaidCompleteResponse":{"type":"object","properties":{"fleet":{"$ref":"#/definitions/structs.structs.Fleet"},"oreStolen":{"type":"string","format":"uint64"},"planet":{"$ref":"#/definitions/structs.structs.Planet"}}},"structs.structs.MsgPlayerResume":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgPlayerResumeResponse":{"type":"object"},"structs.structs.MsgPlayerSend":{"type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"creator":{"type":"string"},"from_address":{"type":"string"},"player_id":{"type":"string"},"to_address":{"type":"string"}}},"structs.structs.MsgPlayerSendResponse":{"description":"This message has no fields.","type":"object"},"structs.structs.MsgPlayerUpdatePrimaryAddress":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"},"primaryAddress":{"type":"string"}}},"structs.structs.MsgPlayerUpdatePrimaryAddressResponse":{"type":"object"},"structs.structs.MsgProviderCreate":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"capacityMaximum":{"type":"string","format":"uint64"},"capacityMinimum":{"type":"string","format":"uint64"},"consumerCancellationPenalty":{"type":"string"},"creator":{"type":"string"},"durationMaximum":{"type":"string","format":"uint64"},"durationMinimum":{"type":"string","format":"uint64"},"providerCancellationPenalty":{"type":"string"},"rate":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"substationId":{"type":"string"}}},"structs.structs.MsgProviderDelete":{"type":"object","properties":{"creator":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderGuildGrant":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"array","items":{"type":"string"}},"providerId":{"type":"string"}}},"structs.structs.MsgProviderGuildRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"array","items":{"type":"string"}},"providerId":{"type":"string"}}},"structs.structs.MsgProviderResponse":{"type":"object"},"structs.structs.MsgProviderUpdateAccessPolicy":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"creator":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateCapacityMaximum":{"type":"object","properties":{"creator":{"type":"string"},"newMaximumCapacity":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateCapacityMinimum":{"type":"object","properties":{"creator":{"type":"string"},"newMinimumCapacity":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateDurationMaximum":{"type":"object","properties":{"creator":{"type":"string"},"newMaximumDuration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateDurationMinimum":{"type":"object","properties":{"creator":{"type":"string"},"newMinimumDuration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderWithdrawBalance":{"type":"object","properties":{"creator":{"type":"string"},"destinationAddress":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgReactorBeginMigration":{"description":"MsgReactorBeginMigration 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"structs.structs.MsgReactorBeginMigrationResponse":{"description":"MsgBeginMigrationResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"structs.structs.MsgReactorCancelDefusion":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgReactorCancelDefusion 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorCancelDefusionResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgReactorCancelDefusionResponse"},"structs.structs.MsgReactorDefuse":{"description":"MsgReactorDefuse defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorDefuseResponse":{"description":"MsgReactorDefuseResponse 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"}}},"structs.structs.MsgReactorInfuse":{"description":"MsgReactorInfuse 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorInfuseResponse":{"description":"MsgReactorInfuseResponse defines the Msg/Delegate response type.","type":"object"},"structs.structs.MsgStructActivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructAttack":{"type":"object","properties":{"creator":{"type":"string"},"operatingStructId":{"type":"string"},"targetStructId":{"type":"array","items":{"type":"string"}},"weaponSystem":{"type":"string"}}},"structs.structs.MsgStructAttackResponse":{"type":"object"},"structs.structs.MsgStructBuildCancel":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructBuildComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructBuildInitiate":{"type":"object","properties":{"creator":{"type":"string"},"operatingAmbit":{"title":"objectType locationType = 4;","$ref":"#/definitions/structs.structs.ambit"},"playerId":{"type":"string"},"slot":{"type":"string","format":"uint64"},"structTypeId":{"type":"string","format":"uint64"}}},"structs.structs.MsgStructDeactivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructDefenseClear":{"type":"object","properties":{"creator":{"type":"string"},"defenderStructId":{"type":"string"}}},"structs.structs.MsgStructDefenseSet":{"type":"object","properties":{"creator":{"type":"string"},"defenderStructId":{"type":"string"},"protectedStructId":{"type":"string"}}},"structs.structs.MsgStructGeneratorInfuse":{"type":"object","properties":{"creator":{"type":"string"},"infuseAmount":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructGeneratorStatusResponse":{"type":"object"},"structs.structs.MsgStructMove":{"type":"object","properties":{"ambit":{"$ref":"#/definitions/structs.structs.ambit"},"creator":{"type":"string"},"locationType":{"$ref":"#/definitions/structs.structs.objectType"},"slot":{"type":"string","format":"uint64"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreMinerComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreMinerStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructOreRefineryComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreRefineryStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructStealthActivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructStealthDeactivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgSubstationAllocationConnect":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"destinationId":{"type":"string"}}},"structs.structs.MsgSubstationAllocationConnectResponse":{"type":"object"},"structs.structs.MsgSubstationAllocationDisconnect":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgSubstationAllocationDisconnectResponse":{"type":"object"},"structs.structs.MsgSubstationCreate":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.MsgSubstationCreateResponse":{"type":"object","properties":{"substationId":{"type":"string"}}},"structs.structs.MsgSubstationDelete":{"type":"object","properties":{"creator":{"type":"string"},"migrationSubstationId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationDeleteResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerConnect":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerConnectResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerDisconnect":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerDisconnectResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerMigrate":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"array","items":{"type":"string"}},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerMigrateResponse":{"type":"object"},"structs.structs.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":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/structs.structs.Params"}}},"structs.structs.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"structs.structs.Params":{"description":"Params defines the parameters for the module.","type":"object"},"structs.structs.PermissionRecord":{"type":"object","properties":{"permissionId":{"type":"string"},"value":{"type":"string","format":"uint64"}}},"structs.structs.Planet":{"type":"object","properties":{"air":{"type":"array","items":{"type":"string"}},"airSlots":{"type":"string","format":"uint64"},"creator":{"type":"string"},"id":{"type":"string"},"land":{"type":"array","items":{"type":"string"}},"landSlots":{"type":"string","format":"uint64"},"locationListLast":{"type":"string","title":"End of the line"},"locationListStart":{"type":"string","title":"First in line to battle planet"},"maxOre":{"type":"string","format":"uint64"},"owner":{"type":"string"},"space":{"type":"array","items":{"type":"string"}},"spaceSlots":{"type":"string","format":"uint64"},"status":{"$ref":"#/definitions/structs.structs.planetStatus"},"water":{"type":"array","items":{"type":"string"}},"waterSlots":{"type":"string","format":"uint64"}}},"structs.structs.PlanetAttributeRecord":{"type":"object","properties":{"attributeId":{"type":"string"},"value":{"type":"string","format":"uint64"}}},"structs.structs.PlanetAttributes":{"type":"object","properties":{"advancedLowOrbitBallisticsInterceptorNetworkQuantity":{"type":"string","format":"uint64"},"advancedOrbitalJammingStationQuantity":{"type":"string","format":"uint64"},"blockStartRaid":{"type":"string","format":"uint64"},"coordinatedGlobalShieldNetworkQuantity":{"type":"string","format":"uint64"},"defensiveCannonQuantity":{"type":"string","format":"uint64"},"lowOrbitBallisticsInterceptorNetworkQuantity":{"type":"string","format":"uint64"},"lowOrbitBallisticsInterceptorNetworkSuccessRateDenominator":{"type":"string","format":"uint64"},"lowOrbitBallisticsInterceptorNetworkSuccessRateNumerator":{"type":"string","format":"uint64"},"orbitalJammingStationQuantity":{"type":"string","format":"uint64"},"planetaryShield":{"type":"string","format":"uint64"},"repairNetworkQuantity":{"type":"string","format":"uint64"}}},"structs.structs.Player":{"type":"object","properties":{"creator":{"type":"string"},"fleetId":{"type":"string"},"guildId":{"type":"string"},"id":{"type":"string"},"index":{"type":"string","format":"uint64"},"planetId":{"type":"string"},"primaryAddress":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.PlayerInventory":{"type":"object","properties":{"rocks":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"structs.structs.Provider":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"capacityMaximum":{"type":"string","format":"uint64"},"capacityMinimum":{"type":"string","format":"uint64"},"consumerCancellationPenalty":{"type":"string"},"creator":{"type":"string"},"durationMaximum":{"type":"string","format":"uint64"},"durationMinimum":{"type":"string","format":"uint64"},"id":{"type":"string"},"index":{"type":"string","format":"uint64"},"owner":{"type":"string"},"providerCancellationPenalty":{"type":"string"},"rate":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"substationId":{"type":"string"}}},"structs.structs.QueryAddressResponse":{"type":"object","properties":{"address":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.QueryAllAddressResponse":{"type":"object","properties":{"address":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.QueryAddressResponse"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllAgreementResponse":{"type":"object","properties":{"Agreement":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Agreement"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllAllocationResponse":{"type":"object","properties":{"Allocation":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Allocation"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"status":{"type":"array","items":{"type":"string","format":"uint64"}}}},"structs.structs.QueryAllFleetResponse":{"type":"object","properties":{"Fleet":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Fleet"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllGridResponse":{"type":"object","properties":{"gridRecords":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.GridRecord"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllGuildBankCollateralAddressResponse":{"type":"object","properties":{"internalAddressAssociation":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.InternalAddressAssociation"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllGuildMembershipApplicationResponse":{"type":"object","properties":{"GuildMembershipApplication":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.GuildMembershipApplication"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllGuildResponse":{"type":"object","properties":{"Guild":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Guild"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllInfusionResponse":{"type":"object","properties":{"Infusion":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Infusion"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"status":{"type":"array","items":{"type":"string","format":"uint64"}}}},"structs.structs.QueryAllPermissionResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"permissionRecords":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.PermissionRecord"}}}},"structs.structs.QueryAllPlanetAttributeResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"planetAttributeRecords":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.PlanetAttributeRecord"}}}},"structs.structs.QueryAllPlanetResponse":{"type":"object","properties":{"Planet":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Planet"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllPlayerHaltedResponse":{"type":"object","properties":{"PlayerId":{"type":"array","items":{"type":"string"}}}},"structs.structs.QueryAllPlayerResponse":{"type":"object","properties":{"Player":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Player"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllProviderCollateralAddressResponse":{"type":"object","properties":{"internalAddressAssociation":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.InternalAddressAssociation"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllProviderEarningsAddressResponse":{"type":"object","properties":{"internalAddressAssociation":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.InternalAddressAssociation"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllProviderResponse":{"type":"object","properties":{"Provider":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Provider"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllReactorResponse":{"type":"object","properties":{"Reactor":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Reactor"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllStructAttributeResponse":{"type":"object","properties":{"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"structAttributeRecords":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.StructAttributeRecord"}}}},"structs.structs.QueryAllStructResponse":{"type":"object","properties":{"Struct":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Struct"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllStructTypeResponse":{"type":"object","properties":{"StructType":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.StructType"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryAllSubstationResponse":{"type":"object","properties":{"Substation":{"type":"array","items":{"type":"object","$ref":"#/definitions/structs.structs.Substation"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"structs.structs.QueryBlockHeightResponse":{"type":"object","properties":{"blockHeight":{"type":"string","format":"uint64"}}},"structs.structs.QueryGetAgreementResponse":{"type":"object","properties":{"Agreement":{"$ref":"#/definitions/structs.structs.Agreement"}}},"structs.structs.QueryGetAllocationResponse":{"type":"object","properties":{"Allocation":{"$ref":"#/definitions/structs.structs.Allocation"},"gridAttributes":{"$ref":"#/definitions/structs.structs.GridAttributes"}}},"structs.structs.QueryGetFleetResponse":{"type":"object","properties":{"Fleet":{"$ref":"#/definitions/structs.structs.Fleet"}}},"structs.structs.QueryGetGridResponse":{"type":"object","title":"Generic Responses for Permissions","properties":{"gridRecord":{"$ref":"#/definitions/structs.structs.GridRecord"}}},"structs.structs.QueryGetGuildMembershipApplicationResponse":{"type":"object","properties":{"GuildMembershipApplication":{"$ref":"#/definitions/structs.structs.GuildMembershipApplication"}}},"structs.structs.QueryGetGuildResponse":{"type":"object","properties":{"Guild":{"$ref":"#/definitions/structs.structs.Guild"}}},"structs.structs.QueryGetInfusionResponse":{"type":"object","properties":{"Infusion":{"$ref":"#/definitions/structs.structs.Infusion"}}},"structs.structs.QueryGetPermissionResponse":{"type":"object","title":"Generic Responses for Permissions","properties":{"permissionRecord":{"$ref":"#/definitions/structs.structs.PermissionRecord"}}},"structs.structs.QueryGetPlanetAttributeResponse":{"type":"object","properties":{"attribute":{"type":"string","format":"uint64"}}},"structs.structs.QueryGetPlanetResponse":{"type":"object","properties":{"Planet":{"$ref":"#/definitions/structs.structs.Planet"},"gridAttributes":{"$ref":"#/definitions/structs.structs.GridAttributes"},"planetAttributes":{"$ref":"#/definitions/structs.structs.PlanetAttributes"}}},"structs.structs.QueryGetPlayerResponse":{"type":"object","properties":{"Player":{"$ref":"#/definitions/structs.structs.Player"},"gridAttributes":{"$ref":"#/definitions/structs.structs.GridAttributes"},"halted":{"type":"boolean"},"playerInventory":{"$ref":"#/definitions/structs.structs.PlayerInventory"}}},"structs.structs.QueryGetProviderResponse":{"type":"object","properties":{"Provider":{"$ref":"#/definitions/structs.structs.Provider"},"gridAttributes":{"$ref":"#/definitions/structs.structs.GridAttributes"}}},"structs.structs.QueryGetReactorResponse":{"type":"object","properties":{"Reactor":{"$ref":"#/definitions/structs.structs.Reactor"},"gridAttributes":{"$ref":"#/definitions/structs.structs.GridAttributes"}}},"structs.structs.QueryGetStructAttributeResponse":{"type":"object","properties":{"attribute":{"type":"string","format":"uint64"}}},"structs.structs.QueryGetStructResponse":{"type":"object","properties":{"Struct":{"$ref":"#/definitions/structs.structs.Struct"},"gridAttributes":{"$ref":"#/definitions/structs.structs.GridAttributes"},"structAttributes":{"$ref":"#/definitions/structs.structs.StructAttributes"},"structDefenders":{"type":"array","items":{"type":"string"}}}},"structs.structs.QueryGetStructTypeResponse":{"type":"object","properties":{"StructType":{"$ref":"#/definitions/structs.structs.StructType"}}},"structs.structs.QueryGetSubstationResponse":{"type":"object","properties":{"Substation":{"$ref":"#/definitions/structs.structs.Substation"},"gridAttributes":{"$ref":"#/definitions/structs.structs.GridAttributes"}}},"structs.structs.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/structs.structs.Params"}}},"structs.structs.QueryValidateSignatureResponse":{"type":"object","properties":{"addressPubkeyMismatch":{"type":"boolean"},"pubkeyFormatError":{"type":"boolean"},"signatureFormatError":{"type":"boolean"},"signatureInvalid":{"type":"boolean"},"valid":{"type":"boolean"}}},"structs.structs.Reactor":{"type":"object","properties":{"defaultCommission":{"type":"string"},"guildId":{"type":"string"},"id":{"type":"string"},"rawAddress":{"type":"string","format":"byte"},"validator":{"type":"string"}}},"structs.structs.Struct":{"type":"object","properties":{"creator":{"type":"string","title":"Who is it"},"id":{"type":"string","title":"What it is"},"index":{"type":"string","format":"uint64"},"locationId":{"type":"string"},"locationType":{"title":"Where it is","$ref":"#/definitions/structs.structs.objectType"},"operatingAmbit":{"$ref":"#/definitions/structs.structs.ambit"},"owner":{"type":"string"},"slot":{"type":"string","format":"uint64"},"type":{"type":"string","format":"uint64"}}},"structs.structs.StructAttributeRecord":{"type":"object","properties":{"attributeId":{"type":"string"},"value":{"type":"string","format":"uint64"}}},"structs.structs.StructAttributes":{"type":"object","properties":{"blockStartBuild":{"type":"string","format":"uint64"},"blockStartOreMine":{"type":"string","format":"uint64"},"blockStartOreRefine":{"type":"string","format":"uint64"},"health":{"type":"string","format":"uint64"},"isBuilt":{"type":"boolean"},"isDestroyed":{"type":"boolean"},"isHidden":{"type":"boolean"},"isLocked":{"type":"boolean"},"isMaterialized":{"type":"boolean"},"isOnline":{"type":"boolean"},"protectedStructIndex":{"type":"string","format":"uint64"},"status":{"type":"string","format":"uint64"},"typeCount":{"type":"string","format":"uint64"}}},"structs.structs.StructType":{"type":"object","properties":{"activateCharge":{"type":"string","format":"uint64","title":"Charge uses"},"attackCounterable":{"type":"boolean","title":"For Indirect Combat Module"},"attackReduction":{"description":"For Defensive Cannon","type":"string","format":"uint64","title":"Tech Tree Attributes"},"buildCharge":{"type":"string","format":"uint64"},"buildDifficulty":{"type":"string","format":"uint64","title":"How much compute is needed to build"},"buildDraw":{"type":"string","format":"uint64","title":"How much energy the Struct consumes during building"},"buildLimit":{"type":"string","format":"uint64","title":"How many of this Struct Type a player can have"},"category":{"description":"Planet or Fleet","title":"Fundamental attributes","$ref":"#/definitions/structs.structs.objectType"},"class":{"type":"string","title":"New Struct Type Identity Details"},"classAbbreviation":{"type":"string"},"counterAttack":{"type":"string","format":"uint64","title":"Counter"},"counterAttackSameAmbit":{"type":"string","format":"uint64","title":"Advanced Counter"},"defaultCosmeticModelNumber":{"type":"string"},"defaultCosmeticName":{"type":"string"},"defendChangeCharge":{"type":"string","format":"uint64"},"generatingRate":{"type":"string","format":"uint64","title":"Power Generation"},"guidedDefensiveSuccessRateDenominator":{"type":"string","format":"uint64"},"guidedDefensiveSuccessRateNumerator":{"type":"string","format":"uint64"},"id":{"type":"string","format":"uint64"},"maxHealth":{"type":"string","format":"uint64","title":"How much damage can it take"},"movable":{"type":"boolean","title":"Can the Struct change ambit?"},"moveCharge":{"type":"string","format":"uint64"},"oreMiningDifficulty":{"type":"string","format":"uint64"},"oreRefiningDifficulty":{"type":"string","format":"uint64"},"oreReserveDefenses":{"$ref":"#/definitions/structs.structs.techOreReserveDefenses"},"passiveDraw":{"type":"string","format":"uint64","title":"How much energy the Struct consumes when active"},"passiveWeaponry":{"title":"Tech Tree Features","$ref":"#/definitions/structs.structs.techPassiveWeaponry"},"planetaryDefenses":{"$ref":"#/definitions/structs.structs.techPlanetaryDefenses"},"planetaryMining":{"$ref":"#/definitions/structs.structs.techPlanetaryMining"},"planetaryRefinery":{"$ref":"#/definitions/structs.structs.techPlanetaryRefineries"},"planetaryShieldContribution":{"type":"string","format":"uint64","title":"The shield that is added to the Planet"},"possibleAmbit":{"description":"Where can it be built and moved to. Usually only a single ambit but some Structs have multiple possible (i.e. Command Ship)","type":"string","format":"uint64","title":"Details about location and movement\nTODO move category to here and make it flag based too\nReplicate what was done for ambits flags"},"postDestructionDamage":{"type":"string","format":"uint64"},"powerGeneration":{"$ref":"#/definitions/structs.structs.techPowerGeneration"},"primaryWeapon":{"title":"Primary Weapon Configuration","$ref":"#/definitions/structs.structs.techActiveWeaponry"},"primaryWeaponAmbits":{"type":"string","format":"uint64"},"primaryWeaponBlockable":{"type":"boolean"},"primaryWeaponCharge":{"type":"string","format":"uint64"},"primaryWeaponControl":{"$ref":"#/definitions/structs.structs.techWeaponControl"},"primaryWeaponCounterable":{"type":"boolean"},"primaryWeaponDamage":{"type":"string","format":"uint64"},"primaryWeaponRecoilDamage":{"type":"string","format":"uint64"},"primaryWeaponShotSuccessRateDenominator":{"type":"string","format":"uint64"},"primaryWeaponShotSuccessRateNumerator":{"type":"string","format":"uint64"},"primaryWeaponShots":{"type":"string","format":"uint64"},"primaryWeaponTargets":{"type":"string","format":"uint64"},"secondaryWeapon":{"title":"Secondary Weapon Configuration","$ref":"#/definitions/structs.structs.techActiveWeaponry"},"secondaryWeaponAmbits":{"type":"string","format":"uint64"},"secondaryWeaponBlockable":{"type":"boolean"},"secondaryWeaponCharge":{"type":"string","format":"uint64"},"secondaryWeaponControl":{"$ref":"#/definitions/structs.structs.techWeaponControl"},"secondaryWeaponCounterable":{"type":"boolean"},"secondaryWeaponDamage":{"type":"string","format":"uint64"},"secondaryWeaponRecoilDamage":{"type":"string","format":"uint64"},"secondaryWeaponShotSuccessRateDenominator":{"type":"string","format":"uint64"},"secondaryWeaponShotSuccessRateNumerator":{"type":"string","format":"uint64"},"secondaryWeaponShots":{"type":"string","format":"uint64"},"secondaryWeaponTargets":{"type":"string","format":"uint64"},"slotBound":{"type":"boolean","title":"Does the Struct occupy a slot. Trying to find something to help set Command Ships apart"},"stealthActivateCharge":{"type":"string","format":"uint64"},"stealthSystems":{"type":"boolean","title":"For Stealth Mode"},"triggerRaidDefeatByDestruction":{"description":"I wish this was higher up in a different area of the definition\nbut I really don't feel like renumbering this entire thing again.","type":"boolean"},"type":{"description":"TODO Deprecating... Will match with Class for now.","type":"string"},"unguidedDefensiveSuccessRateDenominator":{"type":"string","format":"uint64"},"unguidedDefensiveSuccessRateNumerator":{"type":"string","format":"uint64"},"unitDefenses":{"$ref":"#/definitions/structs.structs.techUnitDefenses"}}},"structs.structs.Substation":{"type":"object","properties":{"creator":{"type":"string"},"id":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.allocationType":{"type":"string","default":"static","enum":["static","dynamic","automated","providerAgreement"]},"structs.structs.ambit":{"type":"string","default":"none","enum":["none","water","land","air","space","local"]},"structs.structs.fleetStatus":{"type":"string","default":"onStation","enum":["onStation","away"]},"structs.structs.guildJoinBypassLevel":{"type":"string","title":"- closed: Feature off\n - permissioned: Only those with permissions can do it\n - member: All members of the guild can contribute","default":"closed","enum":["closed","permissioned","member"]},"structs.structs.guildJoinType":{"type":"string","default":"invite","enum":["invite","request","direct","proxy"]},"structs.structs.objectType":{"type":"string","default":"guild","enum":["guild","player","planet","reactor","substation","struct","allocation","infusion","address","fleet","provider","agreement"]},"structs.structs.planetStatus":{"type":"string","default":"active","enum":["active","complete"]},"structs.structs.providerAccessPolicy":{"type":"string","default":"openMarket","enum":["openMarket","guildMarket","closedMarket"]},"structs.structs.registrationStatus":{"type":"string","default":"proposed","enum":["proposed","approved","denied","revoked"]},"structs.structs.techActiveWeaponry":{"type":"string","default":"noActiveWeaponry","enum":["noActiveWeaponry","guidedWeaponry","unguidedWeaponry","attackRun","selfDestruct"]},"structs.structs.techOreReserveDefenses":{"type":"string","default":"noOreReserveDefenses","enum":["noOreReserveDefenses","coordinatedReserveResponseTracker","rapidResponsePackage","activeScanning","monitoringStation","oreBunker"]},"structs.structs.techPassiveWeaponry":{"type":"string","default":"noPassiveWeaponry","enum":["noPassiveWeaponry","counterAttack","strongCounterAttack","advancedCounterAttack","lastResort"]},"structs.structs.techPlanetaryDefenses":{"type":"string","title":"- lowOrbitBallisticInterceptorNetwork: advancedLowOrbitBallisticInterceptorNetwork = 3;\nrepairNetwork = 4;\ncoordinatedGlobalShieldNetwork = 5;\norbitalJammingStation = 6;\nadvancedOrbitalJammingStation = 7;","default":"noPlanetaryDefense","enum":["noPlanetaryDefense","defensiveCannon","lowOrbitBallisticInterceptorNetwork"]},"structs.structs.techPlanetaryMining":{"type":"string","default":"noPlanetaryMining","enum":["noPlanetaryMining","oreMiningRig"]},"structs.structs.techPlanetaryRefineries":{"type":"string","default":"noPlanetaryRefinery","enum":["noPlanetaryRefinery","oreRefinery"]},"structs.structs.techPowerGeneration":{"type":"string","default":"noPowerGeneration","enum":["noPowerGeneration","smallGenerator","mediumGenerator","largeGenerator"]},"structs.structs.techUnitDefenses":{"type":"string","default":"noUnitDefenses","enum":["noUnitDefenses","defensiveManeuver","signalJamming","armour","indirectCombatModule","stealthMode","perimeterFencing","reinforcedWalls"]},"structs.structs.techWeaponControl":{"type":"string","default":"noWeaponControl","enum":["noWeaponControl","guided","unguided"]}},"tags":[{"name":"Query"},{"name":"Msg"}]} \ No newline at end of file +{"id":"structs","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain structs REST API","title":"HTTP API Console","contact":{"name":"structs"},"version":"version not set"},"paths":{"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"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":"EvidenceMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceQuery_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":"EvidenceMsg_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":"EvidenceMsg_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":{"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":"EvidenceMsg_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.","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":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin17","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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.benchmark.v1.Msg/LoadTest":{"post":{"tags":["Msg"],"summary":"LoadTest defines a method for executing a sequence of load test operations.","operationId":"EvidenceMsg_LoadTest","parameters":[{"description":"MsgLoadTestOps defines a message containing a sequence of load test operations.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.benchmark.v1.MsgLoadTest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.benchmark.v1.MsgLoadTestResponse"}},"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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin32","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.counter.v1.Msg/IncreaseCount":{"post":{"tags":["Msg"],"summary":"IncreaseCount increments the counter by the specified amount.","operationId":"EvidenceMsg_IncreaseCount","parameters":[{"description":"MsgIncreaseCounter defines a count Msg service counter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.counter.v1.MsgIncreaseCounter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.counter.v1.MsgIncreaseCountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.counter.v1.Query/GetCount":{"post":{"tags":["Query"],"summary":"GetCount queries the parameters of x/Counter module.","operationId":"EvidenceQuery_GetCount","parameters":[{"description":"QueryGetCountRequest defines the request type for querying x/mock count.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.counter.v1.QueryGetCountRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.counter.v1.QueryGetCountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin36","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":"WARNING: This method will fail if an external community pool is used.","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":"EvidenceMsg_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.","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":{"tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"EvidenceMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.","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":{"description":"WARNING: This method will fail if an external community pool is used.","tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"EvidenceMsg_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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin47","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"EvidenceMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.","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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"EvidenceMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin63","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_DepositMixin67","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":"EvidenceMsg_SubmitProposalMixin67","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":"EvidenceMsg_VoteMixin67","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":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"EvidenceMsg_VoteWeightedMixin67","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_ExecMixin71","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":"EvidenceMsg_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":"EvidenceMsg_SubmitProposalMixin71","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_VoteMixin71","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":"EvidenceMsg_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":{"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":"EvidenceMsg_UpdateParamsMixin76","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_SendMixin82","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.protocolpool.v1.Msg/CancelContinuousFund":{"post":{"tags":["Msg"],"summary":"CancelContinuousFund defines a method for cancelling continuous fund.","operationId":"EvidenceMsg_CancelContinuousFund","parameters":[{"description":"MsgCancelContinuousFund defines a message to cancel continuous funds for a specific recipient.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCancelContinuousFund"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCancelContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/CommunityPoolSpend":{"post":{"tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/protocolpool module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"EvidenceMsg_CommunityPoolSpendMixin87","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.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/CreateContinuousFund":{"post":{"tags":["Msg"],"summary":"CreateContinuousFund defines a method to distribute a percentage of funds to an address continuously.\nThis ContinuousFund can be indefinite or run until a given expiry time.\nFunds come from validator block rewards from x/distribution, but may also come from\nany user who funds the ProtocolPoolEscrow module account directly through x/bank.","operationId":"EvidenceMsg_CreateContinuousFund","parameters":[{"description":"MsgCreateContinuousFund defines a message for adding continuous funds.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCreateContinuousFund"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCreateContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"EvidenceMsg_FundCommunityPoolMixin87","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/protocolpool module parameters.\nThe authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin87","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgUpdateParamsResponse"}},"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":"EvidenceMsg_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":{"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":"EvidenceMsg_UpdateParamsMixin93","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"EvidenceMsg_CancelUnbondingDelegation","parameters":[{"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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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.","operationId":"EvidenceMsg_UpdateParamsMixin98","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceABCIListenerService_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":"EvidenceABCIListenerService_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":{"tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"EvidenceMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.","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":{"tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"EvidenceMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.","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":{"tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"EvidenceMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","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":{"tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"EvidenceMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.","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":"EvidenceMsg_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":{"tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"EvidenceQuery_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.","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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":{"tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"EvidenceQuery_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.","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":{"tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"EvidenceQuery_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":{"tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"EvidenceQuery_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":{"tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"EvidenceQuery_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":{"tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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.","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":{"tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"EvidenceQuery_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.","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":{"tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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.","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":"EvidenceQuery_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.","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"EvidenceQuery_DenomOwners","parameters":[{"pattern":".+","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.","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":{"tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_DenomMetadata","parameters":[{"pattern":".+","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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin16","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.","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"EvidenceQuery_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.","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.","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"EvidenceQuery_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.","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.","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceService_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":"EvidenceService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":{"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":"EvidenceService_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":"EvidenceService_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":"EvidenceService_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":"EvidenceService_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":"EvidenceService_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":"EvidenceService_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.","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":"EvidenceService_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.","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":"EvidenceQuery_AccountsMixin28","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/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":"EvidenceQuery_AccountMixin28","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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin31","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":{"description":"WARNING: This query will fail if an external community pool is used.","tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin46","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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.","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/epochs/v1beta1/current_epoch":{"get":{"tags":["Query"],"summary":"CurrentEpoch provide current epoch of specified identifier","operationId":"EvidenceQuery_CurrentEpoch","parameters":[{"type":"string","name":"identifier","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.epochs.v1beta1.QueryCurrentEpochResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/epochs/v1beta1/epochs":{"get":{"tags":["Query"],"summary":"EpochInfos provide running epochInfos","operationId":"EvidenceQuery_EpochInfos","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.epochs.v1beta1.QueryEpochInfosResponse"}},"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":"EvidenceQuery_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.","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":"EvidenceQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":{"tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin62","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin66","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":"EvidenceQuery_ProposalsMixin66","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.","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":"EvidenceQuery_ProposalMixin66","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":"EvidenceQuery_DepositsMixin66","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.","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":"EvidenceQuery_DepositMixin66","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":"EvidenceQuery_TallyResultMixin66","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":"EvidenceQuery_VotesMixin66","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.","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":"EvidenceQuery_VoteMixin66","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":{"tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_ProposalMixin70","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":"EvidenceQuery_TallyResultMixin70","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin75","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":"EvidenceQuery_BalanceMixin81","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin84","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":{"tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"EvidenceQuery_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/protocolpool/v1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"EvidenceQuery_CommunityPoolMixin86","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/continuous_funds":{"get":{"tags":["Query"],"summary":"ContinuousFunds queries all continuous funds in the store.","operationId":"EvidenceQuery_ContinuousFunds","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryContinuousFundsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/continuous_funds/{recipient}":{"get":{"tags":["Query"],"summary":"ContinuousFund queries a continuous fund by the recipient is is associated with.","operationId":"EvidenceQuery_ContinuousFund","parameters":[{"type":"string","description":"recipient is the recipient address to query unclaimed budget amount for.","name":"recipient","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of x/protocolpool parameters.","operationId":"EvidenceQuery_ParamsMixin86","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryParamsResponse"}},"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":"EvidenceQuery_ParamsMixin91","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_DelegatorValidatorsMixin96","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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin96","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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.","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":{"tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"EvidenceService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.","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":{"tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"EvidenceService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.","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":{"tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"EvidenceService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.","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":{"tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"EvidenceService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.","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":"EvidenceService_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":"EvidenceService_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.","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.","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":"EvidenceService_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":{"tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"EvidenceService_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.","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":"EvidenceService_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":"EvidenceQuery_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":{"tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"EvidenceQuery_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":"EvidenceQuery_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":{"tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"EvidenceQuery_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":"EvidenceQuery_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"}}}}},"/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_UpdateParamsMixin129","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_UpdateParamsMixin140","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_AcknowledgementMixin148","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_RecvPacketMixin148","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_TimeoutMixin148","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/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.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_ParamsMixin128","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/{denom}/total_escrow":{"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/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_ParamsMixin137","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/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_NextSequenceSendMixin147","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_PacketAcknowledgementsMixin147","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_PacketAcknowledgementMixin147","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_PacketCommitmentsMixin147","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_UnreceivedAcksMixin147","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_UnreceivedPacketsMixin147","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_PacketCommitmentMixin147","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_PacketReceiptMixin147","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_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/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"}}}}},"/structs.structs.Msg/AddressRegister":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AddressRegister","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAddressRegister"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAddressRegisterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AddressRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AddressRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAddressRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAddressRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementCapacityDecrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementCapacityDecrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementCapacityDecrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementCapacityIncrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementCapacityIncrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementCapacityIncrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementClose":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementClose","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementDurationIncrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementDurationIncrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementDurationIncrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementOpen":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementOpen","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementOpen"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationDeleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationTransfer":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationTransfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationUpdate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationUpdate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationUpdate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/FleetMove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_FleetMove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgFleetMove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgFleetMoveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankConfiscateAndBurn":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankConfiscateAndBurn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankConfiscateAndBurn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankConfiscateAndBurnResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankMint":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankMint","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankMint"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankMintResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankRedeem":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankRedeem","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankRedeem"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankRedeemResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInvite":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInvite","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInvite"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteApprove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteApprove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteApprove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteDeny":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteDeny","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteDeny"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipJoin":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipJoin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipJoin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipJoinProxy":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipJoinProxy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipJoinProxy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipKick":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipKick","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipKick"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequest":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestApprove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestApprove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestApprove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestDeny":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestDeny","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestDeny"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateEndpoint":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateEndpoint","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateEndpoint"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateEntrySubstationId":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateEntrySubstationId","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateEntrySubstationId"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimumBypassByInvite":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimumBypassByInvite","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByInvite"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimumBypassByRequest":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimumBypassByRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateOwnerId":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateOwnerId","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateOwnerId"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionGrantOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionGrantOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionGrantOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionGrantOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionGrantOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionGrantOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionRevokeOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionRevokeOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionRevokeOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionRevokeOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionRevokeOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionRevokeOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionSetOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionSetOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionSetOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionSetOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionSetOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionSetOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlanetExplore":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlanetExplore","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlanetExplore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlanetExploreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlanetRaidComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlanetRaidComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlanetRaidComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlanetRaidCompleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerResume":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerResume","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerResume"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerResumeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerSend":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerSend","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerUpdatePrimaryAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerUpdatePrimaryAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerUpdatePrimaryAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerUpdatePrimaryAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderGuildGrant":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderGuildGrant","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderGuildGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderGuildRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderGuildRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderGuildRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateAccessPolicy":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateAccessPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateAccessPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateCapacityMaximum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateCapacityMaximum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateCapacityMaximum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateCapacityMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateCapacityMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateCapacityMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateDurationMaximum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateDurationMaximum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateDurationMaximum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateDurationMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateDurationMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateDurationMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderWithdrawBalance":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderWithdrawBalance","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderWithdrawBalance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorBeginMigration":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorBeginMigration","parameters":[{"description":"MsgReactorBeginMigration 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/structs.structs.MsgReactorBeginMigration"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorBeginMigrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorCancelDefusion":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorCancelDefusion","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgReactorCancelDefusion"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorCancelDefusionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorDefuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorDefuse","parameters":[{"description":"MsgReactorDefuse defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgReactorDefuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorDefuseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorInfuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorInfuse","parameters":[{"description":"MsgReactorInfuse 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/structs.structs.MsgReactorInfuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorInfuseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructActivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructActivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructActivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructAttack":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructAttack","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructAttack"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructAttackResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildCancel":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildCancel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildCancel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildInitiate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildInitiate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildInitiate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDeactivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDeactivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDeactivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDefenseClear":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDefenseClear","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDefenseClear"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDefenseSet":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDefenseSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDefenseSet"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructGeneratorInfuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructGeneratorInfuse","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructGeneratorInfuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructGeneratorStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructMove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructMove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructMove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructOreMinerComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructOreMinerComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructOreMinerComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructOreMinerStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructOreRefineryComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructOreRefineryComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructOreRefineryComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructOreRefineryStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructStealthActivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructStealthActivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructStealthActivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructStealthDeactivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructStealthDeactivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructStealthDeactivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationAllocationConnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationAllocationConnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationConnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationConnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationAllocationDisconnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationAllocationDisconnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationDisconnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationDisconnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationDeleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerConnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerConnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerConnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerConnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerDisconnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerDisconnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerDisconnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerDisconnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerMigrate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerMigrate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerMigrate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerMigrateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.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":"StructsMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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.","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.","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.","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.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":"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.","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":{"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.","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.","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.","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":{"optional":{"description":"optional makes the last positional parameter optional.\nNote: It is mutually exclusive with varargs.","type":"boolean"},"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. Note: It is mutually exclusive with optional.","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"}},"gov_proposal":{"description":"gov_proposal specifies whether autocli should generate a gov proposal transaction for this rpc method.\nNormally autocli generates a transaction containing the message and broadcast it.\nHowever, when true, autocli generates a proposal transaction containing the message and broadcast it.\nThis option is ineffective for query commands.","type":"boolean"},"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":{"enhance_custom_command":{"description":"enhance_custom_commands specifies whether to skip the service when generating commands, if a custom command already\nexists, or enhance the existing command. If set to true, the custom command will be enhanced with the services from\ngRPC. otherwise when a custom command exists, no commands will be generated for the service.","type":"boolean"},"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"},"short":{"description":"short is an optional parameter used to override the short description of the auto generated command.","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.","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":{"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.","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.","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.","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.","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.","type":"object"},"cosmos.bank.v1beta1.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":"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.","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.","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.","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.","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.","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.","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.","$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.","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.","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":{"$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":{"$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"},"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.benchmark.v1.MsgLoadTest":{"description":"MsgLoadTestOps defines a message containing a sequence of load test operations.","type":"object","properties":{"caller":{"type":"string","format":"byte"},"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.benchmark.v1.Op"}}}},"cosmos.benchmark.v1.MsgLoadTestResponse":{"description":"MsgLoadTestResponse defines a message containing the results of a load test operation.","type":"object","properties":{"total_errors":{"type":"string","format":"uint64"},"total_time":{"type":"string","format":"uint64"}}},"cosmos.benchmark.v1.Op":{"description":"Op is a message describing a benchmark operation.","type":"object","properties":{"actor":{"type":"string"},"delete":{"type":"boolean"},"exists":{"type":"boolean"},"iterations":{"type":"integer","format":"int64"},"key_length":{"type":"string","format":"uint64"},"seed":{"type":"string","format":"uint64"},"value_length":{"type":"string","format":"uint64"}}},"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":{"$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.counter.v1.MsgIncreaseCountResponse":{"description":"MsgIncreaseCountResponse is the Msg/Counter response type.","type":"object","properties":{"new_count":{"description":"new_count is the number of times the counter was incremented.","type":"string","format":"int64"}}},"cosmos.counter.v1.MsgIncreaseCounter":{"description":"MsgIncreaseCounter defines a count Msg service counter.","type":"object","properties":{"count":{"description":"count is the number of times to increment the counter.","type":"string","format":"int64"},"signer":{"description":"signer is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.counter.v1.QueryGetCountRequest":{"description":"QueryGetCountRequest defines the request type for querying x/mock count.","type":"object"},"cosmos.counter.v1.QueryGetCountResponse":{"description":"QueryGetCountResponse defines the response type for querying x/mock count.","type":"object","properties":{"total_count":{"type":"string","format":"int64"}}},"cosmos.crisis.v1beta1.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"},"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.","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.","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.","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.","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.","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.","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.","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","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","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.epochs.v1beta1.EpochInfo":{"description":"EpochInfo is a struct that describes the data going into\na timer defined by the x/epochs module.","type":"object","properties":{"current_epoch":{"description":"current_epoch is the current epoch number, or in other words,\nhow many times has the timer 'ticked'.\nThe first tick (current_epoch=1) is defined as\nthe first block whose blocktime is greater than the EpochInfo start_time.","type":"string","format":"int64"},"current_epoch_start_height":{"type":"string","format":"int64","title":"current_epoch_start_height is the block height at which the current epoch\nstarted. (The block height at which the timer last ticked)"},"current_epoch_start_time":{"description":"current_epoch_start_time describes the start time of the current timer\ninterval. The interval is (current_epoch_start_time,\ncurrent_epoch_start_time + duration] When the timer ticks, this is set to\ncurrent_epoch_start_time = last_epoch_start_time + duration only one timer\ntick for a given identifier can occur per block.\n\nNOTE! The current_epoch_start_time may diverge significantly from the\nwall-clock time the epoch began at. Wall-clock time of epoch start may be\n\u003e\u003e current_epoch_start_time. Suppose current_epoch_start_time = 10,\nduration = 5. Suppose the chain goes offline at t=14, and comes back online\nat t=30, and produces blocks at every successive time. (t=31, 32, etc.)\n* The t=30 block will start the epoch for (10, 15]\n* The t=31 block will start the epoch for (15, 20]\n* The t=32 block will start the epoch for (20, 25]\n* The t=33 block will start the epoch for (25, 30]\n* The t=34 block will start the epoch for (30, 35]\n* The **t=36** block will start the epoch for (35, 40]","type":"string","format":"date-time"},"duration":{"description":"duration is the time in between epoch ticks.\nIn order for intended behavior to be met, duration should\nbe greater than the chains expected block time.\nDuration must be non-zero.","type":"string"},"epoch_counting_started":{"description":"epoch_counting_started is a boolean, that indicates whether this\nepoch timer has began yet.","type":"boolean"},"identifier":{"description":"identifier is a unique reference to this particular timer.","type":"string"},"start_time":{"description":"start_time is the time at which the timer first ever ticks.\nIf start_time is in the future, the epoch will not begin until the start\ntime.","type":"string","format":"date-time"}}},"cosmos.epochs.v1beta1.QueryCurrentEpochResponse":{"description":"QueryCurrentEpochResponse defines the gRPC response structure for\nquerying an epoch by its identifier.","type":"object","properties":{"current_epoch":{"type":"string","format":"int64"}}},"cosmos.epochs.v1beta1.QueryEpochInfosResponse":{"description":"QueryEpochInfosRequest defines the gRPC response structure for\nquerying all epoch info.","type":"object","properties":{"epochs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.epochs.v1beta1.EpochInfo"}}}},"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.","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.","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.","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.","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.","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":{"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":{"type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.","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.","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.","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.","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.","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.","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.","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.","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.","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":{"type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"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":{"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":{"type":"string","title":"summary is a short summary of the proposal"},"title":{"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.","$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.","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.","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.","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.","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.","type":"string"},"title":{"description":"title is the title of the proposal.","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":{"type":"string","title":"summary is a short summary of the proposal"},"title":{"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.","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.","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.","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.","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.","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.protocolpool.v1.ContinuousFund":{"description":"ContinuousFund defines the fields of continuous fund proposal.","type":"object","properties":{"expiry":{"description":"Optional, if expiry is set, removes the state object when expired.","type":"string","format":"date-time"},"percentage":{"description":"Percentage is the percentage of funds to be allocated from Community pool.","type":"string"},"recipient":{"description":"Recipient is the address string of the account receiving funds.","type":"string"}}},"cosmos.protocolpool.v1.MsgCancelContinuousFund":{"description":"MsgCancelContinuousFund defines a message to cancel continuous funds for a specific recipient.","type":"object","properties":{"authority":{"description":"Authority is the account address of authority.","type":"string"},"recipient":{"description":"Recipient is the account address string of the recipient whose funds are to be cancelled.","type":"string"}}},"cosmos.protocolpool.v1.MsgCancelContinuousFundResponse":{"description":"MsgCancelContinuousFundResponse defines the response to executing a\nMsgCancelContinuousFund message.","type":"object","properties":{"canceled_height":{"description":"CanceledHeight defines the canceled block height.","type":"string","format":"uint64"},"canceled_time":{"description":"CanceledTime is the canceled time.","type":"string","format":"date-time"},"recipient":{"description":"Recipient is the account address string of the recipient whose funds are cancelled.","type":"string"}}},"cosmos.protocolpool.v1.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.","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.protocolpool.v1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.","type":"object"},"cosmos.protocolpool.v1.MsgCreateContinuousFund":{"description":"MsgCreateContinuousFund defines a message for adding continuous funds.","type":"object","properties":{"authority":{"description":"Authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"expiry":{"description":"Optional, if expiry is set, removes the state object when expired.","type":"string","format":"date-time"},"percentage":{"description":"Percentage is the percentage of funds to be allocated from Community pool.","type":"string"},"recipient":{"description":"Recipient address of the account receiving funds.","type":"string"}}},"cosmos.protocolpool.v1.MsgCreateContinuousFundResponse":{"description":"MsgCreateContinuousFundResponse defines the response to executing a\nMsgCreateContinuousFund message.","type":"object"},"cosmos.protocolpool.v1.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.protocolpool.v1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.protocolpool.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":"params defines the x/protocolpool parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.protocolpool.v1.Params"}}},"cosmos.protocolpool.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.protocolpool.v1.Params":{"description":"Params defines the parameters for the protocolpool module.","type":"object","properties":{"distribution_frequency":{"description":"DistributionFrequency is the frequency (in terms of blocks) that funds are distributed out from the\nx/protocolpool module.","type":"string","format":"uint64"},"enabled_distribution_denoms":{"description":"EnabledDistributionDenoms lists the denoms that are allowed to be distributed.\nThis is to avoid spending time distributing undesired tokens to continuous funds and budgets.","type":"array","items":{"type":"string"}}}},"cosmos.protocolpool.v1.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.Coin"}}}},"cosmos.protocolpool.v1.QueryContinuousFundResponse":{"description":"QueryUnclaimedBudgetResponse is the response type for the Query/ContinuousFund\nRPC method.","type":"object","properties":{"continuous_fund":{"description":"ContinuousFunds is the given continuous fund returned in the query.","$ref":"#/definitions/cosmos.protocolpool.v1.ContinuousFund"}}},"cosmos.protocolpool.v1.QueryContinuousFundsResponse":{"description":"QueryUnclaimedBudgetResponse is the response type for the Query/ContinuousFunds\nRPC method.","type":"object","properties":{"continuous_funds":{"description":"ContinuousFunds defines all continuous funds in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.protocolpool.v1.ContinuousFund"}}}},"cosmos.protocolpool.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"$ref":"#/definitions/cosmos.protocolpool.v1.Params"}}},"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.","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.","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":{"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":{"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":{"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.","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.","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.","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":{"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.","$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\nfield) requests that a fee grant be used to pay fees instead of the fee\npayer's own balance. If an appropriate fee grant does not exist or the\nchain does not support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the\nspecified account must pay the fees. the payer must be a tx signer (and\nthus have signed this field in AuthInfo). setting this field does *not*\nchange 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.","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.","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.","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\nhttps://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":{"description":"timeout_height is the block height after which this transaction will not\nbe processed by the chain.","type":"string","format":"uint64"},"timeout_timestamp":{"description":"timeout_timestamp is the block time after which this transaction will not\nbe processed by the chain.\n\nNote, if unordered=true this value MUST be set\nand will act as a short-lived TTL in which the transaction is deemed valid\nand kept in memory to prevent duplicates.","type":"string","format":"date-time"},"unordered":{"description":"unordered, when set to true, indicates that the transaction signer(s)\nintend for the transaction to be evaluated and executed in an un-ordered\nfashion. Specifically, the account's nonce will NOT be checked or\nincremented, which allows for fire-and-forget as well as concurrent\ntransaction execution.\n\nNote, when set to true, the existing 'timeout_timestamp' value must\nbe set and will be used to correspond to a timestamp in which the transaction is deemed\nvalid.\n\nWhen true, the sequence value MUST be 0, and any transaction with unordered=true and a non-zero sequence value will\nbe rejected.\nExternal services that make assumptions about sequence values may need to be updated because of this.","type":"boolean"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.","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.","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.","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.","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.","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.","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.","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.","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.","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.","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.","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.","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.","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":{"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.","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"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","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.","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.","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.","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"}}},"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":{"description":"Hop defines a port ID, channel ID pair specifying where tokens must be forwarded\nnext in a multihop transfer.","type":"object","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.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.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.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.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"}}},"structs.structs.Fleet":{"type":"object","properties":{"air":{"type":"array","items":{"type":"string"}},"airSlots":{"type":"string","format":"uint64"},"commandStruct":{"type":"string"},"id":{"type":"string"},"land":{"type":"array","items":{"type":"string"}},"landSlots":{"type":"string","format":"uint64"},"locationId":{"type":"string"},"locationListBackward":{"type":"string","title":"Towards End of List"},"locationListForward":{"type":"string","title":"Towards Planet"},"locationType":{"$ref":"#/definitions/structs.structs.objectType"},"owner":{"type":"string"},"space":{"type":"array","items":{"type":"string"}},"spaceSlots":{"type":"string","format":"uint64"},"status":{"$ref":"#/definitions/structs.structs.fleetStatus"},"water":{"type":"array","items":{"type":"string"}},"waterSlots":{"type":"string","format":"uint64"}}},"structs.structs.GuildMembershipApplication":{"type":"object","properties":{"guildId":{"type":"string"},"joinType":{"title":"Invite | Request","$ref":"#/definitions/structs.structs.guildJoinType"},"playerId":{"type":"string"},"proposer":{"type":"string"},"registrationStatus":{"$ref":"#/definitions/structs.structs.registrationStatus"},"substationId":{"type":"string"}}},"structs.structs.MsgAddressRegister":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"},"proofPubKey":{"type":"string"},"proofSignature":{"type":"string"}}},"structs.structs.MsgAddressRegisterResponse":{"type":"object"},"structs.structs.MsgAddressRevoke":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAddressRevokeResponse":{"type":"object"},"structs.structs.MsgAgreementCapacityDecrease":{"type":"object","properties":{"agreementId":{"type":"string"},"capacityDecrease":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementCapacityIncrease":{"type":"object","properties":{"agreementId":{"type":"string"},"capacityIncrease":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementClose":{"type":"object","properties":{"agreementId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementDurationIncrease":{"type":"object","properties":{"agreementId":{"type":"string"},"creator":{"type":"string"},"durationIncrease":{"type":"string","format":"uint64"}}},"structs.structs.MsgAgreementOpen":{"type":"object","properties":{"capacity":{"type":"string","format":"uint64"},"creator":{"type":"string"},"duration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgAgreementResponse":{"type":"object"},"structs.structs.MsgAllocationCreate":{"type":"object","properties":{"allocationType":{"$ref":"#/definitions/structs.structs.allocationType"},"controller":{"type":"string"},"creator":{"type":"string"},"power":{"type":"string","format":"uint64"},"sourceObjectId":{"type":"string"}}},"structs.structs.MsgAllocationCreateResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationDelete":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAllocationDeleteResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationTransfer":{"type":"object","properties":{"allocationId":{"type":"string"},"controller":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAllocationTransferResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationUpdate":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"power":{"type":"string","format":"uint64"}}},"structs.structs.MsgAllocationUpdateResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgFleetMove":{"type":"object","properties":{"creator":{"type":"string"},"destinationLocationId":{"type":"string"},"fleetId":{"type":"string"}}},"structs.structs.MsgFleetMoveResponse":{"type":"object","properties":{"fleet":{"$ref":"#/definitions/structs.structs.Fleet"}}},"structs.structs.MsgGuildBankConfiscateAndBurn":{"type":"object","properties":{"address":{"type":"string"},"amountToken":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankConfiscateAndBurnResponse":{"type":"object"},"structs.structs.MsgGuildBankMint":{"type":"object","properties":{"amountAlpha":{"type":"string","format":"uint64"},"amountToken":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankMintResponse":{"type":"object"},"structs.structs.MsgGuildBankRedeem":{"type":"object","properties":{"amountToken":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankRedeemResponse":{"type":"object"},"structs.structs.MsgGuildCreate":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"entrySubstationId":{"type":"string"}}},"structs.structs.MsgGuildCreateResponse":{"type":"object","properties":{"guildId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInvite":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteApprove":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteDeny":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipJoin":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"infusionId":{"type":"array","items":{"type":"string"}},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipJoinProxy":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"proofPubKey":{"type":"string"},"proofSignature":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipKick":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequest":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestApprove":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestDeny":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipResponse":{"type":"object","properties":{"guildMembershipApplication":{"$ref":"#/definitions/structs.structs.GuildMembershipApplication"}}},"structs.structs.MsgGuildUpdateEndpoint":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"guildId":{"type":"string"}}},"structs.structs.MsgGuildUpdateEntrySubstationId":{"type":"object","properties":{"creator":{"type":"string"},"entrySubstationId":{"type":"string"},"guildId":{"type":"string"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimum":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"joinInfusionMinimum":{"type":"string","format":"uint64"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByInvite":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"guildJoinBypassLevel":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByRequest":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"guildJoinBypassLevel":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"}}},"structs.structs.MsgGuildUpdateOwnerId":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.MsgGuildUpdateResponse":{"type":"object"},"structs.structs.MsgPermissionGrantOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionGrantOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPermissionResponse":{"type":"object"},"structs.structs.MsgPermissionRevokeOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionRevokeOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPermissionSetOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionSetOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPlanetExplore":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgPlanetExploreResponse":{"type":"object","properties":{"planet":{"$ref":"#/definitions/structs.structs.Planet"}}},"structs.structs.MsgPlanetRaidComplete":{"type":"object","properties":{"creator":{"type":"string"},"fleetId":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"}}},"structs.structs.MsgPlanetRaidCompleteResponse":{"type":"object","properties":{"fleet":{"$ref":"#/definitions/structs.structs.Fleet"},"oreStolen":{"type":"string","format":"uint64"},"planet":{"$ref":"#/definitions/structs.structs.Planet"}}},"structs.structs.MsgPlayerResume":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgPlayerResumeResponse":{"type":"object"},"structs.structs.MsgPlayerSend":{"type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"creator":{"type":"string"},"from_address":{"type":"string"},"player_id":{"type":"string"},"to_address":{"type":"string"}}},"structs.structs.MsgPlayerSendResponse":{"description":"This message has no fields.","type":"object"},"structs.structs.MsgPlayerUpdatePrimaryAddress":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"},"primaryAddress":{"type":"string"}}},"structs.structs.MsgPlayerUpdatePrimaryAddressResponse":{"type":"object"},"structs.structs.MsgProviderCreate":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"capacityMaximum":{"type":"string","format":"uint64"},"capacityMinimum":{"type":"string","format":"uint64"},"consumerCancellationPenalty":{"type":"string"},"creator":{"type":"string"},"durationMaximum":{"type":"string","format":"uint64"},"durationMinimum":{"type":"string","format":"uint64"},"providerCancellationPenalty":{"type":"string"},"rate":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"substationId":{"type":"string"}}},"structs.structs.MsgProviderDelete":{"type":"object","properties":{"creator":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderGuildGrant":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"array","items":{"type":"string"}},"providerId":{"type":"string"}}},"structs.structs.MsgProviderGuildRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"array","items":{"type":"string"}},"providerId":{"type":"string"}}},"structs.structs.MsgProviderResponse":{"type":"object"},"structs.structs.MsgProviderUpdateAccessPolicy":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"creator":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateCapacityMaximum":{"type":"object","properties":{"creator":{"type":"string"},"newMaximumCapacity":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateCapacityMinimum":{"type":"object","properties":{"creator":{"type":"string"},"newMinimumCapacity":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateDurationMaximum":{"type":"object","properties":{"creator":{"type":"string"},"newMaximumDuration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateDurationMinimum":{"type":"object","properties":{"creator":{"type":"string"},"newMinimumDuration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderWithdrawBalance":{"type":"object","properties":{"creator":{"type":"string"},"destinationAddress":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgReactorBeginMigration":{"description":"MsgReactorBeginMigration 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"structs.structs.MsgReactorBeginMigrationResponse":{"description":"MsgBeginMigrationResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"structs.structs.MsgReactorCancelDefusion":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgReactorCancelDefusion 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorCancelDefusionResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgReactorCancelDefusionResponse"},"structs.structs.MsgReactorDefuse":{"description":"MsgReactorDefuse defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorDefuseResponse":{"description":"MsgReactorDefuseResponse 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"}}},"structs.structs.MsgReactorInfuse":{"description":"MsgReactorInfuse 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorInfuseResponse":{"description":"MsgReactorInfuseResponse defines the Msg/Delegate response type.","type":"object"},"structs.structs.MsgStructActivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructAttack":{"type":"object","properties":{"creator":{"type":"string"},"operatingStructId":{"type":"string"},"targetStructId":{"type":"array","items":{"type":"string"}},"weaponSystem":{"type":"string"}}},"structs.structs.MsgStructAttackResponse":{"type":"object"},"structs.structs.MsgStructBuildCancel":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructBuildComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructBuildInitiate":{"type":"object","properties":{"creator":{"type":"string"},"operatingAmbit":{"title":"objectType locationType = 4;","$ref":"#/definitions/structs.structs.ambit"},"playerId":{"type":"string"},"slot":{"type":"string","format":"uint64"},"structTypeId":{"type":"string","format":"uint64"}}},"structs.structs.MsgStructDeactivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructDefenseClear":{"type":"object","properties":{"creator":{"type":"string"},"defenderStructId":{"type":"string"}}},"structs.structs.MsgStructDefenseSet":{"type":"object","properties":{"creator":{"type":"string"},"defenderStructId":{"type":"string"},"protectedStructId":{"type":"string"}}},"structs.structs.MsgStructGeneratorInfuse":{"type":"object","properties":{"creator":{"type":"string"},"infuseAmount":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructGeneratorStatusResponse":{"type":"object"},"structs.structs.MsgStructMove":{"type":"object","properties":{"ambit":{"$ref":"#/definitions/structs.structs.ambit"},"creator":{"type":"string"},"locationType":{"$ref":"#/definitions/structs.structs.objectType"},"slot":{"type":"string","format":"uint64"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreMinerComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreMinerStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructOreRefineryComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreRefineryStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructStealthActivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructStealthDeactivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgSubstationAllocationConnect":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"destinationId":{"type":"string"}}},"structs.structs.MsgSubstationAllocationConnectResponse":{"type":"object"},"structs.structs.MsgSubstationAllocationDisconnect":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgSubstationAllocationDisconnectResponse":{"type":"object"},"structs.structs.MsgSubstationCreate":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.MsgSubstationCreateResponse":{"type":"object","properties":{"substationId":{"type":"string"}}},"structs.structs.MsgSubstationDelete":{"type":"object","properties":{"creator":{"type":"string"},"migrationSubstationId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationDeleteResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerConnect":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerConnectResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerDisconnect":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerDisconnectResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerMigrate":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"array","items":{"type":"string"}},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerMigrateResponse":{"type":"object"},"structs.structs.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":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/structs.structs.Params"}}},"structs.structs.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"structs.structs.Params":{"description":"Params defines the parameters for the module.","type":"object"},"structs.structs.Planet":{"type":"object","properties":{"air":{"type":"array","items":{"type":"string"}},"airSlots":{"type":"string","format":"uint64"},"creator":{"type":"string"},"id":{"type":"string"},"land":{"type":"array","items":{"type":"string"}},"landSlots":{"type":"string","format":"uint64"},"locationListLast":{"type":"string","title":"End of the line"},"locationListStart":{"type":"string","title":"First in line to battle planet"},"maxOre":{"type":"string","format":"uint64"},"owner":{"type":"string"},"space":{"type":"array","items":{"type":"string"}},"spaceSlots":{"type":"string","format":"uint64"},"status":{"$ref":"#/definitions/structs.structs.planetStatus"},"water":{"type":"array","items":{"type":"string"}},"waterSlots":{"type":"string","format":"uint64"}}},"structs.structs.Struct":{"type":"object","properties":{"creator":{"type":"string","title":"Who is it"},"id":{"type":"string","title":"What it is"},"index":{"type":"string","format":"uint64"},"locationId":{"type":"string"},"locationType":{"title":"Where it is","$ref":"#/definitions/structs.structs.objectType"},"operatingAmbit":{"$ref":"#/definitions/structs.structs.ambit"},"owner":{"type":"string"},"slot":{"type":"string","format":"uint64"},"type":{"type":"string","format":"uint64"}}},"structs.structs.allocationType":{"type":"string","default":"static","enum":["static","dynamic","automated","providerAgreement"]},"structs.structs.ambit":{"type":"string","default":"none","enum":["none","water","land","air","space","local"]},"structs.structs.fleetStatus":{"type":"string","default":"onStation","enum":["onStation","away"]},"structs.structs.guildJoinBypassLevel":{"type":"string","title":"- closed: Feature off\n - permissioned: Only those with permissions can do it\n - member: All members of the guild can contribute","default":"closed","enum":["closed","permissioned","member"]},"structs.structs.guildJoinType":{"type":"string","default":"invite","enum":["invite","request","direct","proxy"]},"structs.structs.objectType":{"type":"string","default":"guild","enum":["guild","player","planet","reactor","substation","struct","allocation","infusion","address","fleet","provider","agreement"]},"structs.structs.planetStatus":{"type":"string","default":"active","enum":["active","complete"]},"structs.structs.providerAccessPolicy":{"type":"string","default":"openMarket","enum":["openMarket","guildMarket","closedMarket"]},"structs.structs.registrationStatus":{"type":"string","default":"proposed","enum":["proposed","approved","denied","revoked"]},"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":"Msg"},{"name":"Query"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file diff --git a/go.mod b/go.mod index 8ae1b94..cf36839 100644 --- a/go.mod +++ b/go.mod @@ -1,256 +1,322 @@ module structs -go 1.21 +go 1.23.6 + +toolchain go1.24.1 replace ( + // use cosmos fork of keyring + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 // fix upstream GHSA-h395-qcrw-5vmq vulnerability. - github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 + github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.1 // replace broken goleveldb github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) require ( - cosmossdk.io/api v0.7.2 - cosmossdk.io/client/v2 v2.0.0-beta.1 - cosmossdk.io/core v0.11.0 - cosmossdk.io/depinject v1.0.0-alpha.4 - cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.3.0 - cosmossdk.io/math v1.2.0 - cosmossdk.io/store v1.0.2 - cosmossdk.io/tools/confix v0.1.1 - cosmossdk.io/x/circuit v0.1.0 - cosmossdk.io/x/evidence v0.1.0 - cosmossdk.io/x/feegrant v0.1.0 - cosmossdk.io/x/nft v0.1.0 - cosmossdk.io/x/upgrade v0.1.1 - github.com/bufbuild/buf v1.28.1 - github.com/cometbft/cometbft v0.38.5 + cosmossdk.io/api v0.9.2 + cosmossdk.io/client/v2 v2.0.0-beta.11 + cosmossdk.io/core v0.11.3 + cosmossdk.io/depinject v1.2.1 + cosmossdk.io/errors v1.0.2 + cosmossdk.io/log v1.6.1 + cosmossdk.io/math v1.5.3 + cosmossdk.io/store v1.1.2 + cosmossdk.io/tools/confix v0.1.2 + cosmossdk.io/x/circuit v0.2.0 + cosmossdk.io/x/evidence v0.2.0 + cosmossdk.io/x/feegrant v0.2.0 + cosmossdk.io/x/nft v0.2.0 + cosmossdk.io/x/upgrade v0.2.0 + github.com/bufbuild/buf v1.47.2 + github.com/cometbft/cometbft v0.38.21 github.com/cosmos/btcutil v1.0.5 - github.com/cosmos/cosmos-db v1.0.0 - github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.50.3 - github.com/cosmos/gogoproto v1.4.11 - github.com/cosmos/ibc-go/modules/capability v1.0.0 - github.com/cosmos/ibc-go/v8 v8.0.0 - github.com/golang/protobuf v1.5.3 + github.com/cosmos/cosmos-db v1.1.3 + github.com/cosmos/cosmos-proto v1.0.0-beta.5 + github.com/cosmos/cosmos-sdk v0.53.5 + github.com/cosmos/gogoproto v1.7.2 + github.com/cosmos/ibc-go/v10 v10.0.0 + github.com/golang/protobuf v1.5.4 github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 github.com/nethruster/go-fraction v0.0.0-20221224165113-1b5f693330ad - github.com/spf13/cobra v1.8.0 - github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.18.2 - github.com/stretchr/testify v1.8.4 - golang.org/x/crypto v0.18.0 - golang.org/x/tools v0.15.0 - google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f - google.golang.org/grpc v1.60.1 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.32.0 + github.com/spf13/cobra v1.10.1 + github.com/spf13/pflag v1.0.10 + github.com/spf13/viper v1.21.0 + github.com/stretchr/testify v1.11.1 + golang.org/x/crypto v0.41.0 + golang.org/x/tools v0.36.0 + google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 + google.golang.org/grpc v1.75.0 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 + google.golang.org/protobuf v1.36.10 ) require ( - buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231106192134-1baebb0a1518.2 // indirect - buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.31.0-20231111212044-1119bf4b707e.2 // indirect - cloud.google.com/go v0.110.10 // indirect - cloud.google.com/go/compute v1.23.3 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/storage v1.35.1 // indirect - connectrpc.com/connect v1.12.0 // indirect - connectrpc.com/otelconnect v0.6.0 // indirect - cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/x/tx v0.13.0 // indirect - filippo.io/edwards25519 v1.0.0 // indirect + buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.35.1-20241031151143-70f632351282.1 // indirect + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.35.1-20240920164238-5a7b106cbb87.1 // indirect + buf.build/gen/go/bufbuild/registry/connectrpc/go v1.17.0-20241025140216-aa40f2c93090.1 // indirect + buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.35.1-20241025140216-aa40f2c93090.1 // indirect + buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.35.1-20241007202033-cf42259fcbfc.1 // indirect + buf.build/go/bufplugin v0.6.0 // indirect + buf.build/go/protoyaml v0.2.0 // indirect + buf.build/go/spdx v0.2.0 // indirect + cel.dev/expr v0.24.0 // indirect + cloud.google.com/go v0.121.0 // indirect + cloud.google.com/go/auth v0.16.4 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.8.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/monitoring v1.24.2 // indirect + cloud.google.com/go/storage v1.52.0 // indirect + connectrpc.com/connect v1.17.0 // indirect + connectrpc.com/otelconnect v0.7.1 // indirect + cosmossdk.io/collections v1.3.1 // indirect + cosmossdk.io/schema v1.1.0 // indirect + cosmossdk.io/x/tx v0.14.0 // indirect + filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect + github.com/99designs/keyring v1.2.2 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect - github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/zstd v1.5.5 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/antlr4-go/antlr/v4 v4.13.0 // indirect + github.com/DataDog/datadog-go v4.8.3+incompatible // indirect + github.com/DataDog/zstd v1.5.7 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/Microsoft/hcsshim v0.12.9 // indirect + github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/aws/aws-sdk-go v1.44.224 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect - github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/bits-and-blooms/bitset v1.8.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/bufbuild/protocompile v0.6.1-0.20231108163138-146b831231f7 // indirect - github.com/bufbuild/protovalidate-go v0.4.1 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/bgentry/speakeasy v0.2.0 // indirect + github.com/bits-and-blooms/bitset v1.24.3 // indirect + github.com/bufbuild/protocompile v0.14.1 // indirect + github.com/bufbuild/protoplugin v0.0.0-20240911180120-7bb73e41a54a // indirect + github.com/bufbuild/protovalidate-go v0.7.3-0.20241015162221-1446f1e1d576 // indirect + github.com/bytedance/gopkg v0.1.3 // indirect + github.com/bytedance/sonic v1.14.2 // indirect + github.com/bytedance/sonic/loader v0.4.0 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cloudwego/base64x v0.1.6 // indirect + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb // indirect - github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/errors v1.12.0 // indirect + github.com/cockroachdb/fifo v0.0.0-20240616162244-4768e80dfb9a // indirect + github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect + github.com/cockroachdb/pebble v1.1.5 // indirect + github.com/cockroachdb/redact v1.1.6 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft-db v0.9.1 // indirect + github.com/cometbft/cometbft-db v0.14.1 // indirect + github.com/containerd/cgroups/v3 v3.0.3 // indirect + github.com/containerd/containerd v1.7.23 // indirect + github.com/containerd/continuity v0.4.4 // indirect + github.com/containerd/errdefs v1.0.0 // indirect + github.com/containerd/errdefs/pkg v0.3.0 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/platforms v0.2.1 // indirect github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect + github.com/containerd/ttrpc v1.2.6 // indirect + github.com/containerd/typeurl/v2 v2.2.3 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.0.0 // indirect - github.com/cosmos/ics23/go v0.10.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect + github.com/cosmos/iavl v1.2.2 // indirect + github.com/cosmos/ics23/go v0.11.0 // indirect + github.com/cosmos/ledger-cosmos-go v0.16.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect github.com/creachadair/atomicfile v0.3.1 // indirect github.com/creachadair/tomledit v0.0.24 // indirect - github.com/danieljoos/wincred v1.2.0 // indirect + github.com/danieljoos/wincred v1.2.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect - github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/distribution/reference v0.5.0 // indirect - github.com/docker/cli v24.0.7+incompatible // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect + github.com/desertbit/timer v1.0.1 // indirect + github.com/dgraph-io/badger/v4 v4.2.0 // indirect + github.com/dgraph-io/ristretto v0.2.0 // indirect + github.com/distribution/reference v0.6.0 // indirect + github.com/docker/cli v27.3.1+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v24.0.7+incompatible // indirect - github.com/docker/docker-credential-helpers v0.8.0 // indirect - github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/docker v27.3.1+incompatible // indirect + github.com/docker/docker-credential-helpers v0.8.2 // indirect + github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/emicklei/dot v1.6.0 // indirect - github.com/fatih/color v1.15.0 // indirect - github.com/felixge/fgprof v0.9.3 // indirect + github.com/dvsekhvalnov/jose2go v1.7.0 // indirect + github.com/emicklei/dot v1.6.2 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect + github.com/ethereum/go-ethereum v1.15.5 // indirect + github.com/fatih/color v1.17.0 // indirect + github.com/felixge/fgprof v0.9.5 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/getsentry/sentry-go v0.25.0 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/getsentry/sentry-go v0.35.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect - github.com/go-chi/chi/v5 v5.0.10 // indirect - github.com/go-kit/kit v0.12.0 // indirect + github.com/go-chi/chi/v5 v5.2.2 // indirect + github.com/go-jose/go-jose/v4 v4.1.1 // indirect + github.com/go-kit/kit v0.13.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.3.0 // indirect + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gofrs/uuid/v5 v5.0.0 // indirect + github.com/gofrs/flock v0.12.1 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.2.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/mock v1.6.0 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/btree v1.1.2 // indirect - github.com/google/cel-go v0.18.2 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/go-containerregistry v0.16.1 // indirect + github.com/golang/glog v1.2.5 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/cel-go v0.22.0 // indirect + github.com/google/flatbuffers v24.3.25+incompatible // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/go-containerregistry v0.20.2 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a // indirect - github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.4.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/google/pprof v0.0.0-20241101162523-b92577c0c142 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.15.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.3 // indirect - github.com/hashicorp/go-hclog v1.5.0 // indirect + github.com/hashicorp/go-getter v1.7.8 // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-metrics v0.5.2 // indirect - github.com/hashicorp/go-plugin v1.5.2 // indirect + github.com/hashicorp/go-metrics v0.5.4 // indirect + github.com/hashicorp/go-plugin v1.6.3 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hashicorp/yamux v0.1.1 // indirect - github.com/hdevalence/ed25519consensus v0.1.0 // indirect - github.com/huandu/skiplist v1.2.0 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/hashicorp/yamux v0.1.2 // indirect + github.com/hdevalence/ed25519consensus v0.2.0 // indirect + github.com/holiman/uint256 v1.3.2 // indirect + github.com/huandu/skiplist v1.2.1 // indirect github.com/iancoleman/strcase v0.3.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jdx/go-netrc v1.0.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.10.7 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.8.6 // indirect - github.com/magiconair/properties v1.8.7 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/linxGnu/grocksdb v1.9.2 // indirect github.com/manifoldco/promptui v0.9.0 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect - github.com/minio/highwayhash v1.0.2 // indirect + github.com/mdp/qrterminal/v3 v3.2.1 // indirect + github.com/minio/highwayhash v1.0.3 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/locker v1.0.1 // indirect + github.com/moby/patternmatcher v0.6.0 // indirect + github.com/moby/sys/mount v0.3.4 // indirect + github.com/moby/sys/mountinfo v0.7.2 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect + github.com/moby/sys/user v0.3.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/mtibben/percent v0.2.1 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect + github.com/onsi/ginkgo/v2 v2.21.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc5 // indirect - github.com/pelletier/go-toml/v2 v2.1.0 // indirect - github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect + github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/runtime-spec v1.2.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pkg/profile v1.7.0 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.17.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/client_golang v1.23.0 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.65.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.48.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect - github.com/rs/cors v1.10.1 // indirect - github.com/rs/zerolog v1.31.0 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/rs/cors v1.11.1 // indirect + github.com/rs/zerolog v1.34.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sasha-s/go-deadlock v0.3.5 // indirect + github.com/segmentio/asm v1.2.0 // indirect + github.com/segmentio/encoding v0.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect github.com/stoewer/go-strcase v1.3.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tetratelabs/wazero v1.5.0 // indirect + github.com/tetratelabs/wazero v1.8.1 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect - github.com/vbatts/tar-split v0.11.5 // indirect + github.com/vbatts/tar-split v0.11.6 // indirect + github.com/zeebo/errs v1.4.0 // indirect + github.com/zondax/golem v0.27.0 // indirect github.com/zondax/hid v0.9.2 // indirect - github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.3.8 // indirect + github.com/zondax/ledger-go v1.0.1 // indirect + go.etcd.io/bbolt v1.4.0-alpha.1 // indirect + go.lsp.dev/jsonrpc2 v0.10.0 // indirect + go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 // indirect + go.lsp.dev/protocol v0.12.0 // indirect + go.lsp.dev/uri v0.3.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/otel v1.20.0 // indirect - go.opentelemetry.io/otel/metric v1.20.0 // indirect - go.opentelemetry.io/otel/sdk v1.20.0 // indirect - go.opentelemetry.io/otel/trace v1.20.0 // indirect - go.uber.org/atomic v1.11.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.36.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect + go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/sdk v1.37.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.37.0 // indirect + go.uber.org/mock v0.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.26.0 // indirect - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.20.0 // indirect - golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/term v0.16.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.153.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect + go.uber.org/zap v1.27.0 // indirect + go.uber.org/zap/exp v0.3.0 // indirect + go.yaml.in/yaml/v2 v2.4.2 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/arch v0.17.0 // indirect + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect + golang.org/x/time v0.12.0 // indirect + google.golang.org/api v0.247.0 // indirect + google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gotest.tools/v3 v3.5.1 // indirect - nhooyr.io/websocket v1.8.6 // indirect - pgregory.net/rapid v1.1.0 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect + gotest.tools/v3 v3.5.2 // indirect + nhooyr.io/websocket v1.8.11 // indirect + pgregory.net/rapid v1.2.0 // indirect + pluginrpc.com/pluginrpc v0.5.0 // indirect + rsc.io/qr v0.2.0 // indirect + sigs.k8s.io/yaml v1.6.0 // indirect ) diff --git a/go.sum b/go.sum index b5ec537..2ffbed9 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,27 @@ -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20230914171853-63dfe56cc2c4.2/go.mod h1:xafc+XIsTxTy76GJQ1TKgvJWsSugFBqMaN27WhUblew= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231106192134-1baebb0a1518.2 h1:iRWpWLm1nrsCHBVhibqPJQB3iIf3FRsAXioJVU8m6w0= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231106192134-1baebb0a1518.2/go.mod h1:xafc+XIsTxTy76GJQ1TKgvJWsSugFBqMaN27WhUblew= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.31.0-20231111212044-1119bf4b707e.2 h1:tgXOEZtPifMR5kaQ6GB4t7pk0G3dai/OS3JFD9Zt+eE= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.31.0-20231111212044-1119bf4b707e.2/go.mod h1:3Ion4eJWjUDfJyrUXSgtB3zO5ZweZtyvNuEc+fyMBCk= +buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.35.1-20241031151143-70f632351282.1 h1:APVDdZ4VfUvERVIj//yDjCWV7WezEOiK7+b6gvJ+iAk= +buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.35.1-20241031151143-70f632351282.1/go.mod h1:rYPnjsUZ2lGpoQ/T322HWZQil9/MIZF2njP+/u/0GKg= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.35.1-20240920164238-5a7b106cbb87.1 h1:9wP6ZZYWnF2Z0TxmII7m3XNykxnP4/w8oXeth6ekcRI= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.35.1-20240920164238-5a7b106cbb87.1/go.mod h1:Duw/9JoXkXIydyASnLYIiufkzySThoqavOsF+IihqvM= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.17.0-20241025140216-aa40f2c93090.1 h1:FHQXg3T7S2jp8yc7/bQJgqEH1yza/rrDHXITUK2Tm0g= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.17.0-20241025140216-aa40f2c93090.1/go.mod h1:5iwF5l+9lKCnvr1zLvDgUHrv6X+vU5nNPjvig1sbnao= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.35.1-20241025140216-aa40f2c93090.1 h1:PyqnJojY+BXNuJHp5aEfN9wPiP1dzrobXVmgLrUMe+A= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.35.1-20241025140216-aa40f2c93090.1/go.mod h1:x5Mti5bhMO87zJxCkcEbr7Lz+bHiFsqpxnpqSB1okG0= +buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.35.1-20241007202033-cf42259fcbfc.1 h1:rPi3qs3qpDIXIl5QW2IPOaYZhppRkvuVKwEZrfhpy78= +buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.35.1-20241007202033-cf42259fcbfc.1/go.mod h1:4IVMTaeh4JIjBYcGFLlTorfWpKVEXDjDfHAgKTeR0Ds= +buf.build/go/bufplugin v0.6.0 h1:3lhoh+0z+IUPS3ZajTPn/27LaLIkero2BDVnV7yXD1s= +buf.build/go/bufplugin v0.6.0/go.mod h1:hWCjxxv24xdR6F5pNlQavZV2oo0J3uF4Ff1XEoyV6vU= +buf.build/go/protoyaml v0.2.0 h1:2g3OHjtLDqXBREIOjpZGHmQ+U/4mkN1YiQjxNB68Ip8= +buf.build/go/protoyaml v0.2.0/go.mod h1:L/9QvTDkTWcDTzAL6HMfN+mYC6CmZRm2KnsUA054iL0= +buf.build/go/spdx v0.2.0 h1:IItqM0/cMxvFJJumcBuP8NrsIzMs/UYjp/6WSpq8LTw= +buf.build/go/spdx v0.2.0/go.mod h1:bXdwQFem9Si3nsbNy8aJKGPoaPi5DKwdeEp5/ArZ6w8= +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -20,6 +34,7 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= @@ -31,28 +46,96 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= -cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.121.0 h1:pgfwva8nGw7vivjZiRfrmglGWiCJBP+0OmDpenG/Fwg= +cloud.google.com/go v0.121.0/go.mod h1:rS7Kytwheu/y9buoDmu5EIpMMCI4Mb8ND4aeN4Vwj7Q= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/auth v0.16.4 h1:fXOAIQmkApVvcIn7Pc2+5J8QTMVbUGLscnSVNl11su8= +cloud.google.com/go/auth v0.16.4/go.mod h1:j10ncYwjX/g3cdX7GpEzsdM+d+ZNsXAbb6qXA7p1Y5M= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -60,12 +143,44 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -73,200 +188,549 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= +cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= +cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= -cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.52.0 h1:ROpzMW/IwipKtatA69ikxibdzQSiXJrY9f6IgBa9AlA= +cloud.google.com/go/storage v1.52.0/go.mod h1:4wrBAbAYUvYkbrf19ahGm4I5kDQhESSqN3CGEkMGvOY= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= +cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -connectrpc.com/connect v1.12.0 h1:HwKdOY0lGhhoHdsza+hW55aqHEC64pYpObRNoAgn70g= -connectrpc.com/connect v1.12.0/go.mod h1:3AGaO6RRGMx5IKFfqbe3hvK1NqLosFNP2BxDYTPmNPo= -connectrpc.com/otelconnect v0.6.0 h1:VJAdQL9+sgdUw9+7+J+jq8pQo/h1S7tSFv2+vDcR7bU= -connectrpc.com/otelconnect v0.6.0/go.mod h1:jdcs0uiwXQVmSMgTJ2dAaWR5VbpNd7QKNkuoH7n86RA= -cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4= -cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= -cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= -cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= -cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= -cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= -cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.0 h1:L0Z0XstClo2kOU4h3V1iDoE5Ji64sg5HLOogzGg67Oo= -cosmossdk.io/log v1.3.0/go.mod h1:HIDyvWLqZe2ovlWabsDN4aPMpY/nUEquAhgfTf2ZzB8= -cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= -cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= -cosmossdk.io/store v1.0.2 h1:lSg5BTvJBHUDwswNNyeh4K/CbqiHER73VU4nDNb8uk0= -cosmossdk.io/store v1.0.2/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= -cosmossdk.io/tools/confix v0.1.1 h1:aexyRv9+y15veH3Qw16lxQwo+ki7r2I+g0yNTEFEQM8= -cosmossdk.io/tools/confix v0.1.1/go.mod h1:nQVvP1tHsGXS83PonPVWJtSbddIqyjEw99L4M3rPJyQ= -cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= -cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= -cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= -cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= -cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= -cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= -cosmossdk.io/x/nft v0.1.0 h1:VhcsFiEK33ODN27kxKLa0r/CeFd8laBfbDBwYqCyYCM= -cosmossdk.io/x/nft v0.1.0/go.mod h1:ec4j4QAO4mJZ+45jeYRnW7awLHby1JZANqe1hNZ4S3g= -cosmossdk.io/x/tx v0.13.0 h1:8lzyOh3zONPpZv2uTcUmsv0WTXy6T1/aCVDCqShmpzU= -cosmossdk.io/x/tx v0.13.0/go.mod h1:CpNQtmoqbXa33/DVxWQNx5Dcnbkv2xGUhL7tYQ5wUsY= -cosmossdk.io/x/upgrade v0.1.1 h1:aoPe2gNvH+Gwt/Pgq3dOxxQVU3j5P6Xf+DaUJTDZATc= -cosmossdk.io/x/upgrade v0.1.1/go.mod h1:MNLptLPcIFK9CWt7Ra//8WUZAxweyRDNcbs5nkOcQy0= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +connectrpc.com/connect v1.17.0 h1:W0ZqMhtVzn9Zhn2yATuUokDLO5N+gIuBWMOnsQrfmZk= +connectrpc.com/connect v1.17.0/go.mod h1:0292hj1rnx8oFrStN7cB4jjVBeqs+Yx5yDIC2prWDO8= +connectrpc.com/otelconnect v0.7.1 h1:scO5pOb0i4yUE66CnNrHeK1x51yq0bE0ehPg6WvzXJY= +connectrpc.com/otelconnect v0.7.1/go.mod h1:dh3bFgHBTb2bkqGCeVVOtHJreSns7uu9wwL2Tbz17ms= +cosmossdk.io/api v0.9.2 h1:9i9ptOBdmoIEVEVWLtYYHjxZonlF/aOVODLFaxpmNtg= +cosmossdk.io/api v0.9.2/go.mod h1:CWt31nVohvoPMTlPv+mMNCtC0a7BqRdESjCsstHcTkU= +cosmossdk.io/client/v2 v2.0.0-beta.11 h1:iHbjDw/NuNz2OVaPmx0iE9eu2HrbX+WAv2u9guRcd6o= +cosmossdk.io/client/v2 v2.0.0-beta.11/go.mod h1:ZmmxMUpALO2r1aG6fNOonE7f8I1g/WsafJgVAeQ0ffs= +cosmossdk.io/collections v1.3.1 h1:09e+DUId2brWsNOQ4nrk+bprVmMUaDH9xvtZkeqIjVw= +cosmossdk.io/collections v1.3.1/go.mod h1:ynvkP0r5ruAjbmedE+vQ07MT6OtJ0ZIDKrtJHK7Q/4c= +cosmossdk.io/core v0.11.3 h1:mei+MVDJOwIjIniaKelE3jPDqShCc/F4LkNNHh+4yfo= +cosmossdk.io/core v0.11.3/go.mod h1:9rL4RE1uDt5AJ4Tg55sYyHWXA16VmpHgbe0PbJc6N2Y= +cosmossdk.io/depinject v1.2.1 h1:eD6FxkIjlVaNZT+dXTQuwQTKZrFZ4UrfCq1RKgzyhMw= +cosmossdk.io/depinject v1.2.1/go.mod h1:lqQEycz0H2JXqvOgVwTsjEdMI0plswI7p6KX+MVqFOM= +cosmossdk.io/errors v1.0.2 h1:wcYiJz08HThbWxd/L4jObeLaLySopyyuUFB5w4AGpCo= +cosmossdk.io/errors v1.0.2/go.mod h1:0rjgiHkftRYPj//3DrD6y8hcm40HcPv/dR4R/4efr0k= +cosmossdk.io/log v1.6.1 h1:YXNwAgbDwMEKwDlCdH8vPcoggma48MgZrTQXCfmMBeI= +cosmossdk.io/log v1.6.1/go.mod h1:gMwsWyyDBjpdG9u2avCFdysXqxq28WJapJvu+vF1y+E= +cosmossdk.io/math v1.5.3 h1:WH6tu6Z3AUCeHbeOSHg2mt9rnoiUWVWaQ2t6Gkll96U= +cosmossdk.io/math v1.5.3/go.mod h1:uqcZv7vexnhMFJF+6zh9EWdm/+Ylyln34IvPnBauPCQ= +cosmossdk.io/schema v1.1.0 h1:mmpuz3dzouCoyjjcMcA/xHBEmMChN+EHh8EHxHRHhzE= +cosmossdk.io/schema v1.1.0/go.mod h1:Gb7pqO+tpR+jLW5qDcNOSv0KtppYs7881kfzakguhhI= +cosmossdk.io/store v1.1.2 h1:3HOZG8+CuThREKv6cn3WSohAc6yccxO3hLzwK6rBC7o= +cosmossdk.io/store v1.1.2/go.mod h1:60rAGzTHevGm592kFhiUVkNC9w7gooSEn5iUBPzHQ6A= +cosmossdk.io/tools/confix v0.1.2 h1:2hoM1oFCNisd0ltSAAZw2i4ponARPmlhuNu3yy0VwI4= +cosmossdk.io/tools/confix v0.1.2/go.mod h1:7XfcbK9sC/KNgVGxgLM0BrFbVcR/+6Dg7MFfpx7duYo= +cosmossdk.io/x/circuit v0.2.0 h1:RJPMBQWCQU77EcM9HDTBnqRhq21fcUxgWZl7BZylJZo= +cosmossdk.io/x/circuit v0.2.0/go.mod h1:CjiGXDeZs64nMv0fG+QmvGVTcn7n3Sv4cDszMRR2JqU= +cosmossdk.io/x/evidence v0.2.0 h1:o72zbmgCM7U0v7z7b0XnMB+NqX0tFamqb1HHkQbhrZ0= +cosmossdk.io/x/evidence v0.2.0/go.mod h1:zx/Xqy+hnGVzkqVuVuvmP9KsO6YCl4SfbAetYi+k+sE= +cosmossdk.io/x/feegrant v0.2.0 h1:oq3WVpoJdxko/XgWmpib63V1mYy9ZQN/1qxDajwGzJ8= +cosmossdk.io/x/feegrant v0.2.0/go.mod h1:9CutZbmhulk/Yo6tQSVD5LG8Lk40ZAQ1OX4d1CODWAE= +cosmossdk.io/x/nft v0.2.0 h1:cd8QGeThxtvspOYGu0WJX0ioI9YnUG4qNwo3/Ac03GM= +cosmossdk.io/x/nft v0.2.0/go.mod h1:KsJBxkrPvcNRNLQYzlj7MHiJjSMw7MwU7p8/P9EyDwo= +cosmossdk.io/x/tx v0.14.0 h1:hB3O25kIcyDW/7kMTLMaO8Ripj3yqs5imceVd6c/heA= +cosmossdk.io/x/tx v0.14.0/go.mod h1:Tn30rSRA1PRfdGB3Yz55W4Sn6EIutr9xtMKSHij+9PM= +cosmossdk.io/x/upgrade v0.2.0 h1:ZHy0xny3wBCSLomyhE06+UmQHWO8cYlVYjfFAJxjz5g= +cosmossdk.io/x/upgrade v0.2.0/go.mod h1:DXDtkvi//TrFyHWSOaeCZGBoiGAE6Rs8/0ABt2pcDD0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= -filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= +github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= +github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 h1:fYE9p3esPxA/C0rQ0AHhP0drtPXDRhaWiwg1DPqO7IU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0/go.mod h1:BnBReJLvVYx2CS/UHOgVz2BXKXD9wsQPxZug20nZhd0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0 h1:OqVGm6Ei3x5+yZmSJG1Mh2NwHvpVmZ08CB5qJhT9Nuk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0/go.mod h1:SZiPHWGOOk3bl8tkevxkoiwPgsIl6CwrWcbwjfHZpdM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 h1:6/0iUd0xrnX7qt+mLNRwg5c0PGv8wpE8K90ryANQwMI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/hcsshim v0.12.9 h1:2zJy5KA+l0loz1HzEGqyNnjd3fyZA31ZBCGKacp6lLg= +github.com/Microsoft/hcsshim v0.12.9/go.mod h1:fJ0gkFAna6ukt0bLdKB8djt4XIJhF/vEPuoIWYVvZ8Y= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/adlio/schema v1.3.6 h1:k1/zc2jNfeiZBA5aFTRy37jlBIuCkXCm0XmvpzCKI9I= +github.com/adlio/schema v1.3.6/go.mod h1:qkxwLgPBd1FgLRHYVCmQT/rrBr3JH38J9LjmVzWNudg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= -github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= +github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= +github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= @@ -283,35 +747,52 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= -github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= -github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/bufbuild/buf v1.28.1 h1:JG+PjhaVz4bprGV1u//ZBDSxWwFnjrzjse2pmm4zBlI= -github.com/bufbuild/buf v1.28.1/go.mod h1:X/HDGbWUM2QiR5XvvsBfElUPblETOf96zq5H7FOUiP4= -github.com/bufbuild/protocompile v0.6.1-0.20231108163138-146b831231f7 h1:1pUks8VaLdprN9wrxAgshb06b08IzdYp0B7JgoDeUfw= -github.com/bufbuild/protocompile v0.6.1-0.20231108163138-146b831231f7/go.mod h1:9N39DyRmxAF5+5AjqXQKV6hyWDI0EeoX4TRMix2ZnPE= -github.com/bufbuild/protovalidate-go v0.4.1 h1:ye/8S72WbEklCeltPkSEeT8Eu1A7P/gmMsmapkwqTFk= -github.com/bufbuild/protovalidate-go v0.4.1/go.mod h1:+p5FXfOjSEgLz5WBDTOMPMdQPXqALEERbJZU7huDCtA= +github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E= +github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bits-and-blooms/bitset v1.24.3 h1:Bte86SlO3lwPQqww+7BE9ZuUCKIjfqnG5jtEyqA9y9Y= +github.com/bits-and-blooms/bitset v1.24.3/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/btcsuite/btcd/btcec/v2 v2.3.5 h1:dpAlnAwmT1yIBm3exhT1/8iUSD98RDJM5vqJVQDQLiU= +github.com/btcsuite/btcd/btcec/v2 v2.3.5/go.mod h1:m22FrOAiuxl/tht9wIqAoGHcbnCCaPWyauO8y2LGGtQ= +github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= +github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= +github.com/bufbuild/buf v1.47.2 h1:fA5e2yVQGabxAz7W5aNbO7Fku1P6TpoHhjs1wER1pOc= +github.com/bufbuild/buf v1.47.2/go.mod h1:1Xd0QG0a1uCGk7cODUenpQ8E5l7bj2Ry9tnUfERm1YI= +github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= +github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= +github.com/bufbuild/protoplugin v0.0.0-20240911180120-7bb73e41a54a h1:l3RhVoG0RtC61h6TVWnkniGj4TgBebuyPQRdleFAmTg= +github.com/bufbuild/protoplugin v0.0.0-20240911180120-7bb73e41a54a/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ= +github.com/bufbuild/protovalidate-go v0.7.3-0.20241015162221-1446f1e1d576 h1:A4TfjZJqApnAvGKDgxHqA1rG6BK1OswyNcTcnSrDbJc= +github.com/bufbuild/protovalidate-go v0.7.3-0.20241015162221-1446f1e1d576/go.mod h1:R/UFeIPyFAh0eH7Ic/JJbO2ABdkxFuZZKDbzsI5UiwM= +github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= +github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/bytedance/sonic v1.14.2 h1:k1twIoe97C1DtYUo+fZQy865IuHia4PR5RPiuGPPIIE= +github.com/bytedance/sonic v1.14.2/go.mod h1:T80iDELeHiHKSc0C9tubFygiuXoGzrkjKzX2quAx980= +github.com/bytedance/sonic/loader v0.4.0 h1:olZ7lEqcxtZygCK9EKYKADnpQoYkRQxaeY2NYzevs+o= +github.com/bytedance/sonic/loader v0.4.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= +github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs= +github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= @@ -325,74 +806,97 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= +github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb h1:6Po+YYKT5B5ZXN0wd2rwFBaebM0LufPf8p4zxOd48Kg= -github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb/go.mod h1:acMRUGd/BK8AUmQNK3spUCCGzFLZU2bSST3NMXSq2Kc= -github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= -github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/errors v1.12.0 h1:d7oCs6vuIMUQRVbi6jWWWEJZahLCfJpnJSVobd1/sUo= +github.com/cockroachdb/errors v1.12.0/go.mod h1:SvzfYNNBshAVbZ8wzNc/UPK3w1vf0dKDUP41ucAIf7g= +github.com/cockroachdb/fifo v0.0.0-20240616162244-4768e80dfb9a h1:f52TdbU4D5nozMAhO9TvTJ2ZMCXtN4VIAmfrrZ0JXQ4= +github.com/cockroachdb/fifo v0.0.0-20240616162244-4768e80dfb9a/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= +github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILMqgNeV5jiqR4j+sTuvQNHdf2chuKj1M5k= +github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo= +github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= +github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= +github.com/cockroachdb/redact v1.1.6 h1:zXJBwDZ84xJNlHl1rMyCojqyIxv+7YUpQiJLQ7n4314= +github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.5 h1:4lOcK5VTPrfbLOhNHmPYe6c7eDXHtBdMCQuKbAfFJdU= -github.com/cometbft/cometbft v0.38.5/go.mod h1:0tqKin+KQs8zDwzYD8rPHzSBIDNPuB4NrwwGDNb/hUg= -github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= -github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= -github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/cometbft/cometbft v0.38.21 h1:qcIJSH9LiwU5s6ZgKR5eRbsLNucbubfraDs5bzgjtOI= +github.com/cometbft/cometbft v0.38.21/go.mod h1:UCu8dlHqvkAsmAFmWDRWNZJPlu6ya2fTWZlDrWsivwo= +github.com/cometbft/cometbft-db v0.14.1 h1:SxoamPghqICBAIcGpleHbmoPqy+crij/++eZz3DlerQ= +github.com/cometbft/cometbft-db v0.14.1/go.mod h1:KHP1YghilyGV/xjD5DP3+2hyigWx0WTp9X+0Gnx0RxQ= +github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= +github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= +github.com/containerd/containerd v1.7.23 h1:H2CClyUkmpKAGlhQp95g2WXHfLYc7whAuvZGBNYOOwQ= +github.com/containerd/containerd v1.7.23/go.mod h1:7QUzfURqZWCZV7RLNEn1XjUCQLEf0bkaK4GjUaZehxw= +github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII= +github.com/containerd/continuity v0.4.4/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/containerd/ttrpc v1.2.6 h1:zG+Kn5EZ6MUYCS1t2Hmt2J4tMVaLSFEJVOraDQwNPC4= +github.com/containerd/ttrpc v1.2.6/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o= +github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40= +github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0E= -github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U= -github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= -github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.50.3 h1:zP0AXm54ws2t2qVWvcQhEYVafhOAREU2QL0gnbwjvXw= -github.com/cosmos/cosmos-sdk v0.50.3/go.mod h1:tlrkY1sntOt1q0OX/rqF0zRJtmXNoffAS6VFTcky+w8= +github.com/cosmos/cosmos-db v1.1.3 h1:7QNT77+vkefostcKkhrzDK9uoIEryzFrU9eoMeaQOPY= +github.com/cosmos/cosmos-db v1.1.3/go.mod h1:kN+wGsnwUJZYn8Sy5Q2O0vCYA99MJllkKASbs6Unb9U= +github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/cosmos-sdk v0.53.5 h1:JPue+SFn2gyDzTV9TYb8mGpuIH3kGt7WbGadulkpTcU= +github.com/cosmos/cosmos-sdk v0.53.5/go.mod h1:AQJx0jpon70WAD4oOs/y+SlST4u7VIwEPR6F8S7JMdo= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= -github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= -github.com/cosmos/iavl v1.0.0 h1:bw6t0Mv/mVCJvlMTOPHWLs5uUE3BRBfVWCRelOzl+so= -github.com/cosmos/iavl v1.0.0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc= -github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= -github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= -github.com/cosmos/ibc-go/v8 v8.0.0 h1:QKipnr/NGwc+9L7NZipURvmSIu+nw9jOIWTJuDBqOhg= -github.com/cosmos/ibc-go/v8 v8.0.0/go.mod h1:C6IiJom0F3cIQCD5fKwVPDrDK9j/xTu563AWuOmXois= -github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= -github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= -github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cosmos/gogoproto v1.7.2 h1:5G25McIraOC0mRFv9TVO139Uh3OklV2hczr13KKVHCA= +github.com/cosmos/gogoproto v1.7.2/go.mod h1:8S7w53P1Y1cHwND64o0BnArT6RmdgIvsBuco6uTllsk= +github.com/cosmos/iavl v1.2.2 h1:qHhKW3I70w+04g5KdsdVSHRbFLgt3yY3qTMd4Xa4rC8= +github.com/cosmos/iavl v1.2.2/go.mod h1:GiM43q0pB+uG53mLxLDzimxM9l/5N9UuSY3/D0huuVw= +github.com/cosmos/ibc-go/v10 v10.0.0 h1:38nkt3kSrBLnA7mm9Gg4S11X3wtWdbLv7laBZ8hzc5o= +github.com/cosmos/ibc-go/v10 v10.0.0/go.mod h1:82OVClziZQ+9EyDRrnlr2eewcewQ0cxLu7LAbF+q7mc= +github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= +github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= +github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= +github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/cosmos/ledger-cosmos-go v0.16.0 h1:YKlWPG9NnGZIEUb2bEfZ6zhON1CHlNTg0QKRRGcNEd0= +github.com/cosmos/ledger-cosmos-go v0.16.0/go.mod h1:WrM2xEa8koYoH2DgeIuZXNarF7FGuZl3mrIOnp3Dp0o= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creachadair/atomicfile v0.3.1 h1:yQORkHjSYySh/tv5th1dkKcn02NEW5JleB84sjt+W4Q= github.com/creachadair/atomicfile v0.3.1/go.mod h1:mwfrkRxFKwpNAflYZzytbSwxvbK6fdGRRlp0KEQc0qU= github.com/creachadair/tomledit v0.0.24 h1:5Xjr25R2esu1rKCbQEmjZYlrhFkDspoAbAKb6QKQDhQ= @@ -401,53 +905,53 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= -github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= +github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= +github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= +github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= +github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= -github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/desertbit/timer v1.0.1 h1:yRpYNn5Vaaj6QXecdLMPMJsW81JLiI1eokUft5nBmeo= +github.com/desertbit/timer v1.0.1/go.mod h1:htRrYeY5V/t4iu1xCJ5XsQvp4xve8QulXXctAzxqcwE= +github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= +github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= +github.com/dgraph-io/ristretto v0.2.0 h1:XAfl+7cmoUDWW/2Lx8TGZQjjxIQ2Ley9DSf52dru4WE= +github.com/dgraph-io/ristretto v0.2.0/go.mod h1:8uBHCU/PBV4Ag0CJrP47b9Ofby5dqWNh4FicAdoqFNU= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= -github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v24.0.7+incompatible h1:wa/nIwYFW7BVTGa7SWPVyyXU9lgORqUb1xfI36MSkFg= -github.com/docker/cli v24.0.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/cli v27.3.1+incompatible h1:qEGdFBF3Xu6SCvCYhc7CzaQTlBmqDuzxPDpigSyeKQQ= +github.com/docker/cli v27.3.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= -github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8= -github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI= +github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= +github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/dvsekhvalnov/jose2go v1.7.0 h1:bnQc8+GMnidJZA8zc6lLEAb4xNrIqHwO+9TzqvtQZPo= +github.com/dvsekhvalnov/jose2go v1.7.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY= -github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= +github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -458,17 +962,33 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= +github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= +github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= -github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/ethereum/go-ethereum v1.15.5 h1:Fo2TbBWC61lWVkFw9tsMoHCNX1ndpuaQBRJ8H6xLUPo= +github.com/ethereum/go-ethereum v1.15.5/go.mod h1:1LG2LnMOx2yPRHR/S+xuipXH29vPr6BIH6GElD8N/fo= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= -github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= +github.com/felixge/fgprof v0.9.5 h1:8+vR6yu2vvSKn08urWyEuxx75NWPEvybbkBirEpsbVY= +github.com/felixge/fgprof v0.9.5/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= @@ -477,69 +997,74 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= -github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/getsentry/sentry-go v0.35.0 h1:+FJNlnjJsZMG3g0/rmmP7GiKjQoUF5EXfEtBwtPtkzY= +github.com/getsentry/sentry-go v0.35.0/go.mod h1:C55omcY9ChRQIUcVcGcs+Zdy4ZpQGvNJ7JYHIoSWOtE= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= -github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/go-chi/chi/v5 v5.0.10 h1:rLz5avzKpjqxrYwXNfmjkrYYXOyLJd37pz53UFHC6vk= -github.com/go-chi/chi/v5 v5.0.10/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= +github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v4 v4.1.1 h1:JYhSgy4mXXzAdF3nUx3ygx347LRXJRrpgyU3adRmkAI= +github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= -github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk= github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= -github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= +github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -550,15 +1075,19 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= -github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= +github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -587,18 +1116,23 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/cel-go v0.18.2 h1:L0B6sNBSVmt0OyECi8v6VOS74KOc9W/tLiWKfZABvf4= -github.com/google/cel-go v0.18.2/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/cel-go v0.22.0 h1:b3FJZxpiv1vTMo2/5RDUqAHPxkT8mmMfJIrq1llbf7g= +github.com/google/cel-go v0.22.0/go.mod h1:BuznPXXfQDpXKWQ9sPW3TzlAJN5zzFe+i9tIs0yC4s8= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI= +github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -614,10 +1148,11 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= -github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo= +github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -627,8 +1162,9 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -640,27 +1176,31 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= -github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a h1:fEBsGL/sjAuJrgah5XqmmYsTLzJp/TO9Lhy39gkverk= -github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20241101162523-b92577c0c142 h1:sAGdeJj0bnMgUNVeUpp6AYlVdCt3/GdI3pGRqsNSQLs= +github.com/google/pprof v0.0.0-20241101162523-b92577c0c142/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -670,9 +1210,12 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= +github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= @@ -683,8 +1226,8 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= @@ -693,8 +1236,10 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= @@ -704,19 +1249,19 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.3 h1:bN2+Fw9XPFvOCjB0UOevFIMICZ7G2XSQHzfvLUyOM5E= -github.com/hashicorp/go-getter v1.7.3/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= -github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-getter v1.7.8 h1:mshVHx1Fto0/MydBekWan5zUipGq7jO0novchgMmSiY= +github.com/hashicorp/go-getter v1.7.8/go.mod h1:2c6CboOEb9jG6YvmC9xdD+tyAFsrUaJPedwXDGr0TM4= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-metrics v0.5.2 h1:ErEYO2f//CjKsUDw4SmLzelsK6L3ZmOAR/4P9iS7ruY= -github.com/hashicorp/go-metrics v0.5.2/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= +github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6elejKY= +github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= -github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= +github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0UUrwg= +github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= @@ -728,34 +1273,39 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= -github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= -github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= +github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= +github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= +github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= +github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= -github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= -github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/huandu/skiplist v1.2.1 h1:dTi93MgjwErA/8idWTzIw4Y1kZsMWx35fmI2c8Rij7w= +github.com/huandu/skiplist v1.2.1/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -764,8 +1314,10 @@ github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ= github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8= -github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= -github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= +github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= +github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= +github.com/jhump/protoreflect/v2 v2.0.0-beta.2 h1:qZU+rEZUOYTz1Bnhi3xbwn+VxdXkLVeEpAeZzVXLY88= +github.com/jhump/protoreflect/v2 v2.0.0-beta.2/go.mod h1:4tnOYkB/mq7QTyS3YKtVtNrJv4Psqout8HA1U+hZtgM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -774,63 +1326,78 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= +github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= -github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= +github.com/linxGnu/grocksdb v1.9.2 h1:O3mzvO0wuzQ9mtlHbDrShixyVjVbmuqTjFrzlf43wZ8= +github.com/linxGnu/grocksdb v1.9.2/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= @@ -841,12 +1408,15 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/mdp/qrterminal/v3 v3.2.1 h1:6+yQjiiOsSuXT5n9/m60E54vdgFsw0zhADHhHLrFet4= +github.com/mdp/qrterminal/v3 v3.2.1/go.mod h1:jOTmXvnBsMy5xqLniO0R++Jmjs2sTm9dFSuQ5kpz/SU= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= +github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -858,21 +1428,35 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/mount v0.3.4 h1:yn5jq4STPztkkzSKpZkLcmjue+bZJ0u2AuQY1iNI1Ww= +github.com/moby/sys/mount v0.3.4/go.mod h1:KcQJMbQdJHPlq5lcYT+/CjatWM4PuxKe+XLSVS4J6Os= +github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= +github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= +github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -888,8 +1472,8 @@ github.com/nethruster/go-fraction v0.0.0-20221224165113-1b5f693330ad h1:HtuO+7iV github.com/nethruster/go-fraction v0.0.0-20221224165113-1b5f693330ad/go.mod h1:pyvrvZatpiWIxRlZpeEU0DD6SKOxgLMqZV/AU4Yz6V8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= +github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -903,18 +1487,24 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= +github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= -github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= +github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= +github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= -github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/runc v1.1.14 h1:rgSuzbmgz5DUJjeSnw337TxDbRuqjs6iqQck/2weR6w= +github.com/opencontainers/runc v1.1.14/go.mod h1:E4C2z+7BxR7GHXp0hAY53mek+x49X1LjPNeMTfRGvOA= +github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= +github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= +github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -923,6 +1513,7 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= @@ -930,19 +1521,22 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA= -github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -951,6 +1545,10 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -961,60 +1559,73 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= +github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= +github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.48.1 h1:y/8xmfWI9qmGTc+lBr4jKRUWLGSlSigv847ULJ4hYXA= +github.com/quic-go/quic-go v0.48.1/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= -github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= -github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= +github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= +github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= +github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= +github.com/segmentio/encoding v0.4.0 h1:MEBYvRqiUB2nfR2criEXWqwdY6HJOUrCn5hboVOVmy8= +github.com/segmentio/encoding v0.4.0/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -1026,29 +1637,28 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= -github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= +github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -1057,8 +1667,9 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1069,49 +1680,64 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tetratelabs/wazero v1.5.0 h1:Yz3fZHivfDiZFUXnWMPUoiW7s8tC1sjdBtlJn08qYa0= -github.com/tetratelabs/wazero v1.5.0/go.mod h1:0U0G41+ochRKoPKCJlh0jMg1CHkyfK8kDqiirMmKY8A= +github.com/tetratelabs/wazero v1.8.1 h1:NrcgVbWfkWvVc4UtT4LRLDf91PsOzDzefMdwhLfA550= +github.com/tetratelabs/wazero v1.8.1/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= -github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= +github.com/vbatts/tar-split v0.11.6 h1:4SjTW5+PU11n6fZenf2IPoV8/tz3AaYHMWjf23envGs= +github.com/vbatts/tar-split v0.11.6/go.mod h1:dqKNtesIOr2j2Qv3W/cHjnvk9I8+G7oAkFDFN6TCBEI= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +github.com/zondax/golem v0.27.0 h1:IbBjGIXF3SoGOZHsILJvIM/F/ylwJzMcHAcggiqniPw= +github.com/zondax/golem v0.27.0/go.mod h1:AmorCgJPt00L8xN1VrMBe13PSifoZksnQ1Ge906bu4A= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= -github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= +github.com/zondax/ledger-go v1.0.1 h1:Ks/2tz/dOF+dbRynfZ0dEhcdL1lqw43Sa0zMXHpQ3aQ= +github.com/zondax/ledger-go v1.0.1/go.mod h1:j7IgMY39f30apthJYMd1YsHZRqdyu4KbVmUp0nU78X0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= -go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.4.0-alpha.1 h1:3yrqQzbRRPFPdOMWS/QQIVxVnzSkAZQYeWlZFv1kbj4= +go.etcd.io/bbolt v1.4.0-alpha.1/go.mod h1:S/Z/Nm3iuOnyO1W4XuFfPci51Gj6F1Hv0z8hisyYYOw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.lsp.dev/jsonrpc2 v0.10.0 h1:Pr/YcXJoEOTMc/b6OTmcR1DPJ3mSWl/SWiU1Cct6VmI= +go.lsp.dev/jsonrpc2 v0.10.0/go.mod h1:fmEzIdXPi/rf6d4uFcayi8HpFP1nBF99ERP1htC72Ac= +go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 h1:hCzQgh6UcwbKgNSRurYWSqh8MufqRRPODRBblutn4TE= +go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2/go.mod h1:gtSHRuYfbCT0qnbLnovpie/WEmqyJ7T4n6VXiFMBtcw= +go.lsp.dev/protocol v0.12.0 h1:tNprUI9klQW5FAFVM4Sa+AbPFuVQByWhP1ttNUAjIWg= +go.lsp.dev/protocol v0.12.0/go.mod h1:Qb11/HgZQ72qQbeyPfJbu3hZBH23s1sr4st8czGeDMQ= +go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo= +go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1123,26 +1749,44 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc= -go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs= -go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA= -go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM= -go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM= -go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0= -go.opentelemetry.io/otel/sdk/metric v1.19.0 h1:EJoTO5qysMsYCa+w4UghwFV/ptQgqSL/8Ni+hx+8i1k= -go.opentelemetry.io/otel/sdk/metric v1.19.0/go.mod h1:XjG0jQyFJrv2PbMvwND7LwCEhsJzCzV5210euduKcKY= -go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ= -go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 h1:PB3Zrjs1sG1GBX51SXyTSoOTqcDglmsk7nT6tkKPb/k= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0/go.mod h1:U2R3XyVPzn0WX7wOIypPuptulsMcPDPs/oiSVOMVnHY= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= +go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= +go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= +go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -1152,25 +1796,47 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap/exp v0.3.0 h1:6JYzdifzYkGmTdRR59oYH+Ng7k49H9qVpWwNSsGJj3U= +go.uber.org/zap/exp v0.3.0/go.mod h1:5I384qq7XGxYyByIhHm6jg5CHkGY0nsTfbDLgDDlgJQ= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU= +golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -1178,10 +1844,22 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1205,9 +1883,17 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1249,12 +1935,15 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1265,10 +1954,23 @@ golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1292,10 +1994,14 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1309,9 +2015,15 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1320,8 +2032,6 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1330,7 +2040,6 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1367,25 +2076,31 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1403,21 +2118,44 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1429,19 +2167,33 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1455,6 +2207,7 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1488,19 +2241,27 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1508,8 +2269,17 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1558,9 +2328,18 @@ google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaE google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= -google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.247.0 h1:tSd/e0QrUlLsrwMKmkbQhYVa109qIintOls2Wh6bngc= +google.golang.org/api v0.247.0/go.mod h1:r1qZOPmxXffXg6xS5uhx16Fa/UFY8QU/K4bfKrnvovM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1569,8 +2348,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1609,8 +2386,10 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1644,6 +2423,7 @@ google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -1676,13 +2456,41 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= -google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= -google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= -google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= +google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= +google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1715,6 +2523,7 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= @@ -1724,11 +2533,16 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1744,9 +2558,11 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1759,8 +2575,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -1779,8 +2593,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1789,14 +2603,55 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= -pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= +nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= +pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= +pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pluginrpc.com/pluginrpc v0.5.0 h1:tOQj2D35hOmvHyPu8e7ohW2/QvAnEtKscy2IJYWQ2yo= +pluginrpc.com/pluginrpc v0.5.0/go.mod h1:UNWZ941hcVAoOZUn8YZsMmOZBzbUjQa3XMns8RQLp9o= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= +rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= +sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= +sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/testutil/keeper/structs.go b/testutil/keeper/structs.go index ca6bcc7..f53314e 100644 --- a/testutil/keeper/structs.go +++ b/testutil/keeper/structs.go @@ -21,10 +21,7 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" - portkeeper "github.com/cosmos/ibc-go/v8/modules/core/05-port/keeper" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" "github.com/stretchr/testify/require" "structs/x/structs/keeper" @@ -59,7 +56,7 @@ func (m *MockAccountKeeper) NewAccountWithAddress(ctx context.Context, addr sdk. } func (m *MockAccountKeeper) GetModuleAddress(module string) sdk.AccAddress { - return sdk.AccAddress{} + return authtypes.NewModuleAddress(module) } // MockBankKeeper is a mock implementation of the BankKeeper interface @@ -281,30 +278,21 @@ func StructsKeeper(t testing.TB) (keeper.Keeper, sdk.Context) { registry := codectypes.NewInterfaceRegistry() appCodec := codec.NewProtoCodec(registry) - capabilityKeeper := capabilitykeeper.NewKeeper(appCodec, storeKey, memStoreKey) authority := authtypes.NewModuleAddress(govtypes.ModuleName) - scopedKeeper := capabilityKeeper.ScopeToModule(ibcexported.ModuleName) - portKeeper := portkeeper.NewKeeper(scopedKeeper) - scopeModule := capabilityKeeper.ScopeToModule(types.ModuleName) - // Create mock keepers mockAccountKeeper := NewMockAccountKeeper() mockBankKeeper := NewMockBankKeeper() mockStakingKeeper := NewMockStakingKeeper() + // IBC v10 - no capability keeper needed k := keeper.NewKeeper( appCodec, runtime.NewKVStoreService(storeKey), log.NewNopLogger(), authority.String(), func() *ibckeeper.Keeper { - return &ibckeeper.Keeper{ - PortKeeper: &portKeeper, - } - }, - func(string) capabilitykeeper.ScopedKeeper { - return scopeModule + return &ibckeeper.Keeper{} }, mockBankKeeper, mockStakingKeeper, diff --git a/x/structs/keeper/allocation.go b/x/structs/keeper/allocation.go index 4910f4f..d6ec795 100644 --- a/x/structs/keeper/allocation.go +++ b/x/structs/keeper/allocation.go @@ -3,6 +3,7 @@ package keeper import ( //"encoding/binary" "context" + "strconv" "github.com/cosmos/cosmos-sdk/runtime" "cosmossdk.io/store/prefix" @@ -118,7 +119,7 @@ func (k Keeper) SetAllocation(ctx context.Context, allocation types.Allocation, if (previousAllocation.Index != allocation.Index) { // Should never change the SourceId of an Allocation - return allocation, newPower, types.NewAllocationError(allocation.SourceObjectId, "immutable_index").WithFieldChange("index", string(previousAllocation.Index), string(allocation.Index)) + return allocation, newPower, types.NewAllocationError(allocation.SourceObjectId, "immutable_index").WithFieldChange("index", strconv.FormatUint(previousAllocation.Index, 10), strconv.FormatUint(allocation.Index, 10)) } if (previousAllocation.Type != allocation.Type) { diff --git a/x/structs/keeper/guild_cache.go b/x/structs/keeper/guild_cache.go index 74d2c7b..ef2df90 100644 --- a/x/structs/keeper/guild_cache.go +++ b/x/structs/keeper/guild_cache.go @@ -4,12 +4,13 @@ import ( "context" "structs/x/structs/types" + sdk "github.com/cosmos/cosmos-sdk/types" // Used in Randomness Orb "cosmossdk.io/math" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) /* @@ -33,11 +34,11 @@ message Guild { type GuildCache struct { GuildId string - K *Keeper - Ctx context.Context + K *Keeper + Ctx context.Context AnyChange bool - Ready bool + Ready bool GuildLoaded bool GuildChanged bool @@ -46,16 +47,16 @@ type GuildCache struct { OwnerLoaded bool Owner *PlayerCache - SubstationLoaded bool - Substation *SubstationCache + SubstationLoaded bool + Substation *SubstationCache } // Build this initial Guild Cache object func (k *Keeper) GetGuildCacheFromId(ctx context.Context, guildId string) GuildCache { return GuildCache{ GuildId: guildId, - K: k, - Ctx: ctx, + K: k, + Ctx: ctx, AnyChange: false, @@ -63,14 +64,13 @@ func (k *Keeper) GetGuildCacheFromId(ctx context.Context, guildId string) GuildC GuildLoaded: false, GuildChanged: false, - } } func (cache *GuildCache) Commit() { cache.AnyChange = false - cache.K.logger.Info("Updating Guild From Cache", "guildId", cache.GuildId) + cache.K.logger.Info("Updating Guild From Cache", "guildId", cache.GuildId) if cache.GuildChanged { cache.K.SetGuild(cache.Ctx, cache.Guild) @@ -85,7 +85,6 @@ func (cache *GuildCache) Commit() { cache.GetOwner().Commit() } - } func (cache *GuildCache) IsChanged() bool { @@ -111,12 +110,12 @@ func (cache *GuildCache) LoadOwner() bool { } func (cache *GuildCache) ManualLoadOwner(owner *PlayerCache) { - cache.Owner = owner - cache.OwnerLoaded = true + cache.Owner = owner + cache.OwnerLoaded = true } // Load the Guild record -func (cache *GuildCache) LoadGuild() (bool) { +func (cache *GuildCache) LoadGuild() bool { guild, guildFound := cache.K.GetGuild(cache.Ctx, cache.GuildId) if guildFound { @@ -135,220 +134,260 @@ func (cache *GuildCache) LoadSubstation() bool { return cache.SubstationLoaded } - - /* Getters * These will always perform a Load first on the appropriate data if it hasn't occurred yet. */ -func (cache *GuildCache) GetGuild() types.Guild { if !cache.GuildLoaded { cache.LoadGuild() }; return cache.Guild } +func (cache *GuildCache) GetGuild() types.Guild { + if !cache.GuildLoaded { + cache.LoadGuild() + } + return cache.Guild +} func (cache *GuildCache) GetGuildId() string { return cache.GuildId } // Get the Owner data -func (cache *GuildCache) GetOwnerId() string { if !cache.GuildLoaded { cache.LoadGuild() }; return cache.Guild.Owner } -func (cache *GuildCache) GetOwner() *PlayerCache { if !cache.OwnerLoaded { cache.LoadOwner() }; return cache.Owner } +func (cache *GuildCache) GetOwnerId() string { + if !cache.GuildLoaded { + cache.LoadGuild() + } + return cache.Guild.Owner +} +func (cache *GuildCache) GetOwner() *PlayerCache { + if !cache.OwnerLoaded { + cache.LoadOwner() + } + return cache.Owner +} -func (cache *GuildCache) GetJoinInfusionMinimum() uint64 {if !cache.GuildLoaded { cache.LoadGuild() }; return cache.Guild.JoinInfusionMinimum } -func (cache *GuildCache) GetJoinInfusionMinimumBypassByInvite() types.GuildJoinBypassLevel {if !cache.GuildLoaded { cache.LoadGuild() }; return cache.Guild.JoinInfusionMinimumBypassByInvite } -func (cache *GuildCache) GetJoinInfusionMinimumBypassByRequest() types.GuildJoinBypassLevel {if !cache.GuildLoaded { cache.LoadGuild() }; return cache.Guild.JoinInfusionMinimumBypassByRequest } -func (cache *GuildCache) GetEntrySubstationId() string { if !cache.GuildLoaded { cache.LoadGuild() }; return cache.Guild.EntrySubstationId } -func (cache *GuildCache) GetSubstation() *SubstationCache {if !cache.SubstationLoaded { cache.LoadSubstation() }; return cache.Substation } -func (cache *GuildCache) GetPrimaryReactorId() string { if !cache.GuildLoaded { cache.LoadGuild() }; return cache.Guild.PrimaryReactorId } +func (cache *GuildCache) GetJoinInfusionMinimum() uint64 { + if !cache.GuildLoaded { + cache.LoadGuild() + } + return cache.Guild.JoinInfusionMinimum +} +func (cache *GuildCache) GetJoinInfusionMinimumBypassByInvite() types.GuildJoinBypassLevel { + if !cache.GuildLoaded { + cache.LoadGuild() + } + return cache.Guild.JoinInfusionMinimumBypassByInvite +} +func (cache *GuildCache) GetJoinInfusionMinimumBypassByRequest() types.GuildJoinBypassLevel { + if !cache.GuildLoaded { + cache.LoadGuild() + } + return cache.Guild.JoinInfusionMinimumBypassByRequest +} +func (cache *GuildCache) GetEntrySubstationId() string { + if !cache.GuildLoaded { + cache.LoadGuild() + } + return cache.Guild.EntrySubstationId +} +func (cache *GuildCache) GetSubstation() *SubstationCache { + if !cache.SubstationLoaded { + cache.LoadSubstation() + } + return cache.Substation +} +func (cache *GuildCache) GetPrimaryReactorId() string { + if !cache.GuildLoaded { + cache.LoadGuild() + } + return cache.Guild.PrimaryReactorId +} -func (cache *GuildCache) GetCreator() string { if !cache.GuildLoaded { cache.LoadGuild() }; return cache.Guild.Creator } +func (cache *GuildCache) GetCreator() string { + if !cache.GuildLoaded { + cache.LoadGuild() + } + return cache.Guild.Creator +} -func (cache *GuildCache) GetBankCollateralPool() sdk.AccAddress { return authtypes.NewModuleAddress(types.GuildBankCollateralPool + cache.GetGuildId()) } +func (cache *GuildCache) GetBankCollateralPool() sdk.AccAddress { + return authtypes.NewModuleAddress(types.GuildBankCollateralPool + cache.GetGuildId()) +} func (cache *GuildCache) GetBankDenom() string { return "uguild." + cache.GetGuildId() } - /* Permissions */ // Delete Permission -func (cache *GuildCache) CanDelete(activePlayer *PlayerCache) (error) { - return cache.PermissionCheck(types.PermissionDelete, activePlayer) +func (cache *GuildCache) CanDelete(activePlayer *PlayerCache) error { + return cache.PermissionCheck(types.PermissionDelete, activePlayer) } // Update Permission -func (cache *GuildCache) CanUpdate(activePlayer *PlayerCache) (error) { - return cache.PermissionCheck(types.PermissionUpdate, activePlayer) +func (cache *GuildCache) CanUpdate(activePlayer *PlayerCache) error { + return cache.PermissionCheck(types.PermissionUpdate, activePlayer) } // Assets Permission -func (cache *GuildCache) CanAdministrateBank(activePlayer *PlayerCache) (error) { - return cache.PermissionCheck(types.PermissionAssets, activePlayer) +func (cache *GuildCache) CanAdministrateBank(activePlayer *PlayerCache) error { + return cache.PermissionCheck(types.PermissionAssets, activePlayer) } // Associations Permission -func (cache *GuildCache) CanAddMembersByProxy(activePlayer *PlayerCache) (error) { - return cache.PermissionCheck(types.PermissionAssociations, activePlayer) +func (cache *GuildCache) CanAddMembersByProxy(activePlayer *PlayerCache) error { + return cache.PermissionCheck(types.PermissionAssociations, activePlayer) } func (cache *GuildCache) CanInviteMembers(activePlayer *PlayerCache) (err error) { - switch cache.GetJoinInfusionMinimumBypassByInvite() { - // Invites are currently closed - case types.GuildJoinBypassLevel_closed: - err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_allowed").WithJoinType("invite") + switch cache.GetJoinInfusionMinimumBypassByInvite() { + // Invites are currently closed + case types.GuildJoinBypassLevel_closed: + err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_allowed").WithJoinType("invite") - // Only specific players can invite - case types.GuildJoinBypassLevel_permissioned: - err = cache.PermissionCheck(types.PermissionAssociations, activePlayer) + // Only specific players can invite + case types.GuildJoinBypassLevel_permissioned: + err = cache.PermissionCheck(types.PermissionAssociations, activePlayer) - // All Guild Members can Invite - case types.GuildJoinBypassLevel_member: - if activePlayer.GetGuildId() != cache.GetGuildId() { - err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_member") - } - } - return + // All Guild Members can Invite + case types.GuildJoinBypassLevel_member: + if activePlayer.GetGuildId() != cache.GetGuildId() { + err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_member") + } + } + return } func (cache *GuildCache) CanApproveMembershipRequest(activePlayer *PlayerCache) (err error) { - switch cache.GetJoinInfusionMinimumBypassByRequest() { - // Invites are currently closed - case types.GuildJoinBypassLevel_closed: - err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_allowed").WithJoinType("request") - - // Only specific players can request - case types.GuildJoinBypassLevel_permissioned: - err = cache.PermissionCheck(types.PermissionAssociations, activePlayer) - - // All Guild Members can Invite - case types.GuildJoinBypassLevel_member: - if activePlayer.GetGuildId() != cache.GetGuildId() { - err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_member") - } - } - return + switch cache.GetJoinInfusionMinimumBypassByRequest() { + // Invites are currently closed + case types.GuildJoinBypassLevel_closed: + err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_allowed").WithJoinType("request") + + // Only specific players can request + case types.GuildJoinBypassLevel_permissioned: + err = cache.PermissionCheck(types.PermissionAssociations, activePlayer) + + // All Guild Members can Invite + case types.GuildJoinBypassLevel_member: + if activePlayer.GetGuildId() != cache.GetGuildId() { + err = types.NewGuildMembershipError(cache.GetGuildId(), activePlayer.GetPlayerId(), "not_member") + } + } + return } -func (cache *GuildCache) CanKickMembers(activePlayer *PlayerCache) (error) { - return cache.PermissionCheck(types.PermissionAssociations, activePlayer) +func (cache *GuildCache) CanKickMembers(activePlayer *PlayerCache) error { + return cache.PermissionCheck(types.PermissionAssociations, activePlayer) } - func (cache *GuildCache) CanRequestMembership() (err error) { - switch cache.GetJoinInfusionMinimumBypassByRequest() { - // Invites are currently closed - case types.GuildJoinBypassLevel_closed: - err = types.NewGuildMembershipError(cache.GetGuildId(), "", "not_allowed").WithJoinType("request") - } - return + switch cache.GetJoinInfusionMinimumBypassByRequest() { + // Invites are currently closed + case types.GuildJoinBypassLevel_closed: + err = types.NewGuildMembershipError(cache.GetGuildId(), "", "not_allowed").WithJoinType("request") + } + return } -func (cache *GuildCache) PermissionCheck(permission types.Permission, activePlayer *PlayerCache) (error) { - // Make sure the address calling this has permissions - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(activePlayer.GetActiveAddress()), permission)) { - return types.NewPermissionError("address", activePlayer.GetActiveAddress(), "", "", uint64(permission), "guild_action") - } +func (cache *GuildCache) PermissionCheck(permission types.Permission, activePlayer *PlayerCache) error { + // Make sure the address calling this has permissions + if !cache.K.PermissionHasOneOf(cache.Ctx, GetAddressPermissionIDBytes(activePlayer.GetActiveAddress()), permission) { + return types.NewPermissionError("address", activePlayer.GetActiveAddress(), "", "", uint64(permission), "guild_action") + } - if !activePlayer.HasPlayerAccount() { - return types.NewPlayerRequiredError(activePlayer.GetActiveAddress(), "guild_action") - } else { - if (activePlayer.GetPlayerId() != cache.GetOwnerId()) { - if (!cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetGuildId(), activePlayer.GetPlayerId()), permission)) { - return types.NewPermissionError("player", activePlayer.GetPlayerId(), "guild", cache.GetGuildId(), uint64(permission), "guild_action") - } - } - } - return nil + if !activePlayer.HasPlayerAccount() { + return types.NewPlayerRequiredError(activePlayer.GetActiveAddress(), "guild_action") + } else { + if activePlayer.GetPlayerId() != cache.GetOwnerId() { + if !cache.K.PermissionHasOneOf(cache.Ctx, GetObjectPermissionIDBytes(cache.GetGuildId(), activePlayer.GetPlayerId()), permission) { + return types.NewPermissionError("player", activePlayer.GetPlayerId(), "guild", cache.GetGuildId(), uint64(permission), "guild_action") + } + } + } + return nil } - /* Temporary Banking Infrastructure */ -func (cache *GuildCache) BankMint(amountAlpha math.Int, amountToken math.Int, player *PlayerCache) (error) { +func (cache *GuildCache) BankMint(amountAlpha math.Int, amountToken math.Int, player *PlayerCache) error { - alphaCollateralCoin := sdk.NewCoin("ualpha", amountAlpha) - alphaCollateralCoins := sdk.NewCoins(alphaCollateralCoin) + alphaCollateralCoin := sdk.NewCoin("ualpha", amountAlpha) + alphaCollateralCoins := sdk.NewCoins(alphaCollateralCoin) + guildTokenCoin := sdk.NewCoin(cache.GetBankDenom(), amountToken) + guildTokenCoins := sdk.NewCoins(guildTokenCoin) - guildTokenCoin := sdk.NewCoin(cache.GetBankDenom(), amountToken) - guildTokenCoins := sdk.NewCoins(guildTokenCoin) - - // Try to Move Alpha From the Player to the Pool - if !cache.K.bankKeeper.HasBalance(cache.Ctx, player.GetPrimaryAccount(), alphaCollateralCoin) { - return types.NewPlayerAffordabilityError(player.GetPlayerId(), "mint", amountAlpha.String()+" ualpha") - } + // Try to Move Alpha From the Player to the Pool + if !cache.K.bankKeeper.HasBalance(cache.Ctx, player.GetPrimaryAccount(), alphaCollateralCoin) { + return types.NewPlayerAffordabilityError(player.GetPlayerId(), "mint", amountAlpha.String()+" ualpha") + } - errSend := cache.K.bankKeeper.SendCoins(cache.Ctx, player.GetPrimaryAccount(), cache.GetBankCollateralPool(), alphaCollateralCoins) - if errSend != nil { - return errSend - } + errSend := cache.K.bankKeeper.SendCoins(cache.Ctx, player.GetPrimaryAccount(), cache.GetBankCollateralPool(), alphaCollateralCoins) + if errSend != nil { + return errSend + } - // Mint new Guild Token - cache.K.bankKeeper.MintCoins(cache.Ctx, types.ModuleName, guildTokenCoins) + // Mint new Guild Token + cache.K.bankKeeper.MintCoins(cache.Ctx, types.ModuleName, guildTokenCoins) - // Move the new Guild Token to Player - cache.K.bankKeeper.SendCoinsFromModuleToAccount(cache.Ctx, types.ModuleName, player.GetPrimaryAccount(), guildTokenCoins) + // Move the new Guild Token to Player + cache.K.bankKeeper.SendCoinsFromModuleToAccount(cache.Ctx, types.ModuleName, player.GetPrimaryAccount(), guildTokenCoins) ctxSDK := sdk.UnwrapSDKContext(cache.Ctx) - _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventGuildBankMint{&types.EventGuildBankMintDetail{GuildId: cache.GetGuildId(), AmountAlpha: amountAlpha.Uint64(), AmountToken: amountToken.Uint64(), PlayerId: player.GetPlayerId()}}) + _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventGuildBankMint{&types.EventGuildBankMintDetail{GuildId: cache.GetGuildId(), AmountAlpha: amountAlpha.Uint64(), AmountToken: amountToken.Uint64(), PlayerId: player.GetPlayerId()}}) - return nil + return nil } +func (cache *GuildCache) BankRedeem(amountToken math.Int, player *PlayerCache) error { -func (cache *GuildCache) BankRedeem(amountToken math.Int, player *PlayerCache) (error) { - - alphaCollateralBalance := cache.K.bankKeeper.SpendableCoin(cache.Ctx, cache.GetBankCollateralPool(), "ualpha") - guildTokenSupply := cache.K.bankKeeper.GetSupply(cache.Ctx, cache.GetBankDenom()) - - guildTokenCoin := sdk.NewCoin(cache.GetBankDenom(), amountToken) - guildTokenCoins := sdk.NewCoins(guildTokenCoin) - - // Try to Move Alpha From the Player to the Pool - if !cache.K.bankKeeper.HasBalance(cache.Ctx, player.GetPrimaryAccount(), guildTokenCoin) { - return types.NewPlayerAffordabilityError(player.GetPlayerId(), "redeem", amountToken.String()+" "+cache.GetBankDenom()) - } + alphaCollateralBalance := cache.K.bankKeeper.SpendableCoin(cache.Ctx, cache.GetBankCollateralPool(), "ualpha") + guildTokenSupply := cache.K.bankKeeper.GetSupply(cache.Ctx, cache.GetBankDenom()) - // alphaAmount = amountToken / guildTokenSupply.Amount - amountTokenDec := math.LegacyNewDecFromInt(amountToken) - guildTokenSupplyDec := math.LegacyNewDecFromInt(guildTokenSupply.Amount) - alphaCollateralBalanceDec := math.LegacyNewDecFromInt(alphaCollateralBalance.Amount) + guildTokenCoin := sdk.NewCoin(cache.GetBankDenom(), amountToken) + guildTokenCoins := sdk.NewCoins(guildTokenCoin) - alphaAmount := amountTokenDec.Quo(guildTokenSupplyDec).Mul(alphaCollateralBalanceDec).TruncateInt() + // Try to Move Alpha From the Player to the Pool + if !cache.K.bankKeeper.HasBalance(cache.Ctx, player.GetPrimaryAccount(), guildTokenCoin) { + return types.NewPlayerAffordabilityError(player.GetPlayerId(), "redeem", amountToken.String()+" "+cache.GetBankDenom()) + } + // alphaAmount = amountToken / guildTokenSupply.Amount + amountTokenDec := math.LegacyNewDecFromInt(amountToken) + guildTokenSupplyDec := math.LegacyNewDecFromInt(guildTokenSupply.Amount) + alphaCollateralBalanceDec := math.LegacyNewDecFromInt(alphaCollateralBalance.Amount) - // Move the new coins back to the module - cache.K.bankKeeper.SendCoinsFromAccountToModule(cache.Ctx, player.GetPrimaryAccount(), types.ModuleName, guildTokenCoins) - // Burn the Guild Token - errBurn := cache.K.bankKeeper.BurnCoins(cache.Ctx, types.ModuleName, guildTokenCoins) - if errBurn != nil { - return errBurn - } + alphaAmount := amountTokenDec.Quo(guildTokenSupplyDec).Mul(alphaCollateralBalanceDec).TruncateInt() - // Move the Alpha to Player - alphaAmountCoin := sdk.NewCoin("ualpha", alphaAmount) - alphaAmountCoins := sdk.NewCoins(alphaAmountCoin) - cache.K.bankKeeper.SendCoins(cache.Ctx, cache.GetBankCollateralPool(), player.GetPrimaryAccount(), alphaAmountCoins) + // Move the new coins back to the module + cache.K.bankKeeper.SendCoinsFromAccountToModule(cache.Ctx, player.GetPrimaryAccount(), types.ModuleName, guildTokenCoins) + // Burn the Guild Token + errBurn := cache.K.bankKeeper.BurnCoins(cache.Ctx, types.ModuleName, guildTokenCoins) + if errBurn != nil { + return errBurn + } + // Move the Alpha to Player + alphaAmountCoin := sdk.NewCoin("ualpha", alphaAmount) + alphaAmountCoins := sdk.NewCoins(alphaAmountCoin) + cache.K.bankKeeper.SendCoins(cache.Ctx, cache.GetBankCollateralPool(), player.GetPrimaryAccount(), alphaAmountCoins) ctxSDK := sdk.UnwrapSDKContext(cache.Ctx) - _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventGuildBankRedeem{&types.EventGuildBankRedeemDetail{GuildId: cache.GetGuildId(), AmountAlpha: alphaAmount.Uint64(), AmountToken: amountToken.Uint64(), PlayerId: player.GetPlayerId()}}) + _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventGuildBankRedeem{&types.EventGuildBankRedeemDetail{GuildId: cache.GetGuildId(), AmountAlpha: alphaAmount.Uint64(), AmountToken: amountToken.Uint64(), PlayerId: player.GetPlayerId()}}) - return nil + return nil } +func (cache *GuildCache) BankConfiscateAndBurn(amountToken math.Int, address string) error { -func (cache *GuildCache) BankConfiscateAndBurn(amountToken math.Int, address string) (error) { - - guildTokenCoin := sdk.NewCoin(cache.GetBankDenom(), amountToken) - guildTokenCoins := sdk.NewCoins(guildTokenCoin) + guildTokenCoin := sdk.NewCoin(cache.GetBankDenom(), amountToken) + guildTokenCoins := sdk.NewCoins(guildTokenCoin) - // Confiscate - playerAcc, _ := sdk.AccAddressFromBech32(address) - cache.K.bankKeeper.SendCoinsFromAccountToModule(cache.Ctx, playerAcc, types.ModuleName, guildTokenCoins) + // Confiscate + playerAcc, _ := sdk.AccAddressFromBech32(address) + cache.K.bankKeeper.SendCoinsFromAccountToModule(cache.Ctx, playerAcc, types.ModuleName, guildTokenCoins) - // Burn the Guild Token - errBurn := cache.K.bankKeeper.BurnCoins(cache.Ctx, types.ModuleName, guildTokenCoins) - if errBurn != nil { - return errBurn - } + // Burn the Guild Token + errBurn := cache.K.bankKeeper.BurnCoins(cache.Ctx, types.ModuleName, guildTokenCoins) + if errBurn != nil { + return errBurn + } ctxSDK := sdk.UnwrapSDKContext(cache.Ctx) - _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventGuildBankConfiscateAndBurn{&types.EventGuildBankConfiscateAndBurnDetail{GuildId: cache.GetGuildId(), AmountToken: amountToken.Uint64(), Address: address}}) + _ = ctxSDK.EventManager().EmitTypedEvent(&types.EventGuildBankConfiscateAndBurn{&types.EventGuildBankConfiscateAndBurnDetail{GuildId: cache.GetGuildId(), AmountToken: amountToken.Uint64(), Address: address}}) - return nil + return nil } - - diff --git a/x/structs/keeper/keeper.go b/x/structs/keeper/keeper.go index 78aba2f..2c61b59 100644 --- a/x/structs/keeper/keeper.go +++ b/x/structs/keeper/keeper.go @@ -4,18 +4,12 @@ import ( "fmt" "cosmossdk.io/core/store" - errorsmod "cosmossdk.io/errors" "cosmossdk.io/log" "cosmossdk.io/store/prefix" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" - capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v8/modules/core/24-host" - "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" "structs/x/structs/types" ) @@ -30,9 +24,7 @@ type ( // should be the x/gov module account. authority string - ibcKeeperFn func() *ibckeeper.Keeper - capabilityScopedFn func(string) capabilitykeeper.ScopedKeeper - scopedKeeper exported.ScopedKeeper + ibcKeeperFn func() *ibckeeper.Keeper bankKeeper types.BankKeeper stakingKeeper types.StakingKeeper @@ -46,7 +38,6 @@ func NewKeeper( logger log.Logger, authority string, ibcKeeperFn func() *ibckeeper.Keeper, - capabilityScopedFn func(string) capabilitykeeper.ScopedKeeper, bankKeeper types.BankKeeper, stakingKeeper types.StakingKeeper, @@ -57,12 +48,11 @@ func NewKeeper( } return Keeper{ - cdc: cdc, - storeService: storeService, - authority: authority, - logger: logger.With("module", "structs"), - ibcKeeperFn: ibcKeeperFn, - capabilityScopedFn: capabilityScopedFn, + cdc: cdc, + storeService: storeService, + authority: authority, + logger: logger.With("module", "structs"), + ibcKeeperFn: ibcKeeperFn, bankKeeper: bankKeeper, stakingKeeper: stakingKeeper, @@ -81,34 +71,28 @@ func (k Keeper) Logger() log.Logger { } // ---------------------------------------------------------------------------- -// IBC Keeper Logic +// IBC Keeper Logic (IBC v10 - no capability required) // ---------------------------------------------------------------------------- // ChanCloseInit defines a wrapper function for the channel Keeper's function. func (k *Keeper) ChanCloseInit(ctx sdk.Context, portID, channelID string) error { - capName := host.ChannelCapabilityPath(portID, channelID) - chanCap, ok := k.ScopedKeeper().GetCapability(ctx, capName) - if !ok { - return errorsmod.Wrapf(channeltypes.ErrChannelCapabilityNotFound, "could not retrieve channel capability at: %s", capName) - } - return k.ibcKeeperFn().ChannelKeeper.ChanCloseInit(ctx, portID, channelID, chanCap) + return k.ibcKeeperFn().ChannelKeeper.ChanCloseInit(ctx, portID, channelID) } // ShouldBound checks if the IBC app module can be bound to the desired port +// In IBC v10, port binding is handled automatically by the router func (k *Keeper) ShouldBound(ctx sdk.Context, portID string) bool { - scopedKeeper := k.ScopedKeeper() - if scopedKeeper == nil { - return false - } - _, ok := scopedKeeper.GetCapability(ctx, host.PortPath(portID)) - return !ok + // In IBC v10, ports are registered via the router, not bound explicitly + return true } -// BindPort defines a wrapper function for the port Keeper's function in -// order to expose it to module's InitGenesis function +// BindPort is a no-op in IBC v10 as ports are registered via the router +// This method is kept for backwards compatibility with InitGenesis func (k *Keeper) BindPort(ctx sdk.Context, portID string) error { - cap := k.ibcKeeperFn().PortKeeper.BindPort(ctx, portID) - return k.ClaimCapability(ctx, cap, host.PortPath(portID)) + // In IBC v10, port binding is handled automatically through the router + // Just set the port in state for reference + k.SetPort(ctx, portID) + return nil } // GetPort returns the portID for the IBC app module. Used in ExportGenesis @@ -125,25 +109,6 @@ func (k *Keeper) SetPort(ctx sdk.Context, portID string) { store.Set(types.PortKey, []byte(portID)) } -// AuthenticateCapability wraps the scopedKeeper's AuthenticateCapability function -func (k *Keeper) AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool { - return k.ScopedKeeper().AuthenticateCapability(ctx, cap, name) -} - -// ClaimCapability allows the IBC app module to claim a capability that core IBC -// passes to it -func (k *Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error { - return k.ScopedKeeper().ClaimCapability(ctx, cap, name) -} - -// ScopedKeeper returns the ScopedKeeper -func (k *Keeper) ScopedKeeper() exported.ScopedKeeper { - if k.scopedKeeper == nil && k.capabilityScopedFn != nil { - k.scopedKeeper = k.capabilityScopedFn(types.ModuleName) - } - return k.scopedKeeper -} - // BankKeeper returns the bank keeper func (k Keeper) BankKeeper() types.BankKeeper { return k.bankKeeper diff --git a/x/structs/keeper/msg_server_struct_generator_infuse.go b/x/structs/keeper/msg_server_struct_generator_infuse.go index e3f401c..5ec3703 100644 --- a/x/structs/keeper/msg_server_struct_generator_infuse.go +++ b/x/structs/keeper/msg_server_struct_generator_infuse.go @@ -3,9 +3,9 @@ package keeper import ( "context" + "structs/x/structs/types" sdk "github.com/cosmos/cosmos-sdk/types" - "structs/x/structs/types" "cosmossdk.io/math" ) @@ -13,101 +13,100 @@ import ( func (k msgServer) StructGeneratorInfuse(goCtx context.Context, msg *types.MsgStructGeneratorInfuse) (*types.MsgStructGeneratorStatusResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - // Add an Active Address record to the - // indexer for UI requirements + // Add an Active Address record to the + // indexer for UI requirements k.AddressEmitActivity(ctx, msg.Creator) - callingPlayerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) - if (callingPlayerIndex == 0) { - return &types.MsgStructGeneratorStatusResponse{}, types.NewPlayerRequiredError(msg.Creator, "struct_generator_infuse") - } - callingPlayerId := GetObjectID(types.ObjectType_player, callingPlayerIndex) - callingPlayer, _ := k.GetPlayer(ctx, callingPlayerId) - - addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) - // Make sure the address calling this has Assets permissions - if (!k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets)) { - return &types.MsgStructGeneratorStatusResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "assets") - } - - structStatusAttributeId := GetStructAttributeIDByObjectId(types.StructAttributeType_status, msg.StructId) - - structure, structureFound := k.GetStruct(ctx, msg.StructId) - if (!structureFound) { - return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("struct", msg.StructId) - } - - // Is the Struct online? - if (k.StructAttributeFlagHasOneOf(ctx, structStatusAttributeId, uint64(types.StructStateOnline))) { - k.DischargePlayer(ctx, callingPlayerId) - return &types.MsgStructGeneratorStatusResponse{}, types.NewStructStateError(msg.StructId, "offline", "online", "generator_infuse") - } - - // Load Struct Type - structType, structTypeFound := k.GetStructType(ctx, structure.Type) - if (!structTypeFound) { - return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("struct_type", "").WithIndex(structure.Type) - } - - - if (structType.PowerGeneration == types.TechPowerGeneration_noPowerGeneration) { - k.DischargePlayer(ctx, callingPlayerId) - return &types.MsgStructGeneratorStatusResponse{}, types.NewStructCapabilityError(msg.StructId, "generation") - } - - // FIX FIX FIX FIX - // TODO - // Change all of these to do a more deeper check - // Check for Fleet location, etc. - // repeat everywhere - // FIX FIX FIX FIX - planet, planetFound := k.GetPlanet(ctx, structure.LocationId) - if (!planetFound) { - return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("planet", structure.LocationId) - } - - if (planet.Status == types.PlanetStatus_complete) { - k.DischargePlayer(ctx, callingPlayerId) - return &types.MsgStructGeneratorStatusResponse{}, types.NewPlanetStateError(structure.LocationId, "complete", "generator_infuse") - } - - infusionAmount, parseError := sdk.ParseCoinsNormalized(msg.InfuseAmount) - if (parseError != nil ){ - return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_amount") - } - - if len(infusionAmount) < 1 { - return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_amount") - } - - if (infusionAmount[0].Denom == "ualpha") { - // All good - } else if (infusionAmount[0].Denom == "alpha") { - alphaUnitConversionInt := math.NewIntFromUint64(uint64(1000000)) - infusionAmount[0].Amount = infusionAmount[0].Amount.Mul(alphaUnitConversionInt) - infusionAmount[0].Denom = "ualpha" - } else { - return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_denom").WithDenom(infusionAmount[0].Denom) - } - - // Transfer the refined Alpha from the player - playerAcc, _ := sdk.AccAddressFromBech32(callingPlayer.PrimaryAddress) - sendError := k.bankKeeper.SendCoinsFromAccountToModule(ctx, playerAcc, types.ModuleName, infusionAmount) - - if (sendError != nil){ - k.DischargePlayer(ctx, callingPlayerId) - return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "transfer_failed").WithDetails(sendError.Error()) - } - k.bankKeeper.BurnCoins(ctx, types.ModuleName, infusionAmount) - - infusion := k.GetInfusionCache(ctx, types.ObjectType_struct, structure.Id, callingPlayer.PrimaryAddress) - - infusion.SetRatio(structType.GeneratingRate) - infusion.SetCommission(math.LegacyZeroDec()) - infusion.AddFuel(infusionAmount[0].Amount.Uint64()) - infusion.Commit() - - _ = ctx.EventManager().EmitTypedEvent(&types.EventAlphaInfuse{&types.EventAlphaInfuseDetail{PlayerId: callingPlayer.Id, PrimaryAddress: callingPlayer.PrimaryAddress, Amount: infusionAmount[0].Amount.Uint64()}}) + callingPlayerIndex := k.GetPlayerIndexFromAddress(ctx, msg.Creator) + if callingPlayerIndex == 0 { + return &types.MsgStructGeneratorStatusResponse{}, types.NewPlayerRequiredError(msg.Creator, "struct_generator_infuse") + } + callingPlayerId := GetObjectID(types.ObjectType_player, callingPlayerIndex) + callingPlayer, _ := k.GetPlayer(ctx, callingPlayerId) + + addressPermissionId := GetAddressPermissionIDBytes(msg.Creator) + // Make sure the address calling this has Assets permissions + if !k.PermissionHasOneOf(ctx, addressPermissionId, types.PermissionAssets) { + return &types.MsgStructGeneratorStatusResponse{}, types.NewPermissionError("address", msg.Creator, "", "", uint64(types.PermissionAssets), "assets") + } + + structStatusAttributeId := GetStructAttributeIDByObjectId(types.StructAttributeType_status, msg.StructId) + + structure, structureFound := k.GetStruct(ctx, msg.StructId) + if !structureFound { + return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("struct", msg.StructId) + } + + // Is the Struct online? + if k.StructAttributeFlagHasOneOf(ctx, structStatusAttributeId, uint64(types.StructStateOnline)) { + k.DischargePlayer(ctx, callingPlayerId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewStructStateError(msg.StructId, "offline", "online", "generator_infuse") + } + + // Load Struct Type + structType, structTypeFound := k.GetStructType(ctx, structure.Type) + if !structTypeFound { + return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("struct_type", "").WithIndex(structure.Type) + } + + if structType.PowerGeneration == types.TechPowerGeneration_noPowerGeneration { + k.DischargePlayer(ctx, callingPlayerId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewStructCapabilityError(msg.StructId, "generation") + } + + // FIX FIX FIX FIX + // TODO + // Change all of these to do a more deeper check + // Check for Fleet location, etc. + // repeat everywhere + // FIX FIX FIX FIX + planet, planetFound := k.GetPlanet(ctx, structure.LocationId) + if !planetFound { + return &types.MsgStructGeneratorStatusResponse{}, types.NewObjectNotFoundError("planet", structure.LocationId) + } + + if planet.Status == types.PlanetStatus_complete { + k.DischargePlayer(ctx, callingPlayerId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewPlanetStateError(structure.LocationId, "complete", "generator_infuse") + } + + infusionAmount, parseError := sdk.ParseCoinsNormalized(msg.InfuseAmount) + if parseError != nil { + return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_amount") + } + + if len(infusionAmount) < 1 { + return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_amount") + } + + if infusionAmount[0].Denom == "ualpha" { + // All good + } else if infusionAmount[0].Denom == "alpha" { + alphaUnitConversionInt := math.NewIntFromUint64(uint64(1000000)) + infusionAmount[0].Amount = infusionAmount[0].Amount.Mul(alphaUnitConversionInt) + infusionAmount[0].Denom = "ualpha" + } else { + return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "invalid_denom").WithDenom(infusionAmount[0].Denom) + } + + // Transfer the refined Alpha from the player + playerAcc, _ := sdk.AccAddressFromBech32(callingPlayer.PrimaryAddress) + sendError := k.bankKeeper.SendCoinsFromAccountToModule(ctx, playerAcc, types.ModuleName, infusionAmount) + + if sendError != nil { + k.DischargePlayer(ctx, callingPlayerId) + return &types.MsgStructGeneratorStatusResponse{}, types.NewFuelInfuseError(msg.StructId, msg.InfuseAmount, "transfer_failed").WithDetails(sendError.Error()) + } + k.bankKeeper.BurnCoins(ctx, types.ModuleName, infusionAmount) + + infusion := k.GetInfusionCache(ctx, types.ObjectType_struct, structure.Id, callingPlayer.PrimaryAddress) + + infusion.SetRatio(structType.GeneratingRate) + infusion.SetCommission(math.LegacyZeroDec()) + infusion.AddFuel(infusionAmount[0].Amount.Uint64()) + infusion.Commit() + + _ = ctx.EventManager().EmitTypedEvent(&types.EventAlphaInfuse{&types.EventAlphaInfuseDetail{PlayerId: callingPlayer.Id, PrimaryAddress: callingPlayer.PrimaryAddress, Amount: infusionAmount[0].Amount.Uint64()}}) return &types.MsgStructGeneratorStatusResponse{}, nil } diff --git a/x/structs/module/module.go b/x/structs/module/module.go index 9c754c8..e7ca642 100644 --- a/x/structs/module/module.go +++ b/x/structs/module/module.go @@ -14,11 +14,13 @@ import ( cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" - porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" - ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" + ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" @@ -26,10 +28,11 @@ import ( modulev1 "structs/api/structs/structs/module" - staking "github.com/cosmos/cosmos-sdk/x/staking/types" "structs/x/structs/client/cli" "structs/x/structs/keeper" "structs/x/structs/types" + + staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) var ( @@ -101,7 +104,6 @@ func (a AppModuleBasic) GetTxCmd() *cobra.Command { return cli.GetTxCmd() } - // GetQueryCmd returns the root Query command for the module. // These commands enrich the AutoCLI tx commands. func (a AppModuleBasic) GetQueryCmd() *cobra.Command { @@ -117,15 +119,15 @@ type AppModule struct { AppModuleBasic keeper keeper.Keeper - accountKeeper types.AccountKeeper - bankKeeper types.BankKeeper + accountKeeper authkeeper.AccountKeeper + bankKeeper bankkeeper.Keeper } func NewAppModule( cdc codec.Codec, keeper keeper.Keeper, - accountKeeper types.AccountKeeper, - bankKeeper types.BankKeeper, + accountKeeper authkeeper.AccountKeeper, + bankKeeper bankkeeper.Keeper, ) AppModule { return AppModule{ AppModuleBasic: NewAppModuleBasic(cdc), @@ -168,7 +170,7 @@ func (AppModule) ConsensusVersion() uint64 { return 1 } // The begin block implementation is optional. func (am AppModule) BeginBlock(ctx context.Context) error { c := sdk.UnwrapSDKContext(ctx) - am.keeper.BeginBlocker(c) + am.keeper.BeginBlocker(c) return nil } @@ -176,7 +178,7 @@ func (am AppModule) BeginBlock(ctx context.Context) error { // The end block implementation is optional. func (am AppModule) EndBlock(ctx context.Context) error { c := sdk.UnwrapSDKContext(ctx) - am.keeper.EndBlocker(c) + am.keeper.EndBlocker(c) return nil } @@ -205,12 +207,11 @@ type ModuleInputs struct { Config *modulev1.Module Logger log.Logger - AccountKeeper types.AccountKeeper - BankKeeper types.BankKeeper - StakingKeeper types.StakingKeeper + AccountKeeper authkeeper.AccountKeeper + BankKeeper bankkeeper.Keeper + StakingKeeper *stakingkeeper.Keeper - IBCKeeperFn func() *ibckeeper.Keeper `optional:"true"` - CapabilityScopedFn func(string) capabilitykeeper.ScopedKeeper `optional:"true"` + IBCKeeperFn func() *ibckeeper.Keeper `optional:"true"` } type ModuleOutputs struct { @@ -219,7 +220,7 @@ type ModuleOutputs struct { StructsKeeper keeper.Keeper Module appmodule.AppModule - Hooks staking.StakingHooksWrapper + Hooks staking.StakingHooksWrapper } func ProvideModule(in ModuleInputs) ModuleOutputs { @@ -234,7 +235,6 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { in.Logger, authority.String(), in.IBCKeeperFn, - in.CapabilityScopedFn, in.BankKeeper, in.StakingKeeper, in.AccountKeeper, @@ -246,5 +246,5 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { in.BankKeeper, ) - return ModuleOutputs{StructsKeeper: k, Module: m, Hooks: staking.StakingHooksWrapper{StakingHooks: k.Hooks()},} + return ModuleOutputs{StructsKeeper: k, Module: m, Hooks: staking.StakingHooksWrapper{StakingHooks: k.Hooks()}} } diff --git a/x/structs/module/module_ibc.go b/x/structs/module/module_ibc.go index dc239c5..fdbb8f8 100644 --- a/x/structs/module/module_ibc.go +++ b/x/structs/module/module_ibc.go @@ -9,11 +9,9 @@ import ( errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v8/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" ) // IBCModule implements the ICS26 interface for interchain accounts host chains @@ -28,14 +26,13 @@ func NewIBCModule(k keeper.Keeper) IBCModule { } } -// OnChanOpenInit implements the IBCModule interface +// OnChanOpenInit implements the IBCModule interface (IBC v10) func (im IBCModule) OnChanOpenInit( ctx sdk.Context, order channeltypes.Order, connectionHops []string, portID string, channelID string, - chanCap *capabilitytypes.Capability, counterparty channeltypes.Counterparty, version string, ) (string, error) { @@ -50,22 +47,16 @@ func (im IBCModule) OnChanOpenInit( return "", errorsmod.Wrapf(types.ErrInvalidVersion, "got %s, expected %s", version, types.Version) } - // Claim channel capability passed back by IBC module - if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return "", err - } - return version, nil } -// OnChanOpenTry implements the IBCModule interface +// OnChanOpenTry implements the IBCModule interface (IBC v10) func (im IBCModule) OnChanOpenTry( ctx sdk.Context, order channeltypes.Order, connectionHops []string, portID, channelID string, - chanCap *capabilitytypes.Capability, counterparty channeltypes.Counterparty, counterpartyVersion string, ) (string, error) { @@ -80,17 +71,6 @@ func (im IBCModule) OnChanOpenTry( return "", errorsmod.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: got: %s, expected %s", counterpartyVersion, types.Version) } - // Module may have already claimed capability in OnChanOpenInit in the case of crossing hellos - // (ie chainA and chainB both call ChanOpenInit before one of them calls ChanOpenTry) - // If module can already authenticate the capability then module already owns it so we don't need to claim - // Otherwise, module does not have channel capability and we must claim it from IBC - if !im.keeper.AuthenticateCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) { - // Only claim channel capability passed back by IBC module if we do not already own it - if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return "", err - } - } - return types.Version, nil } @@ -99,7 +79,7 @@ func (im IBCModule) OnChanOpenAck( ctx sdk.Context, portID, channelID string, - _, + counterpartyChannelID, counterpartyVersion string, ) error { if counterpartyVersion != types.Version { @@ -136,10 +116,11 @@ func (im IBCModule) OnChanCloseConfirm( return nil } -// OnRecvPacket implements the IBCModule interface +// OnRecvPacket implements the IBCModule interface (IBC v10 - includes channelVersion param) func (im IBCModule) OnRecvPacket( ctx sdk.Context, - modulePacket channeltypes.Packet, + channelVersion string, + packet channeltypes.Packet, relayer sdk.AccAddress, ) ibcexported.Acknowledgement { var ack channeltypes.Acknowledgement @@ -147,15 +128,15 @@ func (im IBCModule) OnRecvPacket( // this line is used by starport scaffolding # oracle/packet/module/recv var modulePacketData types.StructsPacketData - if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + if err := modulePacketData.Unmarshal(packet.GetData()); err != nil { return channeltypes.NewErrorAcknowledgement(errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error())) } // Dispatch packet - switch packet := modulePacketData.Packet.(type) { + switch packetData := modulePacketData.Packet.(type) { // this line is used by starport scaffolding # ibc/packet/module/recv default: - err := fmt.Errorf("unrecognized %s packet type: %T", types.ModuleName, packet) + err := fmt.Errorf("unrecognized %s packet type: %T", types.ModuleName, packetData) return channeltypes.NewErrorAcknowledgement(err) } @@ -163,10 +144,11 @@ func (im IBCModule) OnRecvPacket( return ack } -// OnAcknowledgementPacket implements the IBCModule interface +// OnAcknowledgementPacket implements the IBCModule interface (IBC v10 - includes channelVersion param) func (im IBCModule) OnAcknowledgementPacket( ctx sdk.Context, - modulePacket channeltypes.Packet, + channelVersion string, + packet channeltypes.Packet, acknowledgement []byte, relayer sdk.AccAddress, ) error { @@ -178,17 +160,17 @@ func (im IBCModule) OnAcknowledgementPacket( // this line is used by starport scaffolding # oracle/packet/module/ack var modulePacketData types.StructsPacketData - if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + if err := modulePacketData.Unmarshal(packet.GetData()); err != nil { return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) } var eventType string // Dispatch packet - switch packet := modulePacketData.Packet.(type) { + switch packetData := modulePacketData.Packet.(type) { // this line is used by starport scaffolding # ibc/packet/module/ack default: - errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) + errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packetData) return errorsmod.Wrap(sdkerrors.ErrUnknownRequest, errMsg) } @@ -220,22 +202,23 @@ func (im IBCModule) OnAcknowledgementPacket( return nil } -// OnTimeoutPacket implements the IBCModule interface +// OnTimeoutPacket implements the IBCModule interface (IBC v10 - includes channelVersion param) func (im IBCModule) OnTimeoutPacket( ctx sdk.Context, - modulePacket channeltypes.Packet, + channelVersion string, + packet channeltypes.Packet, relayer sdk.AccAddress, ) error { var modulePacketData types.StructsPacketData - if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + if err := modulePacketData.Unmarshal(packet.GetData()); err != nil { return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) } // Dispatch packet - switch packet := modulePacketData.Packet.(type) { + switch packetData := modulePacketData.Packet.(type) { // this line is used by starport scaffolding # ibc/packet/module/timeout default: - errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) + errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packetData) return errorsmod.Wrap(sdkerrors.ErrUnknownRequest, errMsg) } diff --git a/x/structs/types/expected_ibc_keeper.go b/x/structs/types/expected_ibc_keeper.go index 04dca7f..1693759 100644 --- a/x/structs/types/expected_ibc_keeper.go +++ b/x/structs/types/expected_ibc_keeper.go @@ -3,35 +3,26 @@ package types import ( "context" - capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" ) -// ChannelKeeper defines the expected IBC channel keeper. +// ChannelKeeper defines the expected IBC channel keeper (IBC v10 - no capability params). type ChannelKeeper interface { GetChannel(ctx context.Context, portID, channelID string) (channeltypes.Channel, bool) GetNextSequenceSend(ctx context.Context, portID, channelID string) (uint64, bool) SendPacket( ctx context.Context, - channelCap *capabilitytypes.Capability, sourcePort string, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte, ) (uint64, error) - ChanCloseInit(ctx context.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error + ChanCloseInit(ctx context.Context, portID, channelID string) error } -// PortKeeper defines the expected IBC port keeper. +// PortKeeper defines the expected IBC port keeper (IBC v10 - returns error, not capability). type PortKeeper interface { - BindPort(ctx context.Context, portID string) *capabilitytypes.Capability -} - -// ScopedKeeper defines the expected IBC scoped keeper. -type ScopedKeeper interface { - GetCapability(ctx context.Context, name string) (*capabilitytypes.Capability, bool) - AuthenticateCapability(ctx context.Context, cap *capabilitytypes.Capability, name string) bool - ClaimCapability(ctx context.Context, cap *capabilitytypes.Capability, name string) error + BindPort(ctx context.Context, portID string) error } diff --git a/x/structs/types/expected_keepers.go b/x/structs/types/expected_keepers.go index 0239e10..f90a279 100644 --- a/x/structs/types/expected_keepers.go +++ b/x/structs/types/expected_keepers.go @@ -2,13 +2,15 @@ package types import ( "context" - "time" - "cosmossdk.io/math" + "time" + "cosmossdk.io/core/address" + "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - //auth "github.com/cosmos/cosmos-sdk/x/auth/types" - staking "github.com/cosmos/cosmos-sdk/x/staking/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + + //auth "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) // StakingKeeper defines the expected interface for the Staking module. @@ -17,31 +19,30 @@ type StakingKeeper interface { ValidatorByConsAddr(context.Context, sdk.ConsAddress) (staking.ValidatorI, error) // Methods imported from account should be defined here - GetValidator(context.Context, sdk.ValAddress) (staking.Validator, error) - GetAllValidators(context.Context) ([]staking.Validator, error) - GetValidators(context.Context, uint32) ([]staking.Validator, error) + GetValidator(context.Context, sdk.ValAddress) (staking.Validator, error) + GetAllValidators(context.Context) ([]staking.Validator, error) + GetValidators(context.Context, uint32) ([]staking.Validator, error) - GetValidatorDelegations(context.Context, sdk.ValAddress) ([]staking.Delegation, error) + GetValidatorDelegations(context.Context, sdk.ValAddress) ([]staking.Delegation, error) - GetDelegation(context.Context, sdk.AccAddress, sdk.ValAddress) (staking.Delegation, error) + GetDelegation(context.Context, sdk.AccAddress, sdk.ValAddress) (staking.Delegation, error) - GetUnbondingDelegation(context.Context, sdk.AccAddress, sdk.ValAddress) (staking.UnbondingDelegation, error) - GetUnbondingDelegationByUnbondingID(context.Context, uint64) (staking.UnbondingDelegation, error) + GetUnbondingDelegation(context.Context, sdk.AccAddress, sdk.ValAddress) (staking.UnbondingDelegation, error) + GetUnbondingDelegationByUnbondingID(context.Context, uint64) (staking.UnbondingDelegation, error) - GetDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress, maxRetrieve uint16) ([]staking.Delegation, error) + GetDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress, maxRetrieve uint16) ([]staking.Delegation, error) SetDelegation(ctx context.Context, delegation staking.Delegation) error RemoveDelegation(ctx context.Context, delegation staking.Delegation) error - // Needed for the Join Migration - ValidateUnbondAmount(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, amt math.Int) (shares math.LegacyDec, err error) - BeginRedelegation(ctx context.Context, delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress, sharesAmount math.LegacyDec) (completionTime time.Time, err error) - - BondDenom(ctx context.Context) (string, error) - Delegate(ctx context.Context, delAddr sdk.AccAddress, bondAmt math.Int, tokenSrc staking.BondStatus, validator staking.Validator, subtractAccount bool) (newShares math.LegacyDec, err error) - Undelegate(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, sharesAmount math.LegacyDec) (time.Time, math.Int, error) - RemoveUnbondingDelegation(ctx context.Context, ubd staking.UnbondingDelegation) error - SetUnbondingDelegation(ctx context.Context, ubd staking.UnbondingDelegation) error + // Needed for the Join Migration + ValidateUnbondAmount(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, amt math.Int) (shares math.LegacyDec, err error) + BeginRedelegation(ctx context.Context, delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress, sharesAmount math.LegacyDec) (completionTime time.Time, err error) + BondDenom(ctx context.Context) (string, error) + Delegate(ctx context.Context, delAddr sdk.AccAddress, bondAmt math.Int, tokenSrc staking.BondStatus, validator staking.Validator, subtractAccount bool) (newShares math.LegacyDec, err error) + Undelegate(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, sharesAmount math.LegacyDec) (time.Time, math.Int, error) + RemoveUnbondingDelegation(ctx context.Context, ubd staking.UnbondingDelegation) error + SetUnbondingDelegation(ctx context.Context, ubd staking.UnbondingDelegation) error } // StakingHooks event hooks for staking validator object (noalias) @@ -76,15 +77,14 @@ type BankKeeper interface { GetDenomMetaData(context.Context, string) (banktypes.Metadata, bool) GetSupply(context.Context, string) sdk.Coin HasBalance(context.Context, sdk.AccAddress, sdk.Coin) bool - SpendableCoins(context.Context, sdk.AccAddress) sdk.Coins - SpendableCoin(context.Context, sdk.AccAddress, string) sdk.Coin - SendCoins(context.Context, sdk.AccAddress, sdk.AccAddress, sdk.Coins) error - SendCoinsFromModuleToModule(context.Context, string, string, sdk.Coins) error - SendCoinsFromAccountToModule(context.Context, sdk.AccAddress, string, sdk.Coins) error - SendCoinsFromModuleToAccount(context.Context, string, sdk.AccAddress, sdk.Coins) error - MintCoins(context.Context, string, sdk.Coins) error - BurnCoins(context.Context, string, sdk.Coins) error - + SpendableCoins(context.Context, sdk.AccAddress) sdk.Coins + SpendableCoin(context.Context, sdk.AccAddress, string) sdk.Coin + SendCoins(context.Context, sdk.AccAddress, sdk.AccAddress, sdk.Coins) error + SendCoinsFromModuleToModule(context.Context, string, string, sdk.Coins) error + SendCoinsFromAccountToModule(context.Context, sdk.AccAddress, string, sdk.Coins) error + SendCoinsFromModuleToAccount(context.Context, string, sdk.AccAddress, sdk.Coins) error + MintCoins(context.Context, string, sdk.Coins) error + BurnCoins(context.Context, string, sdk.Coins) error } // ParamSubspace defines the expected Subspace interface for parameters. @@ -92,4 +92,3 @@ type ParamSubspace interface { Get(context.Context, []byte, interface{}) Set(context.Context, []byte, interface{}) } - diff --git a/x/structs/types/genesis.go b/x/structs/types/genesis.go index a905111..e8ec088 100644 --- a/x/structs/types/genesis.go +++ b/x/structs/types/genesis.go @@ -1,7 +1,7 @@ package types import ( - host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + host "github.com/cosmos/ibc-go/v10/modules/core/24-host" // this line is used by starport scaffolding # genesis/types/import ) @@ -14,7 +14,6 @@ func DefaultGenesis() *GenesisState { PortId: PortID, // this line is used by starport scaffolding # genesis/types/default Params: DefaultParams(), - } } From 2acf3552753f53f5a231dd461fd82161fc8f3997 Mon Sep 17 00:00:00 2001 From: abstrct Date: Thu, 29 Jan 2026 10:35:40 -0500 Subject: [PATCH 12/14] Fixing future exports to include a non-terrible blockstart --- x/structs/module/genesis.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x/structs/module/genesis.go b/x/structs/module/genesis.go index 2235459..9b1e44b 100644 --- a/x/structs/module/genesis.go +++ b/x/structs/module/genesis.go @@ -93,11 +93,10 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) k.SetStruct(ctx, elem) } // Struct attributes - // TODO Update block based values to 0 for _, elem := range genState.StructAttributeList { value := elem.Value if isStructBlockHeightAttribute(elem.AttributeId) { - value = 0 + value = 1 } k.SetStructAttribute(ctx, elem.AttributeId, value) } From 49784621037ea50ea8869399f0f8c2d4da9cecc7 Mon Sep 17 00:00:00 2001 From: abstrct Date: Thu, 29 Jan 2026 10:51:26 -0500 Subject: [PATCH 13/14] Fixed 0 block hashing results for mining and refinement --- x/structs/keeper/msg_server_struct_build_complete.go | 12 ++++++------ x/structs/keeper/struct_cache.go | 4 ++++ x/structs/module/genesis.go | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/x/structs/keeper/msg_server_struct_build_complete.go b/x/structs/keeper/msg_server_struct_build_complete.go index 12188c0..7d39bcf 100644 --- a/x/structs/keeper/msg_server_struct_build_complete.go +++ b/x/structs/keeper/msg_server_struct_build_complete.go @@ -35,8 +35,8 @@ func (k msgServer) StructBuildComplete(goCtx context.Context, msg *types.MsgStru } if structure.IsBuilt() { - structure.GetOwner().Discharge() - structure.GetOwner().Commit() + //structure.GetOwner().Discharge() + //structure.GetOwner().Commit() return &types.MsgStructStatusResponse{}, types.NewStructStateError(msg.StructId, "built", "building", "build_complete") } @@ -58,9 +58,9 @@ func (k msgServer) StructBuildComplete(goCtx context.Context, msg *types.MsgStru structure.GetOwner().StructsLoadDecrement(structure.GetStructType().BuildDraw) if !structure.GetOwner().CanSupportLoadAddition(structure.GetStructType().PassiveDraw) { - structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) + //structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) //structure.GetOwner().Discharge() - structure.GetOwner().Commit() + //structure.GetOwner().Commit() return &types.MsgStructStatusResponse{}, types.NewPlayerPowerError(structure.GetOwnerId(), "capacity_exceeded").WithCapacity(structure.GetStructType().PassiveDraw, structure.GetOwner().GetAvailableCapacity()) } @@ -72,10 +72,10 @@ func (k msgServer) StructBuildComplete(goCtx context.Context, msg *types.MsgStru valid, achievedDifficulty := types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().BuildDifficulty) if !valid { - structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) + //structure.GetOwner().StructsLoadIncrement(structure.GetStructType().BuildDraw) //structure.GetOwner().Discharge() //structure.GetOwner().Halt() - structure.GetOwner().Commit() + //structure.GetOwner().Commit() return &types.MsgStructStatusResponse{}, types.NewWorkFailureError("build", structure.GetStructId(), hashInput) } diff --git a/x/structs/keeper/struct_cache.go b/x/structs/keeper/struct_cache.go index 3ef627e..ddead1a 100644 --- a/x/structs/keeper/struct_cache.go +++ b/x/structs/keeper/struct_cache.go @@ -902,9 +902,11 @@ func (cache *StructCache) CanOreMinePlanet() error { return types.NewStructCapabilityError(cache.StructId, "mining") } + /* if cache.GetBlockStartOreMine() == 0 { return types.NewStructStateError(cache.StructId, "not_mining", "mining", "ore_mine") } + */ if cache.GetPlanet().IsComplete() { return types.NewPlanetStateError(cache.GetPlanet().GetPlanetId(), "complete", "mine") @@ -931,9 +933,11 @@ func (cache *StructCache) CanOreRefine() error { return types.NewStructCapabilityError(cache.StructId, "refining") } + /* if cache.GetBlockStartOreRefine() == 0 { return types.NewStructStateError(cache.StructId, "not_refining", "refining", "ore_refine") } + */ if !cache.GetOwner().HasStoredOre() { return types.NewPlayerAffordabilityError(cache.GetOwner().PlayerId, "refine", "ore") diff --git a/x/structs/module/genesis.go b/x/structs/module/genesis.go index 9b1e44b..6d403e4 100644 --- a/x/structs/module/genesis.go +++ b/x/structs/module/genesis.go @@ -96,7 +96,7 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) for _, elem := range genState.StructAttributeList { value := elem.Value if isStructBlockHeightAttribute(elem.AttributeId) { - value = 1 + value = 0 } k.SetStructAttribute(ctx, elem.AttributeId, value) } From 479d7a4be36433483978b7803cd1c26dd5fc6a9a Mon Sep 17 00:00:00 2001 From: abstrct Date: Thu, 29 Jan 2026 21:58:42 -0500 Subject: [PATCH 14/14] new openapi.yml --- docs/static/openapi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index 6d53b2f..71e5f03 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1 +1 @@ -{"id":"structs","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain structs REST API","title":"HTTP API Console","contact":{"name":"structs"},"version":"version not set"},"paths":{"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"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":"EvidenceMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceQuery_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":"EvidenceMsg_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":"EvidenceMsg_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":{"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":"EvidenceMsg_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.","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":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin17","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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.benchmark.v1.Msg/LoadTest":{"post":{"tags":["Msg"],"summary":"LoadTest defines a method for executing a sequence of load test operations.","operationId":"EvidenceMsg_LoadTest","parameters":[{"description":"MsgLoadTestOps defines a message containing a sequence of load test operations.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.benchmark.v1.MsgLoadTest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.benchmark.v1.MsgLoadTestResponse"}},"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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin32","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.counter.v1.Msg/IncreaseCount":{"post":{"tags":["Msg"],"summary":"IncreaseCount increments the counter by the specified amount.","operationId":"EvidenceMsg_IncreaseCount","parameters":[{"description":"MsgIncreaseCounter defines a count Msg service counter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.counter.v1.MsgIncreaseCounter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.counter.v1.MsgIncreaseCountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.counter.v1.Query/GetCount":{"post":{"tags":["Query"],"summary":"GetCount queries the parameters of x/Counter module.","operationId":"EvidenceQuery_GetCount","parameters":[{"description":"QueryGetCountRequest defines the request type for querying x/mock count.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.counter.v1.QueryGetCountRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.counter.v1.QueryGetCountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin36","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":"WARNING: This method will fail if an external community pool is used.","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":"EvidenceMsg_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.","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":{"tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"EvidenceMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.","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":{"description":"WARNING: This method will fail if an external community pool is used.","tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"EvidenceMsg_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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin47","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"EvidenceMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.","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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"EvidenceMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin63","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_DepositMixin67","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":"EvidenceMsg_SubmitProposalMixin67","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":"EvidenceMsg_VoteMixin67","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":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"EvidenceMsg_VoteWeightedMixin67","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_ExecMixin71","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":"EvidenceMsg_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":"EvidenceMsg_SubmitProposalMixin71","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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_VoteMixin71","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":"EvidenceMsg_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":{"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":"EvidenceMsg_UpdateParamsMixin76","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_SendMixin82","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.protocolpool.v1.Msg/CancelContinuousFund":{"post":{"tags":["Msg"],"summary":"CancelContinuousFund defines a method for cancelling continuous fund.","operationId":"EvidenceMsg_CancelContinuousFund","parameters":[{"description":"MsgCancelContinuousFund defines a message to cancel continuous funds for a specific recipient.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCancelContinuousFund"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCancelContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/CommunityPoolSpend":{"post":{"tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/protocolpool module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"EvidenceMsg_CommunityPoolSpendMixin87","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.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/CreateContinuousFund":{"post":{"tags":["Msg"],"summary":"CreateContinuousFund defines a method to distribute a percentage of funds to an address continuously.\nThis ContinuousFund can be indefinite or run until a given expiry time.\nFunds come from validator block rewards from x/distribution, but may also come from\nany user who funds the ProtocolPoolEscrow module account directly through x/bank.","operationId":"EvidenceMsg_CreateContinuousFund","parameters":[{"description":"MsgCreateContinuousFund defines a message for adding continuous funds.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCreateContinuousFund"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCreateContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"EvidenceMsg_FundCommunityPoolMixin87","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/protocolpool module parameters.\nThe authority is defined in the keeper.","operationId":"EvidenceMsg_UpdateParamsMixin87","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgUpdateParamsResponse"}},"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":"EvidenceMsg_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":{"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":"EvidenceMsg_UpdateParamsMixin93","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceMsg_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":{"tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"EvidenceMsg_CancelUnbondingDelegation","parameters":[{"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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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":"EvidenceMsg_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.","operationId":"EvidenceMsg_UpdateParamsMixin98","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","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":"EvidenceABCIListenerService_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":"EvidenceABCIListenerService_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":{"tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"EvidenceMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.","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":{"tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"EvidenceMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.","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":{"tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"EvidenceMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","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":{"tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"EvidenceMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.","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":"EvidenceMsg_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":{"tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"EvidenceQuery_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.","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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":{"tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"EvidenceQuery_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.","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":{"tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"EvidenceQuery_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":{"tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"EvidenceQuery_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":{"tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"EvidenceQuery_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":{"tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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.","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":{"tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"EvidenceQuery_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.","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":{"tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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.","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":"EvidenceQuery_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.","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"EvidenceQuery_DenomOwners","parameters":[{"pattern":".+","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.","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":{"tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_DenomMetadata","parameters":[{"pattern":".+","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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin16","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.","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"EvidenceQuery_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.","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.","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"EvidenceQuery_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.","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.","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceService_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":"EvidenceService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":"EvidenceReflectionService_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":{"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":"EvidenceService_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":"EvidenceService_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":"EvidenceService_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":"EvidenceService_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":"EvidenceService_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":"EvidenceService_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.","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":"EvidenceService_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.","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":"EvidenceQuery_AccountsMixin28","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/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":"EvidenceQuery_AccountMixin28","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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin31","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":{"description":"WARNING: This query will fail if an external community pool is used.","tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin46","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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.","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/epochs/v1beta1/current_epoch":{"get":{"tags":["Query"],"summary":"CurrentEpoch provide current epoch of specified identifier","operationId":"EvidenceQuery_CurrentEpoch","parameters":[{"type":"string","name":"identifier","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.epochs.v1beta1.QueryCurrentEpochResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/epochs/v1beta1/epochs":{"get":{"tags":["Query"],"summary":"EpochInfos provide running epochInfos","operationId":"EvidenceQuery_EpochInfos","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.epochs.v1beta1.QueryEpochInfosResponse"}},"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":"EvidenceQuery_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.","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":"EvidenceQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":{"tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin62","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin66","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":"EvidenceQuery_ProposalsMixin66","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.","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":"EvidenceQuery_ProposalMixin66","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":"EvidenceQuery_DepositsMixin66","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.","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":"EvidenceQuery_DepositMixin66","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":"EvidenceQuery_TallyResultMixin66","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":"EvidenceQuery_VotesMixin66","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.","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":"EvidenceQuery_VoteMixin66","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":{"tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_ProposalMixin70","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":"EvidenceQuery_TallyResultMixin70","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin75","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":"EvidenceQuery_BalanceMixin81","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin84","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":{"tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"EvidenceQuery_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/protocolpool/v1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"EvidenceQuery_CommunityPoolMixin86","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/continuous_funds":{"get":{"tags":["Query"],"summary":"ContinuousFunds queries all continuous funds in the store.","operationId":"EvidenceQuery_ContinuousFunds","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryContinuousFundsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/continuous_funds/{recipient}":{"get":{"tags":["Query"],"summary":"ContinuousFund queries a continuous fund by the recipient is is associated with.","operationId":"EvidenceQuery_ContinuousFund","parameters":[{"type":"string","description":"recipient is the recipient address to query unclaimed budget amount for.","name":"recipient","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of x/protocolpool parameters.","operationId":"EvidenceQuery_ParamsMixin86","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryParamsResponse"}},"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":"EvidenceQuery_ParamsMixin91","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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_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.","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":"EvidenceQuery_DelegatorValidatorsMixin96","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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_ParamsMixin96","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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.","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":"EvidenceQuery_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":"EvidenceQuery_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":"EvidenceQuery_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.","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":{"tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"EvidenceService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.","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":{"tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"EvidenceService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.","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":{"tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"EvidenceService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.","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":{"tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"EvidenceService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.","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":"EvidenceService_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":"EvidenceService_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.","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.","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":"EvidenceService_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":{"tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"EvidenceService_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.","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":"EvidenceService_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":"EvidenceQuery_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":{"tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"EvidenceQuery_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":"EvidenceQuery_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":{"tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"EvidenceQuery_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":"EvidenceQuery_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"}}}}},"/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_UpdateParamsMixin129","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_UpdateParamsMixin140","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_AcknowledgementMixin148","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_RecvPacketMixin148","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_TimeoutMixin148","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/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.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_ParamsMixin128","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/{denom}/total_escrow":{"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/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_ParamsMixin137","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/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_NextSequenceSendMixin147","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_PacketAcknowledgementsMixin147","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_PacketAcknowledgementMixin147","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_PacketCommitmentsMixin147","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_UnreceivedAcksMixin147","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_UnreceivedPacketsMixin147","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_PacketCommitmentMixin147","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_PacketReceiptMixin147","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_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/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"}}}}},"/structs.structs.Msg/AddressRegister":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AddressRegister","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAddressRegister"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAddressRegisterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AddressRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AddressRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAddressRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAddressRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementCapacityDecrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementCapacityDecrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementCapacityDecrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementCapacityIncrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementCapacityIncrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementCapacityIncrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementClose":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementClose","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementDurationIncrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementDurationIncrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementDurationIncrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementOpen":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementOpen","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementOpen"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationDeleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationTransfer":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationTransfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationUpdate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationUpdate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationUpdate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/FleetMove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_FleetMove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgFleetMove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgFleetMoveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankConfiscateAndBurn":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankConfiscateAndBurn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankConfiscateAndBurn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankConfiscateAndBurnResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankMint":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankMint","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankMint"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankMintResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankRedeem":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankRedeem","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankRedeem"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankRedeemResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInvite":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInvite","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInvite"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteApprove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteApprove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteApprove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteDeny":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteDeny","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteDeny"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipJoin":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipJoin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipJoin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipJoinProxy":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipJoinProxy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipJoinProxy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipKick":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipKick","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipKick"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequest":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestApprove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestApprove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestApprove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestDeny":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestDeny","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestDeny"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateEndpoint":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateEndpoint","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateEndpoint"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateEntrySubstationId":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateEntrySubstationId","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateEntrySubstationId"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimumBypassByInvite":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimumBypassByInvite","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByInvite"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimumBypassByRequest":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimumBypassByRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateOwnerId":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateOwnerId","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateOwnerId"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionGrantOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionGrantOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionGrantOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionGrantOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionGrantOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionGrantOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionRevokeOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionRevokeOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionRevokeOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionRevokeOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionRevokeOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionRevokeOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionSetOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionSetOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionSetOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionSetOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionSetOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionSetOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlanetExplore":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlanetExplore","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlanetExplore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlanetExploreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlanetRaidComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlanetRaidComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlanetRaidComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlanetRaidCompleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerResume":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerResume","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerResume"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerResumeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerSend":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerSend","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerUpdatePrimaryAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerUpdatePrimaryAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerUpdatePrimaryAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerUpdatePrimaryAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderGuildGrant":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderGuildGrant","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderGuildGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderGuildRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderGuildRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderGuildRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateAccessPolicy":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateAccessPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateAccessPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateCapacityMaximum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateCapacityMaximum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateCapacityMaximum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateCapacityMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateCapacityMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateCapacityMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateDurationMaximum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateDurationMaximum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateDurationMaximum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateDurationMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateDurationMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateDurationMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderWithdrawBalance":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderWithdrawBalance","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderWithdrawBalance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorBeginMigration":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorBeginMigration","parameters":[{"description":"MsgReactorBeginMigration 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/structs.structs.MsgReactorBeginMigration"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorBeginMigrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorCancelDefusion":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorCancelDefusion","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgReactorCancelDefusion"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorCancelDefusionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorDefuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorDefuse","parameters":[{"description":"MsgReactorDefuse defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgReactorDefuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorDefuseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorInfuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorInfuse","parameters":[{"description":"MsgReactorInfuse 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/structs.structs.MsgReactorInfuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorInfuseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructActivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructActivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructActivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructAttack":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructAttack","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructAttack"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructAttackResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildCancel":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildCancel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildCancel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildInitiate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildInitiate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildInitiate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDeactivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDeactivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDeactivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDefenseClear":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDefenseClear","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDefenseClear"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDefenseSet":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDefenseSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDefenseSet"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructGeneratorInfuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructGeneratorInfuse","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructGeneratorInfuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructGeneratorStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructMove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructMove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructMove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructOreMinerComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructOreMinerComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructOreMinerComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructOreMinerStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructOreRefineryComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructOreRefineryComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructOreRefineryComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructOreRefineryStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructStealthActivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructStealthActivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructStealthActivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructStealthDeactivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructStealthDeactivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructStealthDeactivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationAllocationConnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationAllocationConnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationConnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationConnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationAllocationDisconnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationAllocationDisconnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationDisconnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationDisconnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationDeleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerConnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerConnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerConnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerConnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerDisconnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerDisconnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerDisconnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerDisconnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerMigrate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerMigrate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerMigrate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerMigrateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.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":"StructsMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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":"EvidenceABCI_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.","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.","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.","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.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":"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.","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":{"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.","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.","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.","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":{"optional":{"description":"optional makes the last positional parameter optional.\nNote: It is mutually exclusive with varargs.","type":"boolean"},"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. Note: It is mutually exclusive with optional.","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"}},"gov_proposal":{"description":"gov_proposal specifies whether autocli should generate a gov proposal transaction for this rpc method.\nNormally autocli generates a transaction containing the message and broadcast it.\nHowever, when true, autocli generates a proposal transaction containing the message and broadcast it.\nThis option is ineffective for query commands.","type":"boolean"},"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":{"enhance_custom_command":{"description":"enhance_custom_commands specifies whether to skip the service when generating commands, if a custom command already\nexists, or enhance the existing command. If set to true, the custom command will be enhanced with the services from\ngRPC. otherwise when a custom command exists, no commands will be generated for the service.","type":"boolean"},"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"},"short":{"description":"short is an optional parameter used to override the short description of the auto generated command.","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.","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":{"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.","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.","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.","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.","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.","type":"object"},"cosmos.bank.v1beta1.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":"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.","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.","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.","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.","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.","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.","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.","$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.","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.","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":{"$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":{"$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"},"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.benchmark.v1.MsgLoadTest":{"description":"MsgLoadTestOps defines a message containing a sequence of load test operations.","type":"object","properties":{"caller":{"type":"string","format":"byte"},"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.benchmark.v1.Op"}}}},"cosmos.benchmark.v1.MsgLoadTestResponse":{"description":"MsgLoadTestResponse defines a message containing the results of a load test operation.","type":"object","properties":{"total_errors":{"type":"string","format":"uint64"},"total_time":{"type":"string","format":"uint64"}}},"cosmos.benchmark.v1.Op":{"description":"Op is a message describing a benchmark operation.","type":"object","properties":{"actor":{"type":"string"},"delete":{"type":"boolean"},"exists":{"type":"boolean"},"iterations":{"type":"integer","format":"int64"},"key_length":{"type":"string","format":"uint64"},"seed":{"type":"string","format":"uint64"},"value_length":{"type":"string","format":"uint64"}}},"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":{"$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.counter.v1.MsgIncreaseCountResponse":{"description":"MsgIncreaseCountResponse is the Msg/Counter response type.","type":"object","properties":{"new_count":{"description":"new_count is the number of times the counter was incremented.","type":"string","format":"int64"}}},"cosmos.counter.v1.MsgIncreaseCounter":{"description":"MsgIncreaseCounter defines a count Msg service counter.","type":"object","properties":{"count":{"description":"count is the number of times to increment the counter.","type":"string","format":"int64"},"signer":{"description":"signer is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.counter.v1.QueryGetCountRequest":{"description":"QueryGetCountRequest defines the request type for querying x/mock count.","type":"object"},"cosmos.counter.v1.QueryGetCountResponse":{"description":"QueryGetCountResponse defines the response type for querying x/mock count.","type":"object","properties":{"total_count":{"type":"string","format":"int64"}}},"cosmos.crisis.v1beta1.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"},"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.","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.","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.","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.","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.","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.","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.","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","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","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.epochs.v1beta1.EpochInfo":{"description":"EpochInfo is a struct that describes the data going into\na timer defined by the x/epochs module.","type":"object","properties":{"current_epoch":{"description":"current_epoch is the current epoch number, or in other words,\nhow many times has the timer 'ticked'.\nThe first tick (current_epoch=1) is defined as\nthe first block whose blocktime is greater than the EpochInfo start_time.","type":"string","format":"int64"},"current_epoch_start_height":{"type":"string","format":"int64","title":"current_epoch_start_height is the block height at which the current epoch\nstarted. (The block height at which the timer last ticked)"},"current_epoch_start_time":{"description":"current_epoch_start_time describes the start time of the current timer\ninterval. The interval is (current_epoch_start_time,\ncurrent_epoch_start_time + duration] When the timer ticks, this is set to\ncurrent_epoch_start_time = last_epoch_start_time + duration only one timer\ntick for a given identifier can occur per block.\n\nNOTE! The current_epoch_start_time may diverge significantly from the\nwall-clock time the epoch began at. Wall-clock time of epoch start may be\n\u003e\u003e current_epoch_start_time. Suppose current_epoch_start_time = 10,\nduration = 5. Suppose the chain goes offline at t=14, and comes back online\nat t=30, and produces blocks at every successive time. (t=31, 32, etc.)\n* The t=30 block will start the epoch for (10, 15]\n* The t=31 block will start the epoch for (15, 20]\n* The t=32 block will start the epoch for (20, 25]\n* The t=33 block will start the epoch for (25, 30]\n* The t=34 block will start the epoch for (30, 35]\n* The **t=36** block will start the epoch for (35, 40]","type":"string","format":"date-time"},"duration":{"description":"duration is the time in between epoch ticks.\nIn order for intended behavior to be met, duration should\nbe greater than the chains expected block time.\nDuration must be non-zero.","type":"string"},"epoch_counting_started":{"description":"epoch_counting_started is a boolean, that indicates whether this\nepoch timer has began yet.","type":"boolean"},"identifier":{"description":"identifier is a unique reference to this particular timer.","type":"string"},"start_time":{"description":"start_time is the time at which the timer first ever ticks.\nIf start_time is in the future, the epoch will not begin until the start\ntime.","type":"string","format":"date-time"}}},"cosmos.epochs.v1beta1.QueryCurrentEpochResponse":{"description":"QueryCurrentEpochResponse defines the gRPC response structure for\nquerying an epoch by its identifier.","type":"object","properties":{"current_epoch":{"type":"string","format":"int64"}}},"cosmos.epochs.v1beta1.QueryEpochInfosResponse":{"description":"QueryEpochInfosRequest defines the gRPC response structure for\nquerying all epoch info.","type":"object","properties":{"epochs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.epochs.v1beta1.EpochInfo"}}}},"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.","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.","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.","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.","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.","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":{"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":{"type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.","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.","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.","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.","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.","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.","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.","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.","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.","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":{"type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"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":{"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":{"type":"string","title":"summary is a short summary of the proposal"},"title":{"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.","$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.","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.","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.","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.","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.","type":"string"},"title":{"description":"title is the title of the proposal.","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":{"type":"string","title":"summary is a short summary of the proposal"},"title":{"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.","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.","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.","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.","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.","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.protocolpool.v1.ContinuousFund":{"description":"ContinuousFund defines the fields of continuous fund proposal.","type":"object","properties":{"expiry":{"description":"Optional, if expiry is set, removes the state object when expired.","type":"string","format":"date-time"},"percentage":{"description":"Percentage is the percentage of funds to be allocated from Community pool.","type":"string"},"recipient":{"description":"Recipient is the address string of the account receiving funds.","type":"string"}}},"cosmos.protocolpool.v1.MsgCancelContinuousFund":{"description":"MsgCancelContinuousFund defines a message to cancel continuous funds for a specific recipient.","type":"object","properties":{"authority":{"description":"Authority is the account address of authority.","type":"string"},"recipient":{"description":"Recipient is the account address string of the recipient whose funds are to be cancelled.","type":"string"}}},"cosmos.protocolpool.v1.MsgCancelContinuousFundResponse":{"description":"MsgCancelContinuousFundResponse defines the response to executing a\nMsgCancelContinuousFund message.","type":"object","properties":{"canceled_height":{"description":"CanceledHeight defines the canceled block height.","type":"string","format":"uint64"},"canceled_time":{"description":"CanceledTime is the canceled time.","type":"string","format":"date-time"},"recipient":{"description":"Recipient is the account address string of the recipient whose funds are cancelled.","type":"string"}}},"cosmos.protocolpool.v1.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.","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.protocolpool.v1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.","type":"object"},"cosmos.protocolpool.v1.MsgCreateContinuousFund":{"description":"MsgCreateContinuousFund defines a message for adding continuous funds.","type":"object","properties":{"authority":{"description":"Authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"expiry":{"description":"Optional, if expiry is set, removes the state object when expired.","type":"string","format":"date-time"},"percentage":{"description":"Percentage is the percentage of funds to be allocated from Community pool.","type":"string"},"recipient":{"description":"Recipient address of the account receiving funds.","type":"string"}}},"cosmos.protocolpool.v1.MsgCreateContinuousFundResponse":{"description":"MsgCreateContinuousFundResponse defines the response to executing a\nMsgCreateContinuousFund message.","type":"object"},"cosmos.protocolpool.v1.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.protocolpool.v1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.protocolpool.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":"params defines the x/protocolpool parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.protocolpool.v1.Params"}}},"cosmos.protocolpool.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.protocolpool.v1.Params":{"description":"Params defines the parameters for the protocolpool module.","type":"object","properties":{"distribution_frequency":{"description":"DistributionFrequency is the frequency (in terms of blocks) that funds are distributed out from the\nx/protocolpool module.","type":"string","format":"uint64"},"enabled_distribution_denoms":{"description":"EnabledDistributionDenoms lists the denoms that are allowed to be distributed.\nThis is to avoid spending time distributing undesired tokens to continuous funds and budgets.","type":"array","items":{"type":"string"}}}},"cosmos.protocolpool.v1.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.Coin"}}}},"cosmos.protocolpool.v1.QueryContinuousFundResponse":{"description":"QueryUnclaimedBudgetResponse is the response type for the Query/ContinuousFund\nRPC method.","type":"object","properties":{"continuous_fund":{"description":"ContinuousFunds is the given continuous fund returned in the query.","$ref":"#/definitions/cosmos.protocolpool.v1.ContinuousFund"}}},"cosmos.protocolpool.v1.QueryContinuousFundsResponse":{"description":"QueryUnclaimedBudgetResponse is the response type for the Query/ContinuousFunds\nRPC method.","type":"object","properties":{"continuous_funds":{"description":"ContinuousFunds defines all continuous funds in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.protocolpool.v1.ContinuousFund"}}}},"cosmos.protocolpool.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"$ref":"#/definitions/cosmos.protocolpool.v1.Params"}}},"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.","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.","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":{"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":{"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":{"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.","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.","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.","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":{"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.","$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\nfield) requests that a fee grant be used to pay fees instead of the fee\npayer's own balance. If an appropriate fee grant does not exist or the\nchain does not support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the\nspecified account must pay the fees. the payer must be a tx signer (and\nthus have signed this field in AuthInfo). setting this field does *not*\nchange 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.","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.","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.","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\nhttps://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":{"description":"timeout_height is the block height after which this transaction will not\nbe processed by the chain.","type":"string","format":"uint64"},"timeout_timestamp":{"description":"timeout_timestamp is the block time after which this transaction will not\nbe processed by the chain.\n\nNote, if unordered=true this value MUST be set\nand will act as a short-lived TTL in which the transaction is deemed valid\nand kept in memory to prevent duplicates.","type":"string","format":"date-time"},"unordered":{"description":"unordered, when set to true, indicates that the transaction signer(s)\nintend for the transaction to be evaluated and executed in an un-ordered\nfashion. Specifically, the account's nonce will NOT be checked or\nincremented, which allows for fire-and-forget as well as concurrent\ntransaction execution.\n\nNote, when set to true, the existing 'timeout_timestamp' value must\nbe set and will be used to correspond to a timestamp in which the transaction is deemed\nvalid.\n\nWhen true, the sequence value MUST be 0, and any transaction with unordered=true and a non-zero sequence value will\nbe rejected.\nExternal services that make assumptions about sequence values may need to be updated because of this.","type":"boolean"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.","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.","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.","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.","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.","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.","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.","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.","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.","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.","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.","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.","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.","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":{"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.","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"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","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.","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.","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.","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"}}},"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":{"description":"Hop defines a port ID, channel ID pair specifying where tokens must be forwarded\nnext in a multihop transfer.","type":"object","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.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.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.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.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"}}},"structs.structs.Fleet":{"type":"object","properties":{"air":{"type":"array","items":{"type":"string"}},"airSlots":{"type":"string","format":"uint64"},"commandStruct":{"type":"string"},"id":{"type":"string"},"land":{"type":"array","items":{"type":"string"}},"landSlots":{"type":"string","format":"uint64"},"locationId":{"type":"string"},"locationListBackward":{"type":"string","title":"Towards End of List"},"locationListForward":{"type":"string","title":"Towards Planet"},"locationType":{"$ref":"#/definitions/structs.structs.objectType"},"owner":{"type":"string"},"space":{"type":"array","items":{"type":"string"}},"spaceSlots":{"type":"string","format":"uint64"},"status":{"$ref":"#/definitions/structs.structs.fleetStatus"},"water":{"type":"array","items":{"type":"string"}},"waterSlots":{"type":"string","format":"uint64"}}},"structs.structs.GuildMembershipApplication":{"type":"object","properties":{"guildId":{"type":"string"},"joinType":{"title":"Invite | Request","$ref":"#/definitions/structs.structs.guildJoinType"},"playerId":{"type":"string"},"proposer":{"type":"string"},"registrationStatus":{"$ref":"#/definitions/structs.structs.registrationStatus"},"substationId":{"type":"string"}}},"structs.structs.MsgAddressRegister":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"},"proofPubKey":{"type":"string"},"proofSignature":{"type":"string"}}},"structs.structs.MsgAddressRegisterResponse":{"type":"object"},"structs.structs.MsgAddressRevoke":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAddressRevokeResponse":{"type":"object"},"structs.structs.MsgAgreementCapacityDecrease":{"type":"object","properties":{"agreementId":{"type":"string"},"capacityDecrease":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementCapacityIncrease":{"type":"object","properties":{"agreementId":{"type":"string"},"capacityIncrease":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementClose":{"type":"object","properties":{"agreementId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementDurationIncrease":{"type":"object","properties":{"agreementId":{"type":"string"},"creator":{"type":"string"},"durationIncrease":{"type":"string","format":"uint64"}}},"structs.structs.MsgAgreementOpen":{"type":"object","properties":{"capacity":{"type":"string","format":"uint64"},"creator":{"type":"string"},"duration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgAgreementResponse":{"type":"object"},"structs.structs.MsgAllocationCreate":{"type":"object","properties":{"allocationType":{"$ref":"#/definitions/structs.structs.allocationType"},"controller":{"type":"string"},"creator":{"type":"string"},"power":{"type":"string","format":"uint64"},"sourceObjectId":{"type":"string"}}},"structs.structs.MsgAllocationCreateResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationDelete":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAllocationDeleteResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationTransfer":{"type":"object","properties":{"allocationId":{"type":"string"},"controller":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAllocationTransferResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationUpdate":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"power":{"type":"string","format":"uint64"}}},"structs.structs.MsgAllocationUpdateResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgFleetMove":{"type":"object","properties":{"creator":{"type":"string"},"destinationLocationId":{"type":"string"},"fleetId":{"type":"string"}}},"structs.structs.MsgFleetMoveResponse":{"type":"object","properties":{"fleet":{"$ref":"#/definitions/structs.structs.Fleet"}}},"structs.structs.MsgGuildBankConfiscateAndBurn":{"type":"object","properties":{"address":{"type":"string"},"amountToken":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankConfiscateAndBurnResponse":{"type":"object"},"structs.structs.MsgGuildBankMint":{"type":"object","properties":{"amountAlpha":{"type":"string","format":"uint64"},"amountToken":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankMintResponse":{"type":"object"},"structs.structs.MsgGuildBankRedeem":{"type":"object","properties":{"amountToken":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankRedeemResponse":{"type":"object"},"structs.structs.MsgGuildCreate":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"entrySubstationId":{"type":"string"}}},"structs.structs.MsgGuildCreateResponse":{"type":"object","properties":{"guildId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInvite":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteApprove":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteDeny":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipJoin":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"infusionId":{"type":"array","items":{"type":"string"}},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipJoinProxy":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"proofPubKey":{"type":"string"},"proofSignature":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipKick":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequest":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestApprove":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestDeny":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipResponse":{"type":"object","properties":{"guildMembershipApplication":{"$ref":"#/definitions/structs.structs.GuildMembershipApplication"}}},"structs.structs.MsgGuildUpdateEndpoint":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"guildId":{"type":"string"}}},"structs.structs.MsgGuildUpdateEntrySubstationId":{"type":"object","properties":{"creator":{"type":"string"},"entrySubstationId":{"type":"string"},"guildId":{"type":"string"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimum":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"joinInfusionMinimum":{"type":"string","format":"uint64"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByInvite":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"guildJoinBypassLevel":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByRequest":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"guildJoinBypassLevel":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"}}},"structs.structs.MsgGuildUpdateOwnerId":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.MsgGuildUpdateResponse":{"type":"object"},"structs.structs.MsgPermissionGrantOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionGrantOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPermissionResponse":{"type":"object"},"structs.structs.MsgPermissionRevokeOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionRevokeOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPermissionSetOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionSetOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPlanetExplore":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgPlanetExploreResponse":{"type":"object","properties":{"planet":{"$ref":"#/definitions/structs.structs.Planet"}}},"structs.structs.MsgPlanetRaidComplete":{"type":"object","properties":{"creator":{"type":"string"},"fleetId":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"}}},"structs.structs.MsgPlanetRaidCompleteResponse":{"type":"object","properties":{"fleet":{"$ref":"#/definitions/structs.structs.Fleet"},"oreStolen":{"type":"string","format":"uint64"},"planet":{"$ref":"#/definitions/structs.structs.Planet"}}},"structs.structs.MsgPlayerResume":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgPlayerResumeResponse":{"type":"object"},"structs.structs.MsgPlayerSend":{"type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"creator":{"type":"string"},"from_address":{"type":"string"},"player_id":{"type":"string"},"to_address":{"type":"string"}}},"structs.structs.MsgPlayerSendResponse":{"description":"This message has no fields.","type":"object"},"structs.structs.MsgPlayerUpdatePrimaryAddress":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"},"primaryAddress":{"type":"string"}}},"structs.structs.MsgPlayerUpdatePrimaryAddressResponse":{"type":"object"},"structs.structs.MsgProviderCreate":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"capacityMaximum":{"type":"string","format":"uint64"},"capacityMinimum":{"type":"string","format":"uint64"},"consumerCancellationPenalty":{"type":"string"},"creator":{"type":"string"},"durationMaximum":{"type":"string","format":"uint64"},"durationMinimum":{"type":"string","format":"uint64"},"providerCancellationPenalty":{"type":"string"},"rate":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"substationId":{"type":"string"}}},"structs.structs.MsgProviderDelete":{"type":"object","properties":{"creator":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderGuildGrant":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"array","items":{"type":"string"}},"providerId":{"type":"string"}}},"structs.structs.MsgProviderGuildRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"array","items":{"type":"string"}},"providerId":{"type":"string"}}},"structs.structs.MsgProviderResponse":{"type":"object"},"structs.structs.MsgProviderUpdateAccessPolicy":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"creator":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateCapacityMaximum":{"type":"object","properties":{"creator":{"type":"string"},"newMaximumCapacity":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateCapacityMinimum":{"type":"object","properties":{"creator":{"type":"string"},"newMinimumCapacity":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateDurationMaximum":{"type":"object","properties":{"creator":{"type":"string"},"newMaximumDuration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateDurationMinimum":{"type":"object","properties":{"creator":{"type":"string"},"newMinimumDuration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderWithdrawBalance":{"type":"object","properties":{"creator":{"type":"string"},"destinationAddress":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgReactorBeginMigration":{"description":"MsgReactorBeginMigration 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"structs.structs.MsgReactorBeginMigrationResponse":{"description":"MsgBeginMigrationResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"structs.structs.MsgReactorCancelDefusion":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgReactorCancelDefusion 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorCancelDefusionResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgReactorCancelDefusionResponse"},"structs.structs.MsgReactorDefuse":{"description":"MsgReactorDefuse defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorDefuseResponse":{"description":"MsgReactorDefuseResponse 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"}}},"structs.structs.MsgReactorInfuse":{"description":"MsgReactorInfuse 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorInfuseResponse":{"description":"MsgReactorInfuseResponse defines the Msg/Delegate response type.","type":"object"},"structs.structs.MsgStructActivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructAttack":{"type":"object","properties":{"creator":{"type":"string"},"operatingStructId":{"type":"string"},"targetStructId":{"type":"array","items":{"type":"string"}},"weaponSystem":{"type":"string"}}},"structs.structs.MsgStructAttackResponse":{"type":"object"},"structs.structs.MsgStructBuildCancel":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructBuildComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructBuildInitiate":{"type":"object","properties":{"creator":{"type":"string"},"operatingAmbit":{"title":"objectType locationType = 4;","$ref":"#/definitions/structs.structs.ambit"},"playerId":{"type":"string"},"slot":{"type":"string","format":"uint64"},"structTypeId":{"type":"string","format":"uint64"}}},"structs.structs.MsgStructDeactivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructDefenseClear":{"type":"object","properties":{"creator":{"type":"string"},"defenderStructId":{"type":"string"}}},"structs.structs.MsgStructDefenseSet":{"type":"object","properties":{"creator":{"type":"string"},"defenderStructId":{"type":"string"},"protectedStructId":{"type":"string"}}},"structs.structs.MsgStructGeneratorInfuse":{"type":"object","properties":{"creator":{"type":"string"},"infuseAmount":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructGeneratorStatusResponse":{"type":"object"},"structs.structs.MsgStructMove":{"type":"object","properties":{"ambit":{"$ref":"#/definitions/structs.structs.ambit"},"creator":{"type":"string"},"locationType":{"$ref":"#/definitions/structs.structs.objectType"},"slot":{"type":"string","format":"uint64"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreMinerComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreMinerStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructOreRefineryComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreRefineryStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructStealthActivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructStealthDeactivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgSubstationAllocationConnect":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"destinationId":{"type":"string"}}},"structs.structs.MsgSubstationAllocationConnectResponse":{"type":"object"},"structs.structs.MsgSubstationAllocationDisconnect":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgSubstationAllocationDisconnectResponse":{"type":"object"},"structs.structs.MsgSubstationCreate":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.MsgSubstationCreateResponse":{"type":"object","properties":{"substationId":{"type":"string"}}},"structs.structs.MsgSubstationDelete":{"type":"object","properties":{"creator":{"type":"string"},"migrationSubstationId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationDeleteResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerConnect":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerConnectResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerDisconnect":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerDisconnectResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerMigrate":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"array","items":{"type":"string"}},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerMigrateResponse":{"type":"object"},"structs.structs.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":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/structs.structs.Params"}}},"structs.structs.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"structs.structs.Params":{"description":"Params defines the parameters for the module.","type":"object"},"structs.structs.Planet":{"type":"object","properties":{"air":{"type":"array","items":{"type":"string"}},"airSlots":{"type":"string","format":"uint64"},"creator":{"type":"string"},"id":{"type":"string"},"land":{"type":"array","items":{"type":"string"}},"landSlots":{"type":"string","format":"uint64"},"locationListLast":{"type":"string","title":"End of the line"},"locationListStart":{"type":"string","title":"First in line to battle planet"},"maxOre":{"type":"string","format":"uint64"},"owner":{"type":"string"},"space":{"type":"array","items":{"type":"string"}},"spaceSlots":{"type":"string","format":"uint64"},"status":{"$ref":"#/definitions/structs.structs.planetStatus"},"water":{"type":"array","items":{"type":"string"}},"waterSlots":{"type":"string","format":"uint64"}}},"structs.structs.Struct":{"type":"object","properties":{"creator":{"type":"string","title":"Who is it"},"id":{"type":"string","title":"What it is"},"index":{"type":"string","format":"uint64"},"locationId":{"type":"string"},"locationType":{"title":"Where it is","$ref":"#/definitions/structs.structs.objectType"},"operatingAmbit":{"$ref":"#/definitions/structs.structs.ambit"},"owner":{"type":"string"},"slot":{"type":"string","format":"uint64"},"type":{"type":"string","format":"uint64"}}},"structs.structs.allocationType":{"type":"string","default":"static","enum":["static","dynamic","automated","providerAgreement"]},"structs.structs.ambit":{"type":"string","default":"none","enum":["none","water","land","air","space","local"]},"structs.structs.fleetStatus":{"type":"string","default":"onStation","enum":["onStation","away"]},"structs.structs.guildJoinBypassLevel":{"type":"string","title":"- closed: Feature off\n - permissioned: Only those with permissions can do it\n - member: All members of the guild can contribute","default":"closed","enum":["closed","permissioned","member"]},"structs.structs.guildJoinType":{"type":"string","default":"invite","enum":["invite","request","direct","proxy"]},"structs.structs.objectType":{"type":"string","default":"guild","enum":["guild","player","planet","reactor","substation","struct","allocation","infusion","address","fleet","provider","agreement"]},"structs.structs.planetStatus":{"type":"string","default":"active","enum":["active","complete"]},"structs.structs.providerAccessPolicy":{"type":"string","default":"openMarket","enum":["openMarket","guildMarket","closedMarket"]},"structs.structs.registrationStatus":{"type":"string","default":"proposed","enum":["proposed","approved","denied","revoked"]},"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":"Msg"},{"name":"Query"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file +{"id":"structs","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain structs REST API","title":"HTTP API Console","contact":{"name":"structs"},"version":"version not set"},"paths":{"/structs.structs.Msg/AddressRegister":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AddressRegister","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAddressRegister"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAddressRegisterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AddressRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AddressRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAddressRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAddressRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementCapacityDecrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementCapacityDecrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementCapacityDecrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementCapacityIncrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementCapacityIncrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementCapacityIncrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementClose":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementClose","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementDurationIncrease":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementDurationIncrease","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementDurationIncrease"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AgreementOpen":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AgreementOpen","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAgreementOpen"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAgreementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationDeleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationTransfer":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationTransfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/AllocationUpdate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_AllocationUpdate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgAllocationUpdate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgAllocationUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/FleetMove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_FleetMove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgFleetMove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgFleetMoveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankConfiscateAndBurn":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankConfiscateAndBurn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankConfiscateAndBurn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankConfiscateAndBurnResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankMint":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankMint","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankMint"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankMintResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildBankRedeem":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildBankRedeem","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankRedeem"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildBankRedeemResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInvite":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInvite","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInvite"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteApprove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteApprove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteApprove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteDeny":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteDeny","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteDeny"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipInviteRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipInviteRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipInviteRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipJoin":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipJoin","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipJoin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipJoinProxy":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipJoinProxy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipJoinProxy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipKick":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipKick","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipKick"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequest":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestApprove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestApprove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestApprove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestDeny":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestDeny","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestDeny"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildMembershipRequestRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildMembershipRequestRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipRequestRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateEndpoint":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateEndpoint","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateEndpoint"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateEntrySubstationId":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateEntrySubstationId","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateEntrySubstationId"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimumBypassByInvite":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimumBypassByInvite","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByInvite"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateJoinInfusionMinimumBypassByRequest":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateJoinInfusionMinimumBypassByRequest","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/GuildUpdateOwnerId":{"post":{"tags":["Msg"],"operationId":"StructsMsg_GuildUpdateOwnerId","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateOwnerId"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgGuildUpdateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionGrantOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionGrantOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionGrantOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionGrantOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionGrantOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionGrantOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionRevokeOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionRevokeOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionRevokeOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionRevokeOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionRevokeOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionRevokeOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionSetOnAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionSetOnAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionSetOnAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PermissionSetOnObject":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PermissionSetOnObject","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPermissionSetOnObject"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPermissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlanetExplore":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlanetExplore","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlanetExplore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlanetExploreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlanetRaidComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlanetRaidComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlanetRaidComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlanetRaidCompleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerResume":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerResume","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerResume"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerResumeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerSend":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerSend","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/PlayerUpdatePrimaryAddress":{"post":{"tags":["Msg"],"operationId":"StructsMsg_PlayerUpdatePrimaryAddress","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgPlayerUpdatePrimaryAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgPlayerUpdatePrimaryAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderGuildGrant":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderGuildGrant","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderGuildGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderGuildRevoke":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderGuildRevoke","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderGuildRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateAccessPolicy":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateAccessPolicy","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateAccessPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateCapacityMaximum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateCapacityMaximum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateCapacityMaximum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateCapacityMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateCapacityMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateCapacityMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateDurationMaximum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateDurationMaximum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateDurationMaximum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderUpdateDurationMinimum":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderUpdateDurationMinimum","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderUpdateDurationMinimum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ProviderWithdrawBalance":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ProviderWithdrawBalance","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgProviderWithdrawBalance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgProviderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorBeginMigration":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorBeginMigration","parameters":[{"description":"MsgReactorBeginMigration 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/structs.structs.MsgReactorBeginMigration"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorBeginMigrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorCancelDefusion":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorCancelDefusion","parameters":[{"description":"Since: cosmos-sdk 0.46","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgReactorCancelDefusion"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorCancelDefusionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorDefuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorDefuse","parameters":[{"description":"MsgReactorDefuse defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgReactorDefuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorDefuseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/ReactorInfuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_ReactorInfuse","parameters":[{"description":"MsgReactorInfuse 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/structs.structs.MsgReactorInfuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgReactorInfuseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructActivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructActivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructActivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructAttack":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructAttack","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructAttack"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructAttackResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildCancel":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildCancel","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildCancel"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructBuildInitiate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructBuildInitiate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructBuildInitiate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDeactivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDeactivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDeactivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDefenseClear":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDefenseClear","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDefenseClear"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructDefenseSet":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructDefenseSet","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructDefenseSet"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructGeneratorInfuse":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructGeneratorInfuse","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructGeneratorInfuse"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructGeneratorStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructMove":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructMove","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructMove"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructOreMinerComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructOreMinerComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructOreMinerComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructOreMinerStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructOreRefineryComplete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructOreRefineryComplete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructOreRefineryComplete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructOreRefineryStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructStealthActivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructStealthActivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructStealthActivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/StructStealthDeactivate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_StructStealthDeactivate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgStructStealthDeactivate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgStructStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationAllocationConnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationAllocationConnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationConnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationConnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationAllocationDisconnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationAllocationDisconnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationDisconnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationAllocationDisconnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationCreate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationCreate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationCreate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationCreateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationDelete":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationDelete","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationDelete"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationDeleteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerConnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerConnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerConnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerConnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerDisconnect":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerDisconnect","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerDisconnect"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerDisconnectResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.Msg/SubstationPlayerMigrate":{"post":{"tags":["Msg"],"operationId":"StructsMsg_SubstationPlayerMigrate","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerMigrate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgSubstationPlayerMigrateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/structs.structs.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":"StructsMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/structs.structs.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/structs.structs.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"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"}}},"structs.structs.Fleet":{"type":"object","properties":{"air":{"type":"array","items":{"type":"string"}},"airSlots":{"type":"string","format":"uint64"},"commandStruct":{"type":"string"},"id":{"type":"string"},"land":{"type":"array","items":{"type":"string"}},"landSlots":{"type":"string","format":"uint64"},"locationId":{"type":"string"},"locationListBackward":{"type":"string","title":"Towards End of List"},"locationListForward":{"type":"string","title":"Towards Planet"},"locationType":{"$ref":"#/definitions/structs.structs.objectType"},"owner":{"type":"string"},"space":{"type":"array","items":{"type":"string"}},"spaceSlots":{"type":"string","format":"uint64"},"status":{"$ref":"#/definitions/structs.structs.fleetStatus"},"water":{"type":"array","items":{"type":"string"}},"waterSlots":{"type":"string","format":"uint64"}}},"structs.structs.GuildMembershipApplication":{"type":"object","properties":{"guildId":{"type":"string"},"joinType":{"title":"Invite | Request","$ref":"#/definitions/structs.structs.guildJoinType"},"playerId":{"type":"string"},"proposer":{"type":"string"},"registrationStatus":{"$ref":"#/definitions/structs.structs.registrationStatus"},"substationId":{"type":"string"}}},"structs.structs.MsgAddressRegister":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"},"proofPubKey":{"type":"string"},"proofSignature":{"type":"string"}}},"structs.structs.MsgAddressRegisterResponse":{"type":"object"},"structs.structs.MsgAddressRevoke":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAddressRevokeResponse":{"type":"object"},"structs.structs.MsgAgreementCapacityDecrease":{"type":"object","properties":{"agreementId":{"type":"string"},"capacityDecrease":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementCapacityIncrease":{"type":"object","properties":{"agreementId":{"type":"string"},"capacityIncrease":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementClose":{"type":"object","properties":{"agreementId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAgreementDurationIncrease":{"type":"object","properties":{"agreementId":{"type":"string"},"creator":{"type":"string"},"durationIncrease":{"type":"string","format":"uint64"}}},"structs.structs.MsgAgreementOpen":{"type":"object","properties":{"capacity":{"type":"string","format":"uint64"},"creator":{"type":"string"},"duration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgAgreementResponse":{"type":"object"},"structs.structs.MsgAllocationCreate":{"type":"object","properties":{"allocationType":{"$ref":"#/definitions/structs.structs.allocationType"},"controller":{"type":"string"},"creator":{"type":"string"},"power":{"type":"string","format":"uint64"},"sourceObjectId":{"type":"string"}}},"structs.structs.MsgAllocationCreateResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationDelete":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAllocationDeleteResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationTransfer":{"type":"object","properties":{"allocationId":{"type":"string"},"controller":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgAllocationTransferResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgAllocationUpdate":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"power":{"type":"string","format":"uint64"}}},"structs.structs.MsgAllocationUpdateResponse":{"type":"object","properties":{"allocationId":{"type":"string"}}},"structs.structs.MsgFleetMove":{"type":"object","properties":{"creator":{"type":"string"},"destinationLocationId":{"type":"string"},"fleetId":{"type":"string"}}},"structs.structs.MsgFleetMoveResponse":{"type":"object","properties":{"fleet":{"$ref":"#/definitions/structs.structs.Fleet"}}},"structs.structs.MsgGuildBankConfiscateAndBurn":{"type":"object","properties":{"address":{"type":"string"},"amountToken":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankConfiscateAndBurnResponse":{"type":"object"},"structs.structs.MsgGuildBankMint":{"type":"object","properties":{"amountAlpha":{"type":"string","format":"uint64"},"amountToken":{"type":"string","format":"uint64"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankMintResponse":{"type":"object"},"structs.structs.MsgGuildBankRedeem":{"type":"object","properties":{"amountToken":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creator":{"type":"string"}}},"structs.structs.MsgGuildBankRedeemResponse":{"type":"object"},"structs.structs.MsgGuildCreate":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"entrySubstationId":{"type":"string"}}},"structs.structs.MsgGuildCreateResponse":{"type":"object","properties":{"guildId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInvite":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteApprove":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteDeny":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipInviteRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipJoin":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"infusionId":{"type":"array","items":{"type":"string"}},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipJoinProxy":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"proofPubKey":{"type":"string"},"proofSignature":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipKick":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequest":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestApprove":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestDeny":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipRequestRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgGuildMembershipResponse":{"type":"object","properties":{"guildMembershipApplication":{"$ref":"#/definitions/structs.structs.GuildMembershipApplication"}}},"structs.structs.MsgGuildUpdateEndpoint":{"type":"object","properties":{"creator":{"type":"string"},"endpoint":{"type":"string"},"guildId":{"type":"string"}}},"structs.structs.MsgGuildUpdateEntrySubstationId":{"type":"object","properties":{"creator":{"type":"string"},"entrySubstationId":{"type":"string"},"guildId":{"type":"string"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimum":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"joinInfusionMinimum":{"type":"string","format":"uint64"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByInvite":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"guildJoinBypassLevel":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"}}},"structs.structs.MsgGuildUpdateJoinInfusionMinimumBypassByRequest":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"guildJoinBypassLevel":{"$ref":"#/definitions/structs.structs.guildJoinBypassLevel"}}},"structs.structs.MsgGuildUpdateOwnerId":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.MsgGuildUpdateResponse":{"type":"object"},"structs.structs.MsgPermissionGrantOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionGrantOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPermissionResponse":{"type":"object"},"structs.structs.MsgPermissionRevokeOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionRevokeOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPermissionSetOnAddress":{"type":"object","properties":{"address":{"type":"string"},"creator":{"type":"string"},"permissions":{"type":"string","format":"uint64"}}},"structs.structs.MsgPermissionSetOnObject":{"type":"object","properties":{"creator":{"type":"string"},"objectId":{"type":"string"},"permissions":{"type":"string","format":"uint64"},"playerId":{"type":"string"}}},"structs.structs.MsgPlanetExplore":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgPlanetExploreResponse":{"type":"object","properties":{"planet":{"$ref":"#/definitions/structs.structs.Planet"}}},"structs.structs.MsgPlanetRaidComplete":{"type":"object","properties":{"creator":{"type":"string"},"fleetId":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"}}},"structs.structs.MsgPlanetRaidCompleteResponse":{"type":"object","properties":{"fleet":{"$ref":"#/definitions/structs.structs.Fleet"},"oreStolen":{"type":"string","format":"uint64"},"planet":{"$ref":"#/definitions/structs.structs.Planet"}}},"structs.structs.MsgPlayerResume":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgPlayerResumeResponse":{"type":"object"},"structs.structs.MsgPlayerSend":{"type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"creator":{"type":"string"},"from_address":{"type":"string"},"player_id":{"type":"string"},"to_address":{"type":"string"}}},"structs.structs.MsgPlayerSendResponse":{"description":"This message has no fields.","type":"object"},"structs.structs.MsgPlayerUpdatePrimaryAddress":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"},"primaryAddress":{"type":"string"}}},"structs.structs.MsgPlayerUpdatePrimaryAddressResponse":{"type":"object"},"structs.structs.MsgProviderCreate":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"capacityMaximum":{"type":"string","format":"uint64"},"capacityMinimum":{"type":"string","format":"uint64"},"consumerCancellationPenalty":{"type":"string"},"creator":{"type":"string"},"durationMaximum":{"type":"string","format":"uint64"},"durationMinimum":{"type":"string","format":"uint64"},"providerCancellationPenalty":{"type":"string"},"rate":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"substationId":{"type":"string"}}},"structs.structs.MsgProviderDelete":{"type":"object","properties":{"creator":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderGuildGrant":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"array","items":{"type":"string"}},"providerId":{"type":"string"}}},"structs.structs.MsgProviderGuildRevoke":{"type":"object","properties":{"creator":{"type":"string"},"guildId":{"type":"array","items":{"type":"string"}},"providerId":{"type":"string"}}},"structs.structs.MsgProviderResponse":{"type":"object"},"structs.structs.MsgProviderUpdateAccessPolicy":{"type":"object","properties":{"accessPolicy":{"$ref":"#/definitions/structs.structs.providerAccessPolicy"},"creator":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateCapacityMaximum":{"type":"object","properties":{"creator":{"type":"string"},"newMaximumCapacity":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateCapacityMinimum":{"type":"object","properties":{"creator":{"type":"string"},"newMinimumCapacity":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateDurationMaximum":{"type":"object","properties":{"creator":{"type":"string"},"newMaximumDuration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderUpdateDurationMinimum":{"type":"object","properties":{"creator":{"type":"string"},"newMinimumDuration":{"type":"string","format":"uint64"},"providerId":{"type":"string"}}},"structs.structs.MsgProviderWithdrawBalance":{"type":"object","properties":{"creator":{"type":"string"},"destinationAddress":{"type":"string"},"providerId":{"type":"string"}}},"structs.structs.MsgReactorBeginMigration":{"description":"MsgReactorBeginMigration 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"structs.structs.MsgReactorBeginMigrationResponse":{"description":"MsgBeginMigrationResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"structs.structs.MsgReactorCancelDefusion":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgReactorCancelDefusion 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorCancelDefusionResponse":{"description":"Since: cosmos-sdk 0.46","type":"object","title":"MsgReactorCancelDefusionResponse"},"structs.structs.MsgReactorDefuse":{"description":"MsgReactorDefuse defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorDefuseResponse":{"description":"MsgReactorDefuseResponse 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"}}},"structs.structs.MsgReactorInfuse":{"description":"MsgReactorInfuse 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"},"creator":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"structs.structs.MsgReactorInfuseResponse":{"description":"MsgReactorInfuseResponse defines the Msg/Delegate response type.","type":"object"},"structs.structs.MsgStructActivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructAttack":{"type":"object","properties":{"creator":{"type":"string"},"operatingStructId":{"type":"string"},"targetStructId":{"type":"array","items":{"type":"string"}},"weaponSystem":{"type":"string"}}},"structs.structs.MsgStructAttackResponse":{"type":"object"},"structs.structs.MsgStructBuildCancel":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructBuildComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructBuildInitiate":{"type":"object","properties":{"creator":{"type":"string"},"operatingAmbit":{"title":"objectType locationType = 4;","$ref":"#/definitions/structs.structs.ambit"},"playerId":{"type":"string"},"slot":{"type":"string","format":"uint64"},"structTypeId":{"type":"string","format":"uint64"}}},"structs.structs.MsgStructDeactivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructDefenseClear":{"type":"object","properties":{"creator":{"type":"string"},"defenderStructId":{"type":"string"}}},"structs.structs.MsgStructDefenseSet":{"type":"object","properties":{"creator":{"type":"string"},"defenderStructId":{"type":"string"},"protectedStructId":{"type":"string"}}},"structs.structs.MsgStructGeneratorInfuse":{"type":"object","properties":{"creator":{"type":"string"},"infuseAmount":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructGeneratorStatusResponse":{"type":"object"},"structs.structs.MsgStructMove":{"type":"object","properties":{"ambit":{"$ref":"#/definitions/structs.structs.ambit"},"creator":{"type":"string"},"locationType":{"$ref":"#/definitions/structs.structs.objectType"},"slot":{"type":"string","format":"uint64"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreMinerComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreMinerStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructOreRefineryComplete":{"type":"object","properties":{"creator":{"type":"string"},"nonce":{"type":"string"},"proof":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructOreRefineryStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructStatusResponse":{"type":"object","properties":{"struct":{"$ref":"#/definitions/structs.structs.Struct"}}},"structs.structs.MsgStructStealthActivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgStructStealthDeactivate":{"type":"object","properties":{"creator":{"type":"string"},"structId":{"type":"string"}}},"structs.structs.MsgSubstationAllocationConnect":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"destinationId":{"type":"string"}}},"structs.structs.MsgSubstationAllocationConnectResponse":{"type":"object"},"structs.structs.MsgSubstationAllocationDisconnect":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"}}},"structs.structs.MsgSubstationAllocationDisconnectResponse":{"type":"object"},"structs.structs.MsgSubstationCreate":{"type":"object","properties":{"allocationId":{"type":"string"},"creator":{"type":"string"},"owner":{"type":"string"}}},"structs.structs.MsgSubstationCreateResponse":{"type":"object","properties":{"substationId":{"type":"string"}}},"structs.structs.MsgSubstationDelete":{"type":"object","properties":{"creator":{"type":"string"},"migrationSubstationId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationDeleteResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerConnect":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerConnectResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerDisconnect":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerDisconnectResponse":{"type":"object"},"structs.structs.MsgSubstationPlayerMigrate":{"type":"object","properties":{"creator":{"type":"string"},"playerId":{"type":"array","items":{"type":"string"}},"substationId":{"type":"string"}}},"structs.structs.MsgSubstationPlayerMigrateResponse":{"type":"object"},"structs.structs.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":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/structs.structs.Params"}}},"structs.structs.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"structs.structs.Params":{"description":"Params defines the parameters for the module.","type":"object"},"structs.structs.Planet":{"type":"object","properties":{"air":{"type":"array","items":{"type":"string"}},"airSlots":{"type":"string","format":"uint64"},"creator":{"type":"string"},"id":{"type":"string"},"land":{"type":"array","items":{"type":"string"}},"landSlots":{"type":"string","format":"uint64"},"locationListLast":{"type":"string","title":"End of the line"},"locationListStart":{"type":"string","title":"First in line to battle planet"},"maxOre":{"type":"string","format":"uint64"},"owner":{"type":"string"},"space":{"type":"array","items":{"type":"string"}},"spaceSlots":{"type":"string","format":"uint64"},"status":{"$ref":"#/definitions/structs.structs.planetStatus"},"water":{"type":"array","items":{"type":"string"}},"waterSlots":{"type":"string","format":"uint64"}}},"structs.structs.Struct":{"type":"object","properties":{"creator":{"type":"string","title":"Who is it"},"id":{"type":"string","title":"What it is"},"index":{"type":"string","format":"uint64"},"locationId":{"type":"string"},"locationType":{"title":"Where it is","$ref":"#/definitions/structs.structs.objectType"},"operatingAmbit":{"$ref":"#/definitions/structs.structs.ambit"},"owner":{"type":"string"},"slot":{"type":"string","format":"uint64"},"type":{"type":"string","format":"uint64"}}},"structs.structs.allocationType":{"type":"string","default":"static","enum":["static","dynamic","automated","providerAgreement"]},"structs.structs.ambit":{"type":"string","default":"none","enum":["none","water","land","air","space","local"]},"structs.structs.fleetStatus":{"type":"string","default":"onStation","enum":["onStation","away"]},"structs.structs.guildJoinBypassLevel":{"type":"string","title":"- closed: Feature off\n - permissioned: Only those with permissions can do it\n - member: All members of the guild can contribute","default":"closed","enum":["closed","permissioned","member"]},"structs.structs.guildJoinType":{"type":"string","default":"invite","enum":["invite","request","direct","proxy"]},"structs.structs.objectType":{"type":"string","default":"guild","enum":["guild","player","planet","reactor","substation","struct","allocation","infusion","address","fleet","provider","agreement"]},"structs.structs.planetStatus":{"type":"string","default":"active","enum":["active","complete"]},"structs.structs.providerAccessPolicy":{"type":"string","default":"openMarket","enum":["openMarket","guildMarket","closedMarket"]},"structs.structs.registrationStatus":{"type":"string","default":"proposed","enum":["proposed","approved","denied","revoked"]}},"tags":[{"name":"Msg"}]} \ No newline at end of file