diff --git a/api/uexecutor/v1/genesis.pulsar.go b/api/uexecutor/v1/genesis.pulsar.go index c0799f81..78442458 100644 --- a/api/uexecutor/v1/genesis.pulsar.go +++ b/api/uexecutor/v1/genesis.pulsar.go @@ -1514,7 +1514,7 @@ func (x *fastReflection_ChainMetaEntry) ProtoMethods() *protoiface.Methods { var _ protoreflect.List = (*_GenesisState_2_list)(nil) type _GenesisState_2_list struct { - list *[]string + list *[]*PendingInboundEntry } func (x *_GenesisState_2_list) Len() int { @@ -1525,32 +1525,37 @@ func (x *_GenesisState_2_list) Len() int { } func (x *_GenesisState_2_list) Get(i int) protoreflect.Value { - return protoreflect.ValueOfString((*x.list)[i]) + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) } func (x *_GenesisState_2_list) Set(i int, value protoreflect.Value) { - valueUnwrapped := value.String() - concreteValue := valueUnwrapped + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*PendingInboundEntry) (*x.list)[i] = concreteValue } func (x *_GenesisState_2_list) Append(value protoreflect.Value) { - valueUnwrapped := value.String() - concreteValue := valueUnwrapped + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*PendingInboundEntry) *x.list = append(*x.list, concreteValue) } func (x *_GenesisState_2_list) AppendMutable() protoreflect.Value { - panic(fmt.Errorf("AppendMutable can not be called on message GenesisState at list field PendingInbounds as it is not of Message kind")) + v := new(PendingInboundEntry) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) } func (x *_GenesisState_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } *x.list = (*x.list)[:n] } func (x *_GenesisState_2_list) NewElement() protoreflect.Value { - v := "" - return protoreflect.ValueOfString(v) + v := new(PendingInboundEntry) + return protoreflect.ValueOfMessage(v.ProtoReflect()) } func (x *_GenesisState_2_list) IsValid() bool { @@ -1761,6 +1766,57 @@ func (x *_GenesisState_8_list) IsValid() bool { return x.list != nil } +var _ protoreflect.List = (*_GenesisState_9_list)(nil) + +type _GenesisState_9_list struct { + list *[]*ExpiredInboundEntry +} + +func (x *_GenesisState_9_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_9_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_9_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ExpiredInboundEntry) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_9_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ExpiredInboundEntry) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_9_list) AppendMutable() protoreflect.Value { + v := new(ExpiredInboundEntry) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_9_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_9_list) NewElement() protoreflect.Value { + v := new(ExpiredInboundEntry) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_9_list) IsValid() bool { + return x.list != nil +} + var ( md_GenesisState protoreflect.MessageDescriptor fd_GenesisState_params protoreflect.FieldDescriptor @@ -1771,6 +1827,7 @@ var ( fd_GenesisState_chain_metas protoreflect.FieldDescriptor fd_GenesisState_exported protoreflect.FieldDescriptor fd_GenesisState_pending_outbounds protoreflect.FieldDescriptor + fd_GenesisState_expired_inbounds protoreflect.FieldDescriptor ) func init() { @@ -1784,6 +1841,7 @@ func init() { fd_GenesisState_chain_metas = md_GenesisState.Fields().ByName("chain_metas") fd_GenesisState_exported = md_GenesisState.Fields().ByName("exported") fd_GenesisState_pending_outbounds = md_GenesisState.Fields().ByName("pending_outbounds") + fd_GenesisState_expired_inbounds = md_GenesisState.Fields().ByName("expired_inbounds") } var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) @@ -1899,6 +1957,12 @@ func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, return } } + if len(x.ExpiredInbounds) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_9_list{list: &x.ExpiredInbounds}) + if !f(fd_GenesisState_expired_inbounds, value) { + return + } + } } // Has reports whether a field is populated. @@ -1930,6 +1994,8 @@ func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool return x.Exported != false case "uexecutor.v1.GenesisState.pending_outbounds": return len(x.PendingOutbounds) != 0 + case "uexecutor.v1.GenesisState.expired_inbounds": + return len(x.ExpiredInbounds) != 0 default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.GenesisState")) @@ -1962,6 +2028,8 @@ func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { x.Exported = false case "uexecutor.v1.GenesisState.pending_outbounds": x.PendingOutbounds = nil + case "uexecutor.v1.GenesisState.expired_inbounds": + x.ExpiredInbounds = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.GenesisState")) @@ -2017,6 +2085,12 @@ func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescripto } listValue := &_GenesisState_8_list{list: &x.PendingOutbounds} return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.GenesisState.expired_inbounds": + if len(x.ExpiredInbounds) == 0 { + return protoreflect.ValueOfList(&_GenesisState_9_list{}) + } + listValue := &_GenesisState_9_list{list: &x.ExpiredInbounds} + return protoreflect.ValueOfList(listValue) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.GenesisState")) @@ -2063,6 +2137,10 @@ func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value lv := value.List() clv := lv.(*_GenesisState_8_list) x.PendingOutbounds = *clv.list + case "uexecutor.v1.GenesisState.expired_inbounds": + lv := value.List() + clv := lv.(*_GenesisState_9_list) + x.ExpiredInbounds = *clv.list default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.GenesisState")) @@ -2090,7 +2168,7 @@ func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) p return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) case "uexecutor.v1.GenesisState.pending_inbounds": if x.PendingInbounds == nil { - x.PendingInbounds = []string{} + x.PendingInbounds = []*PendingInboundEntry{} } value := &_GenesisState_2_list{list: &x.PendingInbounds} return protoreflect.ValueOfList(value) @@ -2118,6 +2196,12 @@ func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) p } value := &_GenesisState_8_list{list: &x.PendingOutbounds} return protoreflect.ValueOfList(value) + case "uexecutor.v1.GenesisState.expired_inbounds": + if x.ExpiredInbounds == nil { + x.ExpiredInbounds = []*ExpiredInboundEntry{} + } + value := &_GenesisState_9_list{list: &x.ExpiredInbounds} + return protoreflect.ValueOfList(value) case "uexecutor.v1.GenesisState.module_account_nonce": panic(fmt.Errorf("field module_account_nonce of message uexecutor.v1.GenesisState is not mutable")) case "uexecutor.v1.GenesisState.exported": @@ -2139,7 +2223,7 @@ func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) m := new(Params) return protoreflect.ValueOfMessage(m.ProtoReflect()) case "uexecutor.v1.GenesisState.pending_inbounds": - list := []string{} + list := []*PendingInboundEntry{} return protoreflect.ValueOfList(&_GenesisState_2_list{list: &list}) case "uexecutor.v1.GenesisState.universal_txs": list := []*UniversalTxEntry{} @@ -2157,6 +2241,9 @@ func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) case "uexecutor.v1.GenesisState.pending_outbounds": list := []*PendingOutboundEntry{} return protoreflect.ValueOfList(&_GenesisState_8_list{list: &list}) + case "uexecutor.v1.GenesisState.expired_inbounds": + list := []*ExpiredInboundEntry{} + return protoreflect.ValueOfList(&_GenesisState_9_list{list: &list}) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.GenesisState")) @@ -2231,8 +2318,8 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { n += 1 + l + runtime.Sov(uint64(l)) } if len(x.PendingInbounds) > 0 { - for _, s := range x.PendingInbounds { - l = len(s) + for _, e := range x.PendingInbounds { + l = options.Size(e) n += 1 + l + runtime.Sov(uint64(l)) } } @@ -2266,6 +2353,12 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { n += 1 + l + runtime.Sov(uint64(l)) } } + if len(x.ExpiredInbounds) > 0 { + for _, e := range x.ExpiredInbounds { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -2295,6 +2388,22 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.ExpiredInbounds) > 0 { + for iNdEx := len(x.ExpiredInbounds) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ExpiredInbounds[iNdEx]) + 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] = 0x4a + } + } if len(x.PendingOutbounds) > 0 { for iNdEx := len(x.PendingOutbounds) - 1; iNdEx >= 0; iNdEx-- { encoded, err := options.Marshal(x.PendingOutbounds[iNdEx]) @@ -2376,9 +2485,16 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { } if len(x.PendingInbounds) > 0 { for iNdEx := len(x.PendingInbounds) - 1; iNdEx >= 0; iNdEx-- { - i -= len(x.PendingInbounds[iNdEx]) - copy(dAtA[i:], x.PendingInbounds[iNdEx]) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PendingInbounds[iNdEx]))) + encoded, err := options.Marshal(x.PendingInbounds[iNdEx]) + 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] = 0x12 } @@ -2486,7 +2602,7 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { if wireType != 2 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PendingInbounds", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -2496,23 +2612,25 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + 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 } - x.PendingInbounds = append(x.PendingInbounds, string(dAtA[iNdEx:postIndex])) + x.PendingInbounds = append(x.PendingInbounds, &PendingInboundEntry{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.PendingInbounds[len(x.PendingInbounds)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex case 3: if wireType != 2 { @@ -2689,6 +2807,40 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } iNdEx = postIndex + case 9: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ExpiredInbounds", 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 + } + x.ExpiredInbounds = append(x.ExpiredInbounds, &ExpiredInboundEntry{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ExpiredInbounds[len(x.ExpiredInbounds)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -2877,8 +3029,13 @@ type GenesisState struct { // Params defines all the parameters of the module. Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` - // pending_inbounds are the keys from the PendingInbounds KeySet. - PendingInbounds []string `protobuf:"bytes,2,rep,name=pending_inbounds,json=pendingInbounds,proto3" json:"pending_inbounds,omitempty"` + // pending_inbounds are entries from the PendingInbounds index. + // Per-variant audit-trail entries — see plan-pending-inbound-cleanup.md. + // Field 2 was previously `repeated string` (legacy KeySet keys); the + // shape change is non-breaking for in-flight state because the + // collection moved to a fresh prefix and the old prefix entries are + // dropped at upgrade time by a one-shot migration. + PendingInbounds []*PendingInboundEntry `protobuf:"bytes,2,rep,name=pending_inbounds,json=pendingInbounds,proto3" json:"pending_inbounds,omitempty"` // universal_txs are key-value pairs from the UniversalTx Map. UniversalTxs []*UniversalTxEntry `protobuf:"bytes,3,rep,name=universal_txs,json=universalTxs,proto3" json:"universal_txs,omitempty"` // module_account_nonce is the value from the ModuleAccountNonce Item. @@ -2892,6 +3049,11 @@ type GenesisState struct { Exported bool `protobuf:"varint,7,opt,name=exported,proto3" json:"exported,omitempty"` // pending_outbounds are entries from the PendingOutbounds index. PendingOutbounds []*PendingOutboundEntry `protobuf:"bytes,8,rep,name=pending_outbounds,json=pendingOutbounds,proto3" json:"pending_outbounds,omitempty"` + // expired_inbounds are entries from the ExpiredInbounds index. + // Per-variant audit-trail of inbounds whose ballots all reached + // EXPIRED/REJECTED without producing a UniversalTx. Consumed by the + // future escape-hatch refund flow. + ExpiredInbounds []*ExpiredInboundEntry `protobuf:"bytes,9,rep,name=expired_inbounds,json=expiredInbounds,proto3" json:"expired_inbounds,omitempty"` } func (x *GenesisState) Reset() { @@ -2921,7 +3083,7 @@ func (x *GenesisState) GetParams() *Params { return nil } -func (x *GenesisState) GetPendingInbounds() []string { +func (x *GenesisState) GetPendingInbounds() []*PendingInboundEntry { if x != nil { return x.PendingInbounds } @@ -2970,6 +3132,13 @@ func (x *GenesisState) GetPendingOutbounds() []*PendingOutboundEntry { return nil } +func (x *GenesisState) GetExpiredInbounds() []*ExpiredInboundEntry { + if x != nil { + return x.ExpiredInbounds + } + return nil +} + var File_uexecutor_v1_genesis_proto protoreflect.FileDescriptor var file_uexecutor_v1_genesis_proto_rawDesc = []byte{ @@ -2983,68 +3152,77 @@ var file_uexecutor_v1_genesis_proto_rawDesc = []byte{ 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x75, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5b, 0x0a, 0x10, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x6c, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x75, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x6c, 0x54, 0x78, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x55, 0x0a, 0x0d, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, - 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x57, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x75, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x4d, 0x65, 0x74, 0x61, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xe4, 0x03, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, - 0x78, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x6c, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0c, - 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x73, 0x12, 0x30, 0x0a, 0x14, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, - 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x40, - 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, - 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, - 0x12, 0x43, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x12, 0x55, 0x0a, 0x11, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x75, 0x74, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x75, + 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x75, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x5b, 0x0a, 0x10, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x55, 0x0a, + 0x0d, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x57, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe1, 0x04, + 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x32, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x10, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x10, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, - 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x42, 0xb4, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, - 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x47, - 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2d, 0x6e, - 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x55, 0x58, 0x58, 0xaa, 0x02, 0x0c, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0d, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, + 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, + 0xde, 0x1f, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, + 0x73, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x12, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, + 0x6e, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x75, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, + 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x55, 0x0a, 0x11, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x10, 0x70, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x52, 0x0a, + 0x10, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x73, 0x42, 0xb4, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x70, 0x75, 0x73, + 0x68, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x55, 0x58, 0x58, 0xaa, + 0x02, 0x0c, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x0c, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, + 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x55, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3069,22 +3247,26 @@ var file_uexecutor_v1_genesis_proto_goTypes = []interface{}{ (*GasPrice)(nil), // 5: uexecutor.v1.GasPrice (*ChainMeta)(nil), // 6: uexecutor.v1.ChainMeta (*Params)(nil), // 7: uexecutor.v1.Params - (*PendingOutboundEntry)(nil), // 8: uexecutor.v1.PendingOutboundEntry + (*PendingInboundEntry)(nil), // 8: uexecutor.v1.PendingInboundEntry + (*PendingOutboundEntry)(nil), // 9: uexecutor.v1.PendingOutboundEntry + (*ExpiredInboundEntry)(nil), // 10: uexecutor.v1.ExpiredInboundEntry } var file_uexecutor_v1_genesis_proto_depIdxs = []int32{ - 4, // 0: uexecutor.v1.UniversalTxEntry.value:type_name -> uexecutor.v1.UniversalTx - 5, // 1: uexecutor.v1.GasPriceEntry.value:type_name -> uexecutor.v1.GasPrice - 6, // 2: uexecutor.v1.ChainMetaEntry.value:type_name -> uexecutor.v1.ChainMeta - 7, // 3: uexecutor.v1.GenesisState.params:type_name -> uexecutor.v1.Params - 0, // 4: uexecutor.v1.GenesisState.universal_txs:type_name -> uexecutor.v1.UniversalTxEntry - 1, // 5: uexecutor.v1.GenesisState.gas_prices:type_name -> uexecutor.v1.GasPriceEntry - 2, // 6: uexecutor.v1.GenesisState.chain_metas:type_name -> uexecutor.v1.ChainMetaEntry - 8, // 7: uexecutor.v1.GenesisState.pending_outbounds:type_name -> uexecutor.v1.PendingOutboundEntry - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 4, // 0: uexecutor.v1.UniversalTxEntry.value:type_name -> uexecutor.v1.UniversalTx + 5, // 1: uexecutor.v1.GasPriceEntry.value:type_name -> uexecutor.v1.GasPrice + 6, // 2: uexecutor.v1.ChainMetaEntry.value:type_name -> uexecutor.v1.ChainMeta + 7, // 3: uexecutor.v1.GenesisState.params:type_name -> uexecutor.v1.Params + 8, // 4: uexecutor.v1.GenesisState.pending_inbounds:type_name -> uexecutor.v1.PendingInboundEntry + 0, // 5: uexecutor.v1.GenesisState.universal_txs:type_name -> uexecutor.v1.UniversalTxEntry + 1, // 6: uexecutor.v1.GenesisState.gas_prices:type_name -> uexecutor.v1.GasPriceEntry + 2, // 7: uexecutor.v1.GenesisState.chain_metas:type_name -> uexecutor.v1.ChainMetaEntry + 9, // 8: uexecutor.v1.GenesisState.pending_outbounds:type_name -> uexecutor.v1.PendingOutboundEntry + 10, // 9: uexecutor.v1.GenesisState.expired_inbounds:type_name -> uexecutor.v1.ExpiredInboundEntry + 10, // [10:10] is the sub-list for method output_type + 10, // [10:10] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_uexecutor_v1_genesis_proto_init() } @@ -3095,6 +3277,7 @@ func file_uexecutor_v1_genesis_proto_init() { file_uexecutor_v1_types_proto_init() file_uexecutor_v1_gas_price_proto_init() file_uexecutor_v1_chain_meta_proto_init() + file_uexecutor_v1_pending_proto_init() file_uexecutor_v1_query_proto_init() if !protoimpl.UnsafeEnabled { file_uexecutor_v1_genesis_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { diff --git a/api/uexecutor/v1/pending.pulsar.go b/api/uexecutor/v1/pending.pulsar.go new file mode 100644 index 00000000..e01b0ec3 --- /dev/null +++ b/api/uexecutor/v1/pending.pulsar.go @@ -0,0 +1,3208 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package uexecutorv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + v1 "github.com/pushchain/push-chain-node/api/uvalidator/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_InboundVariant_3_list)(nil) + +type _InboundVariant_3_list struct { + list *[]string +} + +func (x *_InboundVariant_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_InboundVariant_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_InboundVariant_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_InboundVariant_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_InboundVariant_3_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message InboundVariant at list field Voters as it is not of Message kind")) +} + +func (x *_InboundVariant_3_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_InboundVariant_3_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_InboundVariant_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_InboundVariant protoreflect.MessageDescriptor + fd_InboundVariant_ballot_id protoreflect.FieldDescriptor + fd_InboundVariant_inbound protoreflect.FieldDescriptor + fd_InboundVariant_voters protoreflect.FieldDescriptor + fd_InboundVariant_first_voted_at_height protoreflect.FieldDescriptor + fd_InboundVariant_last_voted_at_height protoreflect.FieldDescriptor + fd_InboundVariant_terminal_status protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_pending_proto_init() + md_InboundVariant = File_uexecutor_v1_pending_proto.Messages().ByName("InboundVariant") + fd_InboundVariant_ballot_id = md_InboundVariant.Fields().ByName("ballot_id") + fd_InboundVariant_inbound = md_InboundVariant.Fields().ByName("inbound") + fd_InboundVariant_voters = md_InboundVariant.Fields().ByName("voters") + fd_InboundVariant_first_voted_at_height = md_InboundVariant.Fields().ByName("first_voted_at_height") + fd_InboundVariant_last_voted_at_height = md_InboundVariant.Fields().ByName("last_voted_at_height") + fd_InboundVariant_terminal_status = md_InboundVariant.Fields().ByName("terminal_status") +} + +var _ protoreflect.Message = (*fastReflection_InboundVariant)(nil) + +type fastReflection_InboundVariant InboundVariant + +func (x *InboundVariant) ProtoReflect() protoreflect.Message { + return (*fastReflection_InboundVariant)(x) +} + +func (x *InboundVariant) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_pending_proto_msgTypes[0] + 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_InboundVariant_messageType fastReflection_InboundVariant_messageType +var _ protoreflect.MessageType = fastReflection_InboundVariant_messageType{} + +type fastReflection_InboundVariant_messageType struct{} + +func (x fastReflection_InboundVariant_messageType) Zero() protoreflect.Message { + return (*fastReflection_InboundVariant)(nil) +} +func (x fastReflection_InboundVariant_messageType) New() protoreflect.Message { + return new(fastReflection_InboundVariant) +} +func (x fastReflection_InboundVariant_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_InboundVariant +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_InboundVariant) Descriptor() protoreflect.MessageDescriptor { + return md_InboundVariant +} + +// 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_InboundVariant) Type() protoreflect.MessageType { + return _fastReflection_InboundVariant_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_InboundVariant) New() protoreflect.Message { + return new(fastReflection_InboundVariant) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_InboundVariant) Interface() protoreflect.ProtoMessage { + return (*InboundVariant)(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_InboundVariant) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.BallotId != "" { + value := protoreflect.ValueOfString(x.BallotId) + if !f(fd_InboundVariant_ballot_id, value) { + return + } + } + if x.Inbound != nil { + value := protoreflect.ValueOfMessage(x.Inbound.ProtoReflect()) + if !f(fd_InboundVariant_inbound, value) { + return + } + } + if len(x.Voters) != 0 { + value := protoreflect.ValueOfList(&_InboundVariant_3_list{list: &x.Voters}) + if !f(fd_InboundVariant_voters, value) { + return + } + } + if x.FirstVotedAtHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.FirstVotedAtHeight) + if !f(fd_InboundVariant_first_voted_at_height, value) { + return + } + } + if x.LastVotedAtHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.LastVotedAtHeight) + if !f(fd_InboundVariant_last_voted_at_height, value) { + return + } + } + if x.TerminalStatus != 0 { + value := protoreflect.ValueOfEnum((protoreflect.EnumNumber)(x.TerminalStatus)) + if !f(fd_InboundVariant_terminal_status, 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_InboundVariant) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.InboundVariant.ballot_id": + return x.BallotId != "" + case "uexecutor.v1.InboundVariant.inbound": + return x.Inbound != nil + case "uexecutor.v1.InboundVariant.voters": + return len(x.Voters) != 0 + case "uexecutor.v1.InboundVariant.first_voted_at_height": + return x.FirstVotedAtHeight != uint64(0) + case "uexecutor.v1.InboundVariant.last_voted_at_height": + return x.LastVotedAtHeight != uint64(0) + case "uexecutor.v1.InboundVariant.terminal_status": + return x.TerminalStatus != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.InboundVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.InboundVariant 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_InboundVariant) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.InboundVariant.ballot_id": + x.BallotId = "" + case "uexecutor.v1.InboundVariant.inbound": + x.Inbound = nil + case "uexecutor.v1.InboundVariant.voters": + x.Voters = nil + case "uexecutor.v1.InboundVariant.first_voted_at_height": + x.FirstVotedAtHeight = uint64(0) + case "uexecutor.v1.InboundVariant.last_voted_at_height": + x.LastVotedAtHeight = uint64(0) + case "uexecutor.v1.InboundVariant.terminal_status": + x.TerminalStatus = 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.InboundVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.InboundVariant 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_InboundVariant) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.InboundVariant.ballot_id": + value := x.BallotId + return protoreflect.ValueOfString(value) + case "uexecutor.v1.InboundVariant.inbound": + value := x.Inbound + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "uexecutor.v1.InboundVariant.voters": + if len(x.Voters) == 0 { + return protoreflect.ValueOfList(&_InboundVariant_3_list{}) + } + listValue := &_InboundVariant_3_list{list: &x.Voters} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.InboundVariant.first_voted_at_height": + value := x.FirstVotedAtHeight + return protoreflect.ValueOfUint64(value) + case "uexecutor.v1.InboundVariant.last_voted_at_height": + value := x.LastVotedAtHeight + return protoreflect.ValueOfUint64(value) + case "uexecutor.v1.InboundVariant.terminal_status": + value := x.TerminalStatus + return protoreflect.ValueOfEnum((protoreflect.EnumNumber)(value)) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.InboundVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.InboundVariant 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_InboundVariant) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.InboundVariant.ballot_id": + x.BallotId = value.Interface().(string) + case "uexecutor.v1.InboundVariant.inbound": + x.Inbound = value.Message().Interface().(*Inbound) + case "uexecutor.v1.InboundVariant.voters": + lv := value.List() + clv := lv.(*_InboundVariant_3_list) + x.Voters = *clv.list + case "uexecutor.v1.InboundVariant.first_voted_at_height": + x.FirstVotedAtHeight = value.Uint() + case "uexecutor.v1.InboundVariant.last_voted_at_height": + x.LastVotedAtHeight = value.Uint() + case "uexecutor.v1.InboundVariant.terminal_status": + x.TerminalStatus = (v1.BallotStatus)(value.Enum()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.InboundVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.InboundVariant 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_InboundVariant) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.InboundVariant.inbound": + if x.Inbound == nil { + x.Inbound = new(Inbound) + } + return protoreflect.ValueOfMessage(x.Inbound.ProtoReflect()) + case "uexecutor.v1.InboundVariant.voters": + if x.Voters == nil { + x.Voters = []string{} + } + value := &_InboundVariant_3_list{list: &x.Voters} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.InboundVariant.ballot_id": + panic(fmt.Errorf("field ballot_id of message uexecutor.v1.InboundVariant is not mutable")) + case "uexecutor.v1.InboundVariant.first_voted_at_height": + panic(fmt.Errorf("field first_voted_at_height of message uexecutor.v1.InboundVariant is not mutable")) + case "uexecutor.v1.InboundVariant.last_voted_at_height": + panic(fmt.Errorf("field last_voted_at_height of message uexecutor.v1.InboundVariant is not mutable")) + case "uexecutor.v1.InboundVariant.terminal_status": + panic(fmt.Errorf("field terminal_status of message uexecutor.v1.InboundVariant is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.InboundVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.InboundVariant 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_InboundVariant) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.InboundVariant.ballot_id": + return protoreflect.ValueOfString("") + case "uexecutor.v1.InboundVariant.inbound": + m := new(Inbound) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "uexecutor.v1.InboundVariant.voters": + list := []string{} + return protoreflect.ValueOfList(&_InboundVariant_3_list{list: &list}) + case "uexecutor.v1.InboundVariant.first_voted_at_height": + return protoreflect.ValueOfUint64(uint64(0)) + case "uexecutor.v1.InboundVariant.last_voted_at_height": + return protoreflect.ValueOfUint64(uint64(0)) + case "uexecutor.v1.InboundVariant.terminal_status": + return protoreflect.ValueOfEnum(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.InboundVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.InboundVariant 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_InboundVariant) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.InboundVariant", 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_InboundVariant) 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_InboundVariant) 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_InboundVariant) 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_InboundVariant) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*InboundVariant) + 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.BallotId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Inbound != nil { + l = options.Size(x.Inbound) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Voters) > 0 { + for _, s := range x.Voters { + l = len(s) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.FirstVotedAtHeight != 0 { + n += 1 + runtime.Sov(uint64(x.FirstVotedAtHeight)) + } + if x.LastVotedAtHeight != 0 { + n += 1 + runtime.Sov(uint64(x.LastVotedAtHeight)) + } + if x.TerminalStatus != 0 { + n += 1 + runtime.Sov(uint64(x.TerminalStatus)) + } + 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().(*InboundVariant) + 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.TerminalStatus != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.TerminalStatus)) + i-- + dAtA[i] = 0x30 + } + if x.LastVotedAtHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LastVotedAtHeight)) + i-- + dAtA[i] = 0x28 + } + if x.FirstVotedAtHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.FirstVotedAtHeight)) + i-- + dAtA[i] = 0x20 + } + if len(x.Voters) > 0 { + for iNdEx := len(x.Voters) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.Voters[iNdEx]) + copy(dAtA[i:], x.Voters[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Voters[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if x.Inbound != nil { + encoded, err := options.Marshal(x.Inbound) + 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] = 0x12 + } + if len(x.BallotId) > 0 { + i -= len(x.BallotId) + copy(dAtA[i:], x.BallotId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.BallotId))) + 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().(*InboundVariant) + 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: InboundVariant: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: InboundVariant: 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 BallotId", 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.BallotId = 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 Inbound", 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.Inbound == nil { + x.Inbound = &Inbound{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Inbound); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Voters", 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.Voters = append(x.Voters, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field FirstVotedAtHeight", wireType) + } + x.FirstVotedAtHeight = 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.FirstVotedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LastVotedAtHeight", wireType) + } + x.LastVotedAtHeight = 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.LastVotedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TerminalStatus", wireType) + } + x.TerminalStatus = 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.TerminalStatus |= v1.BallotStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 _ protoreflect.List = (*_PendingInboundEntry_2_list)(nil) + +type _PendingInboundEntry_2_list struct { + list *[]*InboundVariant +} + +func (x *_PendingInboundEntry_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_PendingInboundEntry_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_PendingInboundEntry_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*InboundVariant) + (*x.list)[i] = concreteValue +} + +func (x *_PendingInboundEntry_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*InboundVariant) + *x.list = append(*x.list, concreteValue) +} + +func (x *_PendingInboundEntry_2_list) AppendMutable() protoreflect.Value { + v := new(InboundVariant) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_PendingInboundEntry_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_PendingInboundEntry_2_list) NewElement() protoreflect.Value { + v := new(InboundVariant) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_PendingInboundEntry_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_PendingInboundEntry protoreflect.MessageDescriptor + fd_PendingInboundEntry_utx_key protoreflect.FieldDescriptor + fd_PendingInboundEntry_variants protoreflect.FieldDescriptor + fd_PendingInboundEntry_created_at_height protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_pending_proto_init() + md_PendingInboundEntry = File_uexecutor_v1_pending_proto.Messages().ByName("PendingInboundEntry") + fd_PendingInboundEntry_utx_key = md_PendingInboundEntry.Fields().ByName("utx_key") + fd_PendingInboundEntry_variants = md_PendingInboundEntry.Fields().ByName("variants") + fd_PendingInboundEntry_created_at_height = md_PendingInboundEntry.Fields().ByName("created_at_height") +} + +var _ protoreflect.Message = (*fastReflection_PendingInboundEntry)(nil) + +type fastReflection_PendingInboundEntry PendingInboundEntry + +func (x *PendingInboundEntry) ProtoReflect() protoreflect.Message { + return (*fastReflection_PendingInboundEntry)(x) +} + +func (x *PendingInboundEntry) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_pending_proto_msgTypes[1] + 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_PendingInboundEntry_messageType fastReflection_PendingInboundEntry_messageType +var _ protoreflect.MessageType = fastReflection_PendingInboundEntry_messageType{} + +type fastReflection_PendingInboundEntry_messageType struct{} + +func (x fastReflection_PendingInboundEntry_messageType) Zero() protoreflect.Message { + return (*fastReflection_PendingInboundEntry)(nil) +} +func (x fastReflection_PendingInboundEntry_messageType) New() protoreflect.Message { + return new(fastReflection_PendingInboundEntry) +} +func (x fastReflection_PendingInboundEntry_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_PendingInboundEntry +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_PendingInboundEntry) Descriptor() protoreflect.MessageDescriptor { + return md_PendingInboundEntry +} + +// 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_PendingInboundEntry) Type() protoreflect.MessageType { + return _fastReflection_PendingInboundEntry_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_PendingInboundEntry) New() protoreflect.Message { + return new(fastReflection_PendingInboundEntry) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_PendingInboundEntry) Interface() protoreflect.ProtoMessage { + return (*PendingInboundEntry)(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_PendingInboundEntry) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.UtxKey != "" { + value := protoreflect.ValueOfString(x.UtxKey) + if !f(fd_PendingInboundEntry_utx_key, value) { + return + } + } + if len(x.Variants) != 0 { + value := protoreflect.ValueOfList(&_PendingInboundEntry_2_list{list: &x.Variants}) + if !f(fd_PendingInboundEntry_variants, value) { + return + } + } + if x.CreatedAtHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.CreatedAtHeight) + if !f(fd_PendingInboundEntry_created_at_height, 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_PendingInboundEntry) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.PendingInboundEntry.utx_key": + return x.UtxKey != "" + case "uexecutor.v1.PendingInboundEntry.variants": + return len(x.Variants) != 0 + case "uexecutor.v1.PendingInboundEntry.created_at_height": + return x.CreatedAtHeight != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.PendingInboundEntry 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_PendingInboundEntry) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.PendingInboundEntry.utx_key": + x.UtxKey = "" + case "uexecutor.v1.PendingInboundEntry.variants": + x.Variants = nil + case "uexecutor.v1.PendingInboundEntry.created_at_height": + x.CreatedAtHeight = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.PendingInboundEntry 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_PendingInboundEntry) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.PendingInboundEntry.utx_key": + value := x.UtxKey + return protoreflect.ValueOfString(value) + case "uexecutor.v1.PendingInboundEntry.variants": + if len(x.Variants) == 0 { + return protoreflect.ValueOfList(&_PendingInboundEntry_2_list{}) + } + listValue := &_PendingInboundEntry_2_list{list: &x.Variants} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.PendingInboundEntry.created_at_height": + value := x.CreatedAtHeight + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.PendingInboundEntry 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_PendingInboundEntry) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.PendingInboundEntry.utx_key": + x.UtxKey = value.Interface().(string) + case "uexecutor.v1.PendingInboundEntry.variants": + lv := value.List() + clv := lv.(*_PendingInboundEntry_2_list) + x.Variants = *clv.list + case "uexecutor.v1.PendingInboundEntry.created_at_height": + x.CreatedAtHeight = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.PendingInboundEntry 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_PendingInboundEntry) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.PendingInboundEntry.variants": + if x.Variants == nil { + x.Variants = []*InboundVariant{} + } + value := &_PendingInboundEntry_2_list{list: &x.Variants} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.PendingInboundEntry.utx_key": + panic(fmt.Errorf("field utx_key of message uexecutor.v1.PendingInboundEntry is not mutable")) + case "uexecutor.v1.PendingInboundEntry.created_at_height": + panic(fmt.Errorf("field created_at_height of message uexecutor.v1.PendingInboundEntry is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.PendingInboundEntry 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_PendingInboundEntry) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.PendingInboundEntry.utx_key": + return protoreflect.ValueOfString("") + case "uexecutor.v1.PendingInboundEntry.variants": + list := []*InboundVariant{} + return protoreflect.ValueOfList(&_PendingInboundEntry_2_list{list: &list}) + case "uexecutor.v1.PendingInboundEntry.created_at_height": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.PendingInboundEntry 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_PendingInboundEntry) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.PendingInboundEntry", 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_PendingInboundEntry) 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_PendingInboundEntry) 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_PendingInboundEntry) 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_PendingInboundEntry) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*PendingInboundEntry) + 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.UtxKey) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Variants) > 0 { + for _, e := range x.Variants { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.CreatedAtHeight != 0 { + n += 1 + runtime.Sov(uint64(x.CreatedAtHeight)) + } + 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().(*PendingInboundEntry) + 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.CreatedAtHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CreatedAtHeight)) + i-- + dAtA[i] = 0x18 + } + if len(x.Variants) > 0 { + for iNdEx := len(x.Variants) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Variants[iNdEx]) + 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] = 0x12 + } + } + if len(x.UtxKey) > 0 { + i -= len(x.UtxKey) + copy(dAtA[i:], x.UtxKey) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.UtxKey))) + 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().(*PendingInboundEntry) + 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: PendingInboundEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: PendingInboundEntry: 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 UtxKey", 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.UtxKey = 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 Variants", 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 + } + x.Variants = append(x.Variants, &InboundVariant{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Variants[len(x.Variants)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CreatedAtHeight", wireType) + } + x.CreatedAtHeight = 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.CreatedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 _ protoreflect.List = (*_ExpiredInboundEntry_2_list)(nil) + +type _ExpiredInboundEntry_2_list struct { + list *[]*InboundVariant +} + +func (x *_ExpiredInboundEntry_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ExpiredInboundEntry_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_ExpiredInboundEntry_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*InboundVariant) + (*x.list)[i] = concreteValue +} + +func (x *_ExpiredInboundEntry_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*InboundVariant) + *x.list = append(*x.list, concreteValue) +} + +func (x *_ExpiredInboundEntry_2_list) AppendMutable() protoreflect.Value { + v := new(InboundVariant) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_ExpiredInboundEntry_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_ExpiredInboundEntry_2_list) NewElement() protoreflect.Value { + v := new(InboundVariant) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_ExpiredInboundEntry_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_ExpiredInboundEntry protoreflect.MessageDescriptor + fd_ExpiredInboundEntry_utx_key protoreflect.FieldDescriptor + fd_ExpiredInboundEntry_variants protoreflect.FieldDescriptor + fd_ExpiredInboundEntry_expired_at_height protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_pending_proto_init() + md_ExpiredInboundEntry = File_uexecutor_v1_pending_proto.Messages().ByName("ExpiredInboundEntry") + fd_ExpiredInboundEntry_utx_key = md_ExpiredInboundEntry.Fields().ByName("utx_key") + fd_ExpiredInboundEntry_variants = md_ExpiredInboundEntry.Fields().ByName("variants") + fd_ExpiredInboundEntry_expired_at_height = md_ExpiredInboundEntry.Fields().ByName("expired_at_height") +} + +var _ protoreflect.Message = (*fastReflection_ExpiredInboundEntry)(nil) + +type fastReflection_ExpiredInboundEntry ExpiredInboundEntry + +func (x *ExpiredInboundEntry) ProtoReflect() protoreflect.Message { + return (*fastReflection_ExpiredInboundEntry)(x) +} + +func (x *ExpiredInboundEntry) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_pending_proto_msgTypes[2] + 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_ExpiredInboundEntry_messageType fastReflection_ExpiredInboundEntry_messageType +var _ protoreflect.MessageType = fastReflection_ExpiredInboundEntry_messageType{} + +type fastReflection_ExpiredInboundEntry_messageType struct{} + +func (x fastReflection_ExpiredInboundEntry_messageType) Zero() protoreflect.Message { + return (*fastReflection_ExpiredInboundEntry)(nil) +} +func (x fastReflection_ExpiredInboundEntry_messageType) New() protoreflect.Message { + return new(fastReflection_ExpiredInboundEntry) +} +func (x fastReflection_ExpiredInboundEntry_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ExpiredInboundEntry +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ExpiredInboundEntry) Descriptor() protoreflect.MessageDescriptor { + return md_ExpiredInboundEntry +} + +// 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_ExpiredInboundEntry) Type() protoreflect.MessageType { + return _fastReflection_ExpiredInboundEntry_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ExpiredInboundEntry) New() protoreflect.Message { + return new(fastReflection_ExpiredInboundEntry) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ExpiredInboundEntry) Interface() protoreflect.ProtoMessage { + return (*ExpiredInboundEntry)(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_ExpiredInboundEntry) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.UtxKey != "" { + value := protoreflect.ValueOfString(x.UtxKey) + if !f(fd_ExpiredInboundEntry_utx_key, value) { + return + } + } + if len(x.Variants) != 0 { + value := protoreflect.ValueOfList(&_ExpiredInboundEntry_2_list{list: &x.Variants}) + if !f(fd_ExpiredInboundEntry_variants, value) { + return + } + } + if x.ExpiredAtHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.ExpiredAtHeight) + if !f(fd_ExpiredInboundEntry_expired_at_height, 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_ExpiredInboundEntry) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.ExpiredInboundEntry.utx_key": + return x.UtxKey != "" + case "uexecutor.v1.ExpiredInboundEntry.variants": + return len(x.Variants) != 0 + case "uexecutor.v1.ExpiredInboundEntry.expired_at_height": + return x.ExpiredAtHeight != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ExpiredInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.ExpiredInboundEntry 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_ExpiredInboundEntry) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.ExpiredInboundEntry.utx_key": + x.UtxKey = "" + case "uexecutor.v1.ExpiredInboundEntry.variants": + x.Variants = nil + case "uexecutor.v1.ExpiredInboundEntry.expired_at_height": + x.ExpiredAtHeight = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ExpiredInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.ExpiredInboundEntry 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_ExpiredInboundEntry) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.ExpiredInboundEntry.utx_key": + value := x.UtxKey + return protoreflect.ValueOfString(value) + case "uexecutor.v1.ExpiredInboundEntry.variants": + if len(x.Variants) == 0 { + return protoreflect.ValueOfList(&_ExpiredInboundEntry_2_list{}) + } + listValue := &_ExpiredInboundEntry_2_list{list: &x.Variants} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.ExpiredInboundEntry.expired_at_height": + value := x.ExpiredAtHeight + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ExpiredInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.ExpiredInboundEntry 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_ExpiredInboundEntry) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.ExpiredInboundEntry.utx_key": + x.UtxKey = value.Interface().(string) + case "uexecutor.v1.ExpiredInboundEntry.variants": + lv := value.List() + clv := lv.(*_ExpiredInboundEntry_2_list) + x.Variants = *clv.list + case "uexecutor.v1.ExpiredInboundEntry.expired_at_height": + x.ExpiredAtHeight = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ExpiredInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.ExpiredInboundEntry 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_ExpiredInboundEntry) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.ExpiredInboundEntry.variants": + if x.Variants == nil { + x.Variants = []*InboundVariant{} + } + value := &_ExpiredInboundEntry_2_list{list: &x.Variants} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.ExpiredInboundEntry.utx_key": + panic(fmt.Errorf("field utx_key of message uexecutor.v1.ExpiredInboundEntry is not mutable")) + case "uexecutor.v1.ExpiredInboundEntry.expired_at_height": + panic(fmt.Errorf("field expired_at_height of message uexecutor.v1.ExpiredInboundEntry is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ExpiredInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.ExpiredInboundEntry 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_ExpiredInboundEntry) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.ExpiredInboundEntry.utx_key": + return protoreflect.ValueOfString("") + case "uexecutor.v1.ExpiredInboundEntry.variants": + list := []*InboundVariant{} + return protoreflect.ValueOfList(&_ExpiredInboundEntry_2_list{list: &list}) + case "uexecutor.v1.ExpiredInboundEntry.expired_at_height": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ExpiredInboundEntry")) + } + panic(fmt.Errorf("message uexecutor.v1.ExpiredInboundEntry 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_ExpiredInboundEntry) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.ExpiredInboundEntry", 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_ExpiredInboundEntry) 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_ExpiredInboundEntry) 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_ExpiredInboundEntry) 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_ExpiredInboundEntry) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ExpiredInboundEntry) + 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.UtxKey) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Variants) > 0 { + for _, e := range x.Variants { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.ExpiredAtHeight != 0 { + n += 1 + runtime.Sov(uint64(x.ExpiredAtHeight)) + } + 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().(*ExpiredInboundEntry) + 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.ExpiredAtHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ExpiredAtHeight)) + i-- + dAtA[i] = 0x18 + } + if len(x.Variants) > 0 { + for iNdEx := len(x.Variants) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Variants[iNdEx]) + 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] = 0x12 + } + } + if len(x.UtxKey) > 0 { + i -= len(x.UtxKey) + copy(dAtA[i:], x.UtxKey) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.UtxKey))) + 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().(*ExpiredInboundEntry) + 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: ExpiredInboundEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ExpiredInboundEntry: 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 UtxKey", 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.UtxKey = 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 Variants", 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 + } + x.Variants = append(x.Variants, &InboundVariant{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Variants[len(x.Variants)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ExpiredAtHeight", wireType) + } + x.ExpiredAtHeight = 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.ExpiredAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 _ protoreflect.List = (*_OutboundObservationVariant_3_list)(nil) + +type _OutboundObservationVariant_3_list struct { + list *[]string +} + +func (x *_OutboundObservationVariant_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_OutboundObservationVariant_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_OutboundObservationVariant_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_OutboundObservationVariant_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_OutboundObservationVariant_3_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message OutboundObservationVariant at list field Voters as it is not of Message kind")) +} + +func (x *_OutboundObservationVariant_3_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_OutboundObservationVariant_3_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_OutboundObservationVariant_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_OutboundObservationVariant protoreflect.MessageDescriptor + fd_OutboundObservationVariant_ballot_id protoreflect.FieldDescriptor + fd_OutboundObservationVariant_observed_tx protoreflect.FieldDescriptor + fd_OutboundObservationVariant_voters protoreflect.FieldDescriptor + fd_OutboundObservationVariant_first_voted_at_height protoreflect.FieldDescriptor + fd_OutboundObservationVariant_last_voted_at_height protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_pending_proto_init() + md_OutboundObservationVariant = File_uexecutor_v1_pending_proto.Messages().ByName("OutboundObservationVariant") + fd_OutboundObservationVariant_ballot_id = md_OutboundObservationVariant.Fields().ByName("ballot_id") + fd_OutboundObservationVariant_observed_tx = md_OutboundObservationVariant.Fields().ByName("observed_tx") + fd_OutboundObservationVariant_voters = md_OutboundObservationVariant.Fields().ByName("voters") + fd_OutboundObservationVariant_first_voted_at_height = md_OutboundObservationVariant.Fields().ByName("first_voted_at_height") + fd_OutboundObservationVariant_last_voted_at_height = md_OutboundObservationVariant.Fields().ByName("last_voted_at_height") +} + +var _ protoreflect.Message = (*fastReflection_OutboundObservationVariant)(nil) + +type fastReflection_OutboundObservationVariant OutboundObservationVariant + +func (x *OutboundObservationVariant) ProtoReflect() protoreflect.Message { + return (*fastReflection_OutboundObservationVariant)(x) +} + +func (x *OutboundObservationVariant) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_pending_proto_msgTypes[3] + 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_OutboundObservationVariant_messageType fastReflection_OutboundObservationVariant_messageType +var _ protoreflect.MessageType = fastReflection_OutboundObservationVariant_messageType{} + +type fastReflection_OutboundObservationVariant_messageType struct{} + +func (x fastReflection_OutboundObservationVariant_messageType) Zero() protoreflect.Message { + return (*fastReflection_OutboundObservationVariant)(nil) +} +func (x fastReflection_OutboundObservationVariant_messageType) New() protoreflect.Message { + return new(fastReflection_OutboundObservationVariant) +} +func (x fastReflection_OutboundObservationVariant_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_OutboundObservationVariant +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_OutboundObservationVariant) Descriptor() protoreflect.MessageDescriptor { + return md_OutboundObservationVariant +} + +// 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_OutboundObservationVariant) Type() protoreflect.MessageType { + return _fastReflection_OutboundObservationVariant_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_OutboundObservationVariant) New() protoreflect.Message { + return new(fastReflection_OutboundObservationVariant) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_OutboundObservationVariant) Interface() protoreflect.ProtoMessage { + return (*OutboundObservationVariant)(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_OutboundObservationVariant) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.BallotId != "" { + value := protoreflect.ValueOfString(x.BallotId) + if !f(fd_OutboundObservationVariant_ballot_id, value) { + return + } + } + if x.ObservedTx != nil { + value := protoreflect.ValueOfMessage(x.ObservedTx.ProtoReflect()) + if !f(fd_OutboundObservationVariant_observed_tx, value) { + return + } + } + if len(x.Voters) != 0 { + value := protoreflect.ValueOfList(&_OutboundObservationVariant_3_list{list: &x.Voters}) + if !f(fd_OutboundObservationVariant_voters, value) { + return + } + } + if x.FirstVotedAtHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.FirstVotedAtHeight) + if !f(fd_OutboundObservationVariant_first_voted_at_height, value) { + return + } + } + if x.LastVotedAtHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.LastVotedAtHeight) + if !f(fd_OutboundObservationVariant_last_voted_at_height, 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_OutboundObservationVariant) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.OutboundObservationVariant.ballot_id": + return x.BallotId != "" + case "uexecutor.v1.OutboundObservationVariant.observed_tx": + return x.ObservedTx != nil + case "uexecutor.v1.OutboundObservationVariant.voters": + return len(x.Voters) != 0 + case "uexecutor.v1.OutboundObservationVariant.first_voted_at_height": + return x.FirstVotedAtHeight != uint64(0) + case "uexecutor.v1.OutboundObservationVariant.last_voted_at_height": + return x.LastVotedAtHeight != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservationVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.OutboundObservationVariant 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_OutboundObservationVariant) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.OutboundObservationVariant.ballot_id": + x.BallotId = "" + case "uexecutor.v1.OutboundObservationVariant.observed_tx": + x.ObservedTx = nil + case "uexecutor.v1.OutboundObservationVariant.voters": + x.Voters = nil + case "uexecutor.v1.OutboundObservationVariant.first_voted_at_height": + x.FirstVotedAtHeight = uint64(0) + case "uexecutor.v1.OutboundObservationVariant.last_voted_at_height": + x.LastVotedAtHeight = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservationVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.OutboundObservationVariant 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_OutboundObservationVariant) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.OutboundObservationVariant.ballot_id": + value := x.BallotId + return protoreflect.ValueOfString(value) + case "uexecutor.v1.OutboundObservationVariant.observed_tx": + value := x.ObservedTx + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "uexecutor.v1.OutboundObservationVariant.voters": + if len(x.Voters) == 0 { + return protoreflect.ValueOfList(&_OutboundObservationVariant_3_list{}) + } + listValue := &_OutboundObservationVariant_3_list{list: &x.Voters} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.OutboundObservationVariant.first_voted_at_height": + value := x.FirstVotedAtHeight + return protoreflect.ValueOfUint64(value) + case "uexecutor.v1.OutboundObservationVariant.last_voted_at_height": + value := x.LastVotedAtHeight + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservationVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.OutboundObservationVariant 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_OutboundObservationVariant) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.OutboundObservationVariant.ballot_id": + x.BallotId = value.Interface().(string) + case "uexecutor.v1.OutboundObservationVariant.observed_tx": + x.ObservedTx = value.Message().Interface().(*OutboundObservation) + case "uexecutor.v1.OutboundObservationVariant.voters": + lv := value.List() + clv := lv.(*_OutboundObservationVariant_3_list) + x.Voters = *clv.list + case "uexecutor.v1.OutboundObservationVariant.first_voted_at_height": + x.FirstVotedAtHeight = value.Uint() + case "uexecutor.v1.OutboundObservationVariant.last_voted_at_height": + x.LastVotedAtHeight = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservationVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.OutboundObservationVariant 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_OutboundObservationVariant) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.OutboundObservationVariant.observed_tx": + if x.ObservedTx == nil { + x.ObservedTx = new(OutboundObservation) + } + return protoreflect.ValueOfMessage(x.ObservedTx.ProtoReflect()) + case "uexecutor.v1.OutboundObservationVariant.voters": + if x.Voters == nil { + x.Voters = []string{} + } + value := &_OutboundObservationVariant_3_list{list: &x.Voters} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.OutboundObservationVariant.ballot_id": + panic(fmt.Errorf("field ballot_id of message uexecutor.v1.OutboundObservationVariant is not mutable")) + case "uexecutor.v1.OutboundObservationVariant.first_voted_at_height": + panic(fmt.Errorf("field first_voted_at_height of message uexecutor.v1.OutboundObservationVariant is not mutable")) + case "uexecutor.v1.OutboundObservationVariant.last_voted_at_height": + panic(fmt.Errorf("field last_voted_at_height of message uexecutor.v1.OutboundObservationVariant is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservationVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.OutboundObservationVariant 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_OutboundObservationVariant) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.OutboundObservationVariant.ballot_id": + return protoreflect.ValueOfString("") + case "uexecutor.v1.OutboundObservationVariant.observed_tx": + m := new(OutboundObservation) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "uexecutor.v1.OutboundObservationVariant.voters": + list := []string{} + return protoreflect.ValueOfList(&_OutboundObservationVariant_3_list{list: &list}) + case "uexecutor.v1.OutboundObservationVariant.first_voted_at_height": + return protoreflect.ValueOfUint64(uint64(0)) + case "uexecutor.v1.OutboundObservationVariant.last_voted_at_height": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservationVariant")) + } + panic(fmt.Errorf("message uexecutor.v1.OutboundObservationVariant 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_OutboundObservationVariant) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.OutboundObservationVariant", 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_OutboundObservationVariant) 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_OutboundObservationVariant) 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_OutboundObservationVariant) 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_OutboundObservationVariant) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*OutboundObservationVariant) + 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.BallotId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ObservedTx != nil { + l = options.Size(x.ObservedTx) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Voters) > 0 { + for _, s := range x.Voters { + l = len(s) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.FirstVotedAtHeight != 0 { + n += 1 + runtime.Sov(uint64(x.FirstVotedAtHeight)) + } + if x.LastVotedAtHeight != 0 { + n += 1 + runtime.Sov(uint64(x.LastVotedAtHeight)) + } + 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().(*OutboundObservationVariant) + 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.LastVotedAtHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LastVotedAtHeight)) + i-- + dAtA[i] = 0x28 + } + if x.FirstVotedAtHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.FirstVotedAtHeight)) + i-- + dAtA[i] = 0x20 + } + if len(x.Voters) > 0 { + for iNdEx := len(x.Voters) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.Voters[iNdEx]) + copy(dAtA[i:], x.Voters[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Voters[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if x.ObservedTx != nil { + encoded, err := options.Marshal(x.ObservedTx) + 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] = 0x12 + } + if len(x.BallotId) > 0 { + i -= len(x.BallotId) + copy(dAtA[i:], x.BallotId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.BallotId))) + 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().(*OutboundObservationVariant) + 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: OutboundObservationVariant: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: OutboundObservationVariant: 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 BallotId", 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.BallotId = 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 ObservedTx", 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.ObservedTx == nil { + x.ObservedTx = &OutboundObservation{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ObservedTx); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Voters", 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.Voters = append(x.Voters, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field FirstVotedAtHeight", wireType) + } + x.FirstVotedAtHeight = 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.FirstVotedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LastVotedAtHeight", wireType) + } + x.LastVotedAtHeight = 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.LastVotedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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: uexecutor/v1/pending.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) +) + +// InboundVariant captures one Inbound payload variant submitted by one +// or more validators against a single logical inbound event (identified +// by the UTX key = sha256(source_chain:tx_hash:log_index)). Multiple +// variants may exist for the same UTX key when validators marshal +// slightly different bytes for the same logical event. +type InboundVariant struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ballot_id == hex(marshal(Inbound)) — the ballot key used by uvalidator. + BallotId string `protobuf:"bytes,1,opt,name=ballot_id,json=ballotId,proto3" json:"ballot_id,omitempty"` + // The full Inbound payload exactly as voted (the bytes that produced + // this ballot_id). + Inbound *Inbound `protobuf:"bytes,2,opt,name=inbound,proto3" json:"inbound,omitempty"` + // Validator addresses (bech32) that voted on this exact variant. + Voters []string `protobuf:"bytes,3,rep,name=voters,proto3" json:"voters,omitempty"` + // Block height of the first vote on this variant. + FirstVotedAtHeight uint64 `protobuf:"varint,4,opt,name=first_voted_at_height,json=firstVotedAtHeight,proto3" json:"first_voted_at_height,omitempty"` + // Block height of the most recent vote on this variant. + LastVotedAtHeight uint64 `protobuf:"varint,5,opt,name=last_voted_at_height,json=lastVotedAtHeight,proto3" json:"last_voted_at_height,omitempty"` + // Terminal status of this variant's ballot. PENDING while in-flight. + // Populated by the uvalidator BallotHooks terminal callback. + TerminalStatus v1.BallotStatus `protobuf:"varint,6,opt,name=terminal_status,json=terminalStatus,proto3,enum=uvalidator.v1.BallotStatus" json:"terminal_status,omitempty"` +} + +func (x *InboundVariant) Reset() { + *x = InboundVariant{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_pending_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InboundVariant) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InboundVariant) ProtoMessage() {} + +// Deprecated: Use InboundVariant.ProtoReflect.Descriptor instead. +func (*InboundVariant) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_pending_proto_rawDescGZIP(), []int{0} +} + +func (x *InboundVariant) GetBallotId() string { + if x != nil { + return x.BallotId + } + return "" +} + +func (x *InboundVariant) GetInbound() *Inbound { + if x != nil { + return x.Inbound + } + return nil +} + +func (x *InboundVariant) GetVoters() []string { + if x != nil { + return x.Voters + } + return nil +} + +func (x *InboundVariant) GetFirstVotedAtHeight() uint64 { + if x != nil { + return x.FirstVotedAtHeight + } + return 0 +} + +func (x *InboundVariant) GetLastVotedAtHeight() uint64 { + if x != nil { + return x.LastVotedAtHeight + } + return 0 +} + +func (x *InboundVariant) GetTerminalStatus() v1.BallotStatus { + if x != nil { + return x.TerminalStatus + } + return v1.BallotStatus(0) +} + +// PendingInboundEntry tracks all ballot variants for a single logical +// inbound event (identified by utx_key). Created by the first vote +// (RecordInboundVote). Removed only when ALL variants reach a terminal +// state. If any variant ended PASSED, the existing post-finalization +// path produces the UniversalTx. If ALL variants ended EXPIRED/REJECTED, +// the entry is moved to ExpiredInbounds. +type PendingInboundEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // sha256(source_chain:tx_hash:log_index) — same key used by + // GetInboundUniversalTxKey and the UniversalTx record (when it + // eventually exists). + UtxKey string `protobuf:"bytes,1,opt,name=utx_key,json=utxKey,proto3" json:"utx_key,omitempty"` + Variants []*InboundVariant `protobuf:"bytes,2,rep,name=variants,proto3" json:"variants,omitempty"` + // Block height when this entry was created (first vote on any variant). + CreatedAtHeight uint64 `protobuf:"varint,3,opt,name=created_at_height,json=createdAtHeight,proto3" json:"created_at_height,omitempty"` +} + +func (x *PendingInboundEntry) Reset() { + *x = PendingInboundEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_pending_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PendingInboundEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PendingInboundEntry) ProtoMessage() {} + +// Deprecated: Use PendingInboundEntry.ProtoReflect.Descriptor instead. +func (*PendingInboundEntry) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_pending_proto_rawDescGZIP(), []int{1} +} + +func (x *PendingInboundEntry) GetUtxKey() string { + if x != nil { + return x.UtxKey + } + return "" +} + +func (x *PendingInboundEntry) GetVariants() []*InboundVariant { + if x != nil { + return x.Variants + } + return nil +} + +func (x *PendingInboundEntry) GetCreatedAtHeight() uint64 { + if x != nil { + return x.CreatedAtHeight + } + return 0 +} + +// ExpiredInboundEntry preserves the full per-variant audit trail of an +// inbound that failed to reach quorum on any variant. Consumed by the +// future escape-hatch refund flow. +type ExpiredInboundEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UtxKey string `protobuf:"bytes,1,opt,name=utx_key,json=utxKey,proto3" json:"utx_key,omitempty"` + // Each variant carries its terminal_status (EXPIRED or REJECTED). + Variants []*InboundVariant `protobuf:"bytes,2,rep,name=variants,proto3" json:"variants,omitempty"` + // Block height when the entry was moved here (i.e. when the LAST + // variant's ballot reached a terminal state). + ExpiredAtHeight uint64 `protobuf:"varint,3,opt,name=expired_at_height,json=expiredAtHeight,proto3" json:"expired_at_height,omitempty"` +} + +func (x *ExpiredInboundEntry) Reset() { + *x = ExpiredInboundEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_pending_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExpiredInboundEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpiredInboundEntry) ProtoMessage() {} + +// Deprecated: Use ExpiredInboundEntry.ProtoReflect.Descriptor instead. +func (*ExpiredInboundEntry) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_pending_proto_rawDescGZIP(), []int{2} +} + +func (x *ExpiredInboundEntry) GetUtxKey() string { + if x != nil { + return x.UtxKey + } + return "" +} + +func (x *ExpiredInboundEntry) GetVariants() []*InboundVariant { + if x != nil { + return x.Variants + } + return nil +} + +func (x *ExpiredInboundEntry) GetExpiredAtHeight() uint64 { + if x != nil { + return x.ExpiredAtHeight + } + return 0 +} + +// OutboundObservationVariant captures one OutboundObservation variant +// submitted by one or more validators against a single outbound (the +// outbound itself is deterministic — chain-side at outbound creation — +// so all variants share the same outbound_id). Multiple variants exist +// when validators see different destination-chain results (different +// success/tx_hash/error_msg/gas_fee_used). +// +// NOTE: Unlike inbound variants, outbound variants do not carry a +// terminal_status field. Outbound PendingOutbounds entries persist +// until validators reach consensus (existing inline removal in +// msg_vote_outbound.go on PASSED). Operators investigate stuck +// outbounds by correlating each variant's ballot_id with the +// uvalidator ballot status separately. +type OutboundObservationVariant struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ballot_id == sha256(utxId:outboundId:marshal(observedTx)). + BallotId string `protobuf:"bytes,1,opt,name=ballot_id,json=ballotId,proto3" json:"ballot_id,omitempty"` + // The exact OutboundObservation that produced this ballot_id. + ObservedTx *OutboundObservation `protobuf:"bytes,2,opt,name=observed_tx,json=observedTx,proto3" json:"observed_tx,omitempty"` + // Validator addresses (bech32) that voted on this exact variant. + Voters []string `protobuf:"bytes,3,rep,name=voters,proto3" json:"voters,omitempty"` + // Block height of the first vote on this variant. + FirstVotedAtHeight uint64 `protobuf:"varint,4,opt,name=first_voted_at_height,json=firstVotedAtHeight,proto3" json:"first_voted_at_height,omitempty"` + // Block height of the most recent vote on this variant. + LastVotedAtHeight uint64 `protobuf:"varint,5,opt,name=last_voted_at_height,json=lastVotedAtHeight,proto3" json:"last_voted_at_height,omitempty"` +} + +func (x *OutboundObservationVariant) Reset() { + *x = OutboundObservationVariant{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_pending_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OutboundObservationVariant) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OutboundObservationVariant) ProtoMessage() {} + +// Deprecated: Use OutboundObservationVariant.ProtoReflect.Descriptor instead. +func (*OutboundObservationVariant) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_pending_proto_rawDescGZIP(), []int{3} +} + +func (x *OutboundObservationVariant) GetBallotId() string { + if x != nil { + return x.BallotId + } + return "" +} + +func (x *OutboundObservationVariant) GetObservedTx() *OutboundObservation { + if x != nil { + return x.ObservedTx + } + return nil +} + +func (x *OutboundObservationVariant) GetVoters() []string { + if x != nil { + return x.Voters + } + return nil +} + +func (x *OutboundObservationVariant) GetFirstVotedAtHeight() uint64 { + if x != nil { + return x.FirstVotedAtHeight + } + return 0 +} + +func (x *OutboundObservationVariant) GetLastVotedAtHeight() uint64 { + if x != nil { + return x.LastVotedAtHeight + } + return 0 +} + +var File_uexecutor_v1_pending_proto protoreflect.FileDescriptor + +var file_uexecutor_v1_pending_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x75, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x18, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x75, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x6c, + 0x6c, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, + 0x6c, 0x6c, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x07, + 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x31, 0x0a, 0x15, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x56, 0x6f, 0x74, 0x65, 0x64, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x56, 0x6f, 0x74, 0x65, 0x64, 0x41, 0x74, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x12, 0x44, 0x0a, 0x0f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x75, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x6c, + 0x6c, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, + 0xa0, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x74, 0x78, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x74, 0x78, 0x4b, 0x65, 0x79, + 0x12, 0x3e, 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, + 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x04, 0xe8, 0xa0, + 0x1f, 0x01, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x74, + 0x78, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x74, 0x78, + 0x4b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, + 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0x85, 0x02, 0x0a, 0x1a, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x74, 0x49, + 0x64, 0x12, 0x48, 0x0a, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x74, 0x78, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, + 0x0a, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x76, + 0x6f, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x6f, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x76, 0x6f, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x12, 0x66, 0x69, 0x72, 0x73, 0x74, 0x56, 0x6f, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, + 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x56, 0x6f, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x42, 0xb4, 0x01, + 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x42, 0x0c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x75, 0x73, 0x68, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2d, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x55, 0x58, 0x58, 0xaa, 0x02, 0x0c, 0x55, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x55, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x55, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_uexecutor_v1_pending_proto_rawDescOnce sync.Once + file_uexecutor_v1_pending_proto_rawDescData = file_uexecutor_v1_pending_proto_rawDesc +) + +func file_uexecutor_v1_pending_proto_rawDescGZIP() []byte { + file_uexecutor_v1_pending_proto_rawDescOnce.Do(func() { + file_uexecutor_v1_pending_proto_rawDescData = protoimpl.X.CompressGZIP(file_uexecutor_v1_pending_proto_rawDescData) + }) + return file_uexecutor_v1_pending_proto_rawDescData +} + +var file_uexecutor_v1_pending_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_uexecutor_v1_pending_proto_goTypes = []interface{}{ + (*InboundVariant)(nil), // 0: uexecutor.v1.InboundVariant + (*PendingInboundEntry)(nil), // 1: uexecutor.v1.PendingInboundEntry + (*ExpiredInboundEntry)(nil), // 2: uexecutor.v1.ExpiredInboundEntry + (*OutboundObservationVariant)(nil), // 3: uexecutor.v1.OutboundObservationVariant + (*Inbound)(nil), // 4: uexecutor.v1.Inbound + (v1.BallotStatus)(0), // 5: uvalidator.v1.BallotStatus + (*OutboundObservation)(nil), // 6: uexecutor.v1.OutboundObservation +} +var file_uexecutor_v1_pending_proto_depIdxs = []int32{ + 4, // 0: uexecutor.v1.InboundVariant.inbound:type_name -> uexecutor.v1.Inbound + 5, // 1: uexecutor.v1.InboundVariant.terminal_status:type_name -> uvalidator.v1.BallotStatus + 0, // 2: uexecutor.v1.PendingInboundEntry.variants:type_name -> uexecutor.v1.InboundVariant + 0, // 3: uexecutor.v1.ExpiredInboundEntry.variants:type_name -> uexecutor.v1.InboundVariant + 6, // 4: uexecutor.v1.OutboundObservationVariant.observed_tx:type_name -> uexecutor.v1.OutboundObservation + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_uexecutor_v1_pending_proto_init() } +func file_uexecutor_v1_pending_proto_init() { + if File_uexecutor_v1_pending_proto != nil { + return + } + file_uexecutor_v1_types_proto_init() + if !protoimpl.UnsafeEnabled { + file_uexecutor_v1_pending_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InboundVariant); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_uexecutor_v1_pending_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PendingInboundEntry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_uexecutor_v1_pending_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExpiredInboundEntry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_uexecutor_v1_pending_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OutboundObservationVariant); 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{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_uexecutor_v1_pending_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_uexecutor_v1_pending_proto_goTypes, + DependencyIndexes: file_uexecutor_v1_pending_proto_depIdxs, + MessageInfos: file_uexecutor_v1_pending_proto_msgTypes, + }.Build() + File_uexecutor_v1_pending_proto = out.File + file_uexecutor_v1_pending_proto_rawDesc = nil + file_uexecutor_v1_pending_proto_goTypes = nil + file_uexecutor_v1_pending_proto_depIdxs = nil +} diff --git a/api/uexecutor/v1/query.pulsar.go b/api/uexecutor/v1/query.pulsar.go index c1dd3ea3..d892073c 100644 --- a/api/uexecutor/v1/query.pulsar.go +++ b/api/uexecutor/v1/query.pulsar.go @@ -5,6 +5,7 @@ import ( v1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1" fmt "fmt" runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoiface "google.golang.org/protobuf/runtime/protoiface" @@ -4969,7 +4970,7 @@ func (x *fastReflection_QueryAllPendingInboundsRequest) ProtoMethods() *protoifa var _ protoreflect.List = (*_QueryAllPendingInboundsResponse_1_list)(nil) type _QueryAllPendingInboundsResponse_1_list struct { - list *[]string + list *[]*PendingInboundEntry } func (x *_QueryAllPendingInboundsResponse_1_list) Len() int { @@ -4980,32 +4981,37 @@ func (x *_QueryAllPendingInboundsResponse_1_list) Len() int { } func (x *_QueryAllPendingInboundsResponse_1_list) Get(i int) protoreflect.Value { - return protoreflect.ValueOfString((*x.list)[i]) + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) } func (x *_QueryAllPendingInboundsResponse_1_list) Set(i int, value protoreflect.Value) { - valueUnwrapped := value.String() - concreteValue := valueUnwrapped + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*PendingInboundEntry) (*x.list)[i] = concreteValue } func (x *_QueryAllPendingInboundsResponse_1_list) Append(value protoreflect.Value) { - valueUnwrapped := value.String() - concreteValue := valueUnwrapped + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*PendingInboundEntry) *x.list = append(*x.list, concreteValue) } func (x *_QueryAllPendingInboundsResponse_1_list) AppendMutable() protoreflect.Value { - panic(fmt.Errorf("AppendMutable can not be called on message QueryAllPendingInboundsResponse at list field InboundIds as it is not of Message kind")) + v := new(PendingInboundEntry) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) } func (x *_QueryAllPendingInboundsResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } *x.list = (*x.list)[:n] } func (x *_QueryAllPendingInboundsResponse_1_list) NewElement() protoreflect.Value { - v := "" - return protoreflect.ValueOfString(v) + v := new(PendingInboundEntry) + return protoreflect.ValueOfMessage(v.ProtoReflect()) } func (x *_QueryAllPendingInboundsResponse_1_list) IsValid() bool { @@ -5013,15 +5019,15 @@ func (x *_QueryAllPendingInboundsResponse_1_list) IsValid() bool { } var ( - md_QueryAllPendingInboundsResponse protoreflect.MessageDescriptor - fd_QueryAllPendingInboundsResponse_inbound_ids protoreflect.FieldDescriptor - fd_QueryAllPendingInboundsResponse_pagination protoreflect.FieldDescriptor + md_QueryAllPendingInboundsResponse protoreflect.MessageDescriptor + fd_QueryAllPendingInboundsResponse_entries protoreflect.FieldDescriptor + fd_QueryAllPendingInboundsResponse_pagination protoreflect.FieldDescriptor ) func init() { file_uexecutor_v1_query_proto_init() md_QueryAllPendingInboundsResponse = File_uexecutor_v1_query_proto.Messages().ByName("QueryAllPendingInboundsResponse") - fd_QueryAllPendingInboundsResponse_inbound_ids = md_QueryAllPendingInboundsResponse.Fields().ByName("inbound_ids") + fd_QueryAllPendingInboundsResponse_entries = md_QueryAllPendingInboundsResponse.Fields().ByName("entries") fd_QueryAllPendingInboundsResponse_pagination = md_QueryAllPendingInboundsResponse.Fields().ByName("pagination") } @@ -5090,9 +5096,9 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) Interface() protoreflec // While iterating, mutating operations may only be performed // on the current field descriptor. func (x *fastReflection_QueryAllPendingInboundsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if len(x.InboundIds) != 0 { - value := protoreflect.ValueOfList(&_QueryAllPendingInboundsResponse_1_list{list: &x.InboundIds}) - if !f(fd_QueryAllPendingInboundsResponse_inbound_ids, value) { + if len(x.Entries) != 0 { + value := protoreflect.ValueOfList(&_QueryAllPendingInboundsResponse_1_list{list: &x.Entries}) + if !f(fd_QueryAllPendingInboundsResponse_entries, value) { return } } @@ -5117,8 +5123,8 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) Range(f func(protorefle // a repeated field is populated if it is non-empty. func (x *fastReflection_QueryAllPendingInboundsResponse) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "uexecutor.v1.QueryAllPendingInboundsResponse.inbound_ids": - return len(x.InboundIds) != 0 + case "uexecutor.v1.QueryAllPendingInboundsResponse.entries": + return len(x.Entries) != 0 case "uexecutor.v1.QueryAllPendingInboundsResponse.pagination": return x.Pagination != nil default: @@ -5137,8 +5143,8 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) Has(fd protoreflect.Fie // Clear is a mutating operation and unsafe for concurrent use. func (x *fastReflection_QueryAllPendingInboundsResponse) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "uexecutor.v1.QueryAllPendingInboundsResponse.inbound_ids": - x.InboundIds = nil + case "uexecutor.v1.QueryAllPendingInboundsResponse.entries": + x.Entries = nil case "uexecutor.v1.QueryAllPendingInboundsResponse.pagination": x.Pagination = nil default: @@ -5157,11 +5163,11 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) Clear(fd protoreflect.F // of the value; to obtain a mutable reference, use Mutable. func (x *fastReflection_QueryAllPendingInboundsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "uexecutor.v1.QueryAllPendingInboundsResponse.inbound_ids": - if len(x.InboundIds) == 0 { + case "uexecutor.v1.QueryAllPendingInboundsResponse.entries": + if len(x.Entries) == 0 { return protoreflect.ValueOfList(&_QueryAllPendingInboundsResponse_1_list{}) } - listValue := &_QueryAllPendingInboundsResponse_1_list{list: &x.InboundIds} + listValue := &_QueryAllPendingInboundsResponse_1_list{list: &x.Entries} return protoreflect.ValueOfList(listValue) case "uexecutor.v1.QueryAllPendingInboundsResponse.pagination": value := x.Pagination @@ -5186,10 +5192,10 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) Get(descriptor protoref // Set is a mutating operation and unsafe for concurrent use. func (x *fastReflection_QueryAllPendingInboundsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "uexecutor.v1.QueryAllPendingInboundsResponse.inbound_ids": + case "uexecutor.v1.QueryAllPendingInboundsResponse.entries": lv := value.List() clv := lv.(*_QueryAllPendingInboundsResponse_1_list) - x.InboundIds = *clv.list + x.Entries = *clv.list case "uexecutor.v1.QueryAllPendingInboundsResponse.pagination": x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) default: @@ -5212,11 +5218,11 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) Set(fd protoreflect.Fie // Mutable is a mutating operation and unsafe for concurrent use. func (x *fastReflection_QueryAllPendingInboundsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "uexecutor.v1.QueryAllPendingInboundsResponse.inbound_ids": - if x.InboundIds == nil { - x.InboundIds = []string{} + case "uexecutor.v1.QueryAllPendingInboundsResponse.entries": + if x.Entries == nil { + x.Entries = []*PendingInboundEntry{} } - value := &_QueryAllPendingInboundsResponse_1_list{list: &x.InboundIds} + value := &_QueryAllPendingInboundsResponse_1_list{list: &x.Entries} return protoreflect.ValueOfList(value) case "uexecutor.v1.QueryAllPendingInboundsResponse.pagination": if x.Pagination == nil { @@ -5236,8 +5242,8 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) Mutable(fd protoreflect // For lists, maps, and messages, this returns a new, empty, mutable value. func (x *fastReflection_QueryAllPendingInboundsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "uexecutor.v1.QueryAllPendingInboundsResponse.inbound_ids": - list := []string{} + case "uexecutor.v1.QueryAllPendingInboundsResponse.entries": + list := []*PendingInboundEntry{} return protoreflect.ValueOfList(&_QueryAllPendingInboundsResponse_1_list{list: &list}) case "uexecutor.v1.QueryAllPendingInboundsResponse.pagination": m := new(v1beta1.PageResponse) @@ -5311,9 +5317,9 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) ProtoMethods() *protoif var n int var l int _ = l - if len(x.InboundIds) > 0 { - for _, s := range x.InboundIds { - l = len(s) + if len(x.Entries) > 0 { + for _, e := range x.Entries { + l = options.Size(e) n += 1 + l + runtime.Sov(uint64(l)) } } @@ -5364,11 +5370,18 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) ProtoMethods() *protoif i-- dAtA[i] = 0x12 } - if len(x.InboundIds) > 0 { - for iNdEx := len(x.InboundIds) - 1; iNdEx >= 0; iNdEx-- { - i -= len(x.InboundIds[iNdEx]) - copy(dAtA[i:], x.InboundIds[iNdEx]) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.InboundIds[iNdEx]))) + if len(x.Entries) > 0 { + for iNdEx := len(x.Entries) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Entries[iNdEx]) + 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 } @@ -5424,9 +5437,9 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) ProtoMethods() *protoif switch fieldNum { case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field InboundIds", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Entries", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -5436,23 +5449,1033 @@ func (x *fastReflection_QueryAllPendingInboundsResponse) ProtoMethods() *protoif } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return 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 + } + x.Entries = append(x.Entries, &PendingInboundEntry{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Entries[len(x.Entries)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", 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.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); 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_QueryAllExpiredInboundsRequest protoreflect.MessageDescriptor + fd_QueryAllExpiredInboundsRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_query_proto_init() + md_QueryAllExpiredInboundsRequest = File_uexecutor_v1_query_proto.Messages().ByName("QueryAllExpiredInboundsRequest") + fd_QueryAllExpiredInboundsRequest_pagination = md_QueryAllExpiredInboundsRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllExpiredInboundsRequest)(nil) + +type fastReflection_QueryAllExpiredInboundsRequest QueryAllExpiredInboundsRequest + +func (x *QueryAllExpiredInboundsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllExpiredInboundsRequest)(x) +} + +func (x *QueryAllExpiredInboundsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_query_proto_msgTypes[12] + 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_QueryAllExpiredInboundsRequest_messageType fastReflection_QueryAllExpiredInboundsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllExpiredInboundsRequest_messageType{} + +type fastReflection_QueryAllExpiredInboundsRequest_messageType struct{} + +func (x fastReflection_QueryAllExpiredInboundsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllExpiredInboundsRequest)(nil) +} +func (x fastReflection_QueryAllExpiredInboundsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllExpiredInboundsRequest) +} +func (x fastReflection_QueryAllExpiredInboundsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllExpiredInboundsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllExpiredInboundsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllExpiredInboundsRequest +} + +// 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_QueryAllExpiredInboundsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllExpiredInboundsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllExpiredInboundsRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllExpiredInboundsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllExpiredInboundsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllExpiredInboundsRequest)(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_QueryAllExpiredInboundsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllExpiredInboundsRequest_pagination, 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_QueryAllExpiredInboundsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsRequest 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_QueryAllExpiredInboundsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsRequest 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_QueryAllExpiredInboundsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsRequest 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_QueryAllExpiredInboundsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsRequest 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_QueryAllExpiredInboundsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsRequest 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_QueryAllExpiredInboundsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsRequest 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_QueryAllExpiredInboundsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.QueryAllExpiredInboundsRequest", 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_QueryAllExpiredInboundsRequest) 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_QueryAllExpiredInboundsRequest) 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_QueryAllExpiredInboundsRequest) 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_QueryAllExpiredInboundsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllExpiredInboundsRequest) + 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.Pagination != nil { + l = options.Size(x.Pagination) + 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().(*QueryAllExpiredInboundsRequest) + 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.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + 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().(*QueryAllExpiredInboundsRequest) + 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: QueryAllExpiredInboundsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllExpiredInboundsRequest: 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 Pagination", 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.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); 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 _ protoreflect.List = (*_QueryAllExpiredInboundsResponse_1_list)(nil) + +type _QueryAllExpiredInboundsResponse_1_list struct { + list *[]*ExpiredInboundEntry +} + +func (x *_QueryAllExpiredInboundsResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllExpiredInboundsResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllExpiredInboundsResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ExpiredInboundEntry) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllExpiredInboundsResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ExpiredInboundEntry) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllExpiredInboundsResponse_1_list) AppendMutable() protoreflect.Value { + v := new(ExpiredInboundEntry) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllExpiredInboundsResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllExpiredInboundsResponse_1_list) NewElement() protoreflect.Value { + v := new(ExpiredInboundEntry) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllExpiredInboundsResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllExpiredInboundsResponse protoreflect.MessageDescriptor + fd_QueryAllExpiredInboundsResponse_entries protoreflect.FieldDescriptor + fd_QueryAllExpiredInboundsResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_query_proto_init() + md_QueryAllExpiredInboundsResponse = File_uexecutor_v1_query_proto.Messages().ByName("QueryAllExpiredInboundsResponse") + fd_QueryAllExpiredInboundsResponse_entries = md_QueryAllExpiredInboundsResponse.Fields().ByName("entries") + fd_QueryAllExpiredInboundsResponse_pagination = md_QueryAllExpiredInboundsResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllExpiredInboundsResponse)(nil) + +type fastReflection_QueryAllExpiredInboundsResponse QueryAllExpiredInboundsResponse + +func (x *QueryAllExpiredInboundsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllExpiredInboundsResponse)(x) +} + +func (x *QueryAllExpiredInboundsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_query_proto_msgTypes[13] + 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_QueryAllExpiredInboundsResponse_messageType fastReflection_QueryAllExpiredInboundsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllExpiredInboundsResponse_messageType{} + +type fastReflection_QueryAllExpiredInboundsResponse_messageType struct{} + +func (x fastReflection_QueryAllExpiredInboundsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllExpiredInboundsResponse)(nil) +} +func (x fastReflection_QueryAllExpiredInboundsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllExpiredInboundsResponse) +} +func (x fastReflection_QueryAllExpiredInboundsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllExpiredInboundsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllExpiredInboundsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllExpiredInboundsResponse +} + +// 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_QueryAllExpiredInboundsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllExpiredInboundsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllExpiredInboundsResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllExpiredInboundsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllExpiredInboundsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllExpiredInboundsResponse)(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_QueryAllExpiredInboundsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Entries) != 0 { + value := protoreflect.ValueOfList(&_QueryAllExpiredInboundsResponse_1_list{list: &x.Entries}) + if !f(fd_QueryAllExpiredInboundsResponse_entries, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllExpiredInboundsResponse_pagination, 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_QueryAllExpiredInboundsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsResponse.entries": + return len(x.Entries) != 0 + case "uexecutor.v1.QueryAllExpiredInboundsResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsResponse 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_QueryAllExpiredInboundsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsResponse.entries": + x.Entries = nil + case "uexecutor.v1.QueryAllExpiredInboundsResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsResponse 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_QueryAllExpiredInboundsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsResponse.entries": + if len(x.Entries) == 0 { + return protoreflect.ValueOfList(&_QueryAllExpiredInboundsResponse_1_list{}) + } + listValue := &_QueryAllExpiredInboundsResponse_1_list{list: &x.Entries} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.QueryAllExpiredInboundsResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsResponse 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_QueryAllExpiredInboundsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsResponse.entries": + lv := value.List() + clv := lv.(*_QueryAllExpiredInboundsResponse_1_list) + x.Entries = *clv.list + case "uexecutor.v1.QueryAllExpiredInboundsResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsResponse 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_QueryAllExpiredInboundsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsResponse.entries": + if x.Entries == nil { + x.Entries = []*ExpiredInboundEntry{} + } + value := &_QueryAllExpiredInboundsResponse_1_list{list: &x.Entries} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.QueryAllExpiredInboundsResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsResponse 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_QueryAllExpiredInboundsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryAllExpiredInboundsResponse.entries": + list := []*ExpiredInboundEntry{} + return protoreflect.ValueOfList(&_QueryAllExpiredInboundsResponse_1_list{list: &list}) + case "uexecutor.v1.QueryAllExpiredInboundsResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllExpiredInboundsResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllExpiredInboundsResponse 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_QueryAllExpiredInboundsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.QueryAllExpiredInboundsResponse", 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_QueryAllExpiredInboundsResponse) 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_QueryAllExpiredInboundsResponse) 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_QueryAllExpiredInboundsResponse) 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_QueryAllExpiredInboundsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllExpiredInboundsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Entries) > 0 { + for _, e := range x.Entries { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + 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().(*QueryAllExpiredInboundsResponse) + 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.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + 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] = 0x12 + } + if len(x.Entries) > 0 { + for iNdEx := len(x.Entries) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Entries[iNdEx]) + 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().(*QueryAllExpiredInboundsResponse) + 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: QueryAllExpiredInboundsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllExpiredInboundsResponse: 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 Entries", 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 + intStringLen + 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 } - x.InboundIds = append(x.InboundIds, string(dAtA[iNdEx:postIndex])) + x.Entries = append(x.Entries, &ExpiredInboundEntry{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Entries[len(x.Entries)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex case 2: if wireType != 2 { @@ -5545,7 +6568,7 @@ func (x *QueryGetUniversalTxRequest) ProtoReflect() protoreflect.Message { } func (x *QueryGetUniversalTxRequest) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[12] + mi := &file_uexecutor_v1_query_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5965,7 +6988,7 @@ func (x *QueryGetUniversalTxResponse) ProtoReflect() protoreflect.Message { } func (x *QueryGetUniversalTxResponse) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[13] + mi := &file_uexecutor_v1_query_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6400,7 +7423,7 @@ func (x *QueryAllUniversalTxRequest) ProtoReflect() protoreflect.Message { } func (x *QueryAllUniversalTxRequest) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[14] + mi := &file_uexecutor_v1_query_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6888,7 +7911,7 @@ func (x *QueryAllUniversalTxResponse) ProtoReflect() protoreflect.Message { } func (x *QueryAllUniversalTxResponse) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[15] + mi := &file_uexecutor_v1_query_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7388,11 +8411,63 @@ func (x *fastReflection_QueryAllUniversalTxResponse) ProtoMethods() *protoiface. } } +var _ protoreflect.List = (*_PendingOutboundEntry_4_list)(nil) + +type _PendingOutboundEntry_4_list struct { + list *[]*OutboundObservationVariant +} + +func (x *_PendingOutboundEntry_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_PendingOutboundEntry_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_PendingOutboundEntry_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*OutboundObservationVariant) + (*x.list)[i] = concreteValue +} + +func (x *_PendingOutboundEntry_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*OutboundObservationVariant) + *x.list = append(*x.list, concreteValue) +} + +func (x *_PendingOutboundEntry_4_list) AppendMutable() protoreflect.Value { + v := new(OutboundObservationVariant) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_PendingOutboundEntry_4_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_PendingOutboundEntry_4_list) NewElement() protoreflect.Value { + v := new(OutboundObservationVariant) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_PendingOutboundEntry_4_list) IsValid() bool { + return x.list != nil +} + var ( md_PendingOutboundEntry protoreflect.MessageDescriptor fd_PendingOutboundEntry_outbound_id protoreflect.FieldDescriptor fd_PendingOutboundEntry_universal_tx_id protoreflect.FieldDescriptor fd_PendingOutboundEntry_created_at protoreflect.FieldDescriptor + fd_PendingOutboundEntry_variants protoreflect.FieldDescriptor ) func init() { @@ -7401,6 +8476,7 @@ func init() { fd_PendingOutboundEntry_outbound_id = md_PendingOutboundEntry.Fields().ByName("outbound_id") fd_PendingOutboundEntry_universal_tx_id = md_PendingOutboundEntry.Fields().ByName("universal_tx_id") fd_PendingOutboundEntry_created_at = md_PendingOutboundEntry.Fields().ByName("created_at") + fd_PendingOutboundEntry_variants = md_PendingOutboundEntry.Fields().ByName("variants") } var _ protoreflect.Message = (*fastReflection_PendingOutboundEntry)(nil) @@ -7412,7 +8488,7 @@ func (x *PendingOutboundEntry) ProtoReflect() protoreflect.Message { } func (x *PendingOutboundEntry) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[16] + mi := &file_uexecutor_v1_query_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7486,6 +8562,12 @@ func (x *fastReflection_PendingOutboundEntry) Range(f func(protoreflect.FieldDes return } } + if len(x.Variants) != 0 { + value := protoreflect.ValueOfList(&_PendingOutboundEntry_4_list{list: &x.Variants}) + if !f(fd_PendingOutboundEntry_variants, value) { + return + } + } } // Has reports whether a field is populated. @@ -7507,6 +8589,8 @@ func (x *fastReflection_PendingOutboundEntry) Has(fd protoreflect.FieldDescripto return x.UniversalTxId != "" case "uexecutor.v1.PendingOutboundEntry.created_at": return x.CreatedAt != int64(0) + case "uexecutor.v1.PendingOutboundEntry.variants": + return len(x.Variants) != 0 default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingOutboundEntry")) @@ -7529,6 +8613,8 @@ func (x *fastReflection_PendingOutboundEntry) Clear(fd protoreflect.FieldDescrip x.UniversalTxId = "" case "uexecutor.v1.PendingOutboundEntry.created_at": x.CreatedAt = int64(0) + case "uexecutor.v1.PendingOutboundEntry.variants": + x.Variants = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingOutboundEntry")) @@ -7554,6 +8640,12 @@ func (x *fastReflection_PendingOutboundEntry) Get(descriptor protoreflect.FieldD case "uexecutor.v1.PendingOutboundEntry.created_at": value := x.CreatedAt return protoreflect.ValueOfInt64(value) + case "uexecutor.v1.PendingOutboundEntry.variants": + if len(x.Variants) == 0 { + return protoreflect.ValueOfList(&_PendingOutboundEntry_4_list{}) + } + listValue := &_PendingOutboundEntry_4_list{list: &x.Variants} + return protoreflect.ValueOfList(listValue) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingOutboundEntry")) @@ -7580,6 +8672,10 @@ func (x *fastReflection_PendingOutboundEntry) Set(fd protoreflect.FieldDescripto x.UniversalTxId = value.Interface().(string) case "uexecutor.v1.PendingOutboundEntry.created_at": x.CreatedAt = value.Int() + case "uexecutor.v1.PendingOutboundEntry.variants": + lv := value.List() + clv := lv.(*_PendingOutboundEntry_4_list) + x.Variants = *clv.list default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingOutboundEntry")) @@ -7600,6 +8696,12 @@ func (x *fastReflection_PendingOutboundEntry) Set(fd protoreflect.FieldDescripto // Mutable is a mutating operation and unsafe for concurrent use. func (x *fastReflection_PendingOutboundEntry) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { + case "uexecutor.v1.PendingOutboundEntry.variants": + if x.Variants == nil { + x.Variants = []*OutboundObservationVariant{} + } + value := &_PendingOutboundEntry_4_list{list: &x.Variants} + return protoreflect.ValueOfList(value) case "uexecutor.v1.PendingOutboundEntry.outbound_id": panic(fmt.Errorf("field outbound_id of message uexecutor.v1.PendingOutboundEntry is not mutable")) case "uexecutor.v1.PendingOutboundEntry.universal_tx_id": @@ -7625,6 +8727,9 @@ func (x *fastReflection_PendingOutboundEntry) NewField(fd protoreflect.FieldDesc return protoreflect.ValueOfString("") case "uexecutor.v1.PendingOutboundEntry.created_at": return protoreflect.ValueOfInt64(int64(0)) + case "uexecutor.v1.PendingOutboundEntry.variants": + list := []*OutboundObservationVariant{} + return protoreflect.ValueOfList(&_PendingOutboundEntry_4_list{list: &list}) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.PendingOutboundEntry")) @@ -7705,6 +8810,12 @@ func (x *fastReflection_PendingOutboundEntry) ProtoMethods() *protoiface.Methods if x.CreatedAt != 0 { n += 1 + runtime.Sov(uint64(x.CreatedAt)) } + if len(x.Variants) > 0 { + for _, e := range x.Variants { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -7734,6 +8845,22 @@ func (x *fastReflection_PendingOutboundEntry) ProtoMethods() *protoiface.Methods i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.Variants) > 0 { + for iNdEx := len(x.Variants) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Variants[iNdEx]) + 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] = 0x22 + } + } if x.CreatedAt != 0 { i = runtime.EncodeVarint(dAtA, i, uint64(x.CreatedAt)) i-- @@ -7885,6 +9012,40 @@ func (x *fastReflection_PendingOutboundEntry) ProtoMethods() *protoiface.Methods break } } + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Variants", 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 + } + x.Variants = append(x.Variants, &OutboundObservationVariant{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Variants[len(x.Variants)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -7940,7 +9101,7 @@ func (x *QueryGetPendingOutboundRequest) ProtoReflect() protoreflect.Message { } func (x *QueryGetPendingOutboundRequest) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[17] + mi := &file_uexecutor_v1_query_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8362,7 +9523,7 @@ func (x *QueryGetPendingOutboundResponse) ProtoReflect() protoreflect.Message { } func (x *QueryGetPendingOutboundResponse) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[18] + mi := &file_uexecutor_v1_query_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8874,7 +10035,7 @@ func (x *QueryAllPendingOutboundsRequest) ProtoReflect() protoreflect.Message { } func (x *QueryAllPendingOutboundsRequest) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[19] + mi := &file_uexecutor_v1_query_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9415,7 +10576,7 @@ func (x *QueryAllPendingOutboundsResponse) ProtoReflect() protoreflect.Message { } func (x *QueryAllPendingOutboundsResponse) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[20] + mi := &file_uexecutor_v1_query_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10418,8 +11579,9 @@ type QueryAllPendingInboundsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - InboundIds []string `protobuf:"bytes,1,rep,name=inbound_ids,json=inboundIds,proto3" json:"inbound_ids,omitempty"` - Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + // Full per-variant audit-trail entries. + Entries []*PendingInboundEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (x *QueryAllPendingInboundsResponse) Reset() { @@ -10442,9 +11604,9 @@ func (*QueryAllPendingInboundsResponse) Descriptor() ([]byte, []int) { return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{11} } -func (x *QueryAllPendingInboundsResponse) GetInboundIds() []string { +func (x *QueryAllPendingInboundsResponse) GetEntries() []*PendingInboundEntry { if x != nil { - return x.InboundIds + return x.Entries } return nil } @@ -10456,6 +11618,85 @@ func (x *QueryAllPendingInboundsResponse) GetPagination() *v1beta1.PageResponse return nil } +// Expired Inbounds +type QueryAllExpiredInboundsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllExpiredInboundsRequest) Reset() { + *x = QueryAllExpiredInboundsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_query_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllExpiredInboundsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllExpiredInboundsRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllExpiredInboundsRequest.ProtoReflect.Descriptor instead. +func (*QueryAllExpiredInboundsRequest) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{12} +} + +func (x *QueryAllExpiredInboundsRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllExpiredInboundsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entries []*ExpiredInboundEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllExpiredInboundsResponse) Reset() { + *x = QueryAllExpiredInboundsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_query_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllExpiredInboundsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllExpiredInboundsResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllExpiredInboundsResponse.ProtoReflect.Descriptor instead. +func (*QueryAllExpiredInboundsResponse) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{13} +} + +func (x *QueryAllExpiredInboundsResponse) GetEntries() []*ExpiredInboundEntry { + if x != nil { + return x.Entries + } + return nil +} + +func (x *QueryAllExpiredInboundsResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + // Get UniversalTx type QueryGetUniversalTxRequest struct { state protoimpl.MessageState @@ -10468,7 +11709,7 @@ type QueryGetUniversalTxRequest struct { func (x *QueryGetUniversalTxRequest) Reset() { *x = QueryGetUniversalTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[12] + mi := &file_uexecutor_v1_query_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10482,7 +11723,7 @@ func (*QueryGetUniversalTxRequest) ProtoMessage() {} // Deprecated: Use QueryGetUniversalTxRequest.ProtoReflect.Descriptor instead. func (*QueryGetUniversalTxRequest) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{12} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{14} } func (x *QueryGetUniversalTxRequest) GetId() string { @@ -10503,7 +11744,7 @@ type QueryGetUniversalTxResponse struct { func (x *QueryGetUniversalTxResponse) Reset() { *x = QueryGetUniversalTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[13] + mi := &file_uexecutor_v1_query_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10517,7 +11758,7 @@ func (*QueryGetUniversalTxResponse) ProtoMessage() {} // Deprecated: Use QueryGetUniversalTxResponse.ProtoReflect.Descriptor instead. func (*QueryGetUniversalTxResponse) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{13} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{15} } func (x *QueryGetUniversalTxResponse) GetUniversalTx() *UniversalTxLegacy { @@ -10538,7 +11779,7 @@ type QueryAllUniversalTxRequest struct { func (x *QueryAllUniversalTxRequest) Reset() { *x = QueryAllUniversalTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[14] + mi := &file_uexecutor_v1_query_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10552,7 +11793,7 @@ func (*QueryAllUniversalTxRequest) ProtoMessage() {} // Deprecated: Use QueryAllUniversalTxRequest.ProtoReflect.Descriptor instead. func (*QueryAllUniversalTxRequest) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{14} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{16} } func (x *QueryAllUniversalTxRequest) GetPagination() *v1beta1.PageRequest { @@ -10574,7 +11815,7 @@ type QueryAllUniversalTxResponse struct { func (x *QueryAllUniversalTxResponse) Reset() { *x = QueryAllUniversalTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[15] + mi := &file_uexecutor_v1_query_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10588,7 +11829,7 @@ func (*QueryAllUniversalTxResponse) ProtoMessage() {} // Deprecated: Use QueryAllUniversalTxResponse.ProtoReflect.Descriptor instead. func (*QueryAllUniversalTxResponse) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{15} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{17} } func (x *QueryAllUniversalTxResponse) GetUniversalTxs() []*UniversalTx { @@ -10605,7 +11846,13 @@ func (x *QueryAllUniversalTxResponse) GetPagination() *v1beta1.PageResponse { return nil } -// Pending outbound index entry +// Pending outbound index entry. Created by chain code at outbound creation +// (see create_outbound.go). Removed only when validators reach consensus +// on an OutboundObservation (see msg_vote_outbound.go). Ballot expiry does +// NOT remove the entry — operators investigate stuck outbounds via the +// per-variant audit trail (variants below) plus separate uvalidator ballot +// queries to see which ballots have terminated. See +// plan-pending-outbound-cleanup.md for design rationale. type PendingOutboundEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -10614,12 +11861,14 @@ type PendingOutboundEntry struct { OutboundId string `protobuf:"bytes,1,opt,name=outbound_id,json=outboundId,proto3" json:"outbound_id,omitempty"` UniversalTxId string `protobuf:"bytes,2,opt,name=universal_tx_id,json=universalTxId,proto3" json:"universal_tx_id,omitempty"` CreatedAt int64 `protobuf:"varint,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // Per-variant audit trail, populated as votes arrive (RecordOutboundVote). + Variants []*OutboundObservationVariant `protobuf:"bytes,4,rep,name=variants,proto3" json:"variants,omitempty"` } func (x *PendingOutboundEntry) Reset() { *x = PendingOutboundEntry{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[16] + mi := &file_uexecutor_v1_query_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10633,7 +11882,7 @@ func (*PendingOutboundEntry) ProtoMessage() {} // Deprecated: Use PendingOutboundEntry.ProtoReflect.Descriptor instead. func (*PendingOutboundEntry) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{16} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{18} } func (x *PendingOutboundEntry) GetOutboundId() string { @@ -10657,6 +11906,13 @@ func (x *PendingOutboundEntry) GetCreatedAt() int64 { return 0 } +func (x *PendingOutboundEntry) GetVariants() []*OutboundObservationVariant { + if x != nil { + return x.Variants + } + return nil +} + type QueryGetPendingOutboundRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -10668,7 +11924,7 @@ type QueryGetPendingOutboundRequest struct { func (x *QueryGetPendingOutboundRequest) Reset() { *x = QueryGetPendingOutboundRequest{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[17] + mi := &file_uexecutor_v1_query_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10682,7 +11938,7 @@ func (*QueryGetPendingOutboundRequest) ProtoMessage() {} // Deprecated: Use QueryGetPendingOutboundRequest.ProtoReflect.Descriptor instead. func (*QueryGetPendingOutboundRequest) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{17} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{19} } func (x *QueryGetPendingOutboundRequest) GetOutboundId() string { @@ -10704,7 +11960,7 @@ type QueryGetPendingOutboundResponse struct { func (x *QueryGetPendingOutboundResponse) Reset() { *x = QueryGetPendingOutboundResponse{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[18] + mi := &file_uexecutor_v1_query_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10718,7 +11974,7 @@ func (*QueryGetPendingOutboundResponse) ProtoMessage() {} // Deprecated: Use QueryGetPendingOutboundResponse.ProtoReflect.Descriptor instead. func (*QueryGetPendingOutboundResponse) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{18} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{20} } func (x *QueryGetPendingOutboundResponse) GetEntry() *PendingOutboundEntry { @@ -10746,7 +12002,7 @@ type QueryAllPendingOutboundsRequest struct { func (x *QueryAllPendingOutboundsRequest) Reset() { *x = QueryAllPendingOutboundsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[19] + mi := &file_uexecutor_v1_query_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10760,7 +12016,7 @@ func (*QueryAllPendingOutboundsRequest) ProtoMessage() {} // Deprecated: Use QueryAllPendingOutboundsRequest.ProtoReflect.Descriptor instead. func (*QueryAllPendingOutboundsRequest) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{19} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{21} } func (x *QueryAllPendingOutboundsRequest) GetPagination() *v1beta1.PageRequest { @@ -10783,7 +12039,7 @@ type QueryAllPendingOutboundsResponse struct { func (x *QueryAllPendingOutboundsResponse) Reset() { *x = QueryAllPendingOutboundsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[20] + mi := &file_uexecutor_v1_query_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10797,7 +12053,7 @@ func (*QueryAllPendingOutboundsResponse) ProtoMessage() {} // Deprecated: Use QueryAllPendingOutboundsResponse.ProtoReflect.Descriptor instead. func (*QueryAllPendingOutboundsResponse) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{20} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{22} } func (x *QueryAllPendingOutboundsResponse) GetEntries() []*PendingOutboundEntry { @@ -10826,256 +12082,294 @@ var File_uexecutor_v1_query_proto protoreflect.FileDescriptor var file_uexecutor_v1_query_proto_rawDesc = []byte{ 0x0a, 0x18, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x75, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1c, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x67, - 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, - 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x31, 0x0a, 0x14, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x4c, 0x0a, 0x15, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x52, 0x08, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x62, 0x0a, 0x18, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9b, - 0x01, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x73, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0a, - 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x32, 0x0a, 0x15, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x22, 0x50, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, - 0x74, 0x61, 0x22, 0x63, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, - 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9f, 0x01, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x75, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, - 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, - 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x14, 0x0a, 0x12, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x43, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x68, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, - 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, - 0x01, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x49, 0x64, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a, 0x1a, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x6c, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x61, 0x0a, 0x1b, 0x51, 0x75, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x75, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x31, 0x0a, 0x14, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x4c, + 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x75, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x52, 0x08, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x62, 0x0a, 0x18, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x9b, 0x01, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x73, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, + 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x32, + 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x49, 0x64, 0x22, 0x50, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0a, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x4d, 0x65, 0x74, 0x61, 0x22, 0x63, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9f, 0x01, 0x0a, 0x1a, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, + 0x61, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x14, 0x0a, 0x12, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x43, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x68, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, + 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0xad, 0x01, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, + 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x68, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x64, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xad, 0x01, 0x0a, 0x1f, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, + 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0c, 0x75, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x22, 0x64, 0x0a, - 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, - 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, - 0x5f, 0x74, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x75, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x0c, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, - 0x54, 0x78, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7e, 0x0a, 0x14, - 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x49, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x41, 0x0a, 0x1e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, - 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x22, - 0x91, 0x01, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x34, 0x0a, - 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x22, 0x69, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe1, - 0x01, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x12, 0x36, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x52, 0x09, - 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x61, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0b, + 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x22, 0x64, 0x0a, 0x1a, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x32, 0x8c, 0x0b, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x6b, 0x0a, 0x06, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x12, 0x41, 0x6c, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x6e, + 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, + 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x6c, 0x54, 0x78, 0x52, 0x0c, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, + 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x01, 0x0a, 0x14, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x6c, 0x5f, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, + 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x08, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x41, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x1f, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, + 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x75, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x54, 0x78, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x69, + 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe1, 0x01, 0x0a, 0x20, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, + 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x09, + 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4f, + 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xa8, 0x0c, + 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x6b, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x20, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, + 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x12, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x2c, 0x2e, 0x75, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x75, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, - 0x12, 0x2c, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, - 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, - 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x12, 0x28, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, - 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, - 0x78, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8a, 0x01, 0x0a, 0x0e, 0x41, 0x6c, 0x6c, 0x55, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x12, 0x28, 0x2e, 0x75, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, - 0x6c, 0x6c, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x6e, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, - 0x5f, 0x74, 0x78, 0x73, 0x12, 0x7f, 0x0a, 0x08, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x22, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x24, 0x12, 0x22, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2f, 0x7b, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x01, 0x0a, 0x0c, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x73, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x61, - 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, - 0x18, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x67, - 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x09, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x23, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, + 0x12, 0x1e, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, + 0x12, 0x8f, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x6c, 0x54, 0x78, 0x12, 0x28, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, + 0x12, 0x20, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, + 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0x8a, 0x01, 0x0a, 0x0e, 0x41, 0x6c, 0x6c, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x6c, 0x54, 0x78, 0x12, 0x28, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x6e, 0x69, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, + 0x31, 0x2f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x73, 0x12, + 0x7f, 0x0a, 0x08, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x22, 0x2e, 0x75, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x23, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x75, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x61, 0x73, 0x5f, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x2f, 0x7b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0x81, 0x01, 0x0a, 0x0c, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x26, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x75, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, + 0x6c, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x75, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, + 0x69, 0x63, 0x65, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x23, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x75, + 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x2f, + 0x7b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x0d, 0x41, + 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x27, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x75, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x7b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0x85, 0x01, 0x0a, 0x0d, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, - 0x73, 0x12, 0x27, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, - 0x74, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x75, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, - 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x75, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x2c, - 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x75, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x2f, 0x7b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x13, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x2d, 0x2e, 0x75, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, - 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, - 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, - 0x12, 0x1f, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x42, 0xb2, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x70, 0x75, 0x73, 0x68, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2d, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x55, 0x58, 0x58, 0xaa, 0x02, 0x0c, - 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x55, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x55, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x2c, 0x2e, 0x75, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, + 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, + 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x7b, + 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, + 0x13, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x73, 0x12, 0x2d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x75, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x99, 0x01, 0x0a, + 0x12, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x73, 0x12, 0x2c, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x64, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, + 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x42, 0xb2, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, + 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2d, 0x6e, 0x6f, 0x64, + 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, + 0x76, 0x31, 0x3b, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x76, 0x31, 0xa2, 0x02, + 0x03, 0x55, 0x58, 0x58, 0xaa, 0x02, 0x0c, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5c, + 0x56, 0x31, 0xe2, 0x02, 0x18, 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5c, 0x56, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, + 0x55, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -11090,7 +12384,7 @@ func file_uexecutor_v1_query_proto_rawDescGZIP() []byte { return file_uexecutor_v1_query_proto_rawDescData } -var file_uexecutor_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_uexecutor_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_uexecutor_v1_query_proto_goTypes = []interface{}{ (*QueryGasPriceRequest)(nil), // 0: uexecutor.v1.QueryGasPriceRequest (*QueryGasPriceResponse)(nil), // 1: uexecutor.v1.QueryGasPriceResponse @@ -11104,71 +12398,83 @@ var file_uexecutor_v1_query_proto_goTypes = []interface{}{ (*QueryParamsResponse)(nil), // 9: uexecutor.v1.QueryParamsResponse (*QueryAllPendingInboundsRequest)(nil), // 10: uexecutor.v1.QueryAllPendingInboundsRequest (*QueryAllPendingInboundsResponse)(nil), // 11: uexecutor.v1.QueryAllPendingInboundsResponse - (*QueryGetUniversalTxRequest)(nil), // 12: uexecutor.v1.QueryGetUniversalTxRequest - (*QueryGetUniversalTxResponse)(nil), // 13: uexecutor.v1.QueryGetUniversalTxResponse - (*QueryAllUniversalTxRequest)(nil), // 14: uexecutor.v1.QueryAllUniversalTxRequest - (*QueryAllUniversalTxResponse)(nil), // 15: uexecutor.v1.QueryAllUniversalTxResponse - (*PendingOutboundEntry)(nil), // 16: uexecutor.v1.PendingOutboundEntry - (*QueryGetPendingOutboundRequest)(nil), // 17: uexecutor.v1.QueryGetPendingOutboundRequest - (*QueryGetPendingOutboundResponse)(nil), // 18: uexecutor.v1.QueryGetPendingOutboundResponse - (*QueryAllPendingOutboundsRequest)(nil), // 19: uexecutor.v1.QueryAllPendingOutboundsRequest - (*QueryAllPendingOutboundsResponse)(nil), // 20: uexecutor.v1.QueryAllPendingOutboundsResponse - (*GasPrice)(nil), // 21: uexecutor.v1.GasPrice - (*v1beta1.PageRequest)(nil), // 22: cosmos.base.query.v1beta1.PageRequest - (*v1beta1.PageResponse)(nil), // 23: cosmos.base.query.v1beta1.PageResponse - (*ChainMeta)(nil), // 24: uexecutor.v1.ChainMeta - (*Params)(nil), // 25: uexecutor.v1.Params - (*UniversalTxLegacy)(nil), // 26: uexecutor.v1.UniversalTxLegacy - (*UniversalTx)(nil), // 27: uexecutor.v1.UniversalTx - (*OutboundTx)(nil), // 28: uexecutor.v1.OutboundTx + (*QueryAllExpiredInboundsRequest)(nil), // 12: uexecutor.v1.QueryAllExpiredInboundsRequest + (*QueryAllExpiredInboundsResponse)(nil), // 13: uexecutor.v1.QueryAllExpiredInboundsResponse + (*QueryGetUniversalTxRequest)(nil), // 14: uexecutor.v1.QueryGetUniversalTxRequest + (*QueryGetUniversalTxResponse)(nil), // 15: uexecutor.v1.QueryGetUniversalTxResponse + (*QueryAllUniversalTxRequest)(nil), // 16: uexecutor.v1.QueryAllUniversalTxRequest + (*QueryAllUniversalTxResponse)(nil), // 17: uexecutor.v1.QueryAllUniversalTxResponse + (*PendingOutboundEntry)(nil), // 18: uexecutor.v1.PendingOutboundEntry + (*QueryGetPendingOutboundRequest)(nil), // 19: uexecutor.v1.QueryGetPendingOutboundRequest + (*QueryGetPendingOutboundResponse)(nil), // 20: uexecutor.v1.QueryGetPendingOutboundResponse + (*QueryAllPendingOutboundsRequest)(nil), // 21: uexecutor.v1.QueryAllPendingOutboundsRequest + (*QueryAllPendingOutboundsResponse)(nil), // 22: uexecutor.v1.QueryAllPendingOutboundsResponse + (*GasPrice)(nil), // 23: uexecutor.v1.GasPrice + (*v1beta1.PageRequest)(nil), // 24: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 25: cosmos.base.query.v1beta1.PageResponse + (*ChainMeta)(nil), // 26: uexecutor.v1.ChainMeta + (*Params)(nil), // 27: uexecutor.v1.Params + (*PendingInboundEntry)(nil), // 28: uexecutor.v1.PendingInboundEntry + (*ExpiredInboundEntry)(nil), // 29: uexecutor.v1.ExpiredInboundEntry + (*UniversalTxLegacy)(nil), // 30: uexecutor.v1.UniversalTxLegacy + (*UniversalTx)(nil), // 31: uexecutor.v1.UniversalTx + (*OutboundObservationVariant)(nil), // 32: uexecutor.v1.OutboundObservationVariant + (*OutboundTx)(nil), // 33: uexecutor.v1.OutboundTx } var file_uexecutor_v1_query_proto_depIdxs = []int32{ - 21, // 0: uexecutor.v1.QueryGasPriceResponse.gas_price:type_name -> uexecutor.v1.GasPrice - 22, // 1: uexecutor.v1.QueryAllGasPricesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 21, // 2: uexecutor.v1.QueryAllGasPricesResponse.gas_prices:type_name -> uexecutor.v1.GasPrice - 23, // 3: uexecutor.v1.QueryAllGasPricesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 24, // 4: uexecutor.v1.QueryChainMetaResponse.chain_meta:type_name -> uexecutor.v1.ChainMeta - 22, // 5: uexecutor.v1.QueryAllChainMetasRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 24, // 6: uexecutor.v1.QueryAllChainMetasResponse.chain_metas:type_name -> uexecutor.v1.ChainMeta - 23, // 7: uexecutor.v1.QueryAllChainMetasResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 25, // 8: uexecutor.v1.QueryParamsResponse.params:type_name -> uexecutor.v1.Params - 22, // 9: uexecutor.v1.QueryAllPendingInboundsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 23, // 10: uexecutor.v1.QueryAllPendingInboundsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 26, // 11: uexecutor.v1.QueryGetUniversalTxResponse.universal_tx:type_name -> uexecutor.v1.UniversalTxLegacy - 22, // 12: uexecutor.v1.QueryAllUniversalTxRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 27, // 13: uexecutor.v1.QueryAllUniversalTxResponse.universal_txs:type_name -> uexecutor.v1.UniversalTx - 23, // 14: uexecutor.v1.QueryAllUniversalTxResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 16, // 15: uexecutor.v1.QueryGetPendingOutboundResponse.entry:type_name -> uexecutor.v1.PendingOutboundEntry - 28, // 16: uexecutor.v1.QueryGetPendingOutboundResponse.outbound:type_name -> uexecutor.v1.OutboundTx - 22, // 17: uexecutor.v1.QueryAllPendingOutboundsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 16, // 18: uexecutor.v1.QueryAllPendingOutboundsResponse.entries:type_name -> uexecutor.v1.PendingOutboundEntry - 28, // 19: uexecutor.v1.QueryAllPendingOutboundsResponse.outbounds:type_name -> uexecutor.v1.OutboundTx - 23, // 20: uexecutor.v1.QueryAllPendingOutboundsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 8, // 21: uexecutor.v1.Query.Params:input_type -> uexecutor.v1.QueryParamsRequest - 10, // 22: uexecutor.v1.Query.AllPendingInbounds:input_type -> uexecutor.v1.QueryAllPendingInboundsRequest - 12, // 23: uexecutor.v1.Query.GetUniversalTx:input_type -> uexecutor.v1.QueryGetUniversalTxRequest - 14, // 24: uexecutor.v1.Query.AllUniversalTx:input_type -> uexecutor.v1.QueryAllUniversalTxRequest - 0, // 25: uexecutor.v1.Query.GasPrice:input_type -> uexecutor.v1.QueryGasPriceRequest - 2, // 26: uexecutor.v1.Query.AllGasPrices:input_type -> uexecutor.v1.QueryAllGasPricesRequest - 4, // 27: uexecutor.v1.Query.ChainMeta:input_type -> uexecutor.v1.QueryChainMetaRequest - 6, // 28: uexecutor.v1.Query.AllChainMetas:input_type -> uexecutor.v1.QueryAllChainMetasRequest - 17, // 29: uexecutor.v1.Query.GetPendingOutbound:input_type -> uexecutor.v1.QueryGetPendingOutboundRequest - 19, // 30: uexecutor.v1.Query.AllPendingOutbounds:input_type -> uexecutor.v1.QueryAllPendingOutboundsRequest - 9, // 31: uexecutor.v1.Query.Params:output_type -> uexecutor.v1.QueryParamsResponse - 11, // 32: uexecutor.v1.Query.AllPendingInbounds:output_type -> uexecutor.v1.QueryAllPendingInboundsResponse - 13, // 33: uexecutor.v1.Query.GetUniversalTx:output_type -> uexecutor.v1.QueryGetUniversalTxResponse - 15, // 34: uexecutor.v1.Query.AllUniversalTx:output_type -> uexecutor.v1.QueryAllUniversalTxResponse - 1, // 35: uexecutor.v1.Query.GasPrice:output_type -> uexecutor.v1.QueryGasPriceResponse - 3, // 36: uexecutor.v1.Query.AllGasPrices:output_type -> uexecutor.v1.QueryAllGasPricesResponse - 5, // 37: uexecutor.v1.Query.ChainMeta:output_type -> uexecutor.v1.QueryChainMetaResponse - 7, // 38: uexecutor.v1.Query.AllChainMetas:output_type -> uexecutor.v1.QueryAllChainMetasResponse - 18, // 39: uexecutor.v1.Query.GetPendingOutbound:output_type -> uexecutor.v1.QueryGetPendingOutboundResponse - 20, // 40: uexecutor.v1.Query.AllPendingOutbounds:output_type -> uexecutor.v1.QueryAllPendingOutboundsResponse - 31, // [31:41] is the sub-list for method output_type - 21, // [21:31] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 23, // 0: uexecutor.v1.QueryGasPriceResponse.gas_price:type_name -> uexecutor.v1.GasPrice + 24, // 1: uexecutor.v1.QueryAllGasPricesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 23, // 2: uexecutor.v1.QueryAllGasPricesResponse.gas_prices:type_name -> uexecutor.v1.GasPrice + 25, // 3: uexecutor.v1.QueryAllGasPricesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 26, // 4: uexecutor.v1.QueryChainMetaResponse.chain_meta:type_name -> uexecutor.v1.ChainMeta + 24, // 5: uexecutor.v1.QueryAllChainMetasRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 26, // 6: uexecutor.v1.QueryAllChainMetasResponse.chain_metas:type_name -> uexecutor.v1.ChainMeta + 25, // 7: uexecutor.v1.QueryAllChainMetasResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 27, // 8: uexecutor.v1.QueryParamsResponse.params:type_name -> uexecutor.v1.Params + 24, // 9: uexecutor.v1.QueryAllPendingInboundsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 28, // 10: uexecutor.v1.QueryAllPendingInboundsResponse.entries:type_name -> uexecutor.v1.PendingInboundEntry + 25, // 11: uexecutor.v1.QueryAllPendingInboundsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 24, // 12: uexecutor.v1.QueryAllExpiredInboundsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 29, // 13: uexecutor.v1.QueryAllExpiredInboundsResponse.entries:type_name -> uexecutor.v1.ExpiredInboundEntry + 25, // 14: uexecutor.v1.QueryAllExpiredInboundsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 30, // 15: uexecutor.v1.QueryGetUniversalTxResponse.universal_tx:type_name -> uexecutor.v1.UniversalTxLegacy + 24, // 16: uexecutor.v1.QueryAllUniversalTxRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 31, // 17: uexecutor.v1.QueryAllUniversalTxResponse.universal_txs:type_name -> uexecutor.v1.UniversalTx + 25, // 18: uexecutor.v1.QueryAllUniversalTxResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 32, // 19: uexecutor.v1.PendingOutboundEntry.variants:type_name -> uexecutor.v1.OutboundObservationVariant + 18, // 20: uexecutor.v1.QueryGetPendingOutboundResponse.entry:type_name -> uexecutor.v1.PendingOutboundEntry + 33, // 21: uexecutor.v1.QueryGetPendingOutboundResponse.outbound:type_name -> uexecutor.v1.OutboundTx + 24, // 22: uexecutor.v1.QueryAllPendingOutboundsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 18, // 23: uexecutor.v1.QueryAllPendingOutboundsResponse.entries:type_name -> uexecutor.v1.PendingOutboundEntry + 33, // 24: uexecutor.v1.QueryAllPendingOutboundsResponse.outbounds:type_name -> uexecutor.v1.OutboundTx + 25, // 25: uexecutor.v1.QueryAllPendingOutboundsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 8, // 26: uexecutor.v1.Query.Params:input_type -> uexecutor.v1.QueryParamsRequest + 10, // 27: uexecutor.v1.Query.AllPendingInbounds:input_type -> uexecutor.v1.QueryAllPendingInboundsRequest + 14, // 28: uexecutor.v1.Query.GetUniversalTx:input_type -> uexecutor.v1.QueryGetUniversalTxRequest + 16, // 29: uexecutor.v1.Query.AllUniversalTx:input_type -> uexecutor.v1.QueryAllUniversalTxRequest + 0, // 30: uexecutor.v1.Query.GasPrice:input_type -> uexecutor.v1.QueryGasPriceRequest + 2, // 31: uexecutor.v1.Query.AllGasPrices:input_type -> uexecutor.v1.QueryAllGasPricesRequest + 4, // 32: uexecutor.v1.Query.ChainMeta:input_type -> uexecutor.v1.QueryChainMetaRequest + 6, // 33: uexecutor.v1.Query.AllChainMetas:input_type -> uexecutor.v1.QueryAllChainMetasRequest + 19, // 34: uexecutor.v1.Query.GetPendingOutbound:input_type -> uexecutor.v1.QueryGetPendingOutboundRequest + 21, // 35: uexecutor.v1.Query.AllPendingOutbounds:input_type -> uexecutor.v1.QueryAllPendingOutboundsRequest + 12, // 36: uexecutor.v1.Query.AllExpiredInbounds:input_type -> uexecutor.v1.QueryAllExpiredInboundsRequest + 9, // 37: uexecutor.v1.Query.Params:output_type -> uexecutor.v1.QueryParamsResponse + 11, // 38: uexecutor.v1.Query.AllPendingInbounds:output_type -> uexecutor.v1.QueryAllPendingInboundsResponse + 15, // 39: uexecutor.v1.Query.GetUniversalTx:output_type -> uexecutor.v1.QueryGetUniversalTxResponse + 17, // 40: uexecutor.v1.Query.AllUniversalTx:output_type -> uexecutor.v1.QueryAllUniversalTxResponse + 1, // 41: uexecutor.v1.Query.GasPrice:output_type -> uexecutor.v1.QueryGasPriceResponse + 3, // 42: uexecutor.v1.Query.AllGasPrices:output_type -> uexecutor.v1.QueryAllGasPricesResponse + 5, // 43: uexecutor.v1.Query.ChainMeta:output_type -> uexecutor.v1.QueryChainMetaResponse + 7, // 44: uexecutor.v1.Query.AllChainMetas:output_type -> uexecutor.v1.QueryAllChainMetasResponse + 20, // 45: uexecutor.v1.Query.GetPendingOutbound:output_type -> uexecutor.v1.QueryGetPendingOutboundResponse + 22, // 46: uexecutor.v1.Query.AllPendingOutbounds:output_type -> uexecutor.v1.QueryAllPendingOutboundsResponse + 13, // 47: uexecutor.v1.Query.AllExpiredInbounds:output_type -> uexecutor.v1.QueryAllExpiredInboundsResponse + 37, // [37:48] is the sub-list for method output_type + 26, // [26:37] is the sub-list for method input_type + 26, // [26:26] is the sub-list for extension type_name + 26, // [26:26] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_uexecutor_v1_query_proto_init() } @@ -11179,6 +12485,7 @@ func file_uexecutor_v1_query_proto_init() { file_uexecutor_v1_types_proto_init() file_uexecutor_v1_gas_price_proto_init() file_uexecutor_v1_chain_meta_proto_init() + file_uexecutor_v1_pending_proto_init() if !protoimpl.UnsafeEnabled { file_uexecutor_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryGasPriceRequest); i { @@ -11325,7 +12632,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryGetUniversalTxRequest); i { + switch v := v.(*QueryAllExpiredInboundsRequest); i { case 0: return &v.state case 1: @@ -11337,7 +12644,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryGetUniversalTxResponse); i { + switch v := v.(*QueryAllExpiredInboundsResponse); i { case 0: return &v.state case 1: @@ -11349,7 +12656,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryAllUniversalTxRequest); i { + switch v := v.(*QueryGetUniversalTxRequest); i { case 0: return &v.state case 1: @@ -11361,7 +12668,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryAllUniversalTxResponse); i { + switch v := v.(*QueryGetUniversalTxResponse); i { case 0: return &v.state case 1: @@ -11373,7 +12680,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PendingOutboundEntry); i { + switch v := v.(*QueryAllUniversalTxRequest); i { case 0: return &v.state case 1: @@ -11385,7 +12692,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryGetPendingOutboundRequest); i { + switch v := v.(*QueryAllUniversalTxResponse); i { case 0: return &v.state case 1: @@ -11397,7 +12704,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryGetPendingOutboundResponse); i { + switch v := v.(*PendingOutboundEntry); i { case 0: return &v.state case 1: @@ -11409,7 +12716,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryAllPendingOutboundsRequest); i { + switch v := v.(*QueryGetPendingOutboundRequest); i { case 0: return &v.state case 1: @@ -11421,6 +12728,30 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetPendingOutboundResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_uexecutor_v1_query_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllPendingOutboundsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_uexecutor_v1_query_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryAllPendingOutboundsResponse); i { case 0: return &v.state @@ -11439,7 +12770,7 @@ func file_uexecutor_v1_query_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_uexecutor_v1_query_proto_rawDesc, NumEnums: 0, - NumMessages: 21, + NumMessages: 23, NumExtensions: 0, NumServices: 1, }, diff --git a/api/uexecutor/v1/query_grpc.pb.go b/api/uexecutor/v1/query_grpc.pb.go index b66a511c..0247c9fd 100644 --- a/api/uexecutor/v1/query_grpc.pb.go +++ b/api/uexecutor/v1/query_grpc.pb.go @@ -29,6 +29,7 @@ const ( Query_AllChainMetas_FullMethodName = "/uexecutor.v1.Query/AllChainMetas" Query_GetPendingOutbound_FullMethodName = "/uexecutor.v1.Query/GetPendingOutbound" Query_AllPendingOutbounds_FullMethodName = "/uexecutor.v1.Query/AllPendingOutbounds" + Query_AllExpiredInbounds_FullMethodName = "/uexecutor.v1.Query/AllExpiredInbounds" ) // QueryClient is the client API for Query service. @@ -55,6 +56,10 @@ type QueryClient interface { GetPendingOutbound(ctx context.Context, in *QueryGetPendingOutboundRequest, opts ...grpc.CallOption) (*QueryGetPendingOutboundResponse, error) // Get all pending outbounds (paginated) AllPendingOutbounds(ctx context.Context, in *QueryAllPendingOutboundsRequest, opts ...grpc.CallOption) (*QueryAllPendingOutboundsResponse, error) + // Queries all expired inbound entries (per-variant audit trail of + // inbounds whose ballots all reached EXPIRED/REJECTED without producing + // a UniversalTx). Consumed by the future escape-hatch refund flow. + AllExpiredInbounds(ctx context.Context, in *QueryAllExpiredInboundsRequest, opts ...grpc.CallOption) (*QueryAllExpiredInboundsResponse, error) } type queryClient struct { @@ -155,6 +160,15 @@ func (c *queryClient) AllPendingOutbounds(ctx context.Context, in *QueryAllPendi return out, nil } +func (c *queryClient) AllExpiredInbounds(ctx context.Context, in *QueryAllExpiredInboundsRequest, opts ...grpc.CallOption) (*QueryAllExpiredInboundsResponse, error) { + out := new(QueryAllExpiredInboundsResponse) + err := c.cc.Invoke(ctx, Query_AllExpiredInbounds_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. // All implementations must embed UnimplementedQueryServer // for forward compatibility @@ -179,6 +193,10 @@ type QueryServer interface { GetPendingOutbound(context.Context, *QueryGetPendingOutboundRequest) (*QueryGetPendingOutboundResponse, error) // Get all pending outbounds (paginated) AllPendingOutbounds(context.Context, *QueryAllPendingOutboundsRequest) (*QueryAllPendingOutboundsResponse, error) + // Queries all expired inbound entries (per-variant audit trail of + // inbounds whose ballots all reached EXPIRED/REJECTED without producing + // a UniversalTx). Consumed by the future escape-hatch refund flow. + AllExpiredInbounds(context.Context, *QueryAllExpiredInboundsRequest) (*QueryAllExpiredInboundsResponse, error) mustEmbedUnimplementedQueryServer() } @@ -216,6 +234,9 @@ func (UnimplementedQueryServer) GetPendingOutbound(context.Context, *QueryGetPen func (UnimplementedQueryServer) AllPendingOutbounds(context.Context, *QueryAllPendingOutboundsRequest) (*QueryAllPendingOutboundsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllPendingOutbounds not implemented") } +func (UnimplementedQueryServer) AllExpiredInbounds(context.Context, *QueryAllExpiredInboundsRequest) (*QueryAllExpiredInboundsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllExpiredInbounds not implemented") +} func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} // UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. @@ -409,6 +430,24 @@ func _Query_AllPendingOutbounds_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Query_AllExpiredInbounds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllExpiredInboundsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllExpiredInbounds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_AllExpiredInbounds_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllExpiredInbounds(ctx, req.(*QueryAllExpiredInboundsRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Query_ServiceDesc is the grpc.ServiceDesc for Query service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -456,6 +495,10 @@ var Query_ServiceDesc = grpc.ServiceDesc{ MethodName: "AllPendingOutbounds", Handler: _Query_AllPendingOutbounds_Handler, }, + { + MethodName: "AllExpiredInbounds", + Handler: _Query_AllExpiredInbounds_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "uexecutor/v1/query.proto", diff --git a/app/app.go b/app/app.go index 09db3cb2..9da42499 100755 --- a/app/app.go +++ b/app/app.go @@ -754,12 +754,18 @@ func NewChainApp( app.UexecutorKeeper, ) - app.UvalidatorKeeper.SetHooks( - uvalidatorkeeper.NewMultiUValidatorHooks( + // uvalidator exposes two distinct hook surfaces, both registered in one call: + // - Validator: validator-lifecycle events (consumed by x/utss + x/uexecutor) + // - Ballot: ballot-terminal events (consumed by x/uexecutor only, + // for the F-2026-16642 variant audit-trail cleanup of + // PendingInbounds → ExpiredInbounds) + app.UvalidatorKeeper.SetHooks(uvalidatorkeeper.Hooks{ + Validator: uvalidatorkeeper.NewMultiUValidatorHooks( app.UtssKeeper.Hooks(), uexecutorkeeper.NewUValidatorHooks(app.UexecutorKeeper), ), - ) + Ballot: uexecutorkeeper.NewBallotHooks(app.UexecutorKeeper), + }) app.EVMKeeper.SetHooks(uexecutorkeeper.NewEVMHooks(app.UexecutorKeeper)) diff --git a/proto/uexecutor/v1/genesis.proto b/proto/uexecutor/v1/genesis.proto index 189dfe83..e905cdca 100755 --- a/proto/uexecutor/v1/genesis.proto +++ b/proto/uexecutor/v1/genesis.proto @@ -6,6 +6,7 @@ import "amino/amino.proto"; import "uexecutor/v1/types.proto"; import "uexecutor/v1/gas_price.proto"; import "uexecutor/v1/chain_meta.proto"; +import "uexecutor/v1/pending.proto"; import "uexecutor/v1/query.proto"; option go_package = "github.com/pushchain/push-chain-node/x/uexecutor/types"; @@ -33,8 +34,13 @@ message GenesisState { // Params defines all the parameters of the module. Params params = 1 [(gogoproto.nullable) = false]; - // pending_inbounds are the keys from the PendingInbounds KeySet. - repeated string pending_inbounds = 2; + // pending_inbounds are entries from the PendingInbounds index. + // Per-variant audit-trail entries — see plan-pending-inbound-cleanup.md. + // Field 2 was previously `repeated string` (legacy KeySet keys); the + // shape change is non-breaking for in-flight state because the + // collection moved to a fresh prefix and the old prefix entries are + // dropped at upgrade time by a one-shot migration. + repeated PendingInboundEntry pending_inbounds = 2 [(gogoproto.nullable) = false]; // universal_txs are key-value pairs from the UniversalTx Map. repeated UniversalTxEntry universal_txs = 3 [(gogoproto.nullable) = false]; @@ -54,4 +60,10 @@ message GenesisState { // pending_outbounds are entries from the PendingOutbounds index. repeated PendingOutboundEntry pending_outbounds = 8 [(gogoproto.nullable) = false]; + + // expired_inbounds are entries from the ExpiredInbounds index. + // Per-variant audit-trail of inbounds whose ballots all reached + // EXPIRED/REJECTED without producing a UniversalTx. Consumed by the + // future escape-hatch refund flow. + repeated ExpiredInboundEntry expired_inbounds = 9 [(gogoproto.nullable) = false]; } diff --git a/proto/uexecutor/v1/pending.proto b/proto/uexecutor/v1/pending.proto new file mode 100644 index 00000000..b966640a --- /dev/null +++ b/proto/uexecutor/v1/pending.proto @@ -0,0 +1,107 @@ +syntax = "proto3"; +package uexecutor.v1; + +import "gogoproto/gogo.proto"; +import "uexecutor/v1/types.proto"; +import "uvalidator/v1/ballot.proto"; + +option go_package = "github.com/pushchain/push-chain-node/x/uexecutor/types"; + +// ======================================================================== +// Per-variant audit-trail types for PendingInbounds and PendingOutbounds. +// +// Background: when validators observe the same source-chain inbound or +// destination-chain outbound, byte-level differences in their submitted +// payloads (different decoded fields, formatting, etc.) produce different +// ballot keys and therefore separate ballots. The variant types below +// preserve, on-chain, which validators voted what payload — so operators +// (and the future escape-hatch refund flow) can investigate stuck items. +// +// See: +// plan-pending-inbound-cleanup.md +// plan-pending-outbound-cleanup.md +// ======================================================================== + +// InboundVariant captures one Inbound payload variant submitted by one +// or more validators against a single logical inbound event (identified +// by the UTX key = sha256(source_chain:tx_hash:log_index)). Multiple +// variants may exist for the same UTX key when validators marshal +// slightly different bytes for the same logical event. +message InboundVariant { + option (gogoproto.equal) = true; + + // ballot_id == hex(marshal(Inbound)) — the ballot key used by uvalidator. + string ballot_id = 1; + // The full Inbound payload exactly as voted (the bytes that produced + // this ballot_id). + Inbound inbound = 2; + // Validator addresses (bech32) that voted on this exact variant. + repeated string voters = 3; + // Block height of the first vote on this variant. + uint64 first_voted_at_height = 4; + // Block height of the most recent vote on this variant. + uint64 last_voted_at_height = 5; + // Terminal status of this variant's ballot. PENDING while in-flight. + // Populated by the uvalidator BallotHooks terminal callback. + uvalidator.v1.BallotStatus terminal_status = 6; +} + +// PendingInboundEntry tracks all ballot variants for a single logical +// inbound event (identified by utx_key). Created by the first vote +// (RecordInboundVote). Removed only when ALL variants reach a terminal +// state. If any variant ended PASSED, the existing post-finalization +// path produces the UniversalTx. If ALL variants ended EXPIRED/REJECTED, +// the entry is moved to ExpiredInbounds. +message PendingInboundEntry { + option (gogoproto.equal) = true; + + // sha256(source_chain:tx_hash:log_index) — same key used by + // GetInboundUniversalTxKey and the UniversalTx record (when it + // eventually exists). + string utx_key = 1; + repeated InboundVariant variants = 2 [(gogoproto.nullable) = false]; + // Block height when this entry was created (first vote on any variant). + uint64 created_at_height = 3; +} + +// ExpiredInboundEntry preserves the full per-variant audit trail of an +// inbound that failed to reach quorum on any variant. Consumed by the +// future escape-hatch refund flow. +message ExpiredInboundEntry { + option (gogoproto.equal) = true; + + string utx_key = 1; + // Each variant carries its terminal_status (EXPIRED or REJECTED). + repeated InboundVariant variants = 2 [(gogoproto.nullable) = false]; + // Block height when the entry was moved here (i.e. when the LAST + // variant's ballot reached a terminal state). + uint64 expired_at_height = 3; +} + +// OutboundObservationVariant captures one OutboundObservation variant +// submitted by one or more validators against a single outbound (the +// outbound itself is deterministic — chain-side at outbound creation — +// so all variants share the same outbound_id). Multiple variants exist +// when validators see different destination-chain results (different +// success/tx_hash/error_msg/gas_fee_used). +// +// NOTE: Unlike inbound variants, outbound variants do not carry a +// terminal_status field. Outbound PendingOutbounds entries persist +// until validators reach consensus (existing inline removal in +// msg_vote_outbound.go on PASSED). Operators investigate stuck +// outbounds by correlating each variant's ballot_id with the +// uvalidator ballot status separately. +message OutboundObservationVariant { + option (gogoproto.equal) = true; + + // ballot_id == sha256(utxId:outboundId:marshal(observedTx)). + string ballot_id = 1; + // The exact OutboundObservation that produced this ballot_id. + OutboundObservation observed_tx = 2 [(gogoproto.nullable) = false]; + // Validator addresses (bech32) that voted on this exact variant. + repeated string voters = 3; + // Block height of the first vote on this variant. + uint64 first_voted_at_height = 4; + // Block height of the most recent vote on this variant. + uint64 last_voted_at_height = 5; +} diff --git a/proto/uexecutor/v1/query.proto b/proto/uexecutor/v1/query.proto index e5e9eef5..928ff732 100755 --- a/proto/uexecutor/v1/query.proto +++ b/proto/uexecutor/v1/query.proto @@ -1,10 +1,12 @@ syntax = "proto3"; package uexecutor.v1; +import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "uexecutor/v1/types.proto"; import "uexecutor/v1/gas_price.proto"; import "uexecutor/v1/chain_meta.proto"; +import "uexecutor/v1/pending.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; option go_package = "github.com/pushchain/push-chain-node/x/uexecutor/types"; @@ -60,6 +62,13 @@ service Query { rpc AllPendingOutbounds(QueryAllPendingOutboundsRequest) returns (QueryAllPendingOutboundsResponse) { option (google.api.http).get = "/uexecutor/v1/pending_outbounds"; } + + // Queries all expired inbound entries (per-variant audit trail of + // inbounds whose ballots all reached EXPIRED/REJECTED without producing + // a UniversalTx). Consumed by the future escape-hatch refund flow. + rpc AllExpiredInbounds(QueryAllExpiredInboundsRequest) returns (QueryAllExpiredInboundsResponse) { + option (google.api.http).get = "/uexecutor/v1/expired_inbounds"; + } } // ========================== @@ -119,7 +128,18 @@ message QueryAllPendingInboundsRequest { } message QueryAllPendingInboundsResponse { - repeated string inbound_ids = 1; + // Full per-variant audit-trail entries. + repeated PendingInboundEntry entries = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// Expired Inbounds +message QueryAllExpiredInboundsRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllExpiredInboundsResponse { + repeated ExpiredInboundEntry entries = 1 [(gogoproto.nullable) = false]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } @@ -141,11 +161,19 @@ message QueryAllUniversalTxResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -// Pending outbound index entry +// Pending outbound index entry. Created by chain code at outbound creation +// (see create_outbound.go). Removed only when validators reach consensus +// on an OutboundObservation (see msg_vote_outbound.go). Ballot expiry does +// NOT remove the entry — operators investigate stuck outbounds via the +// per-variant audit trail (variants below) plus separate uvalidator ballot +// queries to see which ballots have terminated. See +// plan-pending-outbound-cleanup.md for design rationale. message PendingOutboundEntry { string outbound_id = 1; string universal_tx_id = 2; int64 created_at = 3; + // Per-variant audit trail, populated as votes arrive (RecordOutboundVote). + repeated OutboundObservationVariant variants = 4 [(gogoproto.nullable) = false]; } message QueryGetPendingOutboundRequest { diff --git a/test/integration/uexecutor/evm_hooks_and_outbound_test.go b/test/integration/uexecutor/evm_hooks_and_outbound_test.go index 2624fbe3..4e523ee1 100644 --- a/test/integration/uexecutor/evm_hooks_and_outbound_test.go +++ b/test/integration/uexecutor/evm_hooks_and_outbound_test.go @@ -23,6 +23,8 @@ import ( // --------------------------------------------------------------------------- func TestQueryAllPendingInbounds(t *testing.T) { + const voter = "cosmosvaloper1testvoter000000000000000000000000000" + t.Run("empty result when no pending inbounds", func(t *testing.T) { app, ctx, _ := utils.SetAppWithValidators(t) @@ -34,10 +36,10 @@ func TestQueryAllPendingInbounds(t *testing.T) { ) require.NoError(t, err) require.NotNil(t, resp) - require.Empty(t, resp.InboundIds) + require.Empty(t, resp.Entries) }) - t.Run("returns inbound ids after adding pending inbounds", func(t *testing.T) { + t.Run("returns entries after recording inbound votes", func(t *testing.T) { app, ctx, _ := utils.SetAppWithValidators(t) inbound1 := uexecutortypes.Inbound{ @@ -51,12 +53,14 @@ func TestQueryAllPendingInbounds(t *testing.T) { LogIndex: "0", } - err := app.UexecutorKeeper.AddPendingInbound(ctx, inbound1) + ballotKey1, err := uexecutortypes.GetInboundBallotKey(inbound1) require.NoError(t, err) - - err = app.UexecutorKeeper.AddPendingInbound(ctx, inbound2) + ballotKey2, err := uexecutortypes.GetInboundBallotKey(inbound2) require.NoError(t, err) + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound1, voter, ballotKey1)) + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound2, voter, ballotKey2)) + resp, err := app.UexecutorKeeper.AllPendingInbounds( sdk.WrapSDKContext(ctx), &uexecutortypes.QueryAllPendingInboundsRequest{ @@ -65,14 +69,16 @@ func TestQueryAllPendingInbounds(t *testing.T) { ) require.NoError(t, err) require.NotNil(t, resp) - require.Len(t, resp.InboundIds, 2) + require.Len(t, resp.Entries, 2) expectedKey1 := uexecutortypes.GetInboundUniversalTxKey(inbound1) expectedKey2 := uexecutortypes.GetInboundUniversalTxKey(inbound2) - idSet := make(map[string]bool, len(resp.InboundIds)) - for _, id := range resp.InboundIds { - idSet[id] = true + idSet := make(map[string]bool, len(resp.Entries)) + for _, e := range resp.Entries { + idSet[e.UtxKey] = true + require.Len(t, e.Variants, 1, "each entry has one variant from the single voter") + require.Equal(t, []string{voter}, e.Variants[0].Voters) } require.True(t, idSet[expectedKey1], "expected key for inbound1 to be present") require.True(t, idSet[expectedKey2], "expected key for inbound2 to be present") @@ -85,7 +91,7 @@ func TestQueryAllPendingInbounds(t *testing.T) { require.Error(t, err) }) - t.Run("adding same inbound twice does not create duplicate entries", func(t *testing.T) { + t.Run("recording same vote twice does not create duplicate entries or voters", func(t *testing.T) { app, ctx, _ := utils.SetAppWithValidators(t) inbound := uexecutortypes.Inbound{ @@ -93,13 +99,12 @@ func TestQueryAllPendingInbounds(t *testing.T) { TxHash: "0xduplicate001", LogIndex: "0", } - - err := app.UexecutorKeeper.AddPendingInbound(ctx, inbound) + ballotKey, err := uexecutortypes.GetInboundBallotKey(inbound) require.NoError(t, err) - // Adding again must be idempotent - err = app.UexecutorKeeper.AddPendingInbound(ctx, inbound) - require.NoError(t, err) + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound, voter, ballotKey)) + // Recording again with the same voter must be idempotent. + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound, voter, ballotKey)) resp, err := app.UexecutorKeeper.AllPendingInbounds( sdk.WrapSDKContext(ctx), @@ -108,7 +113,9 @@ func TestQueryAllPendingInbounds(t *testing.T) { }, ) require.NoError(t, err) - require.Len(t, resp.InboundIds, 1, "duplicate add must not create a second entry") + require.Len(t, resp.Entries, 1, "duplicate vote must not create a second entry") + require.Len(t, resp.Entries[0].Variants, 1) + require.Len(t, resp.Entries[0].Variants[0].Voters, 1, "duplicate voter must not be appended") }) } diff --git a/test/integration/uexecutor/pending_inbound_audit_trail_test.go b/test/integration/uexecutor/pending_inbound_audit_trail_test.go new file mode 100644 index 00000000..d8035fd4 --- /dev/null +++ b/test/integration/uexecutor/pending_inbound_audit_trail_test.go @@ -0,0 +1,365 @@ +package integrationtest + +// Integration tests for the variant-aware PendingInbounds + ExpiredInbounds +// audit trail introduced for F-2026-16642 (inbound side). +// +// These tests exercise: +// - RecordInboundVote idempotency and per-variant tracking +// - BallotHooks.AfterBallotTerminal for INBOUND_TX +// - PendingInbounds → ExpiredInbounds transition when all variants +// reach a terminal-failure state (EXPIRED/REJECTED) +// - Multi-variant scenarios (different validators voting different +// payloads for the same logical event) +// +// See plan-pending-inbound-cleanup.md for the design doc. + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + "github.com/pushchain/push-chain-node/app" + utils "github.com/pushchain/push-chain-node/test/utils" + uexecutortypes "github.com/pushchain/push-chain-node/x/uexecutor/types" + uvalidatortypes "github.com/pushchain/push-chain-node/x/uvalidator/types" +) + +const ( + auditVoter1 = "cosmosvaloper1auditvoter1000000000000000000000000" + auditVoter2 = "cosmosvaloper1auditvoter2000000000000000000000000" + auditVoter3 = "cosmosvaloper1auditvoter3000000000000000000000000" +) + +func makeInbound(txHash, sender string) uexecutortypes.Inbound { + return uexecutortypes.Inbound{ + SourceChain: "eip155:11155111", + TxHash: txHash, + Sender: sender, + LogIndex: "0", + TxType: uexecutortypes.TxType_FUNDS, + } +} + +// ------------------------------------------------------------------------- +// RecordInboundVote — variant accumulation, idempotency +// ------------------------------------------------------------------------- + +func TestRecordInboundVote_FirstVoteCreatesEntryAndVariant(t *testing.T) { + app, ctx, _ := utils.SetAppWithValidators(t) + inbound := makeInbound("0xfresh", "0xsender") + ballotKey, err := uexecutortypes.GetInboundBallotKey(inbound) + require.NoError(t, err) + utxKey := uexecutortypes.GetInboundUniversalTxKey(inbound) + + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound, auditVoter1, ballotKey)) + + entry, err := app.UexecutorKeeper.PendingInbounds.Get(ctx, utxKey) + require.NoError(t, err) + require.Equal(t, utxKey, entry.UtxKey) + require.Len(t, entry.Variants, 1) + require.Equal(t, ballotKey, entry.Variants[0].BallotId) + require.Equal(t, []string{auditVoter1}, entry.Variants[0].Voters) + require.Equal(t, uvalidatortypes.BallotStatus_BALLOT_STATUS_PENDING, entry.Variants[0].TerminalStatus) +} + +func TestRecordInboundVote_SameVoterTwiceIsIdempotent(t *testing.T) { + app, ctx, _ := utils.SetAppWithValidators(t) + inbound := makeInbound("0xduplicate", "0xsender") + ballotKey, err := uexecutortypes.GetInboundBallotKey(inbound) + require.NoError(t, err) + utxKey := uexecutortypes.GetInboundUniversalTxKey(inbound) + + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound, auditVoter1, ballotKey)) + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound, auditVoter1, ballotKey)) + + entry, err := app.UexecutorKeeper.PendingInbounds.Get(ctx, utxKey) + require.NoError(t, err) + require.Len(t, entry.Variants, 1) + require.Len(t, entry.Variants[0].Voters, 1, "duplicate voter must not be re-added") +} + +func TestRecordInboundVote_DifferentVotersSameVariant(t *testing.T) { + app, ctx, _ := utils.SetAppWithValidators(t) + inbound := makeInbound("0xshared", "0xsender") + ballotKey, err := uexecutortypes.GetInboundBallotKey(inbound) + require.NoError(t, err) + utxKey := uexecutortypes.GetInboundUniversalTxKey(inbound) + + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound, auditVoter1, ballotKey)) + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound, auditVoter2, ballotKey)) + + entry, err := app.UexecutorKeeper.PendingInbounds.Get(ctx, utxKey) + require.NoError(t, err) + require.Len(t, entry.Variants, 1, "same payload bytes → single variant") + require.ElementsMatch(t, []string{auditVoter1, auditVoter2}, entry.Variants[0].Voters) +} + +func TestRecordInboundVote_DifferentPayloadsCreateDistinctVariants(t *testing.T) { + app, ctx, _ := utils.SetAppWithValidators(t) + + // Same UTX-key fields but different sender → different ballot IDs (different + // marshal bytes), one PendingInbounds entry, two variants. + inboundA := makeInbound("0xsame", "0xsenderA") + inboundB := makeInbound("0xsame", "0xsenderB") + require.Equal(t, + uexecutortypes.GetInboundUniversalTxKey(inboundA), + uexecutortypes.GetInboundUniversalTxKey(inboundB), + "both inbounds must produce the same UTX key (same source/tx/log)", + ) + + ballotKeyA, err := uexecutortypes.GetInboundBallotKey(inboundA) + require.NoError(t, err) + ballotKeyB, err := uexecutortypes.GetInboundBallotKey(inboundB) + require.NoError(t, err) + require.NotEqual(t, ballotKeyA, ballotKeyB, "different payloads must produce different ballot keys") + + utxKey := uexecutortypes.GetInboundUniversalTxKey(inboundA) + + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inboundA, auditVoter1, ballotKeyA)) + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inboundB, auditVoter2, ballotKeyB)) + + entry, err := app.UexecutorKeeper.PendingInbounds.Get(ctx, utxKey) + require.NoError(t, err) + require.Len(t, entry.Variants, 2) + + byBallot := make(map[string]uexecutortypes.InboundVariant, 2) + for _, v := range entry.Variants { + byBallot[v.BallotId] = v + } + require.Equal(t, []string{auditVoter1}, byBallot[ballotKeyA].Voters) + require.Equal(t, []string{auditVoter2}, byBallot[ballotKeyB].Voters) +} + +func TestIsPendingInbound_ReportsEntryPresence(t *testing.T) { + app, ctx, _ := utils.SetAppWithValidators(t) + inbound := makeInbound("0xpresent", "0xsender") + ballotKey, err := uexecutortypes.GetInboundBallotKey(inbound) + require.NoError(t, err) + + pending, err := app.UexecutorKeeper.IsPendingInbound(ctx, inbound) + require.NoError(t, err) + require.False(t, pending, "no entry yet → not pending") + + require.NoError(t, app.UexecutorKeeper.RecordInboundVote(ctx, inbound, auditVoter1, ballotKey)) + + pending, err = app.UexecutorKeeper.IsPendingInbound(ctx, inbound) + require.NoError(t, err) + require.True(t, pending, "entry exists → pending") +} + +// ------------------------------------------------------------------------- +// BallotHooks: terminal transitions move PendingInbounds → ExpiredInbounds +// ------------------------------------------------------------------------- + +// seedPendingBallot records a vote AND creates a matching uvalidator ballot +// at PENDING status for the given inbound, returning the ballot ID. Tests +// then synthesize terminal transitions by calling MarkBallotExpired or +// MarkBallotFinalized directly (since DefaultExpiryAfterBlocks is too long +// to drive in a unit test). +func seedPendingBallot( + t *testing.T, + chainApp *app.ChainApp, + ctx sdk.Context, + inbound uexecutortypes.Inbound, + voter string, +) string { + t.Helper() + + ballotKey, err := uexecutortypes.GetInboundBallotKey(inbound) + require.NoError(t, err) + + // Record the variant in PendingInbounds. + require.NoError(t, chainApp.UexecutorKeeper.RecordInboundVote(ctx, inbound, voter, ballotKey)) + + // Create a matching ballot in uvalidator at PENDING status. We bypass + // VoteOnBallot (which has its own quorum/threshold logic) by writing the + // ballot directly so the test controls the terminal transition. + ballot := uvalidatortypes.Ballot{ + Id: ballotKey, + BallotType: uvalidatortypes.BallotObservationType_BALLOT_OBSERVATION_TYPE_INBOUND_TX, + EligibleVoters: []string{voter}, + Votes: []uvalidatortypes.VoteResult{uvalidatortypes.VoteResult_VOTE_RESULT_SUCCESS}, + VotingThreshold: 1, + Status: uvalidatortypes.BallotStatus_BALLOT_STATUS_PENDING, + BlockHeightCreated: ctx.BlockHeight(), + BlockHeightExpiry: ctx.BlockHeight() + 100, + } + require.NoError(t, chainApp.UvalidatorKeeper.Ballots.Set(ctx, ballotKey, ballot)) + require.NoError(t, chainApp.UvalidatorKeeper.ActiveBallotIDs.Set(ctx, ballotKey)) + + return ballotKey +} + +func TestBallotHook_SingleVariantExpiredRoutesToExpiredInbounds(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + inbound := makeInbound("0xtoexpire", "0xsender") + utxKey := uexecutortypes.GetInboundUniversalTxKey(inbound) + + ballotKey := seedPendingBallot(t, chainApp, ctx, inbound, auditVoter1) + + // Synthesize the terminal transition. + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballotKey)) + + // PendingInbounds should be empty for this UTX key. + has, err := chainApp.UexecutorKeeper.PendingInbounds.Has(ctx, utxKey) + require.NoError(t, err) + require.False(t, has, "expired-only single-variant entry must be removed from PendingInbounds") + + // ExpiredInbounds should now hold the entry with EXPIRED terminal status. + expired, err := chainApp.UexecutorKeeper.ExpiredInbounds.Get(ctx, utxKey) + require.NoError(t, err) + require.Equal(t, utxKey, expired.UtxKey) + require.Len(t, expired.Variants, 1) + require.Equal(t, ballotKey, expired.Variants[0].BallotId) + require.Equal(t, uvalidatortypes.BallotStatus_BALLOT_STATUS_EXPIRED, expired.Variants[0].TerminalStatus) + require.Equal(t, []string{auditVoter1}, expired.Variants[0].Voters) +} + +func TestBallotHook_SingleVariantRejectedRoutesToExpiredInbounds(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + inbound := makeInbound("0xtoreject", "0xsender") + utxKey := uexecutortypes.GetInboundUniversalTxKey(inbound) + + ballotKey := seedPendingBallot(t, chainApp, ctx, inbound, auditVoter1) + + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotFinalized(ctx, ballotKey, uvalidatortypes.BallotStatus_BALLOT_STATUS_REJECTED)) + + has, err := chainApp.UexecutorKeeper.PendingInbounds.Has(ctx, utxKey) + require.NoError(t, err) + require.False(t, has) + + expired, err := chainApp.UexecutorKeeper.ExpiredInbounds.Get(ctx, utxKey) + require.NoError(t, err) + require.Len(t, expired.Variants, 1) + require.Equal(t, uvalidatortypes.BallotStatus_BALLOT_STATUS_REJECTED, expired.Variants[0].TerminalStatus) +} + +func TestBallotHook_PassedDoesNotRouteToExpiredInbounds(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + inbound := makeInbound("0xtopass", "0xsender") + utxKey := uexecutortypes.GetInboundUniversalTxKey(inbound) + + ballotKey := seedPendingBallot(t, chainApp, ctx, inbound, auditVoter1) + + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotFinalized(ctx, ballotKey, uvalidatortypes.BallotStatus_BALLOT_STATUS_PASSED)) + + // PendingInbounds entry is removed by the hook because all (one) variants are now terminal. + has, err := chainApp.UexecutorKeeper.PendingInbounds.Has(ctx, utxKey) + require.NoError(t, err) + require.False(t, has) + + // PASSED variants are NOT routed to ExpiredInbounds — the existing post-finalization + // path produced (or will produce) a UniversalTx instead. + hasExpired, err := chainApp.UexecutorKeeper.ExpiredInbounds.Has(ctx, utxKey) + require.NoError(t, err) + require.False(t, hasExpired, "PASSED ballot must not route to ExpiredInbounds") +} + +// ------------------------------------------------------------------------- +// Multi-variant scenarios +// ------------------------------------------------------------------------- + +func TestBallotHook_MultiVariant_OneTerminalOthersStillPending(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + + inboundA := makeInbound("0xmulti", "0xsenderA") + inboundB := makeInbound("0xmulti", "0xsenderB") // same UTX key, different ballot + utxKey := uexecutortypes.GetInboundUniversalTxKey(inboundA) + + ballotA := seedPendingBallot(t, chainApp, ctx, inboundA, auditVoter1) + ballotB := seedPendingBallot(t, chainApp, ctx, inboundB, auditVoter2) + + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballotA)) + + // Entry must remain in PendingInbounds because variant B is still PENDING. + entry, err := chainApp.UexecutorKeeper.PendingInbounds.Get(ctx, utxKey) + require.NoError(t, err, "entry must remain while any variant is still PENDING") + require.Len(t, entry.Variants, 2) + + statusByBallot := make(map[string]uvalidatortypes.BallotStatus, 2) + for _, v := range entry.Variants { + statusByBallot[v.BallotId] = v.TerminalStatus + } + require.Equal(t, uvalidatortypes.BallotStatus_BALLOT_STATUS_EXPIRED, statusByBallot[ballotA]) + require.Equal(t, uvalidatortypes.BallotStatus_BALLOT_STATUS_PENDING, statusByBallot[ballotB]) + + // ExpiredInbounds must NOT have an entry yet. + hasExpired, err := chainApp.UexecutorKeeper.ExpiredInbounds.Has(ctx, utxKey) + require.NoError(t, err) + require.False(t, hasExpired, "ExpiredInbounds must wait for all variants to terminate") +} + +func TestBallotHook_MultiVariant_AllExpiredRoutesEntireEntry(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + + inboundA := makeInbound("0xallexp", "0xsenderA") + inboundB := makeInbound("0xallexp", "0xsenderB") + utxKey := uexecutortypes.GetInboundUniversalTxKey(inboundA) + + ballotA := seedPendingBallot(t, chainApp, ctx, inboundA, auditVoter1) + ballotB := seedPendingBallot(t, chainApp, ctx, inboundB, auditVoter2) + + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballotA)) + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballotB)) + + hasPending, err := chainApp.UexecutorKeeper.PendingInbounds.Has(ctx, utxKey) + require.NoError(t, err) + require.False(t, hasPending, "entry must be removed once all variants are terminal") + + expired, err := chainApp.UexecutorKeeper.ExpiredInbounds.Get(ctx, utxKey) + require.NoError(t, err) + require.Len(t, expired.Variants, 2, "ExpiredInbounds preserves the full audit trail") + for _, v := range expired.Variants { + require.Equal(t, uvalidatortypes.BallotStatus_BALLOT_STATUS_EXPIRED, v.TerminalStatus) + } +} + +func TestBallotHook_MultiVariant_OnePassesOthersExpire_NotRoutedToExpired(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + + inboundA := makeInbound("0xmixed", "0xsenderA") + inboundB := makeInbound("0xmixed", "0xsenderB") + utxKey := uexecutortypes.GetInboundUniversalTxKey(inboundA) + + ballotA := seedPendingBallot(t, chainApp, ctx, inboundA, auditVoter1) + ballotB := seedPendingBallot(t, chainApp, ctx, inboundB, auditVoter2) + + // Variant A passes (would produce a UTX in real flow), variant B expires. + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotFinalized(ctx, ballotA, uvalidatortypes.BallotStatus_BALLOT_STATUS_PASSED)) + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballotB)) + + // Entry removed from PendingInbounds (all variants terminal). + hasPending, err := chainApp.UexecutorKeeper.PendingInbounds.Has(ctx, utxKey) + require.NoError(t, err) + require.False(t, hasPending) + + // But NOT routed to ExpiredInbounds because at least one variant PASSED. + hasExpired, err := chainApp.UexecutorKeeper.ExpiredInbounds.Has(ctx, utxKey) + require.NoError(t, err) + require.False(t, hasExpired, "PASSED variant suppresses ExpiredInbounds routing") +} + +// ------------------------------------------------------------------------- +// AllExpiredInbounds query +// ------------------------------------------------------------------------- + +func TestQueryAllExpiredInbounds(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + + inbound1 := makeInbound("0xq1", "0xsender") + inbound2 := makeInbound("0xq2", "0xsender") + + ballot1 := seedPendingBallot(t, chainApp, ctx, inbound1, auditVoter1) + ballot2 := seedPendingBallot(t, chainApp, ctx, inbound2, auditVoter2) + + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballot1)) + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballot2)) + + resp, err := chainApp.UexecutorKeeper.AllExpiredInbounds( + sdk.WrapSDKContext(ctx), + &uexecutortypes.QueryAllExpiredInboundsRequest{}, + ) + require.NoError(t, err) + require.Len(t, resp.Entries, 2) +} diff --git a/test/integration/uexecutor/pending_outbound_audit_trail_test.go b/test/integration/uexecutor/pending_outbound_audit_trail_test.go new file mode 100644 index 00000000..2d00a67c --- /dev/null +++ b/test/integration/uexecutor/pending_outbound_audit_trail_test.go @@ -0,0 +1,277 @@ +package integrationtest + +// Integration tests for the variant-aware PendingOutbounds audit trail +// introduced for F-2026-16642 (outbound side). +// +// These tests exercise: +// - RecordOutboundVote idempotency and per-variant tracking +// - Multi-variant accumulation (different validators voting different +// OutboundObservations for the same outbound_id) +// - The crucial design property: ballot expiry does NOT remove +// PendingOutbounds entries (operator-investigation-only design) +// +// See plan-pending-outbound-cleanup.md for the design doc. + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + "github.com/pushchain/push-chain-node/app" + utils "github.com/pushchain/push-chain-node/test/utils" + uexecutortypes "github.com/pushchain/push-chain-node/x/uexecutor/types" + uvalidatortypes "github.com/pushchain/push-chain-node/x/uvalidator/types" +) + +const ( + outboundAuditVoter1 = "cosmosvaloper1outboundaudit10000000000000000000000" + outboundAuditVoter2 = "cosmosvaloper1outboundaudit20000000000000000000000" +) + +// seedPendingOutbound writes a PendingOutboundEntry chain-side (mimicking +// what create_outbound.go does at outbound creation) so the test can then +// drive RecordOutboundVote and BallotHook scenarios against it. +func seedPendingOutbound(t *testing.T, chainApp *app.ChainApp, ctx sdk.Context, utxId, outboundId string) { + t.Helper() + require.NoError(t, chainApp.UexecutorKeeper.PendingOutbounds.Set(ctx, outboundId, uexecutortypes.PendingOutboundEntry{ + OutboundId: outboundId, + UniversalTxId: utxId, + CreatedAt: ctx.BlockHeight(), + })) +} + +func makeObservation(success bool, txHash, errorMsg string) uexecutortypes.OutboundObservation { + return uexecutortypes.OutboundObservation{ + Success: success, + BlockHeight: 100, + TxHash: txHash, + ErrorMsg: errorMsg, + GasFeeUsed: "21000", + } +} + +// ------------------------------------------------------------------------- +// RecordOutboundVote — variant accumulation, idempotency +// ------------------------------------------------------------------------- + +func TestRecordOutboundVote_FirstVoteAppendsVariant(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + utxId := "utx-1" + outboundId := "outbound-1" + seedPendingOutbound(t, chainApp, ctx, utxId, outboundId) + + obs := makeObservation(true, "0xdesttx1", "") + ballotKey, err := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obs) + require.NoError(t, err) + + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obs, outboundAuditVoter1, ballotKey)) + + entry, err := chainApp.UexecutorKeeper.PendingOutbounds.Get(ctx, outboundId) + require.NoError(t, err) + require.Equal(t, outboundId, entry.OutboundId) + require.Equal(t, utxId, entry.UniversalTxId) + require.Len(t, entry.Variants, 1) + require.Equal(t, ballotKey, entry.Variants[0].BallotId) + require.Equal(t, []string{outboundAuditVoter1}, entry.Variants[0].Voters) + require.Equal(t, "0xdesttx1", entry.Variants[0].ObservedTx.TxHash) +} + +func TestRecordOutboundVote_SameVoterTwiceIsIdempotent(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + utxId := "utx-dup" + outboundId := "outbound-dup" + seedPendingOutbound(t, chainApp, ctx, utxId, outboundId) + + obs := makeObservation(true, "0xdesttx", "") + ballotKey, err := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obs) + require.NoError(t, err) + + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obs, outboundAuditVoter1, ballotKey)) + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obs, outboundAuditVoter1, ballotKey)) + + entry, err := chainApp.UexecutorKeeper.PendingOutbounds.Get(ctx, outboundId) + require.NoError(t, err) + require.Len(t, entry.Variants, 1) + require.Len(t, entry.Variants[0].Voters, 1, "duplicate voter must not be re-added") +} + +func TestRecordOutboundVote_DifferentVotersSameVariant(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + utxId := "utx-shared" + outboundId := "outbound-shared" + seedPendingOutbound(t, chainApp, ctx, utxId, outboundId) + + obs := makeObservation(true, "0xdesttx", "") + ballotKey, err := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obs) + require.NoError(t, err) + + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obs, outboundAuditVoter1, ballotKey)) + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obs, outboundAuditVoter2, ballotKey)) + + entry, err := chainApp.UexecutorKeeper.PendingOutbounds.Get(ctx, outboundId) + require.NoError(t, err) + require.Len(t, entry.Variants, 1, "same observation bytes → single variant") + require.ElementsMatch(t, []string{outboundAuditVoter1, outboundAuditVoter2}, entry.Variants[0].Voters) +} + +func TestRecordOutboundVote_DifferentObservationsCreateDistinctVariants(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + utxId := "utx-multi" + outboundId := "outbound-multi" + seedPendingOutbound(t, chainApp, ctx, utxId, outboundId) + + // Same outbound, different destination-chain observations → different ballots. + obsA := makeObservation(true, "0xdesttxA", "") + obsB := makeObservation(false, "0xdesttxB", "reverted") + + ballotA, err := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obsA) + require.NoError(t, err) + ballotB, err := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obsB) + require.NoError(t, err) + require.NotEqual(t, ballotA, ballotB, "different observations must produce different ballot keys") + + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obsA, outboundAuditVoter1, ballotA)) + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obsB, outboundAuditVoter2, ballotB)) + + entry, err := chainApp.UexecutorKeeper.PendingOutbounds.Get(ctx, outboundId) + require.NoError(t, err) + require.Len(t, entry.Variants, 2) + + byBallot := make(map[string]uexecutortypes.OutboundObservationVariant, 2) + for _, v := range entry.Variants { + byBallot[v.BallotId] = v + } + require.Equal(t, []string{outboundAuditVoter1}, byBallot[ballotA].Voters) + require.True(t, byBallot[ballotA].ObservedTx.Success) + require.Equal(t, []string{outboundAuditVoter2}, byBallot[ballotB].Voters) + require.False(t, byBallot[ballotB].ObservedTx.Success) +} + +func TestRecordOutboundVote_MissingPendingEntryReturnsError(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + // No seedPendingOutbound call — entry intentionally missing. + obs := makeObservation(true, "0xdesttx", "") + ballotKey, err := uexecutortypes.GetOutboundBallotKey("utx-x", "outbound-missing", obs) + require.NoError(t, err) + + err = chainApp.UexecutorKeeper.RecordOutboundVote(ctx, "outbound-missing", obs, outboundAuditVoter1, ballotKey) + require.Error(t, err, "PendingOutbounds entry must exist before RecordOutboundVote is called") +} + +// ------------------------------------------------------------------------- +// CRITICAL: ballot expiry does NOT remove PendingOutbounds entries. +// This is the documented design — operators investigate stuck outbounds +// manually because the destination-chain state is unknown. +// ------------------------------------------------------------------------- + +func TestBallotExpiry_DoesNotRemovePendingOutbound(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + utxId := "utx-staystay" + outboundId := "outbound-staystay" + seedPendingOutbound(t, chainApp, ctx, utxId, outboundId) + + obs := makeObservation(true, "0xdesttx", "") + ballotKey, err := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obs) + require.NoError(t, err) + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obs, outboundAuditVoter1, ballotKey)) + + // Create a matching ballot in uvalidator and force-expire it. + ballot := uvalidatortypes.Ballot{ + Id: ballotKey, + BallotType: uvalidatortypes.BallotObservationType_BALLOT_OBSERVATION_TYPE_OUTBOUND_TX, + EligibleVoters: []string{outboundAuditVoter1}, + Votes: []uvalidatortypes.VoteResult{uvalidatortypes.VoteResult_VOTE_RESULT_SUCCESS}, + VotingThreshold: 1, + Status: uvalidatortypes.BallotStatus_BALLOT_STATUS_PENDING, + BlockHeightCreated: ctx.BlockHeight(), + BlockHeightExpiry: ctx.BlockHeight() + 100, + } + require.NoError(t, chainApp.UvalidatorKeeper.Ballots.Set(ctx, ballotKey, ballot)) + require.NoError(t, chainApp.UvalidatorKeeper.ActiveBallotIDs.Set(ctx, ballotKey)) + + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballotKey)) + + // THE KEY ASSERTION: PendingOutbounds entry must STILL be present. + entry, err := chainApp.UexecutorKeeper.PendingOutbounds.Get(ctx, outboundId) + require.NoError(t, err, "PendingOutbounds entry must NOT be removed on outbound ballot expiry") + require.Equal(t, outboundId, entry.OutboundId) + require.Len(t, entry.Variants, 1, "variant entry preserved") +} + +func TestMultiBallotExpiry_DoesNotRemovePendingOutbound(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + utxId := "utx-multistayed" + outboundId := "outbound-multistayed" + seedPendingOutbound(t, chainApp, ctx, utxId, outboundId) + + obsA := makeObservation(true, "0xdestA", "") + obsB := makeObservation(false, "0xdestB", "reverted") + ballotA, _ := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obsA) + ballotB, _ := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obsB) + + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obsA, outboundAuditVoter1, ballotA)) + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obsB, outboundAuditVoter2, ballotB)) + + for _, key := range []string{ballotA, ballotB} { + ballot := uvalidatortypes.Ballot{ + Id: key, + BallotType: uvalidatortypes.BallotObservationType_BALLOT_OBSERVATION_TYPE_OUTBOUND_TX, + EligibleVoters: []string{outboundAuditVoter1}, + Votes: []uvalidatortypes.VoteResult{uvalidatortypes.VoteResult_VOTE_RESULT_SUCCESS}, + VotingThreshold: 1, + Status: uvalidatortypes.BallotStatus_BALLOT_STATUS_PENDING, + BlockHeightCreated: ctx.BlockHeight(), + BlockHeightExpiry: ctx.BlockHeight() + 100, + } + require.NoError(t, chainApp.UvalidatorKeeper.Ballots.Set(ctx, key, ballot)) + require.NoError(t, chainApp.UvalidatorKeeper.ActiveBallotIDs.Set(ctx, key)) + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, key)) + } + + // PendingOutbounds entry STILL present — even with all variant ballots + // expired, the outbound persists for operator investigation. + entry, err := chainApp.UexecutorKeeper.PendingOutbounds.Get(ctx, outboundId) + require.NoError(t, err) + require.Len(t, entry.Variants, 2, "audit trail intact for operator forensics") +} + +// ------------------------------------------------------------------------- +// Sanity: the outbound branch of BallotHooks does NOT route to ExpiredInbounds +// (which is for inbounds only). +// ------------------------------------------------------------------------- + +func TestBallotHook_OutboundExpiryDoesNotPopulateExpiredInbounds(t *testing.T) { + chainApp, ctx, _ := utils.SetAppWithValidators(t) + utxId := "utx-noexp" + outboundId := "outbound-noexp" + seedPendingOutbound(t, chainApp, ctx, utxId, outboundId) + + obs := makeObservation(true, "0xdesttx", "") + ballotKey, _ := uexecutortypes.GetOutboundBallotKey(utxId, outboundId, obs) + require.NoError(t, chainApp.UexecutorKeeper.RecordOutboundVote(ctx, outboundId, obs, outboundAuditVoter1, ballotKey)) + + ballot := uvalidatortypes.Ballot{ + Id: ballotKey, + BallotType: uvalidatortypes.BallotObservationType_BALLOT_OBSERVATION_TYPE_OUTBOUND_TX, + EligibleVoters: []string{outboundAuditVoter1}, + Votes: []uvalidatortypes.VoteResult{uvalidatortypes.VoteResult_VOTE_RESULT_SUCCESS}, + VotingThreshold: 1, + Status: uvalidatortypes.BallotStatus_BALLOT_STATUS_PENDING, + BlockHeightCreated: ctx.BlockHeight(), + BlockHeightExpiry: ctx.BlockHeight() + 100, + } + require.NoError(t, chainApp.UvalidatorKeeper.Ballots.Set(ctx, ballotKey, ballot)) + require.NoError(t, chainApp.UvalidatorKeeper.ActiveBallotIDs.Set(ctx, ballotKey)) + + require.NoError(t, chainApp.UvalidatorKeeper.MarkBallotExpired(ctx, ballotKey)) + + // ExpiredInbounds collection is for INBOUND_TX terminal-failure variants only. + // An OUTBOUND_TX ballot expiring must not write anything there. + count := 0 + require.NoError(t, chainApp.UexecutorKeeper.ExpiredInbounds.Walk(ctx, nil, func(_ string, _ uexecutortypes.ExpiredInboundEntry) (bool, error) { + count++ + return false, nil + })) + require.Equal(t, 0, count, "OUTBOUND_TX terminal hook must not populate ExpiredInbounds") +} diff --git a/x/uexecutor/README.md b/x/uexecutor/README.md index 8ae00c4b..c1d5a96a 100755 --- a/x/uexecutor/README.md +++ b/x/uexecutor/README.md @@ -14,12 +14,13 @@ The execution layer for Push Chain's crosschain protocol. Owns the lifecycle of | Prefix | Collection | Type | Purpose | |---|---|---|---| | `0` | `Params` | `Item[Params]` | Module parameters | -| `2` | `PendingInbounds` | `KeySet[string]` | UTX IDs of inbounds awaiting tally / execution | +| `2` | `PendingInbounds` | `Map[string, PendingInboundEntry]` | In-flight inbounds with full per-variant audit trail. Key = `sha256(sourceChain:txHash:logIndex)` | | `3` | `UniversalTx` | `Map[string, UniversalTx]` | Canonical UTX record. Key = `sha256(sourceChain:txHash:logIndex)` | | `4` | `ModuleAccountNonce` | `Item[uint64]` | Manual nonce for `DerivedEVMCall` from the module account | | `5` | `GasPrices` | `Map[string, GasPrice]` | **Deprecated** — replaced by `ChainMetas`, kept only for genesis import | | `6` | `ChainMetas` | `Map[string, ChainMeta]` | Aggregated gas price + block height per CAIP-2 chain | -| `7` | `PendingOutbounds` | `Map[string, PendingOutboundEntry]` | Secondary index of outbounds in `PENDING` status | +| `7` | `PendingOutbounds` | `Map[string, PendingOutboundEntry]` | Outbounds in `PENDING` status, with per-variant audit trail of validator votes | +| `8` | `ExpiredInbounds` | `Map[string, ExpiredInboundEntry]` | Per-variant audit trail of inbounds whose ballots all reached EXPIRED/REJECTED without producing a UTX. Consumed by future escape-hatch refund flow. | ## The `UniversalTx` Record @@ -235,6 +236,51 @@ An attacker submitting `MsgExecutePayload` with their own `Signer` and a victim' - The contract reverts → the keeper returns an error → the Cosmos transaction reverts in full. - Net effect: zero state change. No EVM gas is charged to the victim UEA (the deduction is rolled back with the rest of the transaction). The submission costs the attacker nothing on chain (gasless), but also achieves nothing. +## Pending-inbound and pending-outbound lifecycle + +`PendingInbounds` and `PendingOutbounds` are intentionally asymmetric — they +represent two different things and have different lifecycle invariants. + +### `PendingInbounds` + +- **Created** by the FIRST validator vote on a given inbound (`RecordInboundVote` + inside `VoteInbound`). The chain learns about the source-chain event from + validator observations. +- **Keyed** by `utx_key = sha256(source_chain:tx_hash:log_index)`. +- **Variant-aware:** when validators marshal slightly different `Inbound` bytes + for the same logical event (different decoded fields, formatting, etc.), each + unique payload becomes its own `InboundVariant` inside the entry, with its + own `ballot_id`, `voters[]`, and `terminal_status`. +- **Removed** when ALL related ballot variants reach a terminal state. If any + variant ended `PASSED`, the existing post-finalization path in `VoteInbound` + produced a `UniversalTx`. If ALL variants ended `EXPIRED`/`REJECTED`, the + full per-variant audit trail is moved to `ExpiredInbounds` for the future + escape-hatch refund flow. +- The cleanup-on-terminal logic lives in `keeper/ballot_hooks.go` (the + `BallotHooks` impl wired into `x/uvalidator`). + +### `PendingOutbounds` + +- **Created** by chain code at outbound creation in `create_outbound.go` — + BEFORE any validator vote. The chain knows the outbound exists because it + generated the destination-chain transaction itself; validators are tasked + with observing whether/how it landed. +- **Keyed** by deterministic chain-derived `outbound_id`. +- **Variant-aware:** validator votes append `OutboundObservationVariant`s as + they arrive (`RecordOutboundVote` inside `VoteOutbound`). Multiple variants + per outbound indicate validator divergence on the destination-chain + observation (different `success`/`tx_hash`/`error_msg`/`gas_fee_used`). +- **Removed ONLY when validators reach consensus** (existing inline + `PendingOutbounds.Remove` in `msg_vote_outbound.go` on `PASSED`). +- **Ballot expiry does NOT remove the entry** — this is intentional. The + destination chain already received (or did not receive) the outbound; the + user's funds are already in flight. Auto-refund risks double-pay (if the + outbound actually landed), auto-retry risks double-delivery, and there is + no safe automatic resolution. Operators investigate stuck outbounds via + the per-variant audit trail (which validators voted what observation) plus + separate `x/uvalidator` ballot status queries; resolution is governance- + driven, not chain-driven. + ## Queries - `Params` diff --git a/x/uexecutor/keeper/ballot_hooks.go b/x/uexecutor/keeper/ballot_hooks.go new file mode 100644 index 00000000..23ebec19 --- /dev/null +++ b/x/uexecutor/keeper/ballot_hooks.go @@ -0,0 +1,151 @@ +package keeper + +import ( + "context" + "encoding/hex" + "errors" + + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/pushchain/push-chain-node/x/uexecutor/types" + uvalidatortypes "github.com/pushchain/push-chain-node/x/uvalidator/types" +) + +// BallotHooks is the x/uexecutor implementation of x/uvalidator's +// BallotHooks interface. It reacts to ballot lifecycle terminal +// transitions (EXPIRED, PASSED, REJECTED) by maintaining the per-variant +// audit trail in PendingInbounds and (on terminal-failure) routing +// expired entries to ExpiredInbounds for the future escape-hatch flow. +// +// Currently only INBOUND_TX ballots are handled. OUTBOUND_TX ballots are +// intentionally NOT handled here — outbound PendingOutbounds entries +// persist until validators reach consensus (existing inline removal in +// msg_vote_outbound.go on PASSED). Operators investigate stuck outbounds +// by correlating each variant's ballot_id with the uvalidator ballot +// status separately. See plan-pending-outbound-cleanup.md for rationale. +type BallotHooks struct { + k Keeper +} + +// NewBallotHooks constructs the BallotHooks implementation backed by the +// given Keeper. +func NewBallotHooks(k Keeper) BallotHooks { + return BallotHooks{k: k} +} + +var _ uvalidatortypes.BallotHooks = BallotHooks{} + +// AfterBallotTerminal is invoked by x/uvalidator when a ballot reaches a +// terminal state. For INBOUND_TX ballots this: +// +// 1. Marks the matching variant in the PendingInbounds entry with the +// terminal status that was reached. +// 2. If ANY variant is still PENDING, persists the updated entry and +// returns — the entry continues to wait on the remaining ballot(s). +// 3. If ALL variants are now terminal: +// a. Removes the entry from PendingInbounds. +// b. If any variant ended PASSED, the existing post-finalization path +// in VoteInbound has already produced a UniversalTx — nothing more +// to do. +// c. If ALL variants ended EXPIRED/REJECTED (no UTX was ever created), +// copies the entry into ExpiredInbounds preserving the full +// per-variant audit trail for the future escape-hatch refund flow. +// +// Hook implementations are required to be idempotent and must not block +// the terminal transition by returning errors for non-fatal conditions. +// Decode failures and "entry already cleared" cases are warning-logged +// and swallowed. +func (h BallotHooks) AfterBallotTerminal( + ctx sdk.Context, + ballotID string, + ballotType uvalidatortypes.BallotObservationType, + status uvalidatortypes.BallotStatus, +) error { + switch ballotType { + case uvalidatortypes.BallotObservationType_BALLOT_OBSERVATION_TYPE_INBOUND_TX: + return h.afterInboundBallotTerminal(ctx, ballotID, status) + default: + // OUTBOUND_TX, TSS_KEY, FUND_MIGRATION — not handled here. + // See doc comment on BallotHooks for rationale on outbound. + return nil + } +} + +func (h BallotHooks) afterInboundBallotTerminal( + ctx context.Context, + ballotID string, + status uvalidatortypes.BallotStatus, +) error { + // Decode ballot ID → Inbound (ballot ID for INBOUND_TX is hex(marshal(Inbound))). + bz, err := hex.DecodeString(ballotID) + if err != nil { + h.k.Logger().Warn("ballot terminal hook: cannot hex-decode inbound ballot id", + "ballot_id", ballotID, "err", err.Error()) + return nil + } + var inbound types.Inbound + if err := inbound.Unmarshal(bz); err != nil { + h.k.Logger().Warn("ballot terminal hook: cannot unmarshal inbound from ballot id", + "ballot_id", ballotID, "err", err.Error()) + return nil + } + utxKey := types.GetInboundUniversalTxKey(inbound) + + entry, err := h.k.PendingInbounds.Get(ctx, utxKey) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + // Entry was already cleared (e.g. the consensus-success path in + // VoteInbound already removed it before this hook fires). Nothing + // to do. + return nil + } + return err + } + + // Mark this variant's terminal status. + found := false + for i := range entry.Variants { + if entry.Variants[i].BallotId == ballotID { + entry.Variants[i].TerminalStatus = status + found = true + break + } + } + if !found { + h.k.Logger().Warn("ballot terminal hook: inbound variant not found in pending entry", + "ballot_id", ballotID, "utx_key", utxKey) + return nil + } + + // If any variant is still PENDING, persist the updated entry and wait. + for _, v := range entry.Variants { + if v.TerminalStatus == uvalidatortypes.BallotStatus_BALLOT_STATUS_PENDING { + return h.k.PendingInbounds.Set(ctx, utxKey, entry) + } + } + + // All variants terminal. Remove from pending. + if err := h.k.PendingInbounds.Remove(ctx, utxKey); err != nil { + return err + } + + // If any variant PASSED, the existing post-finalization path in + // VoteInbound has produced (or will produce) a UniversalTx — nothing + // to route to ExpiredInbounds. + for _, v := range entry.Variants { + if v.TerminalStatus == uvalidatortypes.BallotStatus_BALLOT_STATUS_PASSED { + return nil + } + } + + // All variants are terminal-failure (EXPIRED or REJECTED). Preserve + // the full audit trail in ExpiredInbounds for the future escape-hatch + // refund flow. + sdkCtx := sdk.UnwrapSDKContext(ctx) + return h.k.ExpiredInbounds.Set(ctx, utxKey, types.ExpiredInboundEntry{ + UtxKey: utxKey, + Variants: entry.Variants, + ExpiredAtHeight: uint64(sdkCtx.BlockHeight()), + }) +} diff --git a/x/uexecutor/keeper/genesis_test.go b/x/uexecutor/keeper/genesis_test.go index 23de0d63..84c552d0 100755 --- a/x/uexecutor/keeper/genesis_test.go +++ b/x/uexecutor/keeper/genesis_test.go @@ -34,9 +34,15 @@ func TestGenesisExportImportRoundTrip(t *testing.T) { // Init with default state f.k.InitGenesis(f.ctx, &types.GenesisState{Params: types.DefaultParams()}) - // Populate state: PendingInbounds - require.NoError(t, f.k.PendingInbounds.Set(f.ctx, "inbound-key-1")) - require.NoError(t, f.k.PendingInbounds.Set(f.ctx, "inbound-key-2")) + // Populate state: PendingInbounds (variant-aware Map shape). + require.NoError(t, f.k.PendingInbounds.Set(f.ctx, "inbound-key-1", types.PendingInboundEntry{ + UtxKey: "inbound-key-1", + CreatedAtHeight: 1, + })) + require.NoError(t, f.k.PendingInbounds.Set(f.ctx, "inbound-key-2", types.PendingInboundEntry{ + UtxKey: "inbound-key-2", + CreatedAtHeight: 1, + })) // Populate state: UniversalTx utx1 := types.UniversalTx{ diff --git a/x/uexecutor/keeper/inbound.go b/x/uexecutor/keeper/inbound.go index 34fcfc6e..fb699864 100644 --- a/x/uexecutor/keeper/inbound.go +++ b/x/uexecutor/keeper/inbound.go @@ -2,35 +2,104 @@ package keeper import ( "context" + "errors" + + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/pushchain/push-chain-node/x/uexecutor/types" + uvalidatortypes "github.com/pushchain/push-chain-node/x/uvalidator/types" ) -// AddPendingInbound adds an inbound synthetic to the pending set if not already present -func (k Keeper) AddPendingInbound(ctx context.Context, inbound types.Inbound) error { - key := types.GetInboundUniversalTxKey(inbound) - has, err := k.PendingInbounds.Has(ctx, key) - if err != nil { +// RecordInboundVote idempotently records a validator's vote on an inbound by +// appending to the per-utx PendingInbounds entry. Creates the entry on the +// first vote for a given utx_key, creates a new variant on the first vote +// of a given (inbound payload bytes / ballotID), and appends the voter to +// an existing variant on subsequent votes for the same payload (deduped). +// +// utx_key = sha256(source_chain:tx_hash:log_index) — see GetInboundUniversalTxKey. +// ballotID = hex(marshal(Inbound)) — see GetInboundBallotKey. +// +// Multiple variants exist for the same utx_key when validators marshal +// slightly different Inbound bytes for the same logical event (different +// decoded fields, formatting, etc.). Each variant tracks which validators +// voted for that exact byte sequence so operators can investigate divergence. +func (k Keeper) RecordInboundVote( + ctx context.Context, + inbound types.Inbound, + voter string, + ballotID string, +) error { + sdkCtx := sdk.UnwrapSDKContext(ctx) + height := uint64(sdkCtx.BlockHeight()) + utxKey := types.GetInboundUniversalTxKey(inbound) + + entry, err := k.PendingInbounds.Get(ctx, utxKey) + if err != nil && !errors.Is(err, collections.ErrNotFound) { return err } - if has { - // Already present, do nothing - k.Logger().Debug("add pending inbound skipped: already present", "utx_key", key) - return nil + if errors.Is(err, collections.ErrNotFound) { + entry = types.PendingInboundEntry{ + UtxKey: utxKey, + CreatedAtHeight: height, + } + } + + // Find or create the variant for this ballot. + variantIdx := -1 + for i, v := range entry.Variants { + if v.BallotId == ballotID { + variantIdx = i + break + } + } + if variantIdx < 0 { + entry.Variants = append(entry.Variants, types.InboundVariant{ + BallotId: ballotID, + Inbound: &inbound, + Voters: []string{voter}, + FirstVotedAtHeight: height, + LastVotedAtHeight: height, + TerminalStatus: uvalidatortypes.BallotStatus_BALLOT_STATUS_PENDING, + }) + } else { + v := &entry.Variants[variantIdx] + // Idempotent voter add. + already := false + for _, x := range v.Voters { + if x == voter { + already = true + break + } + } + if !already { + v.Voters = append(v.Voters, voter) + } + v.LastVotedAtHeight = height } - k.Logger().Debug("pending inbound added", "utx_key", key, "source_chain", inbound.SourceChain) - return k.PendingInbounds.Set(ctx, key) + + k.Logger().Debug("inbound vote recorded", + "utx_key", utxKey, + "ballot_id", ballotID, + "voter", voter, + "variant_count", len(entry.Variants), + ) + return k.PendingInbounds.Set(ctx, utxKey, entry) } -// IsPendingInbound checks if an inbound synthetic is pending +// IsPendingInbound reports whether any variant for this inbound's utx_key +// is still being tracked (any entry exists in PendingInbounds). func (k Keeper) IsPendingInbound(ctx context.Context, inbound types.Inbound) (bool, error) { - key := types.GetInboundUniversalTxKey(inbound) - return k.PendingInbounds.Has(ctx, key) + utxKey := types.GetInboundUniversalTxKey(inbound) + return k.PendingInbounds.Has(ctx, utxKey) } -// RemovePendingInbound removes an inbound synthetic from the pending set +// RemovePendingInbound removes the per-utx entry. The variant-aware design +// only needs this on the consensus-success path inside VoteInbound (the +// BallotHooks impl in ballot_hooks.go performs the same removal when ALL +// variants reach a terminal state). Map.Remove on absent key is a no-op. func (k Keeper) RemovePendingInbound(ctx context.Context, inbound types.Inbound) error { - key := types.GetInboundUniversalTxKey(inbound) - k.Logger().Debug("pending inbound removed", "utx_key", key) - return k.PendingInbounds.Remove(ctx, key) + utxKey := types.GetInboundUniversalTxKey(inbound) + k.Logger().Debug("pending inbound removed", "utx_key", utxKey) + return k.PendingInbounds.Remove(ctx, utxKey) } diff --git a/x/uexecutor/keeper/keeper.go b/x/uexecutor/keeper/keeper.go index 722df00f..923de5dc 100755 --- a/x/uexecutor/keeper/keeper.go +++ b/x/uexecutor/keeper/keeper.go @@ -35,8 +35,17 @@ type Keeper struct { uregistryKeeper types.UregistryKeeper uvalidatorKeeper types.UValidatorKeeper - // Inbound trackers - PendingInbounds collections.KeySet[string] + // PendingInbounds tracks in-flight inbounds with full per-variant + // audit trail (which validators voted what payload, terminal status + // per variant). Created on first vote (RecordInboundVote), removed + // when all variants reach a terminal state (BallotHooks impl). + // See plan-pending-inbound-cleanup.md. + PendingInbounds collections.Map[string, types.PendingInboundEntry] + + // ExpiredInbounds preserves the per-variant audit trail of inbounds + // whose ballots all reached EXPIRED/REJECTED without producing a UTX. + // Consumed by the future escape-hatch refund flow. + ExpiredInbounds collections.Map[string, types.ExpiredInboundEntry] // UniversalTx collection UniversalTx collections.Map[string, types.UniversalTx] @@ -91,11 +100,20 @@ func NewKeeper( uregistryKeeper: uregistryKeeper, uvalidatorKeeper: uvalidatorKeeper, - PendingInbounds: collections.NewKeySet( + PendingInbounds: collections.NewMap( sb, - types.InboundsKey, - types.InboundsName, + types.PendingInboundsKey, + types.PendingInboundsName, collections.StringKey, + codec.CollValue[types.PendingInboundEntry](cdc), + ), + + ExpiredInbounds: collections.NewMap( + sb, + types.ExpiredInboundsKey, + types.ExpiredInboundsName, + collections.StringKey, + codec.CollValue[types.ExpiredInboundEntry](cdc), ), UniversalTx: collections.NewMap( @@ -162,9 +180,16 @@ func (k *Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) erro return err } - // Restore PendingInbounds - for _, key := range data.PendingInbounds { - if err := k.PendingInbounds.Set(ctx, key); err != nil { + // Restore PendingInbounds (variant-aware Map at the new prefix). + for _, entry := range data.PendingInbounds { + if err := k.PendingInbounds.Set(ctx, entry.UtxKey, entry); err != nil { + return err + } + } + + // Restore ExpiredInbounds. + for _, entry := range data.ExpiredInbounds { + if err := k.ExpiredInbounds.Set(ctx, entry.UtxKey, entry); err != nil { return err } } @@ -214,10 +239,20 @@ func (k *Keeper) ExportGenesis(ctx context.Context) *types.GenesisState { panic(err) } - // Export PendingInbounds - var pendingInbounds []string - err = k.PendingInbounds.Walk(ctx, nil, func(key string) (bool, error) { - pendingInbounds = append(pendingInbounds, key) + // Export PendingInbounds (variant-aware Map). + var pendingInbounds []types.PendingInboundEntry + err = k.PendingInbounds.Walk(ctx, nil, func(_ string, value types.PendingInboundEntry) (bool, error) { + pendingInbounds = append(pendingInbounds, value) + return false, nil + }) + if err != nil { + panic(err) + } + + // Export ExpiredInbounds. + var expiredInbounds []types.ExpiredInboundEntry + err = k.ExpiredInbounds.Walk(ctx, nil, func(_ string, value types.ExpiredInboundEntry) (bool, error) { + expiredInbounds = append(expiredInbounds, value) return false, nil }) if err != nil { @@ -276,6 +311,7 @@ func (k *Keeper) ExportGenesis(ctx context.Context) *types.GenesisState { return &types.GenesisState{ Params: params, PendingInbounds: pendingInbounds, + ExpiredInbounds: expiredInbounds, UniversalTxs: universalTxs, ModuleAccountNonce: moduleAccountNonce, GasPrices: gasPrices, diff --git a/x/uexecutor/keeper/msg_vote_inbound.go b/x/uexecutor/keeper/msg_vote_inbound.go index d511e14e..0d584bf8 100644 --- a/x/uexecutor/keeper/msg_vote_inbound.go +++ b/x/uexecutor/keeper/msg_vote_inbound.go @@ -50,8 +50,14 @@ func (k Keeper) VoteInbound(ctx context.Context, universalValidator sdk.ValAddre // use a temporary context to not commit any ballot state change in case of error tmpCtx, commit := sdkCtx.CacheContext() - // Step 2: Add inbound synthetic to pending set - adds if not present, else does nothing - if err := k.AddPendingInbound(tmpCtx, inbound); err != nil { + // Step 2: Record this validator's vote in the per-utx PendingInbounds entry + // (variant-aware audit trail). Each unique Inbound payload becomes its own + // variant; multiple variants per utx_key indicate validator divergence. + ballotKey, err := types.GetInboundBallotKey(inbound) + if err != nil { + return errors.Wrap(err, "failed to derive inbound ballot key") + } + if err := k.RecordInboundVote(tmpCtx, inbound, universalValidator.String(), ballotKey); err != nil { return err } diff --git a/x/uexecutor/keeper/msg_vote_outbound.go b/x/uexecutor/keeper/msg_vote_outbound.go index 574f996f..4b7a31b2 100644 --- a/x/uexecutor/keeper/msg_vote_outbound.go +++ b/x/uexecutor/keeper/msg_vote_outbound.go @@ -75,6 +75,18 @@ func (k Keeper) VoteOutbound( return err } + // Step 3b: Record this validator's vote in the per-outbound PendingOutbounds + // entry (variant-aware audit trail). Each unique ObservedTx payload becomes + // its own variant; multiple variants per outbound_id indicate validator + // divergence on the destination-chain observation. + ballotKey, err := types.GetOutboundBallotKey(utxId, outboundId, observedTx) + if err != nil { + return fmt.Errorf("failed to derive outbound ballot key: %w", err) + } + if err := k.RecordOutboundVote(tmpCtx, outboundId, observedTx, universalValidator.String(), ballotKey); err != nil { + return err + } + commit() // Step 4: Exit if not finalized yet diff --git a/x/uexecutor/keeper/pending_outbound.go b/x/uexecutor/keeper/pending_outbound.go new file mode 100644 index 00000000..a0eb72aa --- /dev/null +++ b/x/uexecutor/keeper/pending_outbound.go @@ -0,0 +1,86 @@ +package keeper + +import ( + "context" + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/pushchain/push-chain-node/x/uexecutor/types" +) + +// RecordOutboundVote idempotently appends a validator's observation vote +// to the variants list of the existing PendingOutbounds entry. Creates a +// new variant on the first vote of a given (observed_tx bytes / ballotID), +// and appends the voter to an existing variant on subsequent votes for the +// same observation (deduped). +// +// outboundId is the deterministic chain-derived outbound ID. +// ballotID = sha256(utxId:outboundId:marshal(observedTx)) — see GetOutboundBallotKey. +// +// PRECONDITION: PendingOutbounds[outboundId] must already exist — the entry +// is created chain-side at outbound creation in create_outbound.go, well +// before any validator vote arrives. If the entry is missing, this is a +// programmer error and an explicit error is returned. +// +// Multiple variants exist for the same outboundId when validators observe +// different destination-chain results (different success/tx_hash/error/gas). +// The variant data is purely an audit trail — PendingOutbounds entries are +// only removed when validators reach consensus (existing inline removal in +// msg_vote_outbound.go on PASSED). Ballot expiry does NOT remove the entry. +// See plan-pending-outbound-cleanup.md for design rationale. +func (k Keeper) RecordOutboundVote( + ctx context.Context, + outboundID string, + observedTx types.OutboundObservation, + voter string, + ballotID string, +) error { + sdkCtx := sdk.UnwrapSDKContext(ctx) + height := uint64(sdkCtx.BlockHeight()) + + entry, err := k.PendingOutbounds.Get(ctx, outboundID) + if err != nil { + return fmt.Errorf("pending outbound entry missing for %s: %w", outboundID, err) + } + + // Find or create variant for this ballot. + variantIdx := -1 + for i, v := range entry.Variants { + if v.BallotId == ballotID { + variantIdx = i + break + } + } + if variantIdx < 0 { + entry.Variants = append(entry.Variants, types.OutboundObservationVariant{ + BallotId: ballotID, + ObservedTx: observedTx, + Voters: []string{voter}, + FirstVotedAtHeight: height, + LastVotedAtHeight: height, + }) + } else { + v := &entry.Variants[variantIdx] + // Idempotent voter add. + already := false + for _, x := range v.Voters { + if x == voter { + already = true + break + } + } + if !already { + v.Voters = append(v.Voters, voter) + } + v.LastVotedAtHeight = height + } + + k.Logger().Debug("outbound vote recorded", + "outbound_id", outboundID, + "ballot_id", ballotID, + "voter", voter, + "variant_count", len(entry.Variants), + ) + return k.PendingOutbounds.Set(ctx, outboundID, entry) +} diff --git a/x/uexecutor/keeper/query_server.go b/x/uexecutor/keeper/query_server.go index f0a021d8..3a1bc9f2 100755 --- a/x/uexecutor/keeper/query_server.go +++ b/x/uexecutor/keeper/query_server.go @@ -205,20 +205,48 @@ func (k Querier) AllUniversalTx(goCtx context.Context, req *types.QueryAllUniver } // AllPendingInbounds implements types.QueryServer. +// +// Returns full per-variant audit-trail entries (which validators voted what +// payload, terminal status per variant). This replaces the previous +// "list of UTX keys" response shape — callers that previously consumed +// inbound_ids should switch to entries[].utx_key. func (k Keeper) AllPendingInbounds(goCtx context.Context, req *types.QueryAllPendingInboundsRequest) (*types.QueryAllPendingInboundsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } ctx := sdk.UnwrapSDKContext(goCtx) - inbounds, pageRes, err := query.CollectionPaginate(ctx, k.PendingInbounds, req.Pagination, func(key string, _ collections.NoValue) (string, error) { - return key, nil + entries, pageRes, err := query.CollectionPaginate(ctx, k.PendingInbounds, req.Pagination, func(_ string, value types.PendingInboundEntry) (types.PendingInboundEntry, error) { + return value, nil }) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } return &types.QueryAllPendingInboundsResponse{ - InboundIds: inbounds, + Entries: entries, + Pagination: pageRes, + }, nil +} + +// AllExpiredInbounds implements types.QueryServer. +// +// Returns the full per-variant audit trail of inbounds whose ballots all +// reached EXPIRED/REJECTED without producing a UniversalTx. Consumed by +// the future escape-hatch refund flow. +func (k Keeper) AllExpiredInbounds(goCtx context.Context, req *types.QueryAllExpiredInboundsRequest) (*types.QueryAllExpiredInboundsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(goCtx) + entries, pageRes, err := query.CollectionPaginate(ctx, k.ExpiredInbounds, req.Pagination, func(_ string, value types.ExpiredInboundEntry) (types.ExpiredInboundEntry, error) { + return value, nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllExpiredInboundsResponse{ + Entries: entries, Pagination: pageRes, }, nil } diff --git a/x/uexecutor/types/genesis.pb.go b/x/uexecutor/types/genesis.pb.go index edc8daf5..db3ddffa 100644 --- a/x/uexecutor/types/genesis.pb.go +++ b/x/uexecutor/types/genesis.pb.go @@ -187,8 +187,13 @@ func (m *ChainMetaEntry) GetValue() ChainMeta { type GenesisState struct { // Params defines all the parameters of the module. Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` - // pending_inbounds are the keys from the PendingInbounds KeySet. - PendingInbounds []string `protobuf:"bytes,2,rep,name=pending_inbounds,json=pendingInbounds,proto3" json:"pending_inbounds,omitempty"` + // pending_inbounds are entries from the PendingInbounds index. + // Per-variant audit-trail entries — see plan-pending-inbound-cleanup.md. + // Field 2 was previously `repeated string` (legacy KeySet keys); the + // shape change is non-breaking for in-flight state because the + // collection moved to a fresh prefix and the old prefix entries are + // dropped at upgrade time by a one-shot migration. + PendingInbounds []PendingInboundEntry `protobuf:"bytes,2,rep,name=pending_inbounds,json=pendingInbounds,proto3" json:"pending_inbounds"` // universal_txs are key-value pairs from the UniversalTx Map. UniversalTxs []UniversalTxEntry `protobuf:"bytes,3,rep,name=universal_txs,json=universalTxs,proto3" json:"universal_txs"` // module_account_nonce is the value from the ModuleAccountNonce Item. @@ -202,6 +207,11 @@ type GenesisState struct { Exported bool `protobuf:"varint,7,opt,name=exported,proto3" json:"exported,omitempty"` // pending_outbounds are entries from the PendingOutbounds index. PendingOutbounds []PendingOutboundEntry `protobuf:"bytes,8,rep,name=pending_outbounds,json=pendingOutbounds,proto3" json:"pending_outbounds"` + // expired_inbounds are entries from the ExpiredInbounds index. + // Per-variant audit-trail of inbounds whose ballots all reached + // EXPIRED/REJECTED without producing a UniversalTx. Consumed by the + // future escape-hatch refund flow. + ExpiredInbounds []ExpiredInboundEntry `protobuf:"bytes,9,rep,name=expired_inbounds,json=expiredInbounds,proto3" json:"expired_inbounds"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -244,7 +254,7 @@ func (m *GenesisState) GetParams() Params { return Params{} } -func (m *GenesisState) GetPendingInbounds() []string { +func (m *GenesisState) GetPendingInbounds() []PendingInboundEntry { if m != nil { return m.PendingInbounds } @@ -293,6 +303,13 @@ func (m *GenesisState) GetPendingOutbounds() []PendingOutboundEntry { return nil } +func (m *GenesisState) GetExpiredInbounds() []ExpiredInboundEntry { + if m != nil { + return m.ExpiredInbounds + } + return nil +} + func init() { proto.RegisterType((*UniversalTxEntry)(nil), "uexecutor.v1.UniversalTxEntry") proto.RegisterType((*GasPriceEntry)(nil), "uexecutor.v1.GasPriceEntry") @@ -303,40 +320,42 @@ func init() { func init() { proto.RegisterFile("uexecutor/v1/genesis.proto", fileDescriptor_8c80c63f2002a67f) } var fileDescriptor_8c80c63f2002a67f = []byte{ - // 518 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0x41, 0x6f, 0xd3, 0x30, - 0x14, 0xc7, 0x9b, 0xb5, 0x2b, 0xad, 0xdb, 0x41, 0x67, 0x55, 0x10, 0xca, 0x08, 0x51, 0x4f, 0xe1, - 0xb0, 0x86, 0x75, 0x82, 0x33, 0x6c, 0x42, 0xd3, 0x0e, 0x40, 0x55, 0xa8, 0x90, 0xe0, 0x10, 0xb9, - 0xa9, 0x95, 0x46, 0x34, 0x76, 0x88, 0xed, 0x2a, 0xfd, 0x16, 0x7c, 0xac, 0x1d, 0x77, 0xe4, 0x84, - 0x50, 0xcb, 0x07, 0x41, 0x71, 0x9c, 0x36, 0x9e, 0xd6, 0x4b, 0xf4, 0xf2, 0xfe, 0xcf, 0xbf, 0x67, - 0xff, 0xed, 0x07, 0x7a, 0x02, 0xa7, 0xd8, 0x17, 0x9c, 0x26, 0xee, 0xf2, 0xcc, 0x0d, 0x30, 0xc1, - 0x2c, 0x64, 0x83, 0x38, 0xa1, 0x9c, 0xc2, 0xf6, 0x56, 0x1b, 0x2c, 0xcf, 0x7a, 0xdd, 0x80, 0x06, - 0x54, 0x0a, 0x6e, 0x16, 0xe5, 0x35, 0xbd, 0x63, 0x14, 0x85, 0x84, 0xba, 0xf2, 0xab, 0x52, 0xa6, - 0x86, 0xe4, 0xab, 0x18, 0x2b, 0x60, 0xef, 0x44, 0x6f, 0x86, 0x98, 0x17, 0x27, 0xa1, 0x8f, 0x95, - 0xfa, 0x5c, 0x53, 0xfd, 0x39, 0x0a, 0x89, 0x17, 0x61, 0x8e, 0xee, 0xc5, 0xfe, 0x14, 0x38, 0x59, - 0xe5, 0x4a, 0xff, 0x3b, 0xe8, 0x4c, 0x48, 0xb8, 0xc4, 0x09, 0x43, 0x8b, 0x2f, 0xe9, 0x7b, 0xc2, - 0x93, 0x15, 0xec, 0x80, 0xea, 0x0f, 0xbc, 0x32, 0x0d, 0xdb, 0x70, 0x9a, 0xe3, 0x2c, 0x84, 0xaf, - 0xc1, 0xe1, 0x12, 0x2d, 0x04, 0x36, 0x0f, 0x6c, 0xc3, 0x69, 0x0d, 0x9f, 0x0e, 0xca, 0xa7, 0x1b, - 0x94, 0x00, 0x17, 0xb5, 0x9b, 0x3f, 0x2f, 0x2a, 0xe3, 0xbc, 0xba, 0x3f, 0x01, 0x47, 0x57, 0x88, - 0x8d, 0xb2, 0x7d, 0xee, 0x23, 0x0f, 0x75, 0xf2, 0x63, 0x9d, 0x5c, 0xac, 0xd6, 0xb1, 0x5f, 0xc1, - 0xc3, 0xcb, 0xec, 0x84, 0x1f, 0x30, 0x47, 0xfb, 0xb8, 0xe7, 0x3a, 0xf7, 0x89, 0xce, 0xdd, 0x2e, - 0xd7, 0xc1, 0xff, 0xaa, 0xa0, 0x7d, 0x95, 0x5f, 0xe3, 0x67, 0x8e, 0x38, 0x86, 0x43, 0x50, 0x8f, - 0x51, 0x82, 0x22, 0x26, 0xd1, 0xad, 0x61, 0x57, 0xc7, 0x8c, 0xa4, 0xa6, 0x18, 0xaa, 0x12, 0xbe, - 0x04, 0x9d, 0x18, 0x93, 0x59, 0x48, 0x02, 0x2f, 0x24, 0x53, 0x2a, 0xc8, 0x8c, 0x99, 0x07, 0x76, - 0xd5, 0x69, 0x8e, 0x1f, 0xa9, 0xfc, 0xb5, 0x4a, 0xc3, 0x6b, 0x70, 0x24, 0x0a, 0xef, 0x3c, 0x9e, - 0x32, 0xb3, 0x6a, 0x57, 0x9d, 0xd6, 0xd0, 0xda, 0x6b, 0xaf, 0x3c, 0xad, 0xea, 0xd7, 0x16, 0xbb, - 0x3c, 0x83, 0xaf, 0x40, 0x37, 0xa2, 0x33, 0xb1, 0xc0, 0x1e, 0xf2, 0x7d, 0x2a, 0x08, 0xf7, 0x08, - 0x25, 0x3e, 0x36, 0x6b, 0xb6, 0xe1, 0xd4, 0xc6, 0x30, 0xd7, 0xde, 0xe5, 0xd2, 0xc7, 0x4c, 0x81, - 0x6f, 0x01, 0xd8, 0xbe, 0x22, 0x66, 0x1e, 0xca, 0xce, 0xcf, 0xee, 0xb7, 0xbf, 0xdc, 0xb6, 0x19, - 0xa8, 0x24, 0x83, 0x97, 0xa0, 0xb5, 0x7b, 0x69, 0xcc, 0xac, 0x4b, 0xc4, 0xc9, 0x1e, 0xa7, 0xcb, - 0x0c, 0xe0, 0x17, 0x59, 0x06, 0x7b, 0xa0, 0x81, 0xd3, 0x98, 0x26, 0x1c, 0xcf, 0xcc, 0x07, 0xb6, - 0xe1, 0x34, 0xc6, 0xdb, 0x7f, 0x38, 0x01, 0xc7, 0x85, 0x95, 0x54, 0x70, 0xe5, 0x65, 0x43, 0xb6, - 0xe9, 0xdf, 0xb9, 0x89, 0xbc, 0xec, 0x93, 0xaa, 0x2a, 0x37, 0x2b, 0x6e, 0xa3, 0xd0, 0xd8, 0xc5, - 0xe8, 0x66, 0x6d, 0x19, 0xb7, 0x6b, 0xcb, 0xf8, 0xbb, 0xb6, 0x8c, 0x5f, 0x1b, 0xab, 0x72, 0xbb, - 0xb1, 0x2a, 0xbf, 0x37, 0x56, 0xe5, 0xdb, 0x9b, 0x20, 0xe4, 0x73, 0x31, 0x1d, 0xf8, 0x34, 0x72, - 0x63, 0xc1, 0xe6, 0x72, 0x9f, 0x32, 0x3a, 0x95, 0xe1, 0x29, 0xa1, 0x33, 0xec, 0xa6, 0xee, 0x6e, - 0x9c, 0xe4, 0x88, 0x4e, 0xeb, 0x72, 0x98, 0xce, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x7f, 0xd3, - 0x9f, 0x44, 0x12, 0x04, 0x00, 0x00, + // 547 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x94, 0x41, 0x6f, 0x12, 0x41, + 0x14, 0xc7, 0xd9, 0x96, 0xd6, 0x32, 0x50, 0xa5, 0x13, 0xa2, 0x2b, 0xd6, 0x15, 0x39, 0x71, 0x29, + 0x6b, 0x69, 0xf4, 0xac, 0x6d, 0x9a, 0xa6, 0x07, 0x95, 0xa0, 0xc4, 0x44, 0x0f, 0x9b, 0x61, 0xf7, + 0x65, 0xd9, 0x08, 0x33, 0xeb, 0xce, 0x0c, 0x59, 0xbe, 0x85, 0x1f, 0xab, 0xc7, 0x1e, 0x3d, 0x19, + 0x85, 0x2f, 0x62, 0x98, 0x9d, 0x85, 0x1d, 0x03, 0x17, 0xf2, 0x78, 0xff, 0x37, 0xbf, 0xc7, 0x7b, + 0xff, 0x19, 0x50, 0x53, 0x42, 0x0a, 0xbe, 0x14, 0x2c, 0x71, 0x67, 0xe7, 0x6e, 0x08, 0x14, 0x78, + 0xc4, 0xbb, 0x71, 0xc2, 0x04, 0xc3, 0xb5, 0xb5, 0xd6, 0x9d, 0x9d, 0x37, 0x1b, 0x21, 0x0b, 0x99, + 0x12, 0xdc, 0x55, 0x94, 0xd5, 0x34, 0x4f, 0xc8, 0x34, 0xa2, 0xcc, 0x55, 0x9f, 0x3a, 0x65, 0x1b, + 0x48, 0x31, 0x8f, 0x41, 0x03, 0x9b, 0xa7, 0x66, 0x33, 0xc2, 0xbd, 0x38, 0x89, 0x7c, 0xd0, 0xea, + 0x73, 0x43, 0xf5, 0xc7, 0x24, 0xa2, 0xde, 0x14, 0x04, 0xd1, 0xb2, 0xf9, 0x4b, 0x63, 0xa0, 0x41, + 0x44, 0xc3, 0xad, 0x2d, 0x7f, 0x48, 0x48, 0xe6, 0x99, 0xd2, 0xfe, 0x86, 0xea, 0x43, 0x1a, 0xcd, + 0x20, 0xe1, 0x64, 0xf2, 0x39, 0xbd, 0xa6, 0x22, 0x99, 0xe3, 0x3a, 0xda, 0xff, 0x0e, 0x73, 0xdb, + 0x6a, 0x59, 0x9d, 0xca, 0x60, 0x15, 0xe2, 0xd7, 0xe8, 0x60, 0x46, 0x26, 0x12, 0xec, 0xbd, 0x96, + 0xd5, 0xa9, 0xf6, 0x9e, 0x76, 0x8b, 0x93, 0x77, 0x0b, 0x80, 0xcb, 0xf2, 0xdd, 0xef, 0x17, 0xa5, + 0x41, 0x56, 0xdd, 0x1e, 0xa2, 0xe3, 0x1b, 0xc2, 0xfb, 0xab, 0x19, 0x76, 0x91, 0x7b, 0x26, 0xf9, + 0xb1, 0x49, 0xce, 0x4f, 0x9b, 0xd8, 0x2f, 0xe8, 0xe1, 0xd5, 0x6a, 0xfa, 0xf7, 0x20, 0xc8, 0x2e, + 0xee, 0x85, 0xc9, 0x7d, 0x62, 0x72, 0xd7, 0xc7, 0x4d, 0xf0, 0xdf, 0x32, 0xaa, 0xdd, 0x64, 0x16, + 0x7f, 0x12, 0x44, 0x00, 0xee, 0xa1, 0xc3, 0x98, 0x24, 0x64, 0xca, 0x15, 0xba, 0xda, 0x6b, 0x98, + 0x98, 0xbe, 0xd2, 0x34, 0x43, 0x57, 0xe2, 0x01, 0xaa, 0xeb, 0xe5, 0x7b, 0x11, 0x1d, 0x31, 0x49, + 0x03, 0x6e, 0xef, 0xb5, 0xf6, 0x3b, 0xd5, 0xde, 0xcb, 0xff, 0x4e, 0x67, 0x55, 0xb7, 0x59, 0x91, + 0x1a, 0x44, 0xa3, 0x1e, 0xc5, 0x86, 0xc4, 0xf1, 0x2d, 0x3a, 0x96, 0xf9, 0x92, 0x3d, 0x91, 0x72, + 0x7b, 0x5f, 0x01, 0x9d, 0x9d, 0x3e, 0x14, 0x69, 0x35, 0xb9, 0xc9, 0x73, 0xfc, 0x0a, 0x35, 0xa6, + 0x2c, 0x90, 0x13, 0xf0, 0x88, 0xef, 0x33, 0x49, 0x85, 0x47, 0x19, 0xf5, 0xc1, 0x2e, 0xb7, 0xac, + 0x4e, 0x79, 0x80, 0x33, 0xed, 0x5d, 0x26, 0x7d, 0x58, 0x29, 0xf8, 0x2d, 0x42, 0xeb, 0xab, 0xc8, + 0xed, 0x03, 0xd5, 0xf9, 0xd9, 0x76, 0x9f, 0x8a, 0x6d, 0x2b, 0xa1, 0x4e, 0x72, 0x7c, 0x85, 0xaa, + 0x9b, 0xeb, 0xca, 0xed, 0x43, 0x85, 0x38, 0xdd, 0x61, 0x49, 0x91, 0x81, 0xfc, 0x3c, 0xcb, 0x71, + 0x13, 0x1d, 0x41, 0x1a, 0xb3, 0x44, 0x40, 0x60, 0x3f, 0x68, 0x59, 0x9d, 0xa3, 0xc1, 0xfa, 0x3b, + 0x1e, 0xa2, 0x93, 0x7c, 0xe7, 0x4c, 0x0a, 0xbd, 0xf4, 0x23, 0xd5, 0xa6, 0xbd, 0x75, 0xe9, 0x1f, + 0x75, 0x55, 0xb1, 0x59, 0x6e, 0x5b, 0xae, 0x29, 0x2b, 0x21, 0x8d, 0xa3, 0x04, 0x82, 0x8d, 0x95, + 0x95, 0x6d, 0x56, 0x5e, 0x67, 0x55, 0xdb, 0xac, 0x04, 0x43, 0xe2, 0x97, 0xfd, 0xbb, 0x85, 0x63, + 0xdd, 0x2f, 0x1c, 0xeb, 0xcf, 0xc2, 0xb1, 0x7e, 0x2e, 0x9d, 0xd2, 0xfd, 0xd2, 0x29, 0xfd, 0x5a, + 0x3a, 0xa5, 0xaf, 0x6f, 0xc2, 0x48, 0x8c, 0xe5, 0xa8, 0xeb, 0xb3, 0xa9, 0x1b, 0x4b, 0x3e, 0x56, + 0xb3, 0xab, 0xe8, 0x4c, 0x85, 0x67, 0x94, 0x05, 0xe0, 0xa6, 0xee, 0xe6, 0x2d, 0xab, 0xff, 0x8e, + 0xd1, 0xa1, 0x7a, 0xc9, 0x17, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x5c, 0x57, 0x93, 0xab, + 0x04, 0x00, 0x00, } func (m *UniversalTxEntry) Marshal() (dAtA []byte, err error) { @@ -479,6 +498,20 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ExpiredInbounds) > 0 { + for iNdEx := len(m.ExpiredInbounds) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ExpiredInbounds[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + } if len(m.PendingOutbounds) > 0 { for iNdEx := len(m.PendingOutbounds) - 1; iNdEx >= 0; iNdEx-- { { @@ -552,9 +585,14 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { } if len(m.PendingInbounds) > 0 { for iNdEx := len(m.PendingInbounds) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.PendingInbounds[iNdEx]) - copy(dAtA[i:], m.PendingInbounds[iNdEx]) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.PendingInbounds[iNdEx]))) + { + size, err := m.PendingInbounds[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x12 } @@ -637,8 +675,8 @@ func (m *GenesisState) Size() (n int) { l = m.Params.Size() n += 1 + l + sovGenesis(uint64(l)) if len(m.PendingInbounds) > 0 { - for _, s := range m.PendingInbounds { - l = len(s) + for _, e := range m.PendingInbounds { + l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } @@ -672,6 +710,12 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } + if len(m.ExpiredInbounds) > 0 { + for _, e := range m.ExpiredInbounds { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } return n } @@ -1092,7 +1136,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field PendingInbounds", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -1102,23 +1146,25 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - m.PendingInbounds = append(m.PendingInbounds, string(dAtA[iNdEx:postIndex])) + m.PendingInbounds = append(m.PendingInbounds, PendingInboundEntry{}) + if err := m.PendingInbounds[len(m.PendingInbounds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 2 { @@ -1295,6 +1341,40 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpiredInbounds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExpiredInbounds = append(m.ExpiredInbounds, ExpiredInboundEntry{}) + if err := m.ExpiredInbounds[len(m.ExpiredInbounds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/x/uexecutor/types/keys.go b/x/uexecutor/types/keys.go index 615f324e..1069aa61 100755 --- a/x/uexecutor/types/keys.go +++ b/x/uexecutor/types/keys.go @@ -19,8 +19,11 @@ var ( ChainConfigsKey = collections.NewPrefix(1) // ChainConfigsKey saves the current module chainConfigs collection prefix ChainConfigsName = "chain_configs" // ChainConfigsName is the name of the chainConfigs collection. - InboundsKey = collections.NewPrefix(2) - InboundsName = "inbound_synthetics" + // PendingInboundsKey stores the per-variant audit trail of in-flight + // inbounds (Map[utx_key → PendingInboundEntry]). See + // plan-pending-inbound-cleanup.md. + PendingInboundsKey = collections.NewPrefix(2) + PendingInboundsName = "pending_inbounds" UniversalTxKey = collections.NewPrefix(3) UniversalTxName = "universal_tx" @@ -36,6 +39,13 @@ var ( PendingOutboundsKey = collections.NewPrefix(7) PendingOutboundsName = "pending_outbounds" + + // ExpiredInboundsKey stores the per-variant audit trail of inbounds + // whose ballots all reached a terminal-failure state (EXPIRED/REJECTED) + // without producing a UniversalTx. Consumed by the future escape-hatch + // refund flow. See plan-pending-inbound-cleanup.md. + ExpiredInboundsKey = collections.NewPrefix(8) + ExpiredInboundsName = "expired_inbounds" ) const ( diff --git a/x/uexecutor/types/pending.pb.go b/x/uexecutor/types/pending.pb.go new file mode 100644 index 00000000..25c03d80 --- /dev/null +++ b/x/uexecutor/types/pending.pb.go @@ -0,0 +1,1642 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: uexecutor/v1/pending.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + types "github.com/pushchain/push-chain-node/x/uvalidator/types" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// InboundVariant captures one Inbound payload variant submitted by one +// or more validators against a single logical inbound event (identified +// by the UTX key = sha256(source_chain:tx_hash:log_index)). Multiple +// variants may exist for the same UTX key when validators marshal +// slightly different bytes for the same logical event. +type InboundVariant struct { + // ballot_id == hex(marshal(Inbound)) — the ballot key used by uvalidator. + BallotId string `protobuf:"bytes,1,opt,name=ballot_id,json=ballotId,proto3" json:"ballot_id,omitempty"` + // The full Inbound payload exactly as voted (the bytes that produced + // this ballot_id). + Inbound *Inbound `protobuf:"bytes,2,opt,name=inbound,proto3" json:"inbound,omitempty"` + // Validator addresses (bech32) that voted on this exact variant. + Voters []string `protobuf:"bytes,3,rep,name=voters,proto3" json:"voters,omitempty"` + // Block height of the first vote on this variant. + FirstVotedAtHeight uint64 `protobuf:"varint,4,opt,name=first_voted_at_height,json=firstVotedAtHeight,proto3" json:"first_voted_at_height,omitempty"` + // Block height of the most recent vote on this variant. + LastVotedAtHeight uint64 `protobuf:"varint,5,opt,name=last_voted_at_height,json=lastVotedAtHeight,proto3" json:"last_voted_at_height,omitempty"` + // Terminal status of this variant's ballot. PENDING while in-flight. + // Populated by the uvalidator BallotHooks terminal callback. + TerminalStatus types.BallotStatus `protobuf:"varint,6,opt,name=terminal_status,json=terminalStatus,proto3,enum=uvalidator.v1.BallotStatus" json:"terminal_status,omitempty"` +} + +func (m *InboundVariant) Reset() { *m = InboundVariant{} } +func (m *InboundVariant) String() string { return proto.CompactTextString(m) } +func (*InboundVariant) ProtoMessage() {} +func (*InboundVariant) Descriptor() ([]byte, []int) { + return fileDescriptor_10401a4d393338fe, []int{0} +} +func (m *InboundVariant) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *InboundVariant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_InboundVariant.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 *InboundVariant) XXX_Merge(src proto.Message) { + xxx_messageInfo_InboundVariant.Merge(m, src) +} +func (m *InboundVariant) XXX_Size() int { + return m.Size() +} +func (m *InboundVariant) XXX_DiscardUnknown() { + xxx_messageInfo_InboundVariant.DiscardUnknown(m) +} + +var xxx_messageInfo_InboundVariant proto.InternalMessageInfo + +func (m *InboundVariant) GetBallotId() string { + if m != nil { + return m.BallotId + } + return "" +} + +func (m *InboundVariant) GetInbound() *Inbound { + if m != nil { + return m.Inbound + } + return nil +} + +func (m *InboundVariant) GetVoters() []string { + if m != nil { + return m.Voters + } + return nil +} + +func (m *InboundVariant) GetFirstVotedAtHeight() uint64 { + if m != nil { + return m.FirstVotedAtHeight + } + return 0 +} + +func (m *InboundVariant) GetLastVotedAtHeight() uint64 { + if m != nil { + return m.LastVotedAtHeight + } + return 0 +} + +func (m *InboundVariant) GetTerminalStatus() types.BallotStatus { + if m != nil { + return m.TerminalStatus + } + return types.BallotStatus_BALLOT_STATUS_UNSPECIFIED +} + +// PendingInboundEntry tracks all ballot variants for a single logical +// inbound event (identified by utx_key). Created by the first vote +// (RecordInboundVote). Removed only when ALL variants reach a terminal +// state. If any variant ended PASSED, the existing post-finalization +// path produces the UniversalTx. If ALL variants ended EXPIRED/REJECTED, +// the entry is moved to ExpiredInbounds. +type PendingInboundEntry struct { + // sha256(source_chain:tx_hash:log_index) — same key used by + // GetInboundUniversalTxKey and the UniversalTx record (when it + // eventually exists). + UtxKey string `protobuf:"bytes,1,opt,name=utx_key,json=utxKey,proto3" json:"utx_key,omitempty"` + Variants []InboundVariant `protobuf:"bytes,2,rep,name=variants,proto3" json:"variants"` + // Block height when this entry was created (first vote on any variant). + CreatedAtHeight uint64 `protobuf:"varint,3,opt,name=created_at_height,json=createdAtHeight,proto3" json:"created_at_height,omitempty"` +} + +func (m *PendingInboundEntry) Reset() { *m = PendingInboundEntry{} } +func (m *PendingInboundEntry) String() string { return proto.CompactTextString(m) } +func (*PendingInboundEntry) ProtoMessage() {} +func (*PendingInboundEntry) Descriptor() ([]byte, []int) { + return fileDescriptor_10401a4d393338fe, []int{1} +} +func (m *PendingInboundEntry) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PendingInboundEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PendingInboundEntry.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 *PendingInboundEntry) XXX_Merge(src proto.Message) { + xxx_messageInfo_PendingInboundEntry.Merge(m, src) +} +func (m *PendingInboundEntry) XXX_Size() int { + return m.Size() +} +func (m *PendingInboundEntry) XXX_DiscardUnknown() { + xxx_messageInfo_PendingInboundEntry.DiscardUnknown(m) +} + +var xxx_messageInfo_PendingInboundEntry proto.InternalMessageInfo + +func (m *PendingInboundEntry) GetUtxKey() string { + if m != nil { + return m.UtxKey + } + return "" +} + +func (m *PendingInboundEntry) GetVariants() []InboundVariant { + if m != nil { + return m.Variants + } + return nil +} + +func (m *PendingInboundEntry) GetCreatedAtHeight() uint64 { + if m != nil { + return m.CreatedAtHeight + } + return 0 +} + +// ExpiredInboundEntry preserves the full per-variant audit trail of an +// inbound that failed to reach quorum on any variant. Consumed by the +// future escape-hatch refund flow. +type ExpiredInboundEntry struct { + UtxKey string `protobuf:"bytes,1,opt,name=utx_key,json=utxKey,proto3" json:"utx_key,omitempty"` + // Each variant carries its terminal_status (EXPIRED or REJECTED). + Variants []InboundVariant `protobuf:"bytes,2,rep,name=variants,proto3" json:"variants"` + // Block height when the entry was moved here (i.e. when the LAST + // variant's ballot reached a terminal state). + ExpiredAtHeight uint64 `protobuf:"varint,3,opt,name=expired_at_height,json=expiredAtHeight,proto3" json:"expired_at_height,omitempty"` +} + +func (m *ExpiredInboundEntry) Reset() { *m = ExpiredInboundEntry{} } +func (m *ExpiredInboundEntry) String() string { return proto.CompactTextString(m) } +func (*ExpiredInboundEntry) ProtoMessage() {} +func (*ExpiredInboundEntry) Descriptor() ([]byte, []int) { + return fileDescriptor_10401a4d393338fe, []int{2} +} +func (m *ExpiredInboundEntry) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExpiredInboundEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ExpiredInboundEntry.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 *ExpiredInboundEntry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExpiredInboundEntry.Merge(m, src) +} +func (m *ExpiredInboundEntry) XXX_Size() int { + return m.Size() +} +func (m *ExpiredInboundEntry) XXX_DiscardUnknown() { + xxx_messageInfo_ExpiredInboundEntry.DiscardUnknown(m) +} + +var xxx_messageInfo_ExpiredInboundEntry proto.InternalMessageInfo + +func (m *ExpiredInboundEntry) GetUtxKey() string { + if m != nil { + return m.UtxKey + } + return "" +} + +func (m *ExpiredInboundEntry) GetVariants() []InboundVariant { + if m != nil { + return m.Variants + } + return nil +} + +func (m *ExpiredInboundEntry) GetExpiredAtHeight() uint64 { + if m != nil { + return m.ExpiredAtHeight + } + return 0 +} + +// OutboundObservationVariant captures one OutboundObservation variant +// submitted by one or more validators against a single outbound (the +// outbound itself is deterministic — chain-side at outbound creation — +// so all variants share the same outbound_id). Multiple variants exist +// when validators see different destination-chain results (different +// success/tx_hash/error_msg/gas_fee_used). +// +// NOTE: Unlike inbound variants, outbound variants do not carry a +// terminal_status field. Outbound PendingOutbounds entries persist +// until validators reach consensus (existing inline removal in +// msg_vote_outbound.go on PASSED). Operators investigate stuck +// outbounds by correlating each variant's ballot_id with the +// uvalidator ballot status separately. +type OutboundObservationVariant struct { + // ballot_id == sha256(utxId:outboundId:marshal(observedTx)). + BallotId string `protobuf:"bytes,1,opt,name=ballot_id,json=ballotId,proto3" json:"ballot_id,omitempty"` + // The exact OutboundObservation that produced this ballot_id. + ObservedTx OutboundObservation `protobuf:"bytes,2,opt,name=observed_tx,json=observedTx,proto3" json:"observed_tx"` + // Validator addresses (bech32) that voted on this exact variant. + Voters []string `protobuf:"bytes,3,rep,name=voters,proto3" json:"voters,omitempty"` + // Block height of the first vote on this variant. + FirstVotedAtHeight uint64 `protobuf:"varint,4,opt,name=first_voted_at_height,json=firstVotedAtHeight,proto3" json:"first_voted_at_height,omitempty"` + // Block height of the most recent vote on this variant. + LastVotedAtHeight uint64 `protobuf:"varint,5,opt,name=last_voted_at_height,json=lastVotedAtHeight,proto3" json:"last_voted_at_height,omitempty"` +} + +func (m *OutboundObservationVariant) Reset() { *m = OutboundObservationVariant{} } +func (m *OutboundObservationVariant) String() string { return proto.CompactTextString(m) } +func (*OutboundObservationVariant) ProtoMessage() {} +func (*OutboundObservationVariant) Descriptor() ([]byte, []int) { + return fileDescriptor_10401a4d393338fe, []int{3} +} +func (m *OutboundObservationVariant) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OutboundObservationVariant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OutboundObservationVariant.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 *OutboundObservationVariant) XXX_Merge(src proto.Message) { + xxx_messageInfo_OutboundObservationVariant.Merge(m, src) +} +func (m *OutboundObservationVariant) XXX_Size() int { + return m.Size() +} +func (m *OutboundObservationVariant) XXX_DiscardUnknown() { + xxx_messageInfo_OutboundObservationVariant.DiscardUnknown(m) +} + +var xxx_messageInfo_OutboundObservationVariant proto.InternalMessageInfo + +func (m *OutboundObservationVariant) GetBallotId() string { + if m != nil { + return m.BallotId + } + return "" +} + +func (m *OutboundObservationVariant) GetObservedTx() OutboundObservation { + if m != nil { + return m.ObservedTx + } + return OutboundObservation{} +} + +func (m *OutboundObservationVariant) GetVoters() []string { + if m != nil { + return m.Voters + } + return nil +} + +func (m *OutboundObservationVariant) GetFirstVotedAtHeight() uint64 { + if m != nil { + return m.FirstVotedAtHeight + } + return 0 +} + +func (m *OutboundObservationVariant) GetLastVotedAtHeight() uint64 { + if m != nil { + return m.LastVotedAtHeight + } + return 0 +} + +func init() { + proto.RegisterType((*InboundVariant)(nil), "uexecutor.v1.InboundVariant") + proto.RegisterType((*PendingInboundEntry)(nil), "uexecutor.v1.PendingInboundEntry") + proto.RegisterType((*ExpiredInboundEntry)(nil), "uexecutor.v1.ExpiredInboundEntry") + proto.RegisterType((*OutboundObservationVariant)(nil), "uexecutor.v1.OutboundObservationVariant") +} + +func init() { proto.RegisterFile("uexecutor/v1/pending.proto", fileDescriptor_10401a4d393338fe) } + +var fileDescriptor_10401a4d393338fe = []byte{ + // 505 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x53, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x8d, 0x93, 0x90, 0x36, 0x1b, 0x94, 0xaa, 0x4b, 0x0b, 0x56, 0x8a, 0x5c, 0xd3, 0x93, 0x85, + 0x54, 0x5b, 0x09, 0x12, 0x07, 0x0e, 0x48, 0x44, 0x54, 0x6a, 0xc5, 0xa1, 0x95, 0x41, 0x3d, 0x70, + 0xb1, 0x36, 0xf1, 0x92, 0xac, 0x48, 0x77, 0xa3, 0xf5, 0xac, 0xe5, 0x7c, 0x00, 0x77, 0x3e, 0xa1, + 0x27, 0xbe, 0xa5, 0xc7, 0x1e, 0x39, 0x21, 0x94, 0x5c, 0xf8, 0x0c, 0xe4, 0xdd, 0x4d, 0xdb, 0x40, + 0x0e, 0x9c, 0xe8, 0x6d, 0xc6, 0x6f, 0xde, 0xf8, 0xcd, 0xdb, 0x19, 0xd4, 0x51, 0xb4, 0xa0, 0x43, + 0x05, 0x42, 0x46, 0x79, 0x37, 0x9a, 0x52, 0x9e, 0x32, 0x3e, 0x0a, 0xa7, 0x52, 0x80, 0xc0, 0x0f, + 0x6f, 0xb0, 0x30, 0xef, 0x76, 0x76, 0x46, 0x62, 0x24, 0x34, 0x10, 0x95, 0x91, 0xa9, 0xe9, 0xb8, + 0x2b, 0x7c, 0x98, 0x4d, 0x69, 0x66, 0x91, 0x8e, 0xca, 0xc9, 0x84, 0xa5, 0xc4, 0x42, 0x03, 0x32, + 0x99, 0x08, 0x30, 0xd8, 0xc1, 0xb7, 0x2a, 0x6a, 0x9f, 0xf0, 0x81, 0x50, 0x3c, 0x3d, 0x27, 0x92, + 0x11, 0x0e, 0x78, 0x0f, 0x35, 0x4d, 0x49, 0xc2, 0x52, 0xd7, 0xf1, 0x9d, 0xa0, 0x19, 0x6f, 0x9a, + 0x0f, 0x27, 0x29, 0x8e, 0xd0, 0x06, 0x33, 0xe5, 0x6e, 0xd5, 0x77, 0x82, 0x56, 0x6f, 0x37, 0xbc, + 0xab, 0x2d, 0xb4, 0xbd, 0xe2, 0x65, 0x15, 0x7e, 0x8c, 0x1a, 0xb9, 0x00, 0x2a, 0x33, 0xb7, 0xe6, + 0xd7, 0x82, 0x66, 0x6c, 0x33, 0xdc, 0x45, 0xbb, 0x9f, 0x98, 0xcc, 0x20, 0x29, 0xf3, 0x34, 0x21, + 0x90, 0x8c, 0x29, 0x1b, 0x8d, 0xc1, 0xad, 0xfb, 0x4e, 0x50, 0x8f, 0xb1, 0x06, 0xcf, 0x4b, 0xec, + 0x0d, 0x1c, 0x6b, 0x04, 0x47, 0x68, 0x67, 0x42, 0xd6, 0x30, 0x1e, 0x68, 0xc6, 0x76, 0x89, 0xad, + 0x12, 0xde, 0xa2, 0x2d, 0xa0, 0xf2, 0x82, 0x71, 0x32, 0x49, 0x32, 0x20, 0xa0, 0x32, 0xb7, 0xe1, + 0x3b, 0x41, 0xbb, 0xb7, 0x17, 0xde, 0x5a, 0x52, 0xaa, 0xee, 0xeb, 0xf1, 0xde, 0xeb, 0x92, 0xb8, + 0xbd, 0xe4, 0x98, 0xfc, 0x55, 0xfd, 0xd7, 0xe5, 0xbe, 0x73, 0x70, 0xe9, 0xa0, 0x47, 0x67, 0xe6, + 0x51, 0xec, 0x8c, 0x47, 0x1c, 0xe4, 0x0c, 0x3f, 0x41, 0x1b, 0x0a, 0x8a, 0xe4, 0x33, 0x9d, 0x59, + 0xaf, 0x1a, 0x0a, 0x8a, 0x77, 0x74, 0x86, 0x5f, 0xa3, 0xcd, 0xdc, 0x38, 0x9a, 0xb9, 0x55, 0xbf, + 0x16, 0xb4, 0x7a, 0x4f, 0xd7, 0x5a, 0x65, 0x6d, 0xef, 0xd7, 0xaf, 0x7e, 0xec, 0x57, 0xe2, 0x1b, + 0x0e, 0x7e, 0x8e, 0xb6, 0x87, 0x92, 0x92, 0xd5, 0x51, 0x6b, 0x7a, 0xd4, 0x2d, 0x0b, 0x2c, 0x07, + 0xbd, 0x23, 0xf1, 0xa8, 0x98, 0x32, 0x49, 0xd3, 0xff, 0x26, 0x91, 0x9a, 0xff, 0xfd, 0x2d, 0xd1, + 0x02, 0x7f, 0x48, 0xfc, 0x52, 0x45, 0x9d, 0x53, 0x05, 0xba, 0xeb, 0xe9, 0x20, 0xa3, 0x32, 0x27, + 0xc0, 0x04, 0xff, 0xa7, 0xd5, 0x3b, 0x46, 0x2d, 0xa1, 0x29, 0x34, 0x4d, 0xa0, 0xb0, 0xeb, 0xf7, + 0x6c, 0x55, 0xf0, 0x9a, 0xde, 0x56, 0x35, 0x5a, 0x72, 0x3f, 0x14, 0xf7, 0xb9, 0x93, 0xc6, 0x87, + 0xfe, 0xd9, 0xd5, 0xdc, 0x73, 0xae, 0xe7, 0x9e, 0xf3, 0x73, 0xee, 0x39, 0x5f, 0x17, 0x5e, 0xe5, + 0x7a, 0xe1, 0x55, 0xbe, 0x2f, 0xbc, 0xca, 0xc7, 0x97, 0x23, 0x06, 0x63, 0x35, 0x08, 0x87, 0xe2, + 0x22, 0x9a, 0xaa, 0x6c, 0x3c, 0x1c, 0x13, 0xc6, 0x75, 0x74, 0xa8, 0xc3, 0x43, 0x2e, 0x52, 0x1a, + 0x15, 0xd1, 0xed, 0xb5, 0xeb, 0x53, 0x1f, 0x34, 0xf4, 0x3d, 0xbf, 0xf8, 0x1d, 0x00, 0x00, 0xff, + 0xff, 0x4f, 0xc6, 0x0d, 0x22, 0x47, 0x04, 0x00, 0x00, +} + +func (this *InboundVariant) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*InboundVariant) + if !ok { + that2, ok := that.(InboundVariant) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.BallotId != that1.BallotId { + return false + } + if !this.Inbound.Equal(that1.Inbound) { + return false + } + if len(this.Voters) != len(that1.Voters) { + return false + } + for i := range this.Voters { + if this.Voters[i] != that1.Voters[i] { + return false + } + } + if this.FirstVotedAtHeight != that1.FirstVotedAtHeight { + return false + } + if this.LastVotedAtHeight != that1.LastVotedAtHeight { + return false + } + if this.TerminalStatus != that1.TerminalStatus { + return false + } + return true +} +func (this *PendingInboundEntry) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*PendingInboundEntry) + if !ok { + that2, ok := that.(PendingInboundEntry) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.UtxKey != that1.UtxKey { + return false + } + if len(this.Variants) != len(that1.Variants) { + return false + } + for i := range this.Variants { + if !this.Variants[i].Equal(&that1.Variants[i]) { + return false + } + } + if this.CreatedAtHeight != that1.CreatedAtHeight { + return false + } + return true +} +func (this *ExpiredInboundEntry) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*ExpiredInboundEntry) + if !ok { + that2, ok := that.(ExpiredInboundEntry) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.UtxKey != that1.UtxKey { + return false + } + if len(this.Variants) != len(that1.Variants) { + return false + } + for i := range this.Variants { + if !this.Variants[i].Equal(&that1.Variants[i]) { + return false + } + } + if this.ExpiredAtHeight != that1.ExpiredAtHeight { + return false + } + return true +} +func (this *OutboundObservationVariant) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OutboundObservationVariant) + if !ok { + that2, ok := that.(OutboundObservationVariant) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.BallotId != that1.BallotId { + return false + } + if !this.ObservedTx.Equal(&that1.ObservedTx) { + return false + } + if len(this.Voters) != len(that1.Voters) { + return false + } + for i := range this.Voters { + if this.Voters[i] != that1.Voters[i] { + return false + } + } + if this.FirstVotedAtHeight != that1.FirstVotedAtHeight { + return false + } + if this.LastVotedAtHeight != that1.LastVotedAtHeight { + return false + } + return true +} +func (m *InboundVariant) 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 *InboundVariant) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *InboundVariant) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.TerminalStatus != 0 { + i = encodeVarintPending(dAtA, i, uint64(m.TerminalStatus)) + i-- + dAtA[i] = 0x30 + } + if m.LastVotedAtHeight != 0 { + i = encodeVarintPending(dAtA, i, uint64(m.LastVotedAtHeight)) + i-- + dAtA[i] = 0x28 + } + if m.FirstVotedAtHeight != 0 { + i = encodeVarintPending(dAtA, i, uint64(m.FirstVotedAtHeight)) + i-- + dAtA[i] = 0x20 + } + if len(m.Voters) > 0 { + for iNdEx := len(m.Voters) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Voters[iNdEx]) + copy(dAtA[i:], m.Voters[iNdEx]) + i = encodeVarintPending(dAtA, i, uint64(len(m.Voters[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if m.Inbound != nil { + { + size, err := m.Inbound.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPending(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.BallotId) > 0 { + i -= len(m.BallotId) + copy(dAtA[i:], m.BallotId) + i = encodeVarintPending(dAtA, i, uint64(len(m.BallotId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PendingInboundEntry) 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 *PendingInboundEntry) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PendingInboundEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CreatedAtHeight != 0 { + i = encodeVarintPending(dAtA, i, uint64(m.CreatedAtHeight)) + i-- + dAtA[i] = 0x18 + } + if len(m.Variants) > 0 { + for iNdEx := len(m.Variants) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Variants[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPending(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.UtxKey) > 0 { + i -= len(m.UtxKey) + copy(dAtA[i:], m.UtxKey) + i = encodeVarintPending(dAtA, i, uint64(len(m.UtxKey))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ExpiredInboundEntry) 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 *ExpiredInboundEntry) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExpiredInboundEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ExpiredAtHeight != 0 { + i = encodeVarintPending(dAtA, i, uint64(m.ExpiredAtHeight)) + i-- + dAtA[i] = 0x18 + } + if len(m.Variants) > 0 { + for iNdEx := len(m.Variants) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Variants[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPending(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.UtxKey) > 0 { + i -= len(m.UtxKey) + copy(dAtA[i:], m.UtxKey) + i = encodeVarintPending(dAtA, i, uint64(len(m.UtxKey))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *OutboundObservationVariant) 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 *OutboundObservationVariant) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OutboundObservationVariant) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastVotedAtHeight != 0 { + i = encodeVarintPending(dAtA, i, uint64(m.LastVotedAtHeight)) + i-- + dAtA[i] = 0x28 + } + if m.FirstVotedAtHeight != 0 { + i = encodeVarintPending(dAtA, i, uint64(m.FirstVotedAtHeight)) + i-- + dAtA[i] = 0x20 + } + if len(m.Voters) > 0 { + for iNdEx := len(m.Voters) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Voters[iNdEx]) + copy(dAtA[i:], m.Voters[iNdEx]) + i = encodeVarintPending(dAtA, i, uint64(len(m.Voters[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.ObservedTx.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPending(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.BallotId) > 0 { + i -= len(m.BallotId) + copy(dAtA[i:], m.BallotId) + i = encodeVarintPending(dAtA, i, uint64(len(m.BallotId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintPending(dAtA []byte, offset int, v uint64) int { + offset -= sovPending(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *InboundVariant) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BallotId) + if l > 0 { + n += 1 + l + sovPending(uint64(l)) + } + if m.Inbound != nil { + l = m.Inbound.Size() + n += 1 + l + sovPending(uint64(l)) + } + if len(m.Voters) > 0 { + for _, s := range m.Voters { + l = len(s) + n += 1 + l + sovPending(uint64(l)) + } + } + if m.FirstVotedAtHeight != 0 { + n += 1 + sovPending(uint64(m.FirstVotedAtHeight)) + } + if m.LastVotedAtHeight != 0 { + n += 1 + sovPending(uint64(m.LastVotedAtHeight)) + } + if m.TerminalStatus != 0 { + n += 1 + sovPending(uint64(m.TerminalStatus)) + } + return n +} + +func (m *PendingInboundEntry) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.UtxKey) + if l > 0 { + n += 1 + l + sovPending(uint64(l)) + } + if len(m.Variants) > 0 { + for _, e := range m.Variants { + l = e.Size() + n += 1 + l + sovPending(uint64(l)) + } + } + if m.CreatedAtHeight != 0 { + n += 1 + sovPending(uint64(m.CreatedAtHeight)) + } + return n +} + +func (m *ExpiredInboundEntry) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.UtxKey) + if l > 0 { + n += 1 + l + sovPending(uint64(l)) + } + if len(m.Variants) > 0 { + for _, e := range m.Variants { + l = e.Size() + n += 1 + l + sovPending(uint64(l)) + } + } + if m.ExpiredAtHeight != 0 { + n += 1 + sovPending(uint64(m.ExpiredAtHeight)) + } + return n +} + +func (m *OutboundObservationVariant) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BallotId) + if l > 0 { + n += 1 + l + sovPending(uint64(l)) + } + l = m.ObservedTx.Size() + n += 1 + l + sovPending(uint64(l)) + if len(m.Voters) > 0 { + for _, s := range m.Voters { + l = len(s) + n += 1 + l + sovPending(uint64(l)) + } + } + if m.FirstVotedAtHeight != 0 { + n += 1 + sovPending(uint64(m.FirstVotedAtHeight)) + } + if m.LastVotedAtHeight != 0 { + n += 1 + sovPending(uint64(m.LastVotedAtHeight)) + } + return n +} + +func sovPending(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozPending(x uint64) (n int) { + return sovPending(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *InboundVariant) 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 ErrIntOverflowPending + } + 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: InboundVariant: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: InboundVariant: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BallotId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + 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 ErrInvalidLengthPending + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BallotId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Inbound", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPending + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Inbound == nil { + m.Inbound = &Inbound{} + } + if err := m.Inbound.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Voters", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + 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 ErrInvalidLengthPending + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Voters = append(m.Voters, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FirstVotedAtHeight", wireType) + } + m.FirstVotedAtHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.FirstVotedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastVotedAtHeight", wireType) + } + m.LastVotedAtHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastVotedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TerminalStatus", wireType) + } + m.TerminalStatus = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TerminalStatus |= types.BallotStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipPending(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPending + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PendingInboundEntry) 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 ErrIntOverflowPending + } + 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: PendingInboundEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PendingInboundEntry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UtxKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + 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 ErrInvalidLengthPending + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UtxKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Variants", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPending + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Variants = append(m.Variants, InboundVariant{}) + if err := m.Variants[len(m.Variants)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreatedAtHeight", wireType) + } + m.CreatedAtHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CreatedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipPending(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPending + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExpiredInboundEntry) 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 ErrIntOverflowPending + } + 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: ExpiredInboundEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExpiredInboundEntry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UtxKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + 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 ErrInvalidLengthPending + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UtxKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Variants", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPending + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Variants = append(m.Variants, InboundVariant{}) + if err := m.Variants[len(m.Variants)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpiredAtHeight", wireType) + } + m.ExpiredAtHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpiredAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipPending(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPending + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OutboundObservationVariant) 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 ErrIntOverflowPending + } + 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: OutboundObservationVariant: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OutboundObservationVariant: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BallotId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + 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 ErrInvalidLengthPending + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BallotId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedTx", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPending + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObservedTx.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Voters", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + 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 ErrInvalidLengthPending + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPending + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Voters = append(m.Voters, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FirstVotedAtHeight", wireType) + } + m.FirstVotedAtHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.FirstVotedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastVotedAtHeight", wireType) + } + m.LastVotedAtHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPending + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastVotedAtHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipPending(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPending + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipPending(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPending + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPending + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPending + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthPending + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupPending + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthPending + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthPending = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowPending = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupPending = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/uexecutor/types/query.pb.go b/x/uexecutor/types/query.pb.go index 1f2d6c20..39df9bde 100644 --- a/x/uexecutor/types/query.pb.go +++ b/x/uexecutor/types/query.pb.go @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" @@ -530,8 +531,9 @@ func (m *QueryAllPendingInboundsRequest) GetPagination() *query.PageRequest { } type QueryAllPendingInboundsResponse struct { - InboundIds []string `protobuf:"bytes,1,rep,name=inbound_ids,json=inboundIds,proto3" json:"inbound_ids,omitempty"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + // Full per-variant audit-trail entries. + Entries []PendingInboundEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (m *QueryAllPendingInboundsResponse) Reset() { *m = QueryAllPendingInboundsResponse{} } @@ -567,9 +569,9 @@ func (m *QueryAllPendingInboundsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAllPendingInboundsResponse proto.InternalMessageInfo -func (m *QueryAllPendingInboundsResponse) GetInboundIds() []string { +func (m *QueryAllPendingInboundsResponse) GetEntries() []PendingInboundEntry { if m != nil { - return m.InboundIds + return m.Entries } return nil } @@ -581,6 +583,103 @@ func (m *QueryAllPendingInboundsResponse) GetPagination() *query.PageResponse { return nil } +// Expired Inbounds +type QueryAllExpiredInboundsRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllExpiredInboundsRequest) Reset() { *m = QueryAllExpiredInboundsRequest{} } +func (m *QueryAllExpiredInboundsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllExpiredInboundsRequest) ProtoMessage() {} +func (*QueryAllExpiredInboundsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_94816af5d57d33a7, []int{12} +} +func (m *QueryAllExpiredInboundsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllExpiredInboundsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllExpiredInboundsRequest.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 *QueryAllExpiredInboundsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllExpiredInboundsRequest.Merge(m, src) +} +func (m *QueryAllExpiredInboundsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllExpiredInboundsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllExpiredInboundsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllExpiredInboundsRequest proto.InternalMessageInfo + +func (m *QueryAllExpiredInboundsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllExpiredInboundsResponse struct { + Entries []ExpiredInboundEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllExpiredInboundsResponse) Reset() { *m = QueryAllExpiredInboundsResponse{} } +func (m *QueryAllExpiredInboundsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllExpiredInboundsResponse) ProtoMessage() {} +func (*QueryAllExpiredInboundsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_94816af5d57d33a7, []int{13} +} +func (m *QueryAllExpiredInboundsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllExpiredInboundsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllExpiredInboundsResponse.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 *QueryAllExpiredInboundsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllExpiredInboundsResponse.Merge(m, src) +} +func (m *QueryAllExpiredInboundsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllExpiredInboundsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllExpiredInboundsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllExpiredInboundsResponse proto.InternalMessageInfo + +func (m *QueryAllExpiredInboundsResponse) GetEntries() []ExpiredInboundEntry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *QueryAllExpiredInboundsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + // Get UniversalTx type QueryGetUniversalTxRequest struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` @@ -590,7 +689,7 @@ func (m *QueryGetUniversalTxRequest) Reset() { *m = QueryGetUniversalTxR func (m *QueryGetUniversalTxRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetUniversalTxRequest) ProtoMessage() {} func (*QueryGetUniversalTxRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{12} + return fileDescriptor_94816af5d57d33a7, []int{14} } func (m *QueryGetUniversalTxRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -634,7 +733,7 @@ func (m *QueryGetUniversalTxResponse) Reset() { *m = QueryGetUniversalTx func (m *QueryGetUniversalTxResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetUniversalTxResponse) ProtoMessage() {} func (*QueryGetUniversalTxResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{13} + return fileDescriptor_94816af5d57d33a7, []int{15} } func (m *QueryGetUniversalTxResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -678,7 +777,7 @@ func (m *QueryAllUniversalTxRequest) Reset() { *m = QueryAllUniversalTxR func (m *QueryAllUniversalTxRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllUniversalTxRequest) ProtoMessage() {} func (*QueryAllUniversalTxRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{14} + return fileDescriptor_94816af5d57d33a7, []int{16} } func (m *QueryAllUniversalTxRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -723,7 +822,7 @@ func (m *QueryAllUniversalTxResponse) Reset() { *m = QueryAllUniversalTx func (m *QueryAllUniversalTxResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllUniversalTxResponse) ProtoMessage() {} func (*QueryAllUniversalTxResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{15} + return fileDescriptor_94816af5d57d33a7, []int{17} } func (m *QueryAllUniversalTxResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -766,18 +865,26 @@ func (m *QueryAllUniversalTxResponse) GetPagination() *query.PageResponse { return nil } -// Pending outbound index entry +// Pending outbound index entry. Created by chain code at outbound creation +// (see create_outbound.go). Removed only when validators reach consensus +// on an OutboundObservation (see msg_vote_outbound.go). Ballot expiry does +// NOT remove the entry — operators investigate stuck outbounds via the +// per-variant audit trail (variants below) plus separate uvalidator ballot +// queries to see which ballots have terminated. See +// plan-pending-outbound-cleanup.md for design rationale. type PendingOutboundEntry struct { OutboundId string `protobuf:"bytes,1,opt,name=outbound_id,json=outboundId,proto3" json:"outbound_id,omitempty"` UniversalTxId string `protobuf:"bytes,2,opt,name=universal_tx_id,json=universalTxId,proto3" json:"universal_tx_id,omitempty"` CreatedAt int64 `protobuf:"varint,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // Per-variant audit trail, populated as votes arrive (RecordOutboundVote). + Variants []OutboundObservationVariant `protobuf:"bytes,4,rep,name=variants,proto3" json:"variants"` } func (m *PendingOutboundEntry) Reset() { *m = PendingOutboundEntry{} } func (m *PendingOutboundEntry) String() string { return proto.CompactTextString(m) } func (*PendingOutboundEntry) ProtoMessage() {} func (*PendingOutboundEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{16} + return fileDescriptor_94816af5d57d33a7, []int{18} } func (m *PendingOutboundEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -827,6 +934,13 @@ func (m *PendingOutboundEntry) GetCreatedAt() int64 { return 0 } +func (m *PendingOutboundEntry) GetVariants() []OutboundObservationVariant { + if m != nil { + return m.Variants + } + return nil +} + type QueryGetPendingOutboundRequest struct { OutboundId string `protobuf:"bytes,1,opt,name=outbound_id,json=outboundId,proto3" json:"outbound_id,omitempty"` } @@ -835,7 +949,7 @@ func (m *QueryGetPendingOutboundRequest) Reset() { *m = QueryGetPendingO func (m *QueryGetPendingOutboundRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetPendingOutboundRequest) ProtoMessage() {} func (*QueryGetPendingOutboundRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{17} + return fileDescriptor_94816af5d57d33a7, []int{19} } func (m *QueryGetPendingOutboundRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -880,7 +994,7 @@ func (m *QueryGetPendingOutboundResponse) Reset() { *m = QueryGetPending func (m *QueryGetPendingOutboundResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetPendingOutboundResponse) ProtoMessage() {} func (*QueryGetPendingOutboundResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{18} + return fileDescriptor_94816af5d57d33a7, []int{20} } func (m *QueryGetPendingOutboundResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -931,7 +1045,7 @@ func (m *QueryAllPendingOutboundsRequest) Reset() { *m = QueryAllPending func (m *QueryAllPendingOutboundsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllPendingOutboundsRequest) ProtoMessage() {} func (*QueryAllPendingOutboundsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{19} + return fileDescriptor_94816af5d57d33a7, []int{21} } func (m *QueryAllPendingOutboundsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -977,7 +1091,7 @@ func (m *QueryAllPendingOutboundsResponse) Reset() { *m = QueryAllPendin func (m *QueryAllPendingOutboundsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllPendingOutboundsResponse) ProtoMessage() {} func (*QueryAllPendingOutboundsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{20} + return fileDescriptor_94816af5d57d33a7, []int{22} } func (m *QueryAllPendingOutboundsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1040,6 +1154,8 @@ func init() { proto.RegisterType((*QueryParamsResponse)(nil), "uexecutor.v1.QueryParamsResponse") proto.RegisterType((*QueryAllPendingInboundsRequest)(nil), "uexecutor.v1.QueryAllPendingInboundsRequest") proto.RegisterType((*QueryAllPendingInboundsResponse)(nil), "uexecutor.v1.QueryAllPendingInboundsResponse") + proto.RegisterType((*QueryAllExpiredInboundsRequest)(nil), "uexecutor.v1.QueryAllExpiredInboundsRequest") + proto.RegisterType((*QueryAllExpiredInboundsResponse)(nil), "uexecutor.v1.QueryAllExpiredInboundsResponse") proto.RegisterType((*QueryGetUniversalTxRequest)(nil), "uexecutor.v1.QueryGetUniversalTxRequest") proto.RegisterType((*QueryGetUniversalTxResponse)(nil), "uexecutor.v1.QueryGetUniversalTxResponse") proto.RegisterType((*QueryAllUniversalTxRequest)(nil), "uexecutor.v1.QueryAllUniversalTxRequest") @@ -1054,76 +1170,82 @@ func init() { func init() { proto.RegisterFile("uexecutor/v1/query.proto", fileDescriptor_94816af5d57d33a7) } var fileDescriptor_94816af5d57d33a7 = []byte{ - // 1090 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x97, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0xc7, 0x3b, 0xa9, 0xb6, 0xdb, 0xbc, 0xfe, 0x40, 0x7a, 0x1b, 0x4a, 0xea, 0xb6, 0x69, 0xea, - 0x2e, 0x6d, 0x58, 0x5a, 0x5b, 0xe9, 0x2e, 0x15, 0x07, 0x84, 0xd4, 0x5d, 0x41, 0x15, 0x69, 0x11, - 0x21, 0x5a, 0x2e, 0x5c, 0xa2, 0x49, 0x3c, 0x4a, 0x2d, 0x5a, 0x3b, 0x1b, 0xdb, 0x55, 0xaa, 0xaa, - 0x20, 0x40, 0x5c, 0x00, 0x09, 0x10, 0x27, 0x84, 0x10, 0x37, 0xf8, 0x57, 0x38, 0xae, 0xc4, 0x85, - 0x23, 0xb4, 0xfc, 0x21, 0x28, 0xe3, 0x19, 0xc7, 0x76, 0xc6, 0x69, 0xb4, 0xca, 0xcd, 0x99, 0x79, - 0x6f, 0xde, 0xe7, 0xfb, 0x66, 0xe6, 0xcd, 0x0b, 0x14, 0x03, 0xd6, 0x67, 0xed, 0xc0, 0x77, 0x7b, - 0xe6, 0x79, 0xd5, 0x7c, 0x1e, 0xb0, 0xde, 0x85, 0xd1, 0xed, 0xb9, 0xbe, 0x8b, 0x8b, 0xd1, 0x8c, - 0x71, 0x5e, 0xd5, 0xd6, 0x3b, 0xae, 0xdb, 0x39, 0x65, 0x26, 0xed, 0xda, 0x26, 0x75, 0x1c, 0xd7, - 0xa7, 0xbe, 0xed, 0x3a, 0x5e, 0x68, 0xab, 0x25, 0x57, 0xf1, 0x2f, 0xba, 0x4c, 0xce, 0xac, 0x27, - 0x66, 0x3a, 0xd4, 0x6b, 0x76, 0x7b, 0x76, 0x9b, 0x89, 0xd9, 0x8d, 0xc4, 0x6c, 0xfb, 0x84, 0xda, - 0x4e, 0xf3, 0x8c, 0xf9, 0x54, 0x4c, 0x3f, 0x68, 0xbb, 0xde, 0x99, 0xeb, 0x99, 0x2d, 0xea, 0xb1, - 0x90, 0xcd, 0x3c, 0xaf, 0xb6, 0x98, 0x4f, 0xab, 0x66, 0x97, 0x76, 0x6c, 0x87, 0x33, 0x84, 0xb6, - 0x7a, 0x15, 0x0a, 0x1f, 0x0d, 0x2c, 0x8e, 0xa9, 0x57, 0x1f, 0x44, 0x68, 0xb0, 0xe7, 0x01, 0xf3, - 0x7c, 0x5c, 0x85, 0xf9, 0x70, 0x5d, 0xdb, 0x2a, 0x92, 0x32, 0xa9, 0xe4, 0x1b, 0x77, 0xf9, 0xef, - 0x9a, 0xa5, 0x3f, 0x85, 0x57, 0x53, 0x2e, 0x5e, 0xd7, 0x75, 0x3c, 0x86, 0x0f, 0x21, 0x1f, 0x91, - 0x72, 0xa7, 0x85, 0x83, 0x15, 0x23, 0x9e, 0x0e, 0x23, 0x72, 0x99, 0xef, 0x88, 0x2f, 0xbd, 0x05, - 0x45, 0xbe, 0xda, 0xd1, 0xe9, 0xa9, 0x9c, 0xf5, 0x24, 0xc4, 0xfb, 0x00, 0x43, 0x60, 0xb1, 0xe2, - 0x8e, 0x11, 0xaa, 0x33, 0x06, 0xea, 0x8c, 0x30, 0xf3, 0x42, 0x9d, 0x51, 0xa7, 0x1d, 0x29, 0xa0, - 0x11, 0xf3, 0xd4, 0x7f, 0x21, 0xb0, 0xaa, 0x08, 0x22, 0xb0, 0xdf, 0x02, 0x88, 0xb0, 0xbd, 0x22, - 0x29, 0xcf, 0x8e, 0xe1, 0xce, 0x4b, 0x6e, 0x0f, 0x8f, 0x13, 0x70, 0x39, 0x0e, 0xb7, 0x7b, 0x2b, - 0x5c, 0x18, 0x33, 0x41, 0x77, 0x20, 0xf2, 0xf9, 0x64, 0x90, 0xdf, 0x0f, 0x98, 0x4f, 0x27, 0xd8, - 0x83, 0x3a, 0xac, 0xa4, 0x7d, 0x84, 0x9a, 0x43, 0x80, 0xe1, 0x81, 0x10, 0x39, 0x7b, 0x2d, 0xa9, - 0x66, 0xe8, 0x94, 0x6f, 0xcb, 0x4f, 0xbd, 0x3d, 0x4c, 0x51, 0x34, 0x3f, 0xf5, 0x8d, 0xf8, 0x8d, - 0x80, 0xa6, 0x8a, 0x22, 0xd8, 0xdf, 0x86, 0x85, 0x21, 0xbb, 0xdc, 0x8a, 0x4c, 0x78, 0x88, 0xe0, - 0xa7, 0xb8, 0x19, 0x05, 0x40, 0x0e, 0x58, 0xa7, 0x3d, 0x7a, 0x26, 0xf5, 0xeb, 0x4f, 0xe0, 0x5e, - 0x62, 0x54, 0xf0, 0xee, 0xc1, 0x5c, 0x97, 0x8f, 0x88, 0x94, 0x14, 0x92, 0xa8, 0xc2, 0x5a, 0xd8, - 0xe8, 0x27, 0x50, 0x92, 0xda, 0xeb, 0xcc, 0xb1, 0x6c, 0xa7, 0x53, 0x73, 0x5a, 0x6e, 0xe0, 0x58, - 0x53, 0x4f, 0xf3, 0xb7, 0x04, 0x36, 0x33, 0x43, 0x09, 0xf6, 0x4d, 0x58, 0xb0, 0xc3, 0xb1, 0xa6, - 0x6d, 0x85, 0xb9, 0xce, 0x37, 0x40, 0x0c, 0xd5, 0xac, 0x29, 0xa6, 0x74, 0x4f, 0xec, 0xf9, 0x31, - 0xf3, 0x3f, 0x76, 0xec, 0x73, 0xd6, 0xf3, 0xe8, 0xe9, 0xb3, 0xbe, 0xd4, 0xbc, 0x0c, 0xb9, 0xe8, - 0x78, 0xe7, 0x6c, 0x4b, 0xa7, 0xb0, 0xa6, 0xb4, 0x16, 0xd8, 0x8f, 0x61, 0x31, 0x90, 0xc3, 0x4d, - 0xbf, 0x2f, 0x92, 0xb4, 0x99, 0x4c, 0x7c, 0xcc, 0xf1, 0x29, 0xeb, 0xd0, 0xf6, 0x45, 0x63, 0x21, - 0x18, 0x0e, 0xe9, 0xd6, 0xf0, 0x10, 0x2a, 0x80, 0xa6, 0xb5, 0x09, 0xbf, 0x13, 0xa1, 0x24, 0x1d, - 0x46, 0x28, 0x79, 0x17, 0x96, 0xe2, 0x4a, 0xe4, 0x71, 0x5f, 0xcd, 0x94, 0xd2, 0x58, 0x8c, 0x89, - 0x98, 0xe2, 0xfe, 0x7c, 0x06, 0x05, 0x71, 0x48, 0x3e, 0x0c, 0x7c, 0xbe, 0xfd, 0xef, 0x39, 0x7e, - 0xef, 0x62, 0x70, 0x42, 0x5c, 0x31, 0x30, 0xac, 0x40, 0x20, 0x87, 0x6a, 0x16, 0xee, 0xc0, 0x2b, - 0x71, 0x05, 0x03, 0xa3, 0x1c, 0x37, 0x5a, 0x8a, 0x81, 0xd6, 0x2c, 0xdc, 0x00, 0x68, 0xf7, 0x18, - 0xf5, 0x99, 0xd5, 0xa4, 0x7e, 0x71, 0xb6, 0x4c, 0x2a, 0xb3, 0x8d, 0xbc, 0x18, 0x39, 0xf2, 0xf5, - 0x23, 0x71, 0x2f, 0x8e, 0x99, 0x9f, 0xe2, 0x90, 0x5b, 0x72, 0x1b, 0x89, 0xfe, 0xa3, 0x3c, 0xf0, - 0xaa, 0x35, 0xa2, 0xe2, 0x72, 0x87, 0x0d, 0x74, 0x89, 0x2d, 0xd5, 0x53, 0x77, 0x55, 0x91, 0x81, - 0x46, 0xe8, 0x80, 0x8f, 0x60, 0x5e, 0xc6, 0x12, 0x79, 0x2e, 0x26, 0x9d, 0xa5, 0xd7, 0xb3, 0x7e, - 0x23, 0xb2, 0xd4, 0xed, 0x91, 0x3b, 0x28, 0xcd, 0xa6, 0x7e, 0xdf, 0xff, 0x25, 0x50, 0xce, 0x8e, - 0x25, 0xf4, 0xbf, 0x03, 0x77, 0x07, 0x72, 0xec, 0xe8, 0x8d, 0x9b, 0x24, 0x03, 0xd2, 0x05, 0x0f, - 0x21, 0x2f, 0x95, 0x79, 0xc5, 0x1c, 0xf7, 0xcf, 0x4e, 0xc2, 0xd0, 0x34, 0x75, 0x4a, 0x67, 0x5f, - 0xfa, 0x94, 0x1e, 0x7c, 0xb7, 0x00, 0x77, 0xb8, 0x46, 0xfc, 0x14, 0xe6, 0xc2, 0xca, 0x8a, 0xe5, - 0x24, 0xc1, 0x68, 0xe1, 0xd6, 0xb6, 0xc6, 0x58, 0x84, 0x41, 0xf4, 0xf5, 0x2f, 0xff, 0xfa, 0xef, - 0xa7, 0xdc, 0x0a, 0x16, 0xcc, 0x44, 0x57, 0x15, 0x16, 0x6d, 0xfc, 0x99, 0x00, 0x8e, 0x56, 0x51, - 0xdc, 0x53, 0xac, 0x9b, 0x59, 0xd7, 0xb5, 0xfd, 0x09, 0xad, 0x05, 0xd1, 0x0e, 0x27, 0x2a, 0x63, - 0x29, 0x45, 0x14, 0x9a, 0x37, 0x6d, 0x09, 0xf1, 0x3d, 0x81, 0xe5, 0x64, 0x99, 0xc4, 0x8a, 0x22, - 0x92, 0xb2, 0xee, 0x6a, 0x6f, 0x4c, 0x60, 0x29, 0x78, 0x2a, 0x9c, 0x47, 0xc7, 0x72, 0x92, 0x27, - 0x51, 0xbd, 0xcc, 0x4b, 0xdb, 0xba, 0xc2, 0x6f, 0x08, 0x2c, 0x27, 0xcb, 0x9d, 0x92, 0x48, 0x59, - 0x78, 0x95, 0x44, 0xea, 0xda, 0xa9, 0x6f, 0x73, 0xa2, 0x0d, 0x5c, 0x1b, 0x43, 0x84, 0x9f, 0xc3, - 0xbc, 0xec, 0xdb, 0x50, 0x57, 0xa9, 0x4d, 0xb6, 0xbc, 0xda, 0xf6, 0x58, 0x1b, 0x11, 0xf9, 0x01, - 0x8f, 0x7c, 0x1f, 0x75, 0x53, 0xdd, 0xa1, 0x9b, 0x97, 0xb2, 0x65, 0xbb, 0xc2, 0x2f, 0x08, 0x2c, - 0xc6, 0x3b, 0x4e, 0xdc, 0x51, 0x2b, 0x4c, 0xf7, 0xbd, 0xda, 0xee, 0xad, 0x76, 0x82, 0xa6, 0xcc, - 0x69, 0x34, 0x2c, 0x66, 0xd0, 0x78, 0xf8, 0x15, 0x81, 0x7c, 0xd4, 0x32, 0xa1, 0x4a, 0x62, 0xba, - 0xed, 0xd4, 0xee, 0x8f, 0x37, 0x12, 0xa1, 0xdf, 0xe4, 0xa1, 0x5f, 0xc7, 0x6d, 0x33, 0xe3, 0xcf, - 0x48, 0x3c, 0x13, 0x5f, 0x13, 0x58, 0x4a, 0xb4, 0x7c, 0x98, 0x21, 0x71, 0xa4, 0xf5, 0xd4, 0x2a, - 0xb7, 0x1b, 0x0a, 0xa2, 0x2d, 0x4e, 0xb4, 0x86, 0xab, 0x59, 0x44, 0x1e, 0xfe, 0x41, 0x00, 0x47, - 0x9f, 0x08, 0xe5, 0x6d, 0xce, 0x7c, 0x8d, 0x94, 0xb7, 0x39, 0xfb, 0xdd, 0xd1, 0x1f, 0x71, 0x2c, - 0x03, 0xf7, 0xd4, 0xb7, 0x59, 0x96, 0x4a, 0xf3, 0x32, 0xf6, 0xc4, 0x5d, 0xe1, 0xaf, 0x04, 0xee, - 0x29, 0xaa, 0x39, 0x8e, 0x2f, 0x25, 0xe9, 0x17, 0x46, 0x33, 0x26, 0x35, 0x17, 0xb0, 0xbb, 0x1c, - 0x76, 0x0b, 0x37, 0xc7, 0xc3, 0x7a, 0x8f, 0xeb, 0x7f, 0x5e, 0x97, 0xc8, 0x8b, 0xeb, 0x12, 0xf9, - 0xe7, 0xba, 0x44, 0x7e, 0xb8, 0x29, 0xcd, 0xbc, 0xb8, 0x29, 0xcd, 0xfc, 0x7d, 0x53, 0x9a, 0xf9, - 0xe4, 0xb0, 0x63, 0xfb, 0x27, 0x41, 0xcb, 0x68, 0xbb, 0x67, 0x66, 0x37, 0xf0, 0x4e, 0x78, 0xfe, - 0xf9, 0xd7, 0x3e, 0xff, 0xdc, 0x77, 0x5c, 0x8b, 0x99, 0xfd, 0x58, 0x00, 0xfe, 0xc7, 0xb7, 0x35, - 0xc7, 0xff, 0x90, 0x3e, 0xfc, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xe5, 0x73, 0xda, 0x5b, 0x0f, - 0x00, 0x00, + // 1194 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x98, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0xc7, 0x3b, 0xe9, 0x6e, 0xb7, 0x79, 0xfd, 0x81, 0x34, 0x1b, 0x4a, 0xea, 0xb6, 0x69, 0xea, + 0x2e, 0x6d, 0x58, 0x5a, 0x5b, 0xed, 0x2e, 0x15, 0x07, 0x84, 0xd4, 0xae, 0x96, 0xaa, 0x68, 0xd1, + 0x86, 0x68, 0xe1, 0xc0, 0xa5, 0x9a, 0xc4, 0x23, 0xd7, 0xa2, 0xb5, 0xb3, 0xb6, 0x13, 0x25, 0xaa, + 0x2a, 0x04, 0x88, 0x0b, 0x17, 0x40, 0x9c, 0x10, 0x42, 0xdc, 0x80, 0x0b, 0xff, 0xc7, 0x8a, 0xd3, + 0x4a, 0x5c, 0x38, 0x21, 0x68, 0xf9, 0x43, 0x50, 0xc6, 0x33, 0x8e, 0xc7, 0x19, 0xa7, 0x11, 0x0a, + 0x7b, 0x73, 0xe6, 0xbd, 0xe7, 0xf7, 0xf9, 0xbe, 0x99, 0x79, 0x33, 0x0e, 0x14, 0x5b, 0xb4, 0x43, + 0x1b, 0xad, 0xd0, 0xf3, 0xcd, 0xf6, 0x8e, 0xf9, 0xb4, 0x45, 0xfd, 0xae, 0xd1, 0xf4, 0xbd, 0xd0, + 0xc3, 0xb3, 0xb1, 0xc5, 0x68, 0xef, 0x68, 0x05, 0xdb, 0xb3, 0x3d, 0x66, 0x30, 0x7b, 0x4f, 0x91, + 0x8f, 0xb6, 0x6c, 0x7b, 0x9e, 0x7d, 0x4a, 0x4d, 0xd2, 0x74, 0x4c, 0xe2, 0xba, 0x5e, 0x48, 0x42, + 0xc7, 0x73, 0x03, 0x6e, 0x95, 0xdf, 0x1d, 0x76, 0x9b, 0x54, 0x58, 0x96, 0x25, 0x8b, 0x4d, 0x82, + 0xe3, 0xa6, 0xef, 0x34, 0x28, 0xb7, 0xae, 0x48, 0xd6, 0xc6, 0x09, 0x71, 0xdc, 0xe3, 0x33, 0x1a, + 0x12, 0x6e, 0xd6, 0x24, 0x73, 0x93, 0xba, 0x96, 0xe3, 0xda, 0xdc, 0x76, 0xb7, 0xe1, 0x05, 0x67, + 0x5e, 0x60, 0xd6, 0x49, 0x40, 0x23, 0x35, 0x66, 0x7b, 0xa7, 0x4e, 0x43, 0xb2, 0x63, 0x36, 0x89, + 0xed, 0xb8, 0x8c, 0x2f, 0xf2, 0xd5, 0x77, 0xa0, 0xf0, 0x7e, 0xcf, 0xe3, 0x90, 0x04, 0xd5, 0x5e, + 0xf6, 0x1a, 0x7d, 0xda, 0xa2, 0x41, 0x88, 0x17, 0x61, 0x3a, 0xca, 0xe9, 0x58, 0x45, 0x54, 0x46, + 0x95, 0x7c, 0xed, 0x16, 0xfb, 0x7d, 0x64, 0xe9, 0x8f, 0xe0, 0xe5, 0x54, 0x48, 0xd0, 0xf4, 0xdc, + 0x80, 0xe2, 0x7b, 0x90, 0x8f, 0x55, 0xb0, 0xa0, 0x99, 0xdd, 0x05, 0x23, 0x59, 0x40, 0x23, 0x0e, + 0x99, 0xb6, 0xf9, 0x93, 0x5e, 0x87, 0x22, 0x7b, 0xdb, 0xfe, 0xe9, 0xa9, 0xb0, 0x06, 0x02, 0xe2, + 0x1d, 0x80, 0x3e, 0x30, 0x7f, 0xe3, 0x86, 0x11, 0xa9, 0x33, 0x7a, 0xea, 0x8c, 0x68, 0xae, 0xb8, + 0x3a, 0xa3, 0x4a, 0x6c, 0x21, 0xa0, 0x96, 0x88, 0xd4, 0xbf, 0x47, 0xb0, 0xa8, 0x48, 0xc2, 0xb1, + 0xdf, 0x00, 0x88, 0xb1, 0x83, 0x22, 0x2a, 0x4f, 0x0e, 0xe1, 0xce, 0x0b, 0xee, 0x00, 0x1f, 0x4a, + 0x70, 0x39, 0x06, 0xb7, 0x79, 0x2d, 0x5c, 0x94, 0x53, 0xa2, 0xdb, 0xe5, 0xf5, 0x7c, 0xd0, 0xab, + 0xef, 0x7b, 0x34, 0x24, 0x23, 0xcc, 0x41, 0x15, 0x16, 0xd2, 0x31, 0x5c, 0xcd, 0x1e, 0x40, 0x7f, + 0xb1, 0xf0, 0x9a, 0xbd, 0x22, 0xab, 0xe9, 0x07, 0xe5, 0x1b, 0xe2, 0x51, 0x6f, 0xf4, 0x4b, 0x14, + 0xdb, 0xc7, 0x3e, 0x11, 0x3f, 0x22, 0xd0, 0x54, 0x59, 0x38, 0xfb, 0x9b, 0x30, 0xd3, 0x67, 0x17, + 0x53, 0x91, 0x09, 0x0f, 0x31, 0xfc, 0x18, 0x27, 0xa3, 0x00, 0x98, 0x01, 0x56, 0x89, 0x4f, 0xce, + 0x84, 0x7e, 0xfd, 0x01, 0xdc, 0x96, 0x46, 0x39, 0xef, 0x16, 0x4c, 0x35, 0xd9, 0x08, 0x2f, 0x49, + 0x41, 0x46, 0xe5, 0xde, 0xdc, 0x47, 0x3f, 0x81, 0x92, 0xd0, 0x5e, 0x8d, 0xf6, 0xeb, 0x91, 0x5b, + 0xf7, 0x5a, 0xae, 0x35, 0xf6, 0x32, 0xff, 0x8a, 0x60, 0x35, 0x33, 0x15, 0x67, 0xdf, 0x87, 0x5b, + 0xd4, 0x0d, 0x7d, 0x27, 0x5e, 0xf2, 0x6b, 0x29, 0x78, 0x29, 0xee, 0xa1, 0x1b, 0xfa, 0xdd, 0x83, + 0x1b, 0xcf, 0xfe, 0x5c, 0x9d, 0xa8, 0x89, 0xb8, 0xf1, 0x15, 0x3d, 0x51, 0x99, 0x87, 0x9d, 0xa6, + 0xe3, 0x53, 0xeb, 0x45, 0x54, 0x66, 0x20, 0xd5, 0x88, 0x95, 0x91, 0xe3, 0xfe, 0xdf, 0xca, 0x6c, + 0xf1, 0xfd, 0x72, 0x48, 0xc3, 0x0f, 0x5c, 0xa7, 0x4d, 0xfd, 0x80, 0x9c, 0x3e, 0xe9, 0x88, 0xaa, + 0xcc, 0x43, 0x2e, 0x6e, 0x0d, 0x39, 0xc7, 0xd2, 0x09, 0x2c, 0x29, 0xbd, 0xb9, 0xb0, 0x03, 0x98, + 0x6d, 0x89, 0xe1, 0xe3, 0xb0, 0xc3, 0xcb, 0xb8, 0x2a, 0xab, 0x4b, 0x04, 0x3e, 0xa2, 0x36, 0x69, + 0x74, 0x6b, 0x33, 0xad, 0xfe, 0x90, 0x6e, 0xf5, 0x37, 0xb0, 0x02, 0x68, 0x5c, 0xd3, 0xf4, 0x13, + 0xe2, 0x4a, 0xd2, 0x69, 0xb8, 0x92, 0xb7, 0x61, 0x2e, 0xa9, 0x44, 0x4c, 0xd4, 0x62, 0xa6, 0x94, + 0xda, 0x6c, 0x42, 0xc4, 0x18, 0xe7, 0xe7, 0x37, 0x04, 0x05, 0xbe, 0x53, 0x1e, 0xb7, 0xc2, 0xfe, + 0x82, 0xc0, 0xab, 0x30, 0xe3, 0xf1, 0x81, 0x7e, 0xfb, 0x06, 0x31, 0x74, 0x64, 0xe1, 0x0d, 0x78, + 0x29, 0x29, 0xa1, 0xe7, 0x94, 0x63, 0x4e, 0x73, 0x09, 0xd2, 0x23, 0x0b, 0xaf, 0x00, 0x34, 0x7c, + 0x4a, 0x42, 0x6a, 0x1d, 0x93, 0xb0, 0x38, 0x59, 0x46, 0x95, 0xc9, 0x5a, 0x9e, 0x8f, 0xec, 0x87, + 0xf8, 0x5d, 0x98, 0x6e, 0x13, 0xdf, 0x21, 0x6e, 0x18, 0x14, 0x6f, 0xb0, 0x22, 0x54, 0xe4, 0x22, + 0x08, 0xac, 0xc7, 0xf5, 0x80, 0xfa, 0x6d, 0x46, 0xfd, 0x61, 0x14, 0xc0, 0x17, 0x6d, 0x1c, 0xaf, + 0xef, 0xf3, 0x6d, 0x78, 0x48, 0xc3, 0x94, 0x26, 0x31, 0xbf, 0xd7, 0xa9, 0xd2, 0xbf, 0x11, 0xfb, + 0x4b, 0xf5, 0x8e, 0xb8, 0xcb, 0xdf, 0xec, 0xed, 0x93, 0x2e, 0x5f, 0x1f, 0xba, 0xb2, 0xef, 0x48, + 0xd5, 0xac, 0x45, 0x01, 0xf8, 0x3e, 0x4c, 0x8b, 0x5c, 0x7c, 0xd2, 0x8a, 0x6a, 0xb1, 0x4f, 0x3a, + 0xb5, 0xd8, 0x53, 0x77, 0x06, 0x9a, 0xa1, 0x70, 0x1b, 0x7b, 0x7b, 0xf9, 0x1b, 0x41, 0x39, 0x3b, + 0x17, 0xd7, 0xff, 0x56, 0xba, 0xbf, 0x8c, 0x52, 0x81, 0xb8, 0xb5, 0xec, 0x41, 0x5e, 0x28, 0x0b, + 0x8a, 0x39, 0x16, 0x9f, 0x5d, 0x84, 0xbe, 0x6b, 0x6a, 0xc9, 0x4f, 0xfe, 0xe7, 0x25, 0xbf, 0xfb, + 0xcb, 0x2c, 0xdc, 0x64, 0x1a, 0xf1, 0xc7, 0x30, 0x15, 0x1d, 0x71, 0xb8, 0x2c, 0x13, 0x0c, 0x9e, + 0xa0, 0xda, 0xda, 0x10, 0x8f, 0x28, 0x89, 0xbe, 0xfc, 0xd9, 0xef, 0xff, 0x7c, 0x9b, 0x5b, 0xc0, + 0x05, 0x53, 0xbe, 0xdb, 0x46, 0x29, 0xbe, 0x43, 0x80, 0x07, 0x8f, 0x33, 0xbc, 0xa5, 0x78, 0x6f, + 0xe6, 0x01, 0xab, 0x6d, 0x8f, 0xe8, 0xcd, 0x89, 0x36, 0x18, 0x51, 0x19, 0x97, 0x4c, 0xd5, 0x6d, + 0xfb, 0xd8, 0x11, 0x10, 0x5f, 0x21, 0x98, 0x97, 0x7b, 0x2e, 0xae, 0x28, 0x32, 0x29, 0x9b, 0xb8, + 0xf6, 0xda, 0x08, 0x9e, 0x9c, 0xa7, 0xc2, 0x78, 0x74, 0x5c, 0x96, 0x79, 0xa4, 0x56, 0x68, 0x9e, + 0x3b, 0xd6, 0x05, 0xfe, 0x12, 0xc1, 0xbc, 0xdc, 0x3b, 0x95, 0x44, 0xca, 0x2e, 0xae, 0x24, 0x52, + 0x37, 0x62, 0x7d, 0x9d, 0x11, 0xad, 0xe0, 0xa5, 0x21, 0x44, 0xf8, 0x13, 0x98, 0x16, 0x17, 0x68, + 0xac, 0xab, 0xd4, 0xca, 0xdf, 0x1e, 0xda, 0xfa, 0x50, 0x1f, 0x9e, 0xf9, 0x2e, 0xcb, 0x7c, 0x07, + 0xeb, 0xa6, 0xfa, 0x33, 0xca, 0x3c, 0x17, 0x77, 0xe7, 0x0b, 0xfc, 0x29, 0x82, 0xd9, 0xe4, 0xd5, + 0x1f, 0x6f, 0xa8, 0x15, 0xa6, 0x3f, 0x40, 0xb4, 0xcd, 0x6b, 0xfd, 0x38, 0x4d, 0x99, 0xd1, 0x68, + 0xb8, 0x98, 0x41, 0x13, 0xe0, 0xcf, 0x11, 0xe4, 0xe3, 0xbb, 0x2b, 0x56, 0x49, 0x4c, 0xdf, 0xff, + 0xb5, 0x3b, 0xc3, 0x9d, 0x78, 0xea, 0xd7, 0x59, 0xea, 0x57, 0xf1, 0xba, 0x99, 0xf1, 0xc5, 0x98, + 0xac, 0xc4, 0x17, 0x08, 0xe6, 0xa4, 0xbb, 0x37, 0xce, 0x90, 0x38, 0xf0, 0x0d, 0xa0, 0x55, 0xae, + 0x77, 0xe4, 0x44, 0x6b, 0x8c, 0x68, 0x09, 0x2f, 0x66, 0x11, 0x05, 0xf8, 0x67, 0x04, 0x78, 0xf0, + 0x88, 0x50, 0xee, 0xe6, 0xcc, 0xd3, 0x48, 0xb9, 0x9b, 0xb3, 0xcf, 0x1d, 0xfd, 0x3e, 0xc3, 0x32, + 0xf0, 0x96, 0x7a, 0x37, 0x8b, 0x56, 0x69, 0x9e, 0x27, 0x8e, 0xb8, 0x0b, 0xfc, 0x03, 0x82, 0xdb, + 0x8a, 0x6e, 0x8e, 0x87, 0xb7, 0x92, 0xf4, 0x09, 0xa3, 0x19, 0xa3, 0xba, 0x73, 0xd8, 0x4d, 0x06, + 0xbb, 0x86, 0x57, 0x87, 0xc3, 0xc6, 0x7d, 0x31, 0x75, 0x99, 0xcd, 0xea, 0x8b, 0xea, 0xeb, 0x75, + 0x56, 0x5f, 0xcc, 0xb8, 0x21, 0x67, 0xf5, 0x45, 0x1a, 0xb9, 0xc7, 0x7d, 0xf1, 0xa0, 0xfa, 0xec, + 0xb2, 0x84, 0x9e, 0x5f, 0x96, 0xd0, 0x5f, 0x97, 0x25, 0xf4, 0xf5, 0x55, 0x69, 0xe2, 0xf9, 0x55, + 0x69, 0xe2, 0x8f, 0xab, 0xd2, 0xc4, 0x47, 0x7b, 0xb6, 0x13, 0x9e, 0xb4, 0xea, 0x46, 0xc3, 0x3b, + 0x33, 0x9b, 0xad, 0xe0, 0x84, 0xad, 0x0d, 0xf6, 0xb4, 0xcd, 0x1e, 0xb7, 0x5d, 0xcf, 0xa2, 0x66, + 0x27, 0xf1, 0x7e, 0xf6, 0xcf, 0x49, 0x7d, 0x8a, 0xfd, 0x6b, 0x71, 0xef, 0xdf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x78, 0x0f, 0x6c, 0x51, 0xb2, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1158,6 +1280,10 @@ type QueryClient interface { GetPendingOutbound(ctx context.Context, in *QueryGetPendingOutboundRequest, opts ...grpc.CallOption) (*QueryGetPendingOutboundResponse, error) // Get all pending outbounds (paginated) AllPendingOutbounds(ctx context.Context, in *QueryAllPendingOutboundsRequest, opts ...grpc.CallOption) (*QueryAllPendingOutboundsResponse, error) + // Queries all expired inbound entries (per-variant audit trail of + // inbounds whose ballots all reached EXPIRED/REJECTED without producing + // a UniversalTx). Consumed by the future escape-hatch refund flow. + AllExpiredInbounds(ctx context.Context, in *QueryAllExpiredInboundsRequest, opts ...grpc.CallOption) (*QueryAllExpiredInboundsResponse, error) } type queryClient struct { @@ -1258,6 +1384,15 @@ func (c *queryClient) AllPendingOutbounds(ctx context.Context, in *QueryAllPendi return out, nil } +func (c *queryClient) AllExpiredInbounds(ctx context.Context, in *QueryAllExpiredInboundsRequest, opts ...grpc.CallOption) (*QueryAllExpiredInboundsResponse, error) { + out := new(QueryAllExpiredInboundsResponse) + err := c.cc.Invoke(ctx, "/uexecutor.v1.Query/AllExpiredInbounds", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. type QueryServer interface { // Params queries all parameters of the module. @@ -1280,6 +1415,10 @@ type QueryServer interface { GetPendingOutbound(context.Context, *QueryGetPendingOutboundRequest) (*QueryGetPendingOutboundResponse, error) // Get all pending outbounds (paginated) AllPendingOutbounds(context.Context, *QueryAllPendingOutboundsRequest) (*QueryAllPendingOutboundsResponse, error) + // Queries all expired inbound entries (per-variant audit trail of + // inbounds whose ballots all reached EXPIRED/REJECTED without producing + // a UniversalTx). Consumed by the future escape-hatch refund flow. + AllExpiredInbounds(context.Context, *QueryAllExpiredInboundsRequest) (*QueryAllExpiredInboundsResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -1316,6 +1455,9 @@ func (*UnimplementedQueryServer) GetPendingOutbound(ctx context.Context, req *Qu func (*UnimplementedQueryServer) AllPendingOutbounds(ctx context.Context, req *QueryAllPendingOutboundsRequest) (*QueryAllPendingOutboundsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllPendingOutbounds not implemented") } +func (*UnimplementedQueryServer) AllExpiredInbounds(ctx context.Context, req *QueryAllExpiredInboundsRequest) (*QueryAllExpiredInboundsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllExpiredInbounds not implemented") +} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) @@ -1501,6 +1643,24 @@ func _Query_AllPendingOutbounds_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Query_AllExpiredInbounds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllExpiredInboundsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllExpiredInbounds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/uexecutor.v1.Query/AllExpiredInbounds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllExpiredInbounds(ctx, req.(*QueryAllExpiredInboundsRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "uexecutor.v1.Query", HandlerType: (*QueryServer)(nil), @@ -1545,6 +1705,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "AllPendingOutbounds", Handler: _Query_AllPendingOutbounds_Handler, }, + { + MethodName: "AllExpiredInbounds", + Handler: _Query_AllExpiredInbounds_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "uexecutor/v1/query.proto", @@ -1973,11 +2137,100 @@ func (m *QueryAllPendingInboundsResponse) MarshalToSizedBuffer(dAtA []byte) (int i-- dAtA[i] = 0x12 } - if len(m.InboundIds) > 0 { - for iNdEx := len(m.InboundIds) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.InboundIds[iNdEx]) - copy(dAtA[i:], m.InboundIds[iNdEx]) - i = encodeVarintQuery(dAtA, i, uint64(len(m.InboundIds[iNdEx]))) + if len(m.Entries) > 0 { + for iNdEx := len(m.Entries) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Entries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryAllExpiredInboundsRequest) 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 *QueryAllExpiredInboundsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllExpiredInboundsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllExpiredInboundsResponse) 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 *QueryAllExpiredInboundsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllExpiredInboundsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Entries) > 0 { + for iNdEx := len(m.Entries) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Entries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0xa } @@ -2154,6 +2407,20 @@ func (m *PendingOutboundEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Variants) > 0 { + for iNdEx := len(m.Variants) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Variants[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } if m.CreatedAt != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.CreatedAt)) i-- @@ -2519,9 +2786,41 @@ func (m *QueryAllPendingInboundsResponse) Size() (n int) { } var l int _ = l - if len(m.InboundIds) > 0 { - for _, s := range m.InboundIds { - l = len(s) + if len(m.Entries) > 0 { + for _, e := range m.Entries { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllExpiredInboundsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllExpiredInboundsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Entries) > 0 { + for _, e := range m.Entries { + l = e.Size() n += 1 + l + sovQuery(uint64(l)) } } @@ -2607,6 +2906,12 @@ func (m *PendingOutboundEntry) Size() (n int) { if m.CreatedAt != 0 { n += 1 + sovQuery(uint64(m.CreatedAt)) } + if len(m.Variants) > 0 { + for _, e := range m.Variants { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } return n } @@ -3685,9 +3990,9 @@ func (m *QueryAllPendingInboundsResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InboundIds", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Entries", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -3697,23 +4002,231 @@ func (m *QueryAllPendingInboundsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.InboundIds = append(m.InboundIds, string(dAtA[iNdEx:postIndex])) + m.Entries = append(m.Entries, PendingInboundEntry{}) + if err := m.Entries[len(m.Entries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllExpiredInboundsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllExpiredInboundsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllExpiredInboundsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllExpiredInboundsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllExpiredInboundsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllExpiredInboundsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Entries", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Entries = append(m.Entries, ExpiredInboundEntry{}) + if err := m.Entries[len(m.Entries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { @@ -4258,6 +4771,40 @@ func (m *PendingOutboundEntry) Unmarshal(dAtA []byte) error { break } } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Variants", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Variants = append(m.Variants, OutboundObservationVariant{}) + if err := m.Variants[len(m.Variants)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/x/uexecutor/types/query.pb.gw.go b/x/uexecutor/types/query.pb.gw.go index cedf2003..2a32c196 100644 --- a/x/uexecutor/types/query.pb.gw.go +++ b/x/uexecutor/types/query.pb.gw.go @@ -447,6 +447,42 @@ func local_request_Query_AllPendingOutbounds_0(ctx context.Context, marshaler ru } +var ( + filter_Query_AllExpiredInbounds_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_AllExpiredInbounds_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllExpiredInboundsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllExpiredInbounds_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AllExpiredInbounds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AllExpiredInbounds_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllExpiredInboundsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllExpiredInbounds_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AllExpiredInbounds(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -683,6 +719,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_AllExpiredInbounds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_AllExpiredInbounds_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AllExpiredInbounds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -924,6 +983,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_AllExpiredInbounds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_AllExpiredInbounds_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AllExpiredInbounds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -947,6 +1026,8 @@ var ( pattern_Query_GetPendingOutbound_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"uexecutor", "v1", "pending_outbound", "outbound_id"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_AllPendingOutbounds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"uexecutor", "v1", "pending_outbounds"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AllExpiredInbounds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"uexecutor", "v1", "expired_inbounds"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -969,4 +1050,6 @@ var ( forward_Query_GetPendingOutbound_0 = runtime.ForwardResponseMessage forward_Query_AllPendingOutbounds_0 = runtime.ForwardResponseMessage + + forward_Query_AllExpiredInbounds_0 = runtime.ForwardResponseMessage ) diff --git a/x/uvalidator/keeper/ballot.go b/x/uvalidator/keeper/ballot.go index f483894d..7c824c82 100644 --- a/x/uvalidator/keeper/ballot.go +++ b/x/uvalidator/keeper/ballot.go @@ -4,6 +4,8 @@ import ( "context" "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pushchain/push-chain-node/x/uvalidator/types" ) @@ -116,6 +118,11 @@ func (k Keeper) DeleteBallot(ctx context.Context, id string) error { // active/expired set membership is in its final shape (defensive CEI-style // ordering; collections.KeySet.Remove is a no-op on absent keys, so retries // remain safe). +// +// Fires the BallotHooks terminal callback (if registered) AFTER all writes +// have committed. Hook errors are logged but do NOT block the terminal +// transition — the terminal status is the desired outcome regardless of +// secondary-index side-effect failure. func (k Keeper) MarkBallotExpired(ctx context.Context, id string) error { ballot, err := k.Ballots.Get(ctx, id) if err != nil { @@ -135,12 +142,21 @@ func (k Keeper) MarkBallotExpired(ctx context.Context, id string) error { } ballot.Status = types.BallotStatus_BALLOT_STATUS_EXPIRED - return k.Ballots.Set(ctx, id, ballot) + if err := k.Ballots.Set(ctx, id, ballot); err != nil { + return err + } + + k.fireBallotTerminalHook(ctx, ballot.Id, ballot.BallotType, types.BallotStatus_BALLOT_STATUS_EXPIRED) + return nil } // MarkBallotFinalized moves a ballot from active to finalized (PASSED or REJECTED). // Side-effect ordering matches MarkBallotExpired: secondary indexes are // updated before the canonical ballot record is rewritten with its final status. +// +// Fires the BallotHooks terminal callback (if registered) AFTER all writes +// have committed. Hook errors are logged but do NOT block the terminal +// transition. func (k Keeper) MarkBallotFinalized(ctx context.Context, id string, status types.BallotStatus) error { if status != types.BallotStatus_BALLOT_STATUS_PASSED && status != types.BallotStatus_BALLOT_STATUS_REJECTED { return fmt.Errorf("invalid finalization status: %v", status) @@ -164,7 +180,35 @@ func (k Keeper) MarkBallotFinalized(ctx context.Context, id string, status types } ballot.Status = status - return k.Ballots.Set(ctx, id, ballot) + if err := k.Ballots.Set(ctx, id, ballot); err != nil { + return err + } + + k.fireBallotTerminalHook(ctx, ballot.Id, ballot.BallotType, status) + return nil +} + +// fireBallotTerminalHook invokes the registered BallotHooks (if any) and +// log-swallows any error. Terminal transitions must never be blocked by +// secondary-index side-effect failure. +func (k Keeper) fireBallotTerminalHook( + ctx context.Context, + ballotID string, + ballotType types.BallotObservationType, + status types.BallotStatus, +) { + if k.ballotHooks == nil { + return + } + sdkCtx := sdk.UnwrapSDKContext(ctx) + if err := k.ballotHooks.AfterBallotTerminal(sdkCtx, ballotID, ballotType, status); err != nil { + k.Logger().Warn("ballot terminal hook returned error", + "ballot_id", ballotID, + "ballot_type", ballotType.String(), + "status", status.String(), + "err", err.Error(), + ) + } } // ExpireBallotsBeforeHeight checks active ballots and marks expired ones. diff --git a/x/uvalidator/keeper/keeper.go b/x/uvalidator/keeper/keeper.go index eac7ccaa..2345d438 100755 --- a/x/uvalidator/keeper/keeper.go +++ b/x/uvalidator/keeper/keeper.go @@ -40,8 +40,9 @@ type Keeper struct { AuthKeeper types.AccountKeeper DistributionKeeper types.DistributionKeeper - authority string - hooks types.UValidatorHooks + authority string + hooks types.UValidatorHooks + ballotHooks types.BallotHooks } // NewKeeper creates a new Keeper instance @@ -250,11 +251,36 @@ func (k Keeper) GetBlockHeight(ctx context.Context) (int64, error) { return sdkCtx.BlockHeight(), nil } -func (k *Keeper) SetHooks(h types.UValidatorHooks) *Keeper { - if k.hooks != nil { +// Hooks bundles every external-module callback surface that x/uvalidator +// exposes. Each field is independently optional — nil means "don't +// register that surface." +// +// - Validator: validator-lifecycle callbacks (AfterValidatorAdded, +// AfterValidatorRemoved, AfterValidatorStatusChanged). Today +// consumed by x/utss + x/uexecutor (typically wrapped in a +// MultiUValidatorHooks for fan-out). +// +// - Ballot: ballot-lifecycle terminal callbacks (AfterBallotTerminal). +// Today consumed by x/uexecutor only — for the F-2026-16642 +// per-variant audit-trail cleanup. If a future module needs to +// react to ballot terminals, introduce a MultiBallotHooks wrapper +// following the MultiUValidatorHooks pattern. +type Hooks struct { + Validator types.UValidatorHooks + Ballot types.BallotHooks +} + +// SetHooks registers the external-module hook implementations on this +// keeper. Each Hooks field is independently optional; nil means the +// corresponding surface is not registered. Calling SetHooks twice +// panics — all hook wiring must happen in a single registration call +// (typically inside app.go after every keeper has been constructed). +func (k *Keeper) SetHooks(h Hooks) *Keeper { + if k.hooks != nil || k.ballotHooks != nil { panic("cannot set uvalidator hooks twice") } - k.hooks = h + k.hooks = h.Validator + k.ballotHooks = h.Ballot return k } diff --git a/x/uvalidator/types/hooks.go b/x/uvalidator/types/hooks.go index 041a9f3a..f41e0706 100644 --- a/x/uvalidator/types/hooks.go +++ b/x/uvalidator/types/hooks.go @@ -14,3 +14,22 @@ type UValidatorHooks interface { // Triggered whenever a validator's status changes between any two valid states AfterValidatorStatusChanged(ctx sdk.Context, valAddr sdk.ValAddress, oldStatus, newStatus UVStatus) } + +// BallotHooks defines the interface that external modules can implement +// to react to ballot lifecycle terminal transitions (EXPIRED, PASSED, REJECTED). +// +// Implementations MUST be idempotent — terminal transitions are write-once +// per ballot in normal flow, but defensive idempotency protects against +// state replay or future code paths that might re-mark a ballot. +// +// Implementations SHOULD NOT block the terminal transition by returning +// errors. The terminal status is the desired outcome regardless of +// secondary-index side-effect failure; callers log+ignore hook errors. +type BallotHooks interface { + AfterBallotTerminal( + ctx sdk.Context, + ballotID string, + ballotType BallotObservationType, + status BallotStatus, + ) error +}