diff --git a/api/structs/structs/events.pulsar.go b/api/structs/structs/events.pulsar.go index 86265dd..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:]) @@ -30246,138 +30446,1233 @@ func (x *fastReflection_EventRaidDetail) ProtoMethods() *protoiface.Methods { } } -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.27.0 -// protoc (unknown) -// source: structs/structs/events.proto - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +var ( + md_EventHashSuccess protoreflect.MessageDescriptor + fd_EventHashSuccess_eventHashSuccessDetail protoreflect.FieldDescriptor ) -type EventAllocation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Allocation *Allocation `protobuf:"bytes,1,opt,name=allocation,proto3" json:"allocation,omitempty"` -} - -func (x *EventAllocation) Reset() { - *x = EventAllocation{} - if protoimpl.UnsafeEnabled { - mi := &file_structs_structs_events_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EventAllocation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EventAllocation) ProtoMessage() {} - -// Deprecated: Use EventAllocation.ProtoReflect.Descriptor instead. -func (*EventAllocation) Descriptor() ([]byte, []int) { - return file_structs_structs_events_proto_rawDescGZIP(), []int{0} +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") } -func (x *EventAllocation) GetAllocation() *Allocation { - if x != nil { - return x.Allocation - } - return nil -} +var _ protoreflect.Message = (*fastReflection_EventHashSuccess)(nil) -type EventAgreement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type fastReflection_EventHashSuccess EventHashSuccess - Agreement *Agreement `protobuf:"bytes,1,opt,name=agreement,proto3" json:"agreement,omitempty"` +func (x *EventHashSuccess) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventHashSuccess)(x) } -func (x *EventAgreement) Reset() { - *x = EventAgreement{} - if protoimpl.UnsafeEnabled { - mi := &file_structs_structs_events_proto_msgTypes[1] +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)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) } -func (x *EventAgreement) String() string { - return protoimpl.X.MessageStringOf(x) -} +var _fastReflection_EventHashSuccess_messageType fastReflection_EventHashSuccess_messageType +var _ protoreflect.MessageType = fastReflection_EventHashSuccess_messageType{} -func (*EventAgreement) ProtoMessage() {} +type fastReflection_EventHashSuccess_messageType struct{} -// Deprecated: Use EventAgreement.ProtoReflect.Descriptor instead. -func (*EventAgreement) Descriptor() ([]byte, []int) { - return file_structs_structs_events_proto_rawDescGZIP(), []int{1} +func (x fastReflection_EventHashSuccess_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventHashSuccess)(nil) } - -func (x *EventAgreement) GetAgreement() *Agreement { - if x != nil { - return x.Agreement - } - return nil +func (x fastReflection_EventHashSuccess_messageType) New() protoreflect.Message { + return new(fastReflection_EventHashSuccess) } - -type EventFleet struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Fleet *Fleet `protobuf:"bytes,1,opt,name=fleet,proto3" json:"fleet,omitempty"` +func (x fastReflection_EventHashSuccess_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventHashSuccess } -func (x *EventFleet) Reset() { - *x = EventFleet{} - if protoimpl.UnsafeEnabled { - mi := &file_structs_structs_events_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventHashSuccess) Descriptor() protoreflect.MessageDescriptor { + return md_EventHashSuccess } -func (x *EventFleet) String() string { - return protoimpl.X.MessageStringOf(x) +// 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 } -func (*EventFleet) ProtoMessage() {} +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventHashSuccess) New() protoreflect.Message { + return new(fastReflection_EventHashSuccess) +} -// Deprecated: Use EventFleet.ProtoReflect.Descriptor instead. -func (*EventFleet) Descriptor() ([]byte, []int) { - return file_structs_structs_events_proto_rawDescGZIP(), []int{2} +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventHashSuccess) Interface() protoreflect.ProtoMessage { + return (*EventHashSuccess)(x) } -func (x *EventFleet) GetFleet() *Fleet { - if x != nil { - return x.Fleet +// 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 + } } - return nil } -type EventGuild struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Guild *Guild `protobuf:"bytes,1,opt,name=guild,proto3" json:"guild,omitempty"` +// 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())) + } } -func (x *EventGuild) Reset() { - *x = EventGuild{} - if protoimpl.UnsafeEnabled { - mi := &file_structs_structs_events_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +// 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 +// protoc (unknown) +// source: structs/structs/events.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EventAllocation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Allocation *Allocation `protobuf:"bytes,1,opt,name=allocation,proto3" json:"allocation,omitempty"` +} + +func (x *EventAllocation) Reset() { + *x = EventAllocation{} + if protoimpl.UnsafeEnabled { + mi := &file_structs_structs_events_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventAllocation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventAllocation) ProtoMessage() {} + +// Deprecated: Use EventAllocation.ProtoReflect.Descriptor instead. +func (*EventAllocation) Descriptor() ([]byte, []int) { + return file_structs_structs_events_proto_rawDescGZIP(), []int{0} +} + +func (x *EventAllocation) GetAllocation() *Allocation { + if x != nil { + return x.Allocation + } + return nil +} + +type EventAgreement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Agreement *Agreement `protobuf:"bytes,1,opt,name=agreement,proto3" json:"agreement,omitempty"` +} + +func (x *EventAgreement) Reset() { + *x = EventAgreement{} + if protoimpl.UnsafeEnabled { + mi := &file_structs_structs_events_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventAgreement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventAgreement) ProtoMessage() {} + +// Deprecated: Use EventAgreement.ProtoReflect.Descriptor instead. +func (*EventAgreement) Descriptor() ([]byte, []int) { + return file_structs_structs_events_proto_rawDescGZIP(), []int{1} +} + +func (x *EventAgreement) GetAgreement() *Agreement { + if x != nil { + return x.Agreement + } + return nil +} + +type EventFleet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Fleet *Fleet `protobuf:"bytes,1,opt,name=fleet,proto3" json:"fleet,omitempty"` +} + +func (x *EventFleet) Reset() { + *x = EventFleet{} + if protoimpl.UnsafeEnabled { + mi := &file_structs_structs_events_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventFleet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventFleet) ProtoMessage() {} + +// Deprecated: Use EventFleet.ProtoReflect.Descriptor instead. +func (*EventFleet) Descriptor() ([]byte, []int) { + return file_structs_structs_events_proto_rawDescGZIP(), []int{2} +} + +func (x *EventFleet) GetFleet() *Fleet { + if x != nil { + return x.Fleet + } + return nil +} + +type EventGuild struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Guild *Guild `protobuf:"bytes,1,opt,name=guild,proto3" json:"guild,omitempty"` +} + +func (x *EventGuild) Reset() { + *x = EventGuild{} + if protoimpl.UnsafeEnabled { + mi := &file_structs_structs_events_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } } @@ -32412,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() { @@ -32560,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 @@ -32597,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() { @@ -32843,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 @@ -33020,6 +34347,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{ @@ -33426,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, @@ -33504,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, @@ -33681,18 +35122,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 +35167,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 +35228,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 +35299,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 +36057,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 +36088,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/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..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":{"/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":{"/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 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/proto/structs/structs/events.proto b/proto/structs/structs/events.proto index fed684d..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 { @@ -215,4 +221,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/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/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/agreement_cache.go b/x/structs/keeper/agreement_cache.go index f3522c7..49f9af8 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" ) @@ -103,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 } @@ -183,15 +186,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 +405,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 +444,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..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" @@ -10,9 +11,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 +35,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 +48,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 +107,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", strconv.FormatUint(previousAllocation.Index, 10), strconv.FormatUint(allocation.Index, 10)) } 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 3b86e50..3af2c37 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" ) @@ -92,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 } @@ -325,15 +328,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 +365,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() { - 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() { - 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) { - 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 +416,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 +433,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() { - 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() { - 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) { - 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 +468,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 +495,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 833c557..b134211 100644 --- a/x/structs/keeper/grid.go +++ b/x/structs/keeper/grid.go @@ -10,8 +10,9 @@ import ( "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "fmt" + + "slices" ) // GetObjectID returns the string representation of the ID, based on ObjectType @@ -52,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) { @@ -111,15 +116,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 } @@ -127,7 +135,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/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 2d1ff5f..ef2df90 100644 --- a/x/structs/keeper/guild_cache.go +++ b/x/structs/keeper/guild_cache.go @@ -4,13 +4,13 @@ import ( "context" "structs/x/structs/types" + sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" // 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" ) /* @@ -34,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 @@ -47,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, @@ -64,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) @@ -86,13 +85,16 @@ func (cache *GuildCache) Commit() { cache.GetOwner().Commit() } - } func (cache *GuildCache) IsChanged() bool { return cache.AnyChange } +func (cache *GuildCache) ID() string { + return cache.GuildId +} + func (cache *GuildCache) Changed() { cache.AnyChange = true } @@ -108,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 { @@ -132,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 = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Guild not currently allowing invitations") + 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 = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Calling player (%s) must be a member of Guild (%s) to invite others", activePlayer.GetPlayerId(), cache.GetGuildId()) - } - } - 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 = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Guild not currently allowing requests") - - // 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 = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Calling player (%s) must be a member of Guild (%s) to approve requests", activePlayer.GetPlayerId(), cache.GetGuildId()) - } - } - 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 = sdkerrors.Wrapf(types.ErrGuildMembershipApplication, "Guild is not currently allowing membership requests") - } - 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 sdkerrors.Wrapf(types.ErrPermission, "Calling address (%s) has no (%d) permissions ", activePlayer.GetActiveAddress(), permission) - } +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 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.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 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 sdkerrors.Wrapf(types.ErrGridMalfunction, "Player cannot afford the mint") - } + // 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 sdkerrors.Wrapf(types.ErrGridMalfunction, "Player cannot afford the mint") - } + 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/guild_membership_cache.go b/x/structs/keeper/guild_membership_cache.go index fdcc6ef..0b2de88 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) @@ -211,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 } @@ -260,7 +263,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 +290,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 +299,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 +345,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 +354,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 +412,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/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/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/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_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..809d02d 100644 --- a/x/structs/keeper/msg_server_planet_raid_complete.go +++ b/x/structs/keeper/msg_server_planet_raid_complete.go @@ -2,93 +2,94 @@ package keeper import ( "context" - "strconv" + "strconv" - //"fmt" + //"fmt" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "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{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Cannot perform actions while Player (%s) is Halted", fleet.GetOwnerId()) - } - - // check that the fleet is Away - if fleet.IsOnStation() { - return &types.MsgPlanetRaidCompleteResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Fleet cannot complete a Raid while On Station") - } - - // 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") - } - - // 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") - } - - - 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{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Work failure for input (%s) when trying to complete a Raid on Planet %s", hashInput, 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_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..fe57149 100644 --- a/x/structs/keeper/msg_server_struct_attack.go +++ b/x/structs/keeper/msg_server_struct_attack.go @@ -4,186 +4,223 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "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{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.OperatingStructId, structure.GetOwnerId()) - } - - // 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{}, sdkerrors.Wrapf(types.ErrInsufficientCharge, "Commanding a Fleet Struct (%s) requires a Command Struct be Online", 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) - } - - // 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(), types.TechWeaponSystem_enum[msg.WeaponSystem], structure.GetStructType().GetWeaponControl(types.TechWeaponSystem_enum[msg.WeaponSystem]), structure.GetStructType().GetWeapon(types.TechWeaponSystem_enum[msg.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()) - return &types.MsgStructAttackResponse{}, sdkerrors.Wrapf(types.ErrStructAction, "Attack Targeting Incomplete") - } - - // 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] ) - // Load the Target Struct cache object - targetStructure := k.GetStructCacheFromId(ctx, msg.TargetStructId[shot]) - - 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, types.TechWeaponSystem_enum[msg.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])) { - 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(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]))) { - - // 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()) - - 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(types.TechWeaponSystem_enum[msg.WeaponSystem]))) { - k.logger.Info("Defender to attempt a block!") - attackBlocked = defender.AttemptBlock(&structure, types.TechWeaponSystem_enum[msg.WeaponSystem], &targetStructure) - } - - } - - if (structure.GetStructType().GetWeaponCounterable(types.TechWeaponSystem_enum[msg.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, types.TechWeaponSystem_enum[msg.WeaponSystem]) - } else { - k.logger.Info("Attack against target was blocked", "target", msg.TargetStructId[shot]) - } - - - if (structure.GetStructType().GetWeaponCounterable(types.TechWeaponSystem_enum[msg.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() - } - - // Possibly over committing if the same target is hit multiple times. - targetStructure.Commit() - } - - // Recoil Damage - structure.TakeRecoilDamage(types.TechWeaponSystem_enum[msg.WeaponSystem]) - - // Check for Planetary Damage, namely Defense Cannons - if (targetWasPlanetary) { - targetWasOnPlanet.AttemptDefenseCannon(&structure) - } - - _ = ctx.EventManager().EmitTypedEvent(&types.EventAttack{EventAttackDetail: eventAttackDetail}) - - structure.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/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..7d39bcf 100644 --- a/x/structs/keeper/msg_server_struct_build_complete.go +++ b/x/structs/keeper/msg_server_struct_build_complete.go @@ -2,84 +2,89 @@ package keeper import ( "context" - "strconv" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" + "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{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct (%s) does not exist", 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()) - } - - if structure.IsBuilt() { - structure.GetOwner().Discharge() - structure.GetOwner().Commit() - return &types.MsgStructStatusResponse{}, sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) already built", msg.StructId) - } - - - // 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() ) - 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()) - } - - // 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{}, 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()) - } - - // 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{}, sdkerrors.Wrapf(types.ErrStructBuildComplete, "Work failure for input (%s) when trying to build Struct %s", hashInput, structure.GetStructId()) - } - - 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_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..5ec3703 100644 --- a/x/structs/keeper/msg_server_struct_generator_infuse.go +++ b/x/structs/keeper/msg_server_struct_generator_infuse.go @@ -3,10 +3,9 @@ package keeper import ( "context" + "structs/x/structs/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" - "structs/x/structs/types" "cosmossdk.io/math" ) @@ -14,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{}, sdkerrors.Wrapf(types.ErrPlayerRequired, "Struct build actions requires Player account but none associated with %s", msg.Creator) - } - 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{}, sdkerrors.Wrapf(types.ErrPermissionPlay, "Calling address (%s) has no assets permissions ", msg.Creator) - } - - 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) - } - - // 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) - } - - // 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) - } - - - 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) - } - - // 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{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "Planet (%s) was not found, which is actually a pretty big problem. Please tell an adult", 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) - } - - infusionAmount, parseError := sdk.ParseCoinsNormalized(msg.InfuseAmount) - if (parseError != nil ){ - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrStructInfuse, "Infuse amount (%s) is invalid", msg.InfuseAmount) - } - - if len(infusionAmount) < 1 { - return &types.MsgStructGeneratorStatusResponse{}, sdkerrors.Wrapf(types.ErrStructInfuse, "Infuse amount (%s) is invalid", msg.InfuseAmount) - } - - 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{}, sdkerrors.Wrapf(types.ErrStructInfuse, "Infuse amount (%s) is invalid, %s is not a fuel", msg.InfuseAmount, 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{}, sdkerrors.Wrapf(types.ErrStructInfuse, "Infuse failed %s", sendError ) - } - 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/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..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,61 +2,65 @@ package keeper import ( "context" - "strconv" + "strconv" - //"fmt" + //"fmt" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "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{}, sdkerrors.Wrapf(types.ErrPlayerHalted, "Struct (%s) cannot perform actions while Player (%s) is Halted", msg.StructId, structure.GetOwnerId()) - } - - // 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{}, sdkerrors.Wrapf(types.ErrStructMine, "Work failure for input (%s) when trying to mine on Struct %s", hashInput, structure.StructId) - } - - // 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 eed648b..3bd181d 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" ) @@ -22,13 +21,15 @@ 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{}, 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? @@ -48,9 +49,9 @@ 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() - return &types.MsgStructOreRefineryStatusResponse{}, sdkerrors.Wrapf(types.ErrStructRefine, "Work failure for input (%s) when trying to refine on Struct %s", hashInput, structure.StructId) + valid, achievedDifficulty := types.HashBuildAndCheckDifficulty(hashInput, msg.Proof, currentAge, structure.GetStructType().GetOreRefiningDifficulty()) + if !valid { + return &types.MsgStructOreRefineryStatusResponse{}, types.NewWorkFailureError("refine", structure.StructId, hashInput) } structure.OreRefine() @@ -58,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/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_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/planet_cache.go b/x/structs/keeper/planet_cache.go index 79c5ed4..7c33ec7 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" @@ -237,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 } @@ -623,32 +626,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 +671,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 +688,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 +721,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 +751,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 +810,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 ac8eafd..6845af7 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)) @@ -181,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 } @@ -284,7 +287,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) } } @@ -488,33 +491,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 types.NewPermissionError("address", address, "", "", uint64(permission), "administrate") } 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 types.NewPermissionError("player", callingPlayer.GetPlayerId(), "player", cache.GetPlayerId(), uint64(permission), "administrate") } } } - 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 types.NewPlayerPowerError(cache.PlayerId, "offline") } cache.Ready = true - return + return nil } diff --git a/x/structs/keeper/provider_cache.go b/x/structs/keeper/provider_cache.go index a9d5e7f..9f604a8 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" ) @@ -97,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 } @@ -185,24 +188,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 +234,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 +253,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 +323,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.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) } } 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 645e02a..ddead1a 100644 --- a/x/structs/keeper/struct_cache.go +++ b/x/structs/keeper/struct_cache.go @@ -3,482 +3,570 @@ package keeper import ( "context" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" "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{}, sdkerrors.Wrapf(types.ErrObjectNotFound, "We're not building these yet") - } - - - // 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 + 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) 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 } -func (cache *StructCache) IsChanged() bool { - return cache.AnyChange +func (cache *StructCache) ID() string { + 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. @@ -486,929 +574,942 @@ 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 sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) isn't finished being built yet", cache.StructId) - } + // Check Struct is Built + if !cache.IsBuilt() { + 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) - } + // Check Struct is Online + if cache.IsOnline() { + 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()) - } + // 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 sdkerrors.Wrapf(types.ErrGridMalfunction, "Player (%s) cannot handle the new load requirements", cache.GetOwnerId()) - } + // 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() (err error) { - if (cache.IsOffline()) { - err = 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()) - } - } - - cache.Ready = true - return + // 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) (err 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) - } - - 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()) - } - } - } - - return -} - -func (cache *StructCache) CanBeHashedBy(address string) (err 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) - } - - 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()) - } - } - } - - return +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") + } + + 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 +} + +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 } /* Game Functions */ -func (cache *StructCache) CanOreMinePlanet() (error) { +func (cache *StructCache) CanOreMinePlanet() error { - if (!cache.GetStructType().HasOreMiningSystem()) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) has no mining system", cache.StructId) - } + if !cache.GetStructType().HasOreMiningSystem() { + return types.NewStructCapabilityError(cache.StructId, "mining") + } - if (cache.GetBlockStartOreMine() == 0) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) not mining", cache.StructId) - } + /* + if cache.GetBlockStartOreMine() == 0 { + 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()) - } + if cache.GetPlanet().IsComplete() { + 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()) - } + 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 sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) has no refining system", cache.StructId) - } + /* + if cache.GetBlockStartOreRefine() == 0 { + return types.NewStructStateError(cache.StructId, "not_refining", "refining", "ore_refine") + } + */ - if (cache.GetBlockStartOreRefine() == 0) { - return sdkerrors.Wrapf(types.ErrGridMalfunction, "Struct (%s) not mining", cache.StructId) - } + if !cache.GetOwner().HasStoredOre() { + return types.NewPlayerAffordabilityError(cache.GetOwner().PlayerId, "refine", "ore") + } - 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 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 = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is already destroyed", targetStruct.StructId) - } 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) - } 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) - } 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) - } - } - } - } - - // 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 = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Planetary Attacker Struct (%s)", targetStruct.StructId, cache.StructId) - } - - 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 = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by from the Struct (%s) on Planet", targetStruct.StructId, cache.StructId) - } - // 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 = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Fleet Attacker Struct (%s)", targetStruct.StructId, cache.StructId) - } - } - 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) - } - } - 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 = sdkerrors.Wrapf(types.ErrStructAction, "Counter Struct (%s) or Attacker Struct (%s) is already destroyed", cache.StructId, attackerStruct.StructId) - } 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) - } - } - - // 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 = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Planetary Counter-Attacker Struct (%s)", attackerStruct.StructId, cache.StructId) - } - - 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 = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by from the Counter-Attacker Struct (%s) on Planet", attackerStruct.StructId, cache.StructId) - } - // 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 = sdkerrors.Wrapf(types.ErrStructAction, "Target Struct (%s) is unreachable by Fleet Counter-Attacker Struct (%s)", attackerStruct.StructId, cache.StructId) - } - } - 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) - } - } - 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 sdkerrors.Wrapf(types.ErrObjectNotFound, "Struct cannot move when offline") - } - - 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 sdkerrors.Wrapf(types.ErrObjectNotFound, "We're not building these yet") - } - - 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/keeper/substation_cache.go b/x/structs/keeper/substation_cache.go index 94d785d..4cb385b 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" ) @@ -93,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 } @@ -182,23 +185,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 types.NewPermissionError("address", activePlayer.GetActiveAddress(), "", "", uint64(permission), "substation_action") } if !activePlayer.HasPlayerAccount() { - err = 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)) { - err = 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") } } } - return + return nil } diff --git a/x/structs/module/genesis.go b/x/structs/module/genesis.go index 2235459..6d403e4 100644 --- a/x/structs/module/genesis.go +++ b/x/structs/module/genesis.go @@ -93,7 +93,6 @@ 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) { 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/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/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)) + } +} 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 bfd362a..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"` @@ -3321,6 +3353,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 +3533,181 @@ 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, + // 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) { @@ -5552,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) @@ -5708,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-- @@ -6116,6 +6307,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 @@ -7001,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 } @@ -7113,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 } @@ -7184,6 +7478,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 } @@ -12996,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:]) @@ -13730,25 +14084,82 @@ func (m *EventAttackShotDetail) Unmarshal(dAtA []byte) error { break } } - 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 + case 33: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetHealthBefore", wireType) } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } + 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:]) + 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 *EventAttackDefenderCounterDetail) Unmarshal(dAtA []byte) error { @@ -14199,6 +14610,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/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/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/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(), - } } 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 } 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