diff --git a/api/uexecutor/v1/chain_meta.pulsar.go b/api/uexecutor/v1/chain_meta.pulsar.go new file mode 100644 index 00000000..3bd7eff7 --- /dev/null +++ b/api/uexecutor/v1/chain_meta.pulsar.go @@ -0,0 +1,1338 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package uexecutorv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + 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 = (*_ChainMeta_2_list)(nil) + +type _ChainMeta_2_list struct { + list *[]string +} + +func (x *_ChainMeta_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ChainMeta_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_ChainMeta_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_ChainMeta_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_ChainMeta_2_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message ChainMeta at list field Signers as it is not of Message kind")) +} + +func (x *_ChainMeta_2_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_ChainMeta_2_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_ChainMeta_2_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_ChainMeta_3_list)(nil) + +type _ChainMeta_3_list struct { + list *[]uint64 +} + +func (x *_ChainMeta_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ChainMeta_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfUint64((*x.list)[i]) +} + +func (x *_ChainMeta_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Uint() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_ChainMeta_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Uint() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_ChainMeta_3_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message ChainMeta at list field Prices as it is not of Message kind")) +} + +func (x *_ChainMeta_3_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_ChainMeta_3_list) NewElement() protoreflect.Value { + v := uint64(0) + return protoreflect.ValueOfUint64(v) +} + +func (x *_ChainMeta_3_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_ChainMeta_4_list)(nil) + +type _ChainMeta_4_list struct { + list *[]uint64 +} + +func (x *_ChainMeta_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ChainMeta_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfUint64((*x.list)[i]) +} + +func (x *_ChainMeta_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Uint() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_ChainMeta_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Uint() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_ChainMeta_4_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message ChainMeta at list field ChainHeights as it is not of Message kind")) +} + +func (x *_ChainMeta_4_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_ChainMeta_4_list) NewElement() protoreflect.Value { + v := uint64(0) + return protoreflect.ValueOfUint64(v) +} + +func (x *_ChainMeta_4_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_ChainMeta_5_list)(nil) + +type _ChainMeta_5_list struct { + list *[]uint64 +} + +func (x *_ChainMeta_5_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ChainMeta_5_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfUint64((*x.list)[i]) +} + +func (x *_ChainMeta_5_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Uint() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_ChainMeta_5_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Uint() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_ChainMeta_5_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message ChainMeta at list field ObservedAts as it is not of Message kind")) +} + +func (x *_ChainMeta_5_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_ChainMeta_5_list) NewElement() protoreflect.Value { + v := uint64(0) + return protoreflect.ValueOfUint64(v) +} + +func (x *_ChainMeta_5_list) IsValid() bool { + return x.list != nil +} + +var ( + md_ChainMeta protoreflect.MessageDescriptor + fd_ChainMeta_observed_chain_id protoreflect.FieldDescriptor + fd_ChainMeta_signers protoreflect.FieldDescriptor + fd_ChainMeta_prices protoreflect.FieldDescriptor + fd_ChainMeta_chain_heights protoreflect.FieldDescriptor + fd_ChainMeta_observed_ats protoreflect.FieldDescriptor + fd_ChainMeta_median_index protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_chain_meta_proto_init() + md_ChainMeta = File_uexecutor_v1_chain_meta_proto.Messages().ByName("ChainMeta") + fd_ChainMeta_observed_chain_id = md_ChainMeta.Fields().ByName("observed_chain_id") + fd_ChainMeta_signers = md_ChainMeta.Fields().ByName("signers") + fd_ChainMeta_prices = md_ChainMeta.Fields().ByName("prices") + fd_ChainMeta_chain_heights = md_ChainMeta.Fields().ByName("chain_heights") + fd_ChainMeta_observed_ats = md_ChainMeta.Fields().ByName("observed_ats") + fd_ChainMeta_median_index = md_ChainMeta.Fields().ByName("median_index") +} + +var _ protoreflect.Message = (*fastReflection_ChainMeta)(nil) + +type fastReflection_ChainMeta ChainMeta + +func (x *ChainMeta) ProtoReflect() protoreflect.Message { + return (*fastReflection_ChainMeta)(x) +} + +func (x *ChainMeta) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_chain_meta_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_ChainMeta_messageType fastReflection_ChainMeta_messageType +var _ protoreflect.MessageType = fastReflection_ChainMeta_messageType{} + +type fastReflection_ChainMeta_messageType struct{} + +func (x fastReflection_ChainMeta_messageType) Zero() protoreflect.Message { + return (*fastReflection_ChainMeta)(nil) +} +func (x fastReflection_ChainMeta_messageType) New() protoreflect.Message { + return new(fastReflection_ChainMeta) +} +func (x fastReflection_ChainMeta_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ChainMeta +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ChainMeta) Descriptor() protoreflect.MessageDescriptor { + return md_ChainMeta +} + +// 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_ChainMeta) Type() protoreflect.MessageType { + return _fastReflection_ChainMeta_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ChainMeta) New() protoreflect.Message { + return new(fastReflection_ChainMeta) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ChainMeta) Interface() protoreflect.ProtoMessage { + return (*ChainMeta)(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_ChainMeta) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ObservedChainId != "" { + value := protoreflect.ValueOfString(x.ObservedChainId) + if !f(fd_ChainMeta_observed_chain_id, value) { + return + } + } + if len(x.Signers) != 0 { + value := protoreflect.ValueOfList(&_ChainMeta_2_list{list: &x.Signers}) + if !f(fd_ChainMeta_signers, value) { + return + } + } + if len(x.Prices) != 0 { + value := protoreflect.ValueOfList(&_ChainMeta_3_list{list: &x.Prices}) + if !f(fd_ChainMeta_prices, value) { + return + } + } + if len(x.ChainHeights) != 0 { + value := protoreflect.ValueOfList(&_ChainMeta_4_list{list: &x.ChainHeights}) + if !f(fd_ChainMeta_chain_heights, value) { + return + } + } + if len(x.ObservedAts) != 0 { + value := protoreflect.ValueOfList(&_ChainMeta_5_list{list: &x.ObservedAts}) + if !f(fd_ChainMeta_observed_ats, value) { + return + } + } + if x.MedianIndex != uint64(0) { + value := protoreflect.ValueOfUint64(x.MedianIndex) + if !f(fd_ChainMeta_median_index, 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_ChainMeta) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.ChainMeta.observed_chain_id": + return x.ObservedChainId != "" + case "uexecutor.v1.ChainMeta.signers": + return len(x.Signers) != 0 + case "uexecutor.v1.ChainMeta.prices": + return len(x.Prices) != 0 + case "uexecutor.v1.ChainMeta.chain_heights": + return len(x.ChainHeights) != 0 + case "uexecutor.v1.ChainMeta.observed_ats": + return len(x.ObservedAts) != 0 + case "uexecutor.v1.ChainMeta.median_index": + return x.MedianIndex != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.ChainMeta 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_ChainMeta) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.ChainMeta.observed_chain_id": + x.ObservedChainId = "" + case "uexecutor.v1.ChainMeta.signers": + x.Signers = nil + case "uexecutor.v1.ChainMeta.prices": + x.Prices = nil + case "uexecutor.v1.ChainMeta.chain_heights": + x.ChainHeights = nil + case "uexecutor.v1.ChainMeta.observed_ats": + x.ObservedAts = nil + case "uexecutor.v1.ChainMeta.median_index": + x.MedianIndex = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.ChainMeta 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_ChainMeta) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.ChainMeta.observed_chain_id": + value := x.ObservedChainId + return protoreflect.ValueOfString(value) + case "uexecutor.v1.ChainMeta.signers": + if len(x.Signers) == 0 { + return protoreflect.ValueOfList(&_ChainMeta_2_list{}) + } + listValue := &_ChainMeta_2_list{list: &x.Signers} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.ChainMeta.prices": + if len(x.Prices) == 0 { + return protoreflect.ValueOfList(&_ChainMeta_3_list{}) + } + listValue := &_ChainMeta_3_list{list: &x.Prices} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.ChainMeta.chain_heights": + if len(x.ChainHeights) == 0 { + return protoreflect.ValueOfList(&_ChainMeta_4_list{}) + } + listValue := &_ChainMeta_4_list{list: &x.ChainHeights} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.ChainMeta.observed_ats": + if len(x.ObservedAts) == 0 { + return protoreflect.ValueOfList(&_ChainMeta_5_list{}) + } + listValue := &_ChainMeta_5_list{list: &x.ObservedAts} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.ChainMeta.median_index": + value := x.MedianIndex + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.ChainMeta 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_ChainMeta) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.ChainMeta.observed_chain_id": + x.ObservedChainId = value.Interface().(string) + case "uexecutor.v1.ChainMeta.signers": + lv := value.List() + clv := lv.(*_ChainMeta_2_list) + x.Signers = *clv.list + case "uexecutor.v1.ChainMeta.prices": + lv := value.List() + clv := lv.(*_ChainMeta_3_list) + x.Prices = *clv.list + case "uexecutor.v1.ChainMeta.chain_heights": + lv := value.List() + clv := lv.(*_ChainMeta_4_list) + x.ChainHeights = *clv.list + case "uexecutor.v1.ChainMeta.observed_ats": + lv := value.List() + clv := lv.(*_ChainMeta_5_list) + x.ObservedAts = *clv.list + case "uexecutor.v1.ChainMeta.median_index": + x.MedianIndex = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.ChainMeta 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_ChainMeta) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.ChainMeta.signers": + if x.Signers == nil { + x.Signers = []string{} + } + value := &_ChainMeta_2_list{list: &x.Signers} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.ChainMeta.prices": + if x.Prices == nil { + x.Prices = []uint64{} + } + value := &_ChainMeta_3_list{list: &x.Prices} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.ChainMeta.chain_heights": + if x.ChainHeights == nil { + x.ChainHeights = []uint64{} + } + value := &_ChainMeta_4_list{list: &x.ChainHeights} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.ChainMeta.observed_ats": + if x.ObservedAts == nil { + x.ObservedAts = []uint64{} + } + value := &_ChainMeta_5_list{list: &x.ObservedAts} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.ChainMeta.observed_chain_id": + panic(fmt.Errorf("field observed_chain_id of message uexecutor.v1.ChainMeta is not mutable")) + case "uexecutor.v1.ChainMeta.median_index": + panic(fmt.Errorf("field median_index of message uexecutor.v1.ChainMeta is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.ChainMeta 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_ChainMeta) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.ChainMeta.observed_chain_id": + return protoreflect.ValueOfString("") + case "uexecutor.v1.ChainMeta.signers": + list := []string{} + return protoreflect.ValueOfList(&_ChainMeta_2_list{list: &list}) + case "uexecutor.v1.ChainMeta.prices": + list := []uint64{} + return protoreflect.ValueOfList(&_ChainMeta_3_list{list: &list}) + case "uexecutor.v1.ChainMeta.chain_heights": + list := []uint64{} + return protoreflect.ValueOfList(&_ChainMeta_4_list{list: &list}) + case "uexecutor.v1.ChainMeta.observed_ats": + list := []uint64{} + return protoreflect.ValueOfList(&_ChainMeta_5_list{list: &list}) + case "uexecutor.v1.ChainMeta.median_index": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.ChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.ChainMeta 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_ChainMeta) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.ChainMeta", 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_ChainMeta) 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_ChainMeta) 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_ChainMeta) 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_ChainMeta) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ChainMeta) + 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.ObservedChainId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Signers) > 0 { + for _, s := range x.Signers { + l = len(s) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.Prices) > 0 { + l = 0 + for _, e := range x.Prices { + l += runtime.Sov(uint64(e)) + } + n += 1 + runtime.Sov(uint64(l)) + l + } + if len(x.ChainHeights) > 0 { + l = 0 + for _, e := range x.ChainHeights { + l += runtime.Sov(uint64(e)) + } + n += 1 + runtime.Sov(uint64(l)) + l + } + if len(x.ObservedAts) > 0 { + l = 0 + for _, e := range x.ObservedAts { + l += runtime.Sov(uint64(e)) + } + n += 1 + runtime.Sov(uint64(l)) + l + } + if x.MedianIndex != 0 { + n += 1 + runtime.Sov(uint64(x.MedianIndex)) + } + 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().(*ChainMeta) + 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.MedianIndex != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.MedianIndex)) + i-- + dAtA[i] = 0x30 + } + if len(x.ObservedAts) > 0 { + var pksize2 int + for _, num := range x.ObservedAts { + pksize2 += runtime.Sov(uint64(num)) + } + i -= pksize2 + j1 := i + for _, num := range x.ObservedAts { + for num >= 1<<7 { + dAtA[j1] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j1++ + } + dAtA[j1] = uint8(num) + j1++ + } + i = runtime.EncodeVarint(dAtA, i, uint64(pksize2)) + i-- + dAtA[i] = 0x2a + } + if len(x.ChainHeights) > 0 { + var pksize4 int + for _, num := range x.ChainHeights { + pksize4 += runtime.Sov(uint64(num)) + } + i -= pksize4 + j3 := i + for _, num := range x.ChainHeights { + for num >= 1<<7 { + dAtA[j3] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j3++ + } + dAtA[j3] = uint8(num) + j3++ + } + i = runtime.EncodeVarint(dAtA, i, uint64(pksize4)) + i-- + dAtA[i] = 0x22 + } + if len(x.Prices) > 0 { + var pksize6 int + for _, num := range x.Prices { + pksize6 += runtime.Sov(uint64(num)) + } + i -= pksize6 + j5 := i + for _, num := range x.Prices { + for num >= 1<<7 { + dAtA[j5] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j5++ + } + dAtA[j5] = uint8(num) + j5++ + } + i = runtime.EncodeVarint(dAtA, i, uint64(pksize6)) + i-- + dAtA[i] = 0x1a + } + if len(x.Signers) > 0 { + for iNdEx := len(x.Signers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.Signers[iNdEx]) + copy(dAtA[i:], x.Signers[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Signers[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.ObservedChainId) > 0 { + i -= len(x.ObservedChainId) + copy(dAtA[i:], x.ObservedChainId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ObservedChainId))) + 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().(*ChainMeta) + 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: ChainMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ChainMeta: 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 ObservedChainId", 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.ObservedChainId = 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 Signers", 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.Signers = append(x.Signers, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType == 0 { + var v 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++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Prices = append(x.Prices, v) + } else if wireType == 2 { + var packedLen 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++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + packedLen + 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 + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(x.Prices) == 0 { + x.Prices = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v 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++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Prices = append(x.Prices, v) + } + } else { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Prices", wireType) + } + case 4: + if wireType == 0 { + var v 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++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.ChainHeights = append(x.ChainHeights, v) + } else if wireType == 2 { + var packedLen 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++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + packedLen + 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 + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(x.ChainHeights) == 0 { + x.ChainHeights = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v 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++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.ChainHeights = append(x.ChainHeights, v) + } + } else { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ChainHeights", wireType) + } + case 5: + if wireType == 0 { + var v 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++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.ObservedAts = append(x.ObservedAts, v) + } else if wireType == 2 { + var packedLen 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++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + packedLen + 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 + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(x.ObservedAts) == 0 { + x.ObservedAts = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v 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++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.ObservedAts = append(x.ObservedAts, v) + } + } else { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ObservedAts", wireType) + } + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MedianIndex", wireType) + } + x.MedianIndex = 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.MedianIndex |= 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/chain_meta.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) +) + +// ChainMeta stores aggregated chain metadata (gas price + block height) for a given chain +type ChainMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ObservedChainId string `protobuf:"bytes,1,opt,name=observed_chain_id,json=observedChainId,proto3" json:"observed_chain_id,omitempty"` // chain ID of observed external chain (e.g. "eip155:1" for ethereum mainnet) + Signers []string `protobuf:"bytes,2,rep,name=signers,proto3" json:"signers,omitempty"` // Validators who submitted votes + Prices []uint64 `protobuf:"varint,3,rep,packed,name=prices,proto3" json:"prices,omitempty"` // Submitted gas prices + ChainHeights []uint64 `protobuf:"varint,4,rep,packed,name=chain_heights,json=chainHeights,proto3" json:"chain_heights,omitempty"` // Block heights corresponding to each price observation + ObservedAts []uint64 `protobuf:"varint,5,rep,packed,name=observed_ats,json=observedAts,proto3" json:"observed_ats,omitempty"` // Timestamps when each observation was made + MedianIndex uint64 `protobuf:"varint,6,opt,name=median_index,json=medianIndex,proto3" json:"median_index,omitempty"` // Index of the median price in 'prices' +} + +func (x *ChainMeta) Reset() { + *x = ChainMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_chain_meta_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChainMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChainMeta) ProtoMessage() {} + +// Deprecated: Use ChainMeta.ProtoReflect.Descriptor instead. +func (*ChainMeta) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_chain_meta_proto_rawDescGZIP(), []int{0} +} + +func (x *ChainMeta) GetObservedChainId() string { + if x != nil { + return x.ObservedChainId + } + return "" +} + +func (x *ChainMeta) GetSigners() []string { + if x != nil { + return x.Signers + } + return nil +} + +func (x *ChainMeta) GetPrices() []uint64 { + if x != nil { + return x.Prices + } + return nil +} + +func (x *ChainMeta) GetChainHeights() []uint64 { + if x != nil { + return x.ChainHeights + } + return nil +} + +func (x *ChainMeta) GetObservedAts() []uint64 { + if x != nil { + return x.ObservedAts + } + return nil +} + +func (x *ChainMeta) GetMedianIndex() uint64 { + if x != nil { + return x.MedianIndex + } + return 0 +} + +var File_uexecutor_v1_chain_meta_proto protoreflect.FileDescriptor + +var file_uexecutor_v1_chain_meta_proto_rawDesc = []byte{ + 0x0a, 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, 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, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf7, 0x01, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, + 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, + 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0b, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x41, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x61, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x21, 0x98, + 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x14, 0x75, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x42, 0xb6, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, + 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_chain_meta_proto_rawDescOnce sync.Once + file_uexecutor_v1_chain_meta_proto_rawDescData = file_uexecutor_v1_chain_meta_proto_rawDesc +) + +func file_uexecutor_v1_chain_meta_proto_rawDescGZIP() []byte { + file_uexecutor_v1_chain_meta_proto_rawDescOnce.Do(func() { + file_uexecutor_v1_chain_meta_proto_rawDescData = protoimpl.X.CompressGZIP(file_uexecutor_v1_chain_meta_proto_rawDescData) + }) + return file_uexecutor_v1_chain_meta_proto_rawDescData +} + +var file_uexecutor_v1_chain_meta_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_uexecutor_v1_chain_meta_proto_goTypes = []interface{}{ + (*ChainMeta)(nil), // 0: uexecutor.v1.ChainMeta +} +var file_uexecutor_v1_chain_meta_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_uexecutor_v1_chain_meta_proto_init() } +func file_uexecutor_v1_chain_meta_proto_init() { + if File_uexecutor_v1_chain_meta_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_uexecutor_v1_chain_meta_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChainMeta); 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_chain_meta_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_uexecutor_v1_chain_meta_proto_goTypes, + DependencyIndexes: file_uexecutor_v1_chain_meta_proto_depIdxs, + MessageInfos: file_uexecutor_v1_chain_meta_proto_msgTypes, + }.Build() + File_uexecutor_v1_chain_meta_proto = out.File + file_uexecutor_v1_chain_meta_proto_rawDesc = nil + file_uexecutor_v1_chain_meta_proto_goTypes = nil + file_uexecutor_v1_chain_meta_proto_depIdxs = nil +} diff --git a/api/uexecutor/v1/query.pulsar.go b/api/uexecutor/v1/query.pulsar.go index 484399eb..55b69539 100644 --- a/api/uexecutor/v1/query.pulsar.go +++ b/api/uexecutor/v1/query.pulsar.go @@ -1877,6 +1877,1869 @@ func (x *fastReflection_QueryAllGasPricesResponse) ProtoMethods() *protoiface.Me } } +var ( + md_QueryChainMetaRequest protoreflect.MessageDescriptor + fd_QueryChainMetaRequest_chain_id protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_query_proto_init() + md_QueryChainMetaRequest = File_uexecutor_v1_query_proto.Messages().ByName("QueryChainMetaRequest") + fd_QueryChainMetaRequest_chain_id = md_QueryChainMetaRequest.Fields().ByName("chain_id") +} + +var _ protoreflect.Message = (*fastReflection_QueryChainMetaRequest)(nil) + +type fastReflection_QueryChainMetaRequest QueryChainMetaRequest + +func (x *QueryChainMetaRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryChainMetaRequest)(x) +} + +func (x *QueryChainMetaRequest) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_query_proto_msgTypes[4] + 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_QueryChainMetaRequest_messageType fastReflection_QueryChainMetaRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryChainMetaRequest_messageType{} + +type fastReflection_QueryChainMetaRequest_messageType struct{} + +func (x fastReflection_QueryChainMetaRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryChainMetaRequest)(nil) +} +func (x fastReflection_QueryChainMetaRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryChainMetaRequest) +} +func (x fastReflection_QueryChainMetaRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryChainMetaRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryChainMetaRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryChainMetaRequest +} + +// 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_QueryChainMetaRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryChainMetaRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryChainMetaRequest) New() protoreflect.Message { + return new(fastReflection_QueryChainMetaRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryChainMetaRequest) Interface() protoreflect.ProtoMessage { + return (*QueryChainMetaRequest)(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_QueryChainMetaRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ChainId != "" { + value := protoreflect.ValueOfString(x.ChainId) + if !f(fd_QueryChainMetaRequest_chain_id, 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_QueryChainMetaRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaRequest.chain_id": + return x.ChainId != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaRequest 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_QueryChainMetaRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaRequest.chain_id": + x.ChainId = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaRequest 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_QueryChainMetaRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.QueryChainMetaRequest.chain_id": + value := x.ChainId + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaRequest 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_QueryChainMetaRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaRequest.chain_id": + x.ChainId = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaRequest 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_QueryChainMetaRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaRequest.chain_id": + panic(fmt.Errorf("field chain_id of message uexecutor.v1.QueryChainMetaRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaRequest 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_QueryChainMetaRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaRequest.chain_id": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaRequest 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_QueryChainMetaRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.QueryChainMetaRequest", 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_QueryChainMetaRequest) 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_QueryChainMetaRequest) 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_QueryChainMetaRequest) 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_QueryChainMetaRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryChainMetaRequest) + 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.ChainId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryChainMetaRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ChainId) > 0 { + i -= len(x.ChainId) + copy(dAtA[i:], x.ChainId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ChainId))) + 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().(*QueryChainMetaRequest) + 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: QueryChainMetaRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryChainMetaRequest: 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 ChainId", 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.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryChainMetaResponse protoreflect.MessageDescriptor + fd_QueryChainMetaResponse_chain_meta protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_query_proto_init() + md_QueryChainMetaResponse = File_uexecutor_v1_query_proto.Messages().ByName("QueryChainMetaResponse") + fd_QueryChainMetaResponse_chain_meta = md_QueryChainMetaResponse.Fields().ByName("chain_meta") +} + +var _ protoreflect.Message = (*fastReflection_QueryChainMetaResponse)(nil) + +type fastReflection_QueryChainMetaResponse QueryChainMetaResponse + +func (x *QueryChainMetaResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryChainMetaResponse)(x) +} + +func (x *QueryChainMetaResponse) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_query_proto_msgTypes[5] + 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_QueryChainMetaResponse_messageType fastReflection_QueryChainMetaResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryChainMetaResponse_messageType{} + +type fastReflection_QueryChainMetaResponse_messageType struct{} + +func (x fastReflection_QueryChainMetaResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryChainMetaResponse)(nil) +} +func (x fastReflection_QueryChainMetaResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryChainMetaResponse) +} +func (x fastReflection_QueryChainMetaResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryChainMetaResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryChainMetaResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryChainMetaResponse +} + +// 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_QueryChainMetaResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryChainMetaResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryChainMetaResponse) New() protoreflect.Message { + return new(fastReflection_QueryChainMetaResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryChainMetaResponse) Interface() protoreflect.ProtoMessage { + return (*QueryChainMetaResponse)(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_QueryChainMetaResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ChainMeta != nil { + value := protoreflect.ValueOfMessage(x.ChainMeta.ProtoReflect()) + if !f(fd_QueryChainMetaResponse_chain_meta, 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_QueryChainMetaResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaResponse.chain_meta": + return x.ChainMeta != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaResponse 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_QueryChainMetaResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaResponse.chain_meta": + x.ChainMeta = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaResponse 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_QueryChainMetaResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.QueryChainMetaResponse.chain_meta": + value := x.ChainMeta + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaResponse 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_QueryChainMetaResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaResponse.chain_meta": + x.ChainMeta = value.Message().Interface().(*ChainMeta) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaResponse 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_QueryChainMetaResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaResponse.chain_meta": + if x.ChainMeta == nil { + x.ChainMeta = new(ChainMeta) + } + return protoreflect.ValueOfMessage(x.ChainMeta.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaResponse 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_QueryChainMetaResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryChainMetaResponse.chain_meta": + m := new(ChainMeta) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryChainMetaResponse 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_QueryChainMetaResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.QueryChainMetaResponse", 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_QueryChainMetaResponse) 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_QueryChainMetaResponse) 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_QueryChainMetaResponse) 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_QueryChainMetaResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryChainMetaResponse) + 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.ChainMeta != nil { + l = options.Size(x.ChainMeta) + 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().(*QueryChainMetaResponse) + 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.ChainMeta != nil { + encoded, err := options.Marshal(x.ChainMeta) + 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().(*QueryChainMetaResponse) + 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: QueryChainMetaResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryChainMetaResponse: 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 ChainMeta", 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.ChainMeta == nil { + x.ChainMeta = &ChainMeta{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ChainMeta); 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_QueryAllChainMetasRequest protoreflect.MessageDescriptor + fd_QueryAllChainMetasRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_query_proto_init() + md_QueryAllChainMetasRequest = File_uexecutor_v1_query_proto.Messages().ByName("QueryAllChainMetasRequest") + fd_QueryAllChainMetasRequest_pagination = md_QueryAllChainMetasRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllChainMetasRequest)(nil) + +type fastReflection_QueryAllChainMetasRequest QueryAllChainMetasRequest + +func (x *QueryAllChainMetasRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllChainMetasRequest)(x) +} + +func (x *QueryAllChainMetasRequest) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_query_proto_msgTypes[6] + 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_QueryAllChainMetasRequest_messageType fastReflection_QueryAllChainMetasRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllChainMetasRequest_messageType{} + +type fastReflection_QueryAllChainMetasRequest_messageType struct{} + +func (x fastReflection_QueryAllChainMetasRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllChainMetasRequest)(nil) +} +func (x fastReflection_QueryAllChainMetasRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllChainMetasRequest) +} +func (x fastReflection_QueryAllChainMetasRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllChainMetasRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllChainMetasRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllChainMetasRequest +} + +// 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_QueryAllChainMetasRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllChainMetasRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllChainMetasRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllChainMetasRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllChainMetasRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllChainMetasRequest)(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_QueryAllChainMetasRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllChainMetasRequest_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_QueryAllChainMetasRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllChainMetasRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasRequest 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_QueryAllChainMetasRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllChainMetasRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasRequest 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_QueryAllChainMetasRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.QueryAllChainMetasRequest.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.QueryAllChainMetasRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasRequest 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_QueryAllChainMetasRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllChainMetasRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasRequest 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_QueryAllChainMetasRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasRequest.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.QueryAllChainMetasRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasRequest 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_QueryAllChainMetasRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasRequest.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.QueryAllChainMetasRequest")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasRequest 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_QueryAllChainMetasRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.QueryAllChainMetasRequest", 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_QueryAllChainMetasRequest) 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_QueryAllChainMetasRequest) 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_QueryAllChainMetasRequest) 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_QueryAllChainMetasRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllChainMetasRequest) + 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().(*QueryAllChainMetasRequest) + 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().(*QueryAllChainMetasRequest) + 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: QueryAllChainMetasRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllChainMetasRequest: 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 = (*_QueryAllChainMetasResponse_1_list)(nil) + +type _QueryAllChainMetasResponse_1_list struct { + list *[]*ChainMeta +} + +func (x *_QueryAllChainMetasResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllChainMetasResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllChainMetasResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ChainMeta) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllChainMetasResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ChainMeta) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllChainMetasResponse_1_list) AppendMutable() protoreflect.Value { + v := new(ChainMeta) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllChainMetasResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllChainMetasResponse_1_list) NewElement() protoreflect.Value { + v := new(ChainMeta) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllChainMetasResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllChainMetasResponse protoreflect.MessageDescriptor + fd_QueryAllChainMetasResponse_chain_metas protoreflect.FieldDescriptor + fd_QueryAllChainMetasResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_query_proto_init() + md_QueryAllChainMetasResponse = File_uexecutor_v1_query_proto.Messages().ByName("QueryAllChainMetasResponse") + fd_QueryAllChainMetasResponse_chain_metas = md_QueryAllChainMetasResponse.Fields().ByName("chain_metas") + fd_QueryAllChainMetasResponse_pagination = md_QueryAllChainMetasResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllChainMetasResponse)(nil) + +type fastReflection_QueryAllChainMetasResponse QueryAllChainMetasResponse + +func (x *QueryAllChainMetasResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllChainMetasResponse)(x) +} + +func (x *QueryAllChainMetasResponse) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_query_proto_msgTypes[7] + 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_QueryAllChainMetasResponse_messageType fastReflection_QueryAllChainMetasResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllChainMetasResponse_messageType{} + +type fastReflection_QueryAllChainMetasResponse_messageType struct{} + +func (x fastReflection_QueryAllChainMetasResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllChainMetasResponse)(nil) +} +func (x fastReflection_QueryAllChainMetasResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllChainMetasResponse) +} +func (x fastReflection_QueryAllChainMetasResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllChainMetasResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllChainMetasResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllChainMetasResponse +} + +// 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_QueryAllChainMetasResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllChainMetasResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllChainMetasResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllChainMetasResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllChainMetasResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllChainMetasResponse)(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_QueryAllChainMetasResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.ChainMetas) != 0 { + value := protoreflect.ValueOfList(&_QueryAllChainMetasResponse_1_list{list: &x.ChainMetas}) + if !f(fd_QueryAllChainMetasResponse_chain_metas, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllChainMetasResponse_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_QueryAllChainMetasResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasResponse.chain_metas": + return len(x.ChainMetas) != 0 + case "uexecutor.v1.QueryAllChainMetasResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllChainMetasResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasResponse 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_QueryAllChainMetasResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasResponse.chain_metas": + x.ChainMetas = nil + case "uexecutor.v1.QueryAllChainMetasResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllChainMetasResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasResponse 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_QueryAllChainMetasResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.QueryAllChainMetasResponse.chain_metas": + if len(x.ChainMetas) == 0 { + return protoreflect.ValueOfList(&_QueryAllChainMetasResponse_1_list{}) + } + listValue := &_QueryAllChainMetasResponse_1_list{list: &x.ChainMetas} + return protoreflect.ValueOfList(listValue) + case "uexecutor.v1.QueryAllChainMetasResponse.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.QueryAllChainMetasResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasResponse 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_QueryAllChainMetasResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasResponse.chain_metas": + lv := value.List() + clv := lv.(*_QueryAllChainMetasResponse_1_list) + x.ChainMetas = *clv.list + case "uexecutor.v1.QueryAllChainMetasResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.QueryAllChainMetasResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasResponse 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_QueryAllChainMetasResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasResponse.chain_metas": + if x.ChainMetas == nil { + x.ChainMetas = []*ChainMeta{} + } + value := &_QueryAllChainMetasResponse_1_list{list: &x.ChainMetas} + return protoreflect.ValueOfList(value) + case "uexecutor.v1.QueryAllChainMetasResponse.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.QueryAllChainMetasResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasResponse 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_QueryAllChainMetasResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.QueryAllChainMetasResponse.chain_metas": + list := []*ChainMeta{} + return protoreflect.ValueOfList(&_QueryAllChainMetasResponse_1_list{list: &list}) + case "uexecutor.v1.QueryAllChainMetasResponse.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.QueryAllChainMetasResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.QueryAllChainMetasResponse 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_QueryAllChainMetasResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.QueryAllChainMetasResponse", 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_QueryAllChainMetasResponse) 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_QueryAllChainMetasResponse) 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_QueryAllChainMetasResponse) 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_QueryAllChainMetasResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllChainMetasResponse) + 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.ChainMetas) > 0 { + for _, e := range x.ChainMetas { + 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().(*QueryAllChainMetasResponse) + 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.ChainMetas) > 0 { + for iNdEx := len(x.ChainMetas) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ChainMetas[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().(*QueryAllChainMetasResponse) + 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: QueryAllChainMetasResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllChainMetasResponse: 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 ChainMetas", 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.ChainMetas = append(x.ChainMetas, &ChainMeta{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ChainMetas[len(x.ChainMetas)-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_QueryParamsRequest protoreflect.MessageDescriptor ) @@ -1895,7 +3758,7 @@ func (x *QueryParamsRequest) ProtoReflect() protoreflect.Message { } func (x *QueryParamsRequest) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[4] + mi := &file_uexecutor_v1_query_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2253,7 +4116,7 @@ func (x *QueryParamsResponse) ProtoReflect() protoreflect.Message { } func (x *QueryParamsResponse) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[5] + mi := &file_uexecutor_v1_query_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2688,7 +4551,7 @@ func (x *QueryAllPendingInboundsRequest) ProtoReflect() protoreflect.Message { } func (x *QueryAllPendingInboundsRequest) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[6] + mi := &file_uexecutor_v1_query_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3171,7 +5034,7 @@ func (x *QueryAllPendingInboundsResponse) ProtoReflect() protoreflect.Message { } func (x *QueryAllPendingInboundsResponse) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[7] + mi := &file_uexecutor_v1_query_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3682,7 +5545,7 @@ func (x *QueryGetUniversalTxRequest) ProtoReflect() protoreflect.Message { } func (x *QueryGetUniversalTxRequest) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[8] + mi := &file_uexecutor_v1_query_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4102,7 +5965,7 @@ func (x *QueryGetUniversalTxResponse) ProtoReflect() protoreflect.Message { } func (x *QueryGetUniversalTxResponse) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[9] + mi := &file_uexecutor_v1_query_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4537,7 +6400,7 @@ func (x *QueryAllUniversalTxRequest) ProtoReflect() protoreflect.Message { } func (x *QueryAllUniversalTxRequest) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[10] + mi := &file_uexecutor_v1_query_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5025,7 +6888,7 @@ func (x *QueryAllUniversalTxResponse) ProtoReflect() protoreflect.Message { } func (x *QueryAllUniversalTxResponse) slowProtoReflect() protoreflect.Message { - mi := &file_uexecutor_v1_query_proto_msgTypes[11] + mi := &file_uexecutor_v1_query_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5688,6 +7551,156 @@ func (x *QueryAllGasPricesResponse) GetPagination() *v1beta1.PageResponse { return nil } +// Single chain meta +type QueryChainMetaRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` +} + +func (x *QueryChainMetaRequest) Reset() { + *x = QueryChainMetaRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryChainMetaRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryChainMetaRequest) ProtoMessage() {} + +// Deprecated: Use QueryChainMetaRequest.ProtoReflect.Descriptor instead. +func (*QueryChainMetaRequest) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryChainMetaRequest) GetChainId() string { + if x != nil { + return x.ChainId + } + return "" +} + +type QueryChainMetaResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChainMeta *ChainMeta `protobuf:"bytes,1,opt,name=chain_meta,json=chainMeta,proto3" json:"chain_meta,omitempty"` +} + +func (x *QueryChainMetaResponse) Reset() { + *x = QueryChainMetaResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryChainMetaResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryChainMetaResponse) ProtoMessage() {} + +// Deprecated: Use QueryChainMetaResponse.ProtoReflect.Descriptor instead. +func (*QueryChainMetaResponse) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryChainMetaResponse) GetChainMeta() *ChainMeta { + if x != nil { + return x.ChainMeta + } + return nil +} + +// All chain metas +type QueryAllChainMetasRequest 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 *QueryAllChainMetasRequest) Reset() { + *x = QueryAllChainMetasRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllChainMetasRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllChainMetasRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllChainMetasRequest.ProtoReflect.Descriptor instead. +func (*QueryAllChainMetasRequest) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{6} +} + +func (x *QueryAllChainMetasRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllChainMetasResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChainMetas []*ChainMeta `protobuf:"bytes,1,rep,name=chain_metas,json=chainMetas,proto3" json:"chain_metas,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllChainMetasResponse) Reset() { + *x = QueryAllChainMetasResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllChainMetasResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllChainMetasResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllChainMetasResponse.ProtoReflect.Descriptor instead. +func (*QueryAllChainMetasResponse) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryAllChainMetasResponse) GetChainMetas() []*ChainMeta { + if x != nil { + return x.ChainMetas + } + return nil +} + +func (x *QueryAllChainMetasResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + // Existing types type QueryParamsRequest struct { state protoimpl.MessageState @@ -5698,7 +7711,7 @@ type QueryParamsRequest struct { func (x *QueryParamsRequest) Reset() { *x = QueryParamsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[4] + mi := &file_uexecutor_v1_query_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5712,7 +7725,7 @@ func (*QueryParamsRequest) ProtoMessage() {} // Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{4} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{8} } // QueryParamsResponse is the response type for the Query/Params RPC method. @@ -5728,7 +7741,7 @@ type QueryParamsResponse struct { func (x *QueryParamsResponse) Reset() { *x = QueryParamsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[5] + mi := &file_uexecutor_v1_query_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5742,7 +7755,7 @@ func (*QueryParamsResponse) ProtoMessage() {} // Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{5} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{9} } func (x *QueryParamsResponse) GetParams() *Params { @@ -5764,7 +7777,7 @@ type QueryAllPendingInboundsRequest struct { func (x *QueryAllPendingInboundsRequest) Reset() { *x = QueryAllPendingInboundsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[6] + mi := &file_uexecutor_v1_query_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5778,7 +7791,7 @@ func (*QueryAllPendingInboundsRequest) ProtoMessage() {} // Deprecated: Use QueryAllPendingInboundsRequest.ProtoReflect.Descriptor instead. func (*QueryAllPendingInboundsRequest) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{6} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{10} } func (x *QueryAllPendingInboundsRequest) GetPagination() *v1beta1.PageRequest { @@ -5800,7 +7813,7 @@ type QueryAllPendingInboundsResponse struct { func (x *QueryAllPendingInboundsResponse) Reset() { *x = QueryAllPendingInboundsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[7] + mi := &file_uexecutor_v1_query_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5814,7 +7827,7 @@ func (*QueryAllPendingInboundsResponse) ProtoMessage() {} // Deprecated: Use QueryAllPendingInboundsResponse.ProtoReflect.Descriptor instead. func (*QueryAllPendingInboundsResponse) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{7} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{11} } func (x *QueryAllPendingInboundsResponse) GetInboundIds() []string { @@ -5843,7 +7856,7 @@ type QueryGetUniversalTxRequest struct { func (x *QueryGetUniversalTxRequest) Reset() { *x = QueryGetUniversalTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[8] + mi := &file_uexecutor_v1_query_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5857,7 +7870,7 @@ func (*QueryGetUniversalTxRequest) ProtoMessage() {} // Deprecated: Use QueryGetUniversalTxRequest.ProtoReflect.Descriptor instead. func (*QueryGetUniversalTxRequest) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{8} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{12} } func (x *QueryGetUniversalTxRequest) GetId() string { @@ -5878,7 +7891,7 @@ type QueryGetUniversalTxResponse struct { func (x *QueryGetUniversalTxResponse) Reset() { *x = QueryGetUniversalTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[9] + mi := &file_uexecutor_v1_query_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5892,7 +7905,7 @@ func (*QueryGetUniversalTxResponse) ProtoMessage() {} // Deprecated: Use QueryGetUniversalTxResponse.ProtoReflect.Descriptor instead. func (*QueryGetUniversalTxResponse) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{9} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{13} } func (x *QueryGetUniversalTxResponse) GetUniversalTx() *UniversalTxLegacy { @@ -5913,7 +7926,7 @@ type QueryAllUniversalTxRequest struct { func (x *QueryAllUniversalTxRequest) Reset() { *x = QueryAllUniversalTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[10] + mi := &file_uexecutor_v1_query_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5927,7 +7940,7 @@ func (*QueryAllUniversalTxRequest) ProtoMessage() {} // Deprecated: Use QueryAllUniversalTxRequest.ProtoReflect.Descriptor instead. func (*QueryAllUniversalTxRequest) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{10} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{14} } func (x *QueryAllUniversalTxRequest) GetPagination() *v1beta1.PageRequest { @@ -5949,7 +7962,7 @@ type QueryAllUniversalTxResponse struct { func (x *QueryAllUniversalTxResponse) Reset() { *x = QueryAllUniversalTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_uexecutor_v1_query_proto_msgTypes[11] + mi := &file_uexecutor_v1_query_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5963,7 +7976,7 @@ func (*QueryAllUniversalTxResponse) ProtoMessage() {} // Deprecated: Use QueryAllUniversalTxResponse.ProtoReflect.Descriptor instead. func (*QueryAllUniversalTxResponse) Descriptor() ([]byte, []int) { - return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{11} + return file_uexecutor_v1_query_proto_rawDescGZIP(), []int{15} } func (x *QueryAllUniversalTxResponse) GetUniversalTxs() []*UniversalTx { @@ -5990,145 +8003,188 @@ var file_uexecutor_v1_query_proto_rawDesc = []byte{ 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, 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, 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, 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, + 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, 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, - 0x32, 0xb4, 0x06, 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, 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, + 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, 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, + 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, + 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, 0x32, 0xc2, 0x08, 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, - 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, + 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, 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, 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, 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, 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, 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 ( @@ -6143,56 +8199,69 @@ 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, 12) +var file_uexecutor_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_uexecutor_v1_query_proto_goTypes = []interface{}{ (*QueryGasPriceRequest)(nil), // 0: uexecutor.v1.QueryGasPriceRequest (*QueryGasPriceResponse)(nil), // 1: uexecutor.v1.QueryGasPriceResponse (*QueryAllGasPricesRequest)(nil), // 2: uexecutor.v1.QueryAllGasPricesRequest (*QueryAllGasPricesResponse)(nil), // 3: uexecutor.v1.QueryAllGasPricesResponse - (*QueryParamsRequest)(nil), // 4: uexecutor.v1.QueryParamsRequest - (*QueryParamsResponse)(nil), // 5: uexecutor.v1.QueryParamsResponse - (*QueryAllPendingInboundsRequest)(nil), // 6: uexecutor.v1.QueryAllPendingInboundsRequest - (*QueryAllPendingInboundsResponse)(nil), // 7: uexecutor.v1.QueryAllPendingInboundsResponse - (*QueryGetUniversalTxRequest)(nil), // 8: uexecutor.v1.QueryGetUniversalTxRequest - (*QueryGetUniversalTxResponse)(nil), // 9: uexecutor.v1.QueryGetUniversalTxResponse - (*QueryAllUniversalTxRequest)(nil), // 10: uexecutor.v1.QueryAllUniversalTxRequest - (*QueryAllUniversalTxResponse)(nil), // 11: uexecutor.v1.QueryAllUniversalTxResponse - (*GasPrice)(nil), // 12: uexecutor.v1.GasPrice - (*v1beta1.PageRequest)(nil), // 13: cosmos.base.query.v1beta1.PageRequest - (*v1beta1.PageResponse)(nil), // 14: cosmos.base.query.v1beta1.PageResponse - (*Params)(nil), // 15: uexecutor.v1.Params - (*UniversalTxLegacy)(nil), // 16: uexecutor.v1.UniversalTxLegacy - (*UniversalTx)(nil), // 17: uexecutor.v1.UniversalTx + (*QueryChainMetaRequest)(nil), // 4: uexecutor.v1.QueryChainMetaRequest + (*QueryChainMetaResponse)(nil), // 5: uexecutor.v1.QueryChainMetaResponse + (*QueryAllChainMetasRequest)(nil), // 6: uexecutor.v1.QueryAllChainMetasRequest + (*QueryAllChainMetasResponse)(nil), // 7: uexecutor.v1.QueryAllChainMetasResponse + (*QueryParamsRequest)(nil), // 8: uexecutor.v1.QueryParamsRequest + (*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 + (*GasPrice)(nil), // 16: uexecutor.v1.GasPrice + (*v1beta1.PageRequest)(nil), // 17: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 18: cosmos.base.query.v1beta1.PageResponse + (*ChainMeta)(nil), // 19: uexecutor.v1.ChainMeta + (*Params)(nil), // 20: uexecutor.v1.Params + (*UniversalTxLegacy)(nil), // 21: uexecutor.v1.UniversalTxLegacy + (*UniversalTx)(nil), // 22: uexecutor.v1.UniversalTx } var file_uexecutor_v1_query_proto_depIdxs = []int32{ - 12, // 0: uexecutor.v1.QueryGasPriceResponse.gas_price:type_name -> uexecutor.v1.GasPrice - 13, // 1: uexecutor.v1.QueryAllGasPricesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 12, // 2: uexecutor.v1.QueryAllGasPricesResponse.gas_prices:type_name -> uexecutor.v1.GasPrice - 14, // 3: uexecutor.v1.QueryAllGasPricesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 15, // 4: uexecutor.v1.QueryParamsResponse.params:type_name -> uexecutor.v1.Params - 13, // 5: uexecutor.v1.QueryAllPendingInboundsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 14, // 6: uexecutor.v1.QueryAllPendingInboundsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 16, // 7: uexecutor.v1.QueryGetUniversalTxResponse.universal_tx:type_name -> uexecutor.v1.UniversalTxLegacy - 13, // 8: uexecutor.v1.QueryAllUniversalTxRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 17, // 9: uexecutor.v1.QueryAllUniversalTxResponse.universal_txs:type_name -> uexecutor.v1.UniversalTx - 14, // 10: uexecutor.v1.QueryAllUniversalTxResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 4, // 11: uexecutor.v1.Query.Params:input_type -> uexecutor.v1.QueryParamsRequest - 6, // 12: uexecutor.v1.Query.AllPendingInbounds:input_type -> uexecutor.v1.QueryAllPendingInboundsRequest - 8, // 13: uexecutor.v1.Query.GetUniversalTx:input_type -> uexecutor.v1.QueryGetUniversalTxRequest - 10, // 14: uexecutor.v1.Query.AllUniversalTx:input_type -> uexecutor.v1.QueryAllUniversalTxRequest - 0, // 15: uexecutor.v1.Query.GasPrice:input_type -> uexecutor.v1.QueryGasPriceRequest - 2, // 16: uexecutor.v1.Query.AllGasPrices:input_type -> uexecutor.v1.QueryAllGasPricesRequest - 5, // 17: uexecutor.v1.Query.Params:output_type -> uexecutor.v1.QueryParamsResponse - 7, // 18: uexecutor.v1.Query.AllPendingInbounds:output_type -> uexecutor.v1.QueryAllPendingInboundsResponse - 9, // 19: uexecutor.v1.Query.GetUniversalTx:output_type -> uexecutor.v1.QueryGetUniversalTxResponse - 11, // 20: uexecutor.v1.Query.AllUniversalTx:output_type -> uexecutor.v1.QueryAllUniversalTxResponse - 1, // 21: uexecutor.v1.Query.GasPrice:output_type -> uexecutor.v1.QueryGasPriceResponse - 3, // 22: uexecutor.v1.Query.AllGasPrices:output_type -> uexecutor.v1.QueryAllGasPricesResponse - 17, // [17:23] is the sub-list for method output_type - 11, // [11:17] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 16, // 0: uexecutor.v1.QueryGasPriceResponse.gas_price:type_name -> uexecutor.v1.GasPrice + 17, // 1: uexecutor.v1.QueryAllGasPricesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 16, // 2: uexecutor.v1.QueryAllGasPricesResponse.gas_prices:type_name -> uexecutor.v1.GasPrice + 18, // 3: uexecutor.v1.QueryAllGasPricesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 19, // 4: uexecutor.v1.QueryChainMetaResponse.chain_meta:type_name -> uexecutor.v1.ChainMeta + 17, // 5: uexecutor.v1.QueryAllChainMetasRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 19, // 6: uexecutor.v1.QueryAllChainMetasResponse.chain_metas:type_name -> uexecutor.v1.ChainMeta + 18, // 7: uexecutor.v1.QueryAllChainMetasResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 20, // 8: uexecutor.v1.QueryParamsResponse.params:type_name -> uexecutor.v1.Params + 17, // 9: uexecutor.v1.QueryAllPendingInboundsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 18, // 10: uexecutor.v1.QueryAllPendingInboundsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 21, // 11: uexecutor.v1.QueryGetUniversalTxResponse.universal_tx:type_name -> uexecutor.v1.UniversalTxLegacy + 17, // 12: uexecutor.v1.QueryAllUniversalTxRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 22, // 13: uexecutor.v1.QueryAllUniversalTxResponse.universal_txs:type_name -> uexecutor.v1.UniversalTx + 18, // 14: uexecutor.v1.QueryAllUniversalTxResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 8, // 15: uexecutor.v1.Query.Params:input_type -> uexecutor.v1.QueryParamsRequest + 10, // 16: uexecutor.v1.Query.AllPendingInbounds:input_type -> uexecutor.v1.QueryAllPendingInboundsRequest + 12, // 17: uexecutor.v1.Query.GetUniversalTx:input_type -> uexecutor.v1.QueryGetUniversalTxRequest + 14, // 18: uexecutor.v1.Query.AllUniversalTx:input_type -> uexecutor.v1.QueryAllUniversalTxRequest + 0, // 19: uexecutor.v1.Query.GasPrice:input_type -> uexecutor.v1.QueryGasPriceRequest + 2, // 20: uexecutor.v1.Query.AllGasPrices:input_type -> uexecutor.v1.QueryAllGasPricesRequest + 4, // 21: uexecutor.v1.Query.ChainMeta:input_type -> uexecutor.v1.QueryChainMetaRequest + 6, // 22: uexecutor.v1.Query.AllChainMetas:input_type -> uexecutor.v1.QueryAllChainMetasRequest + 9, // 23: uexecutor.v1.Query.Params:output_type -> uexecutor.v1.QueryParamsResponse + 11, // 24: uexecutor.v1.Query.AllPendingInbounds:output_type -> uexecutor.v1.QueryAllPendingInboundsResponse + 13, // 25: uexecutor.v1.Query.GetUniversalTx:output_type -> uexecutor.v1.QueryGetUniversalTxResponse + 15, // 26: uexecutor.v1.Query.AllUniversalTx:output_type -> uexecutor.v1.QueryAllUniversalTxResponse + 1, // 27: uexecutor.v1.Query.GasPrice:output_type -> uexecutor.v1.QueryGasPriceResponse + 3, // 28: uexecutor.v1.Query.AllGasPrices:output_type -> uexecutor.v1.QueryAllGasPricesResponse + 5, // 29: uexecutor.v1.Query.ChainMeta:output_type -> uexecutor.v1.QueryChainMetaResponse + 7, // 30: uexecutor.v1.Query.AllChainMetas:output_type -> uexecutor.v1.QueryAllChainMetasResponse + 23, // [23:31] is the sub-list for method output_type + 15, // [15:23] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_uexecutor_v1_query_proto_init() } @@ -6202,6 +8271,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() if !protoimpl.UnsafeEnabled { file_uexecutor_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryGasPriceRequest); i { @@ -6252,7 +8322,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryParamsRequest); i { + switch v := v.(*QueryChainMetaRequest); i { case 0: return &v.state case 1: @@ -6264,7 +8334,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryParamsResponse); i { + switch v := v.(*QueryChainMetaResponse); i { case 0: return &v.state case 1: @@ -6276,7 +8346,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryAllPendingInboundsRequest); i { + switch v := v.(*QueryAllChainMetasRequest); i { case 0: return &v.state case 1: @@ -6288,7 +8358,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryAllPendingInboundsResponse); i { + switch v := v.(*QueryAllChainMetasResponse); i { case 0: return &v.state case 1: @@ -6300,7 +8370,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryGetUniversalTxRequest); i { + switch v := v.(*QueryParamsRequest); i { case 0: return &v.state case 1: @@ -6312,7 +8382,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryGetUniversalTxResponse); i { + switch v := v.(*QueryParamsResponse); i { case 0: return &v.state case 1: @@ -6324,7 +8394,7 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryAllUniversalTxRequest); i { + switch v := v.(*QueryAllPendingInboundsRequest); i { case 0: return &v.state case 1: @@ -6336,6 +8406,54 @@ func file_uexecutor_v1_query_proto_init() { } } file_uexecutor_v1_query_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllPendingInboundsResponse); 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[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetUniversalTxRequest); 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[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetUniversalTxResponse); 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[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllUniversalTxRequest); 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[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryAllUniversalTxResponse); i { case 0: return &v.state @@ -6354,7 +8472,7 @@ func file_uexecutor_v1_query_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_uexecutor_v1_query_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 16, NumExtensions: 0, NumServices: 1, }, diff --git a/api/uexecutor/v1/query_grpc.pb.go b/api/uexecutor/v1/query_grpc.pb.go index 0a921c47..8299a71b 100644 --- a/api/uexecutor/v1/query_grpc.pb.go +++ b/api/uexecutor/v1/query_grpc.pb.go @@ -25,6 +25,8 @@ const ( Query_AllUniversalTx_FullMethodName = "/uexecutor.v1.Query/AllUniversalTx" Query_GasPrice_FullMethodName = "/uexecutor.v1.Query/GasPrice" Query_AllGasPrices_FullMethodName = "/uexecutor.v1.Query/AllGasPrices" + Query_ChainMeta_FullMethodName = "/uexecutor.v1.Query/ChainMeta" + Query_AllChainMetas_FullMethodName = "/uexecutor.v1.Query/AllChainMetas" ) // QueryClient is the client API for Query service. @@ -43,6 +45,10 @@ type QueryClient interface { GasPrice(ctx context.Context, in *QueryGasPriceRequest, opts ...grpc.CallOption) (*QueryGasPriceResponse, error) // 🔹 Queries all gas prices across chains AllGasPrices(ctx context.Context, in *QueryAllGasPricesRequest, opts ...grpc.CallOption) (*QueryAllGasPricesResponse, error) + // 🔹 Queries chain meta for a specific chain + ChainMeta(ctx context.Context, in *QueryChainMetaRequest, opts ...grpc.CallOption) (*QueryChainMetaResponse, error) + // 🔹 Queries all chain metas across chains + AllChainMetas(ctx context.Context, in *QueryAllChainMetasRequest, opts ...grpc.CallOption) (*QueryAllChainMetasResponse, error) } type queryClient struct { @@ -107,6 +113,24 @@ func (c *queryClient) AllGasPrices(ctx context.Context, in *QueryAllGasPricesReq return out, nil } +func (c *queryClient) ChainMeta(ctx context.Context, in *QueryChainMetaRequest, opts ...grpc.CallOption) (*QueryChainMetaResponse, error) { + out := new(QueryChainMetaResponse) + err := c.cc.Invoke(ctx, Query_ChainMeta_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AllChainMetas(ctx context.Context, in *QueryAllChainMetasRequest, opts ...grpc.CallOption) (*QueryAllChainMetasResponse, error) { + out := new(QueryAllChainMetasResponse) + err := c.cc.Invoke(ctx, Query_AllChainMetas_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 @@ -123,6 +147,10 @@ type QueryServer interface { GasPrice(context.Context, *QueryGasPriceRequest) (*QueryGasPriceResponse, error) // 🔹 Queries all gas prices across chains AllGasPrices(context.Context, *QueryAllGasPricesRequest) (*QueryAllGasPricesResponse, error) + // 🔹 Queries chain meta for a specific chain + ChainMeta(context.Context, *QueryChainMetaRequest) (*QueryChainMetaResponse, error) + // 🔹 Queries all chain metas across chains + AllChainMetas(context.Context, *QueryAllChainMetasRequest) (*QueryAllChainMetasResponse, error) mustEmbedUnimplementedQueryServer() } @@ -148,6 +176,12 @@ func (UnimplementedQueryServer) GasPrice(context.Context, *QueryGasPriceRequest) func (UnimplementedQueryServer) AllGasPrices(context.Context, *QueryAllGasPricesRequest) (*QueryAllGasPricesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllGasPrices not implemented") } +func (UnimplementedQueryServer) ChainMeta(context.Context, *QueryChainMetaRequest) (*QueryChainMetaResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChainMeta not implemented") +} +func (UnimplementedQueryServer) AllChainMetas(context.Context, *QueryAllChainMetasRequest) (*QueryAllChainMetasResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllChainMetas not implemented") +} func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} // UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. @@ -269,6 +303,42 @@ func _Query_AllGasPrices_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } +func _Query_ChainMeta_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryChainMetaRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ChainMeta(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ChainMeta_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ChainMeta(ctx, req.(*QueryChainMetaRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AllChainMetas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllChainMetasRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllChainMetas(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_AllChainMetas_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllChainMetas(ctx, req.(*QueryAllChainMetasRequest)) + } + 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) @@ -300,6 +370,14 @@ var Query_ServiceDesc = grpc.ServiceDesc{ MethodName: "AllGasPrices", Handler: _Query_AllGasPrices_Handler, }, + { + MethodName: "ChainMeta", + Handler: _Query_ChainMeta_Handler, + }, + { + MethodName: "AllChainMetas", + Handler: _Query_AllChainMetas_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "uexecutor/v1/query.proto", diff --git a/api/uexecutor/v1/tx.pulsar.go b/api/uexecutor/v1/tx.pulsar.go index 619f27bd..2a936b32 100644 --- a/api/uexecutor/v1/tx.pulsar.go +++ b/api/uexecutor/v1/tx.pulsar.go @@ -5641,6 +5641,990 @@ func (x *fastReflection_MsgVoteGasPriceResponse) ProtoMethods() *protoiface.Meth } } +var ( + md_MsgVoteChainMeta protoreflect.MessageDescriptor + fd_MsgVoteChainMeta_signer protoreflect.FieldDescriptor + fd_MsgVoteChainMeta_observed_chain_id protoreflect.FieldDescriptor + fd_MsgVoteChainMeta_price protoreflect.FieldDescriptor + fd_MsgVoteChainMeta_chain_height protoreflect.FieldDescriptor + fd_MsgVoteChainMeta_observed_at protoreflect.FieldDescriptor +) + +func init() { + file_uexecutor_v1_tx_proto_init() + md_MsgVoteChainMeta = File_uexecutor_v1_tx_proto.Messages().ByName("MsgVoteChainMeta") + fd_MsgVoteChainMeta_signer = md_MsgVoteChainMeta.Fields().ByName("signer") + fd_MsgVoteChainMeta_observed_chain_id = md_MsgVoteChainMeta.Fields().ByName("observed_chain_id") + fd_MsgVoteChainMeta_price = md_MsgVoteChainMeta.Fields().ByName("price") + fd_MsgVoteChainMeta_chain_height = md_MsgVoteChainMeta.Fields().ByName("chain_height") + fd_MsgVoteChainMeta_observed_at = md_MsgVoteChainMeta.Fields().ByName("observed_at") +} + +var _ protoreflect.Message = (*fastReflection_MsgVoteChainMeta)(nil) + +type fastReflection_MsgVoteChainMeta MsgVoteChainMeta + +func (x *MsgVoteChainMeta) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgVoteChainMeta)(x) +} + +func (x *MsgVoteChainMeta) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_tx_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_MsgVoteChainMeta_messageType fastReflection_MsgVoteChainMeta_messageType +var _ protoreflect.MessageType = fastReflection_MsgVoteChainMeta_messageType{} + +type fastReflection_MsgVoteChainMeta_messageType struct{} + +func (x fastReflection_MsgVoteChainMeta_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgVoteChainMeta)(nil) +} +func (x fastReflection_MsgVoteChainMeta_messageType) New() protoreflect.Message { + return new(fastReflection_MsgVoteChainMeta) +} +func (x fastReflection_MsgVoteChainMeta_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgVoteChainMeta +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgVoteChainMeta) Descriptor() protoreflect.MessageDescriptor { + return md_MsgVoteChainMeta +} + +// 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_MsgVoteChainMeta) Type() protoreflect.MessageType { + return _fastReflection_MsgVoteChainMeta_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgVoteChainMeta) New() protoreflect.Message { + return new(fastReflection_MsgVoteChainMeta) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgVoteChainMeta) Interface() protoreflect.ProtoMessage { + return (*MsgVoteChainMeta)(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_MsgVoteChainMeta) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Signer != "" { + value := protoreflect.ValueOfString(x.Signer) + if !f(fd_MsgVoteChainMeta_signer, value) { + return + } + } + if x.ObservedChainId != "" { + value := protoreflect.ValueOfString(x.ObservedChainId) + if !f(fd_MsgVoteChainMeta_observed_chain_id, value) { + return + } + } + if x.Price != uint64(0) { + value := protoreflect.ValueOfUint64(x.Price) + if !f(fd_MsgVoteChainMeta_price, value) { + return + } + } + if x.ChainHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.ChainHeight) + if !f(fd_MsgVoteChainMeta_chain_height, value) { + return + } + } + if x.ObservedAt != uint64(0) { + value := protoreflect.ValueOfUint64(x.ObservedAt) + if !f(fd_MsgVoteChainMeta_observed_at, 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_MsgVoteChainMeta) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "uexecutor.v1.MsgVoteChainMeta.signer": + return x.Signer != "" + case "uexecutor.v1.MsgVoteChainMeta.observed_chain_id": + return x.ObservedChainId != "" + case "uexecutor.v1.MsgVoteChainMeta.price": + return x.Price != uint64(0) + case "uexecutor.v1.MsgVoteChainMeta.chain_height": + return x.ChainHeight != uint64(0) + case "uexecutor.v1.MsgVoteChainMeta.observed_at": + return x.ObservedAt != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMeta 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_MsgVoteChainMeta) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "uexecutor.v1.MsgVoteChainMeta.signer": + x.Signer = "" + case "uexecutor.v1.MsgVoteChainMeta.observed_chain_id": + x.ObservedChainId = "" + case "uexecutor.v1.MsgVoteChainMeta.price": + x.Price = uint64(0) + case "uexecutor.v1.MsgVoteChainMeta.chain_height": + x.ChainHeight = uint64(0) + case "uexecutor.v1.MsgVoteChainMeta.observed_at": + x.ObservedAt = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMeta 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_MsgVoteChainMeta) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "uexecutor.v1.MsgVoteChainMeta.signer": + value := x.Signer + return protoreflect.ValueOfString(value) + case "uexecutor.v1.MsgVoteChainMeta.observed_chain_id": + value := x.ObservedChainId + return protoreflect.ValueOfString(value) + case "uexecutor.v1.MsgVoteChainMeta.price": + value := x.Price + return protoreflect.ValueOfUint64(value) + case "uexecutor.v1.MsgVoteChainMeta.chain_height": + value := x.ChainHeight + return protoreflect.ValueOfUint64(value) + case "uexecutor.v1.MsgVoteChainMeta.observed_at": + value := x.ObservedAt + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMeta 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_MsgVoteChainMeta) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "uexecutor.v1.MsgVoteChainMeta.signer": + x.Signer = value.Interface().(string) + case "uexecutor.v1.MsgVoteChainMeta.observed_chain_id": + x.ObservedChainId = value.Interface().(string) + case "uexecutor.v1.MsgVoteChainMeta.price": + x.Price = value.Uint() + case "uexecutor.v1.MsgVoteChainMeta.chain_height": + x.ChainHeight = value.Uint() + case "uexecutor.v1.MsgVoteChainMeta.observed_at": + x.ObservedAt = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMeta 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_MsgVoteChainMeta) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.MsgVoteChainMeta.signer": + panic(fmt.Errorf("field signer of message uexecutor.v1.MsgVoteChainMeta is not mutable")) + case "uexecutor.v1.MsgVoteChainMeta.observed_chain_id": + panic(fmt.Errorf("field observed_chain_id of message uexecutor.v1.MsgVoteChainMeta is not mutable")) + case "uexecutor.v1.MsgVoteChainMeta.price": + panic(fmt.Errorf("field price of message uexecutor.v1.MsgVoteChainMeta is not mutable")) + case "uexecutor.v1.MsgVoteChainMeta.chain_height": + panic(fmt.Errorf("field chain_height of message uexecutor.v1.MsgVoteChainMeta is not mutable")) + case "uexecutor.v1.MsgVoteChainMeta.observed_at": + panic(fmt.Errorf("field observed_at of message uexecutor.v1.MsgVoteChainMeta is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMeta 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_MsgVoteChainMeta) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "uexecutor.v1.MsgVoteChainMeta.signer": + return protoreflect.ValueOfString("") + case "uexecutor.v1.MsgVoteChainMeta.observed_chain_id": + return protoreflect.ValueOfString("") + case "uexecutor.v1.MsgVoteChainMeta.price": + return protoreflect.ValueOfUint64(uint64(0)) + case "uexecutor.v1.MsgVoteChainMeta.chain_height": + return protoreflect.ValueOfUint64(uint64(0)) + case "uexecutor.v1.MsgVoteChainMeta.observed_at": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMeta")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMeta 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_MsgVoteChainMeta) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.MsgVoteChainMeta", 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_MsgVoteChainMeta) 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_MsgVoteChainMeta) 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_MsgVoteChainMeta) 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_MsgVoteChainMeta) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgVoteChainMeta) + 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.Signer) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ObservedChainId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Price != 0 { + n += 1 + runtime.Sov(uint64(x.Price)) + } + if x.ChainHeight != 0 { + n += 1 + runtime.Sov(uint64(x.ChainHeight)) + } + if x.ObservedAt != 0 { + n += 1 + runtime.Sov(uint64(x.ObservedAt)) + } + 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().(*MsgVoteChainMeta) + 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.ObservedAt != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ObservedAt)) + i-- + dAtA[i] = 0x28 + } + if x.ChainHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ChainHeight)) + i-- + dAtA[i] = 0x20 + } + if x.Price != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.Price)) + i-- + dAtA[i] = 0x18 + } + if len(x.ObservedChainId) > 0 { + i -= len(x.ObservedChainId) + copy(dAtA[i:], x.ObservedChainId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ObservedChainId))) + i-- + dAtA[i] = 0x12 + } + if len(x.Signer) > 0 { + i -= len(x.Signer) + copy(dAtA[i:], x.Signer) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Signer))) + 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().(*MsgVoteChainMeta) + 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: MsgVoteChainMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgVoteChainMeta: 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 Signer", 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.Signer = 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 ObservedChainId", 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.ObservedChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Price", wireType) + } + x.Price = 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.Price |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ChainHeight", wireType) + } + x.ChainHeight = 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.ChainHeight |= 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 ObservedAt", wireType) + } + x.ObservedAt = 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.ObservedAt |= 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 ( + md_MsgVoteChainMetaResponse protoreflect.MessageDescriptor +) + +func init() { + file_uexecutor_v1_tx_proto_init() + md_MsgVoteChainMetaResponse = File_uexecutor_v1_tx_proto.Messages().ByName("MsgVoteChainMetaResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgVoteChainMetaResponse)(nil) + +type fastReflection_MsgVoteChainMetaResponse MsgVoteChainMetaResponse + +func (x *MsgVoteChainMetaResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgVoteChainMetaResponse)(x) +} + +func (x *MsgVoteChainMetaResponse) slowProtoReflect() protoreflect.Message { + mi := &file_uexecutor_v1_tx_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_MsgVoteChainMetaResponse_messageType fastReflection_MsgVoteChainMetaResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgVoteChainMetaResponse_messageType{} + +type fastReflection_MsgVoteChainMetaResponse_messageType struct{} + +func (x fastReflection_MsgVoteChainMetaResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgVoteChainMetaResponse)(nil) +} +func (x fastReflection_MsgVoteChainMetaResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgVoteChainMetaResponse) +} +func (x fastReflection_MsgVoteChainMetaResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgVoteChainMetaResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgVoteChainMetaResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgVoteChainMetaResponse +} + +// 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_MsgVoteChainMetaResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgVoteChainMetaResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgVoteChainMetaResponse) New() protoreflect.Message { + return new(fastReflection_MsgVoteChainMetaResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgVoteChainMetaResponse) Interface() protoreflect.ProtoMessage { + return (*MsgVoteChainMetaResponse)(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_MsgVoteChainMetaResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// 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_MsgVoteChainMetaResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMetaResponse 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_MsgVoteChainMetaResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMetaResponse 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_MsgVoteChainMetaResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMetaResponse 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_MsgVoteChainMetaResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMetaResponse 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_MsgVoteChainMetaResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMetaResponse 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_MsgVoteChainMetaResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.MsgVoteChainMetaResponse")) + } + panic(fmt.Errorf("message uexecutor.v1.MsgVoteChainMetaResponse 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_MsgVoteChainMetaResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in uexecutor.v1.MsgVoteChainMetaResponse", 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_MsgVoteChainMetaResponse) 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_MsgVoteChainMetaResponse) 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_MsgVoteChainMetaResponse) 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_MsgVoteChainMetaResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgVoteChainMetaResponse) + 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.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().(*MsgVoteChainMetaResponse) + 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 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().(*MsgVoteChainMetaResponse) + 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: MsgVoteChainMetaResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgVoteChainMetaResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + 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 @@ -6163,6 +7147,101 @@ func (*MsgVoteGasPriceResponse) Descriptor() ([]byte, []int) { return file_uexecutor_v1_tx_proto_rawDescGZIP(), []int{11} } +// MsgVoteChainMeta is broadcasted by Universal Validators to submit observed chain metadata (gas price + block height) +type MsgVoteChainMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` // Universal Validator address submitting the vote + ObservedChainId string `protobuf:"bytes,2,opt,name=observed_chain_id,json=observedChainId,proto3" json:"observed_chain_id,omitempty"` // CAIP-2 chain ID of observed external chain (e.g. "eip155:1") + Price uint64 `protobuf:"varint,3,opt,name=price,proto3" json:"price,omitempty"` // Observed gas price in wei + ChainHeight uint64 `protobuf:"varint,4,opt,name=chain_height,json=chainHeight,proto3" json:"chain_height,omitempty"` // Block height from which observation was made + ObservedAt uint64 `protobuf:"varint,5,opt,name=observed_at,json=observedAt,proto3" json:"observed_at,omitempty"` // Timestamp when the observation was made (unix seconds) +} + +func (x *MsgVoteChainMeta) Reset() { + *x = MsgVoteChainMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_tx_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgVoteChainMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgVoteChainMeta) ProtoMessage() {} + +// Deprecated: Use MsgVoteChainMeta.ProtoReflect.Descriptor instead. +func (*MsgVoteChainMeta) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_tx_proto_rawDescGZIP(), []int{12} +} + +func (x *MsgVoteChainMeta) GetSigner() string { + if x != nil { + return x.Signer + } + return "" +} + +func (x *MsgVoteChainMeta) GetObservedChainId() string { + if x != nil { + return x.ObservedChainId + } + return "" +} + +func (x *MsgVoteChainMeta) GetPrice() uint64 { + if x != nil { + return x.Price + } + return 0 +} + +func (x *MsgVoteChainMeta) GetChainHeight() uint64 { + if x != nil { + return x.ChainHeight + } + return 0 +} + +func (x *MsgVoteChainMeta) GetObservedAt() uint64 { + if x != nil { + return x.ObservedAt + } + return 0 +} + +// MsgVoteChainMetaResponse defines the response for MsgVoteChainMeta +type MsgVoteChainMetaResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgVoteChainMetaResponse) Reset() { + *x = MsgVoteChainMetaResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_uexecutor_v1_tx_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgVoteChainMetaResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgVoteChainMetaResponse) ProtoMessage() {} + +// Deprecated: Use MsgVoteChainMetaResponse.ProtoReflect.Descriptor instead. +func (*MsgVoteChainMetaResponse) Descriptor() ([]byte, []int) { + return file_uexecutor_v1_tx_proto_rawDescGZIP(), []int{13} +} + var File_uexecutor_v1_tx_proto protoreflect.FileDescriptor var file_uexecutor_v1_tx_proto_rawDesc = []byte{ @@ -6172,152 +7251,177 @@ var file_uexecutor_v1_tx_proto_rawDesc = []byte{ 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x73, 0x67, 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, 0x14, 0x67, 0x6f, 0x67, - 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xab, 0x01, 0x0a, - 0x0f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x02, 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, 0x3a, 0x2c, 0x82, 0xe7, - 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, - 0x19, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, - 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc0, 0x02, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, - 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x52, 0x0a, - 0x14, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x75, 0x65, + 0x74, 0x79, 0x70, 0x65, 0x73, 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, 0x14, 0x67, 0x6f, 0x67, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xab, 0x01, 0x0a, 0x0f, + 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x02, 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, 0x3a, 0x2c, 0x82, 0xe7, 0xb0, + 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x19, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc0, 0x02, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x14, + 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x75, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x12, 0x75, 0x6e, + 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x4b, 0x0a, 0x11, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 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, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x12, 0x75, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x4b, 0x0a, 0x11, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 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, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x10, 0x75, 0x6e, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2b, - 0x0a, 0x11, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x3a, 0x2b, 0x82, 0xe7, 0xb0, - 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x75, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x02, 0x0a, 0x0d, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x65, 0x55, 0x45, 0x41, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x14, 0x75, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x12, 0x75, 0x6e, 0x69, 0x76, 0x65, - 0x72, 0x73, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x4b, 0x0a, - 0x11, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3a, 0x27, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x72, 0x8a, 0xe7, 0xb0, 0x2a, 0x17, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x55, 0x45, - 0x41, 0x22, 0x17, 0x0a, 0x15, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x55, - 0x45, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x0e, 0x4d, - 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x30, 0x0a, - 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, - 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 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, - 0x3a, 0x21, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x8a, 0xe7, 0xb0, - 0x2a, 0x11, 0x75, 0x65, 0x2f, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xde, 0x01, - 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x72, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x75, 0x74, 0x78, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x75, 0x74, 0x78, 0x49, 0x64, 0x12, - 0x42, 0x0a, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x74, 0x78, 0x18, 0x04, - 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, 0x52, 0x0a, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x54, 0x78, 0x3a, 0x29, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, - 0x8a, 0xe7, 0xb0, 0x2a, 0x19, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x4d, - 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x19, - 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x0f, 0x4d, 0x73, - 0x67, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x30, 0x0a, - 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, - 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, - 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x29, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x8a, 0xe7, 0xb0, 0x2a, 0x19, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, - 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, - 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8d, 0x04, 0x0a, 0x03, 0x4d, - 0x73, 0x67, 0x12, 0x54, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x1d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x1a, 0x25, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1f, 0x2e, 0x75, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x27, 0x2e, 0x75, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x78, + 0x72, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x10, 0x75, 0x6e, 0x69, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2b, 0x0a, + 0x11, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x3a, 0x2b, 0x82, 0xe7, 0xb0, 0x2a, + 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x75, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x55, - 0x45, 0x41, 0x12, 0x1b, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x55, 0x45, 0x41, 0x1a, - 0x23, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x55, 0x45, 0x41, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x1a, 0x24, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x56, 0x6f, 0x74, 0x65, 0x4f, - 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x75, - 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x1a, 0x25, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, - 0x0c, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1d, 0x2e, - 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, - 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x1a, 0x25, 0x2e, 0x75, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, - 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xaf, 0x01, 0x0a, 0x10, 0x63, - 0x6f, 0x6d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, - 0x07, 0x54, 0x78, 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, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x02, 0x0a, 0x0d, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, + 0x61, 0x74, 0x65, 0x55, 0x45, 0x41, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x12, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x11, + 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3a, 0x27, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x72, 0x8a, 0xe7, 0xb0, 0x2a, 0x17, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x55, 0x45, 0x41, + 0x22, 0x17, 0x0a, 0x15, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x55, 0x45, + 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x0e, 0x4d, 0x73, + 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x30, 0x0a, 0x06, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, + 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 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, 0x3a, + 0x21, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x8a, 0xe7, 0xb0, 0x2a, + 0x11, 0x75, 0x65, 0x2f, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xde, 0x01, 0x0a, + 0x0f, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x30, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x75, 0x74, 0x78, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x75, 0x74, 0x78, 0x49, 0x64, 0x12, 0x42, + 0x0a, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x74, 0x78, 0x18, 0x04, 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, 0x52, 0x0a, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x54, 0x78, 0x3a, 0x29, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x8a, + 0xe7, 0xb0, 0x2a, 0x19, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x4d, 0x73, + 0x67, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x19, 0x0a, + 0x17, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x0f, 0x4d, 0x73, 0x67, + 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x06, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, + 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x2a, + 0x0a, 0x11, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x3a, 0x29, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0x8a, 0xe7, 0xb0, 0x2a, 0x19, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x4d, + 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x19, + 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf6, 0x01, 0x0a, 0x10, 0x4d, 0x73, + 0x67, 0x56, 0x6f, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x30, + 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, + 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x70, 0x72, 0x69, + 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x2a, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x72, 0x8a, 0xe7, 0xb0, 0x2a, 0x1a, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, + 0x74, 0x61, 0x22, 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe6, + 0x04, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x54, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x25, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0e, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1f, + 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, + 0x27, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x4d, 0x69, 0x67, 0x72, + 0x61, 0x74, 0x65, 0x55, 0x45, 0x41, 0x12, 0x1b, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, + 0x55, 0x45, 0x41, 0x1a, 0x23, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x55, 0x45, 0x41, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x56, 0x6f, 0x74, 0x65, + 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x1a, 0x24, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x56, + 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1d, 0x2e, 0x75, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, + 0x74, 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x1a, 0x25, 0x2e, 0x75, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, + 0x65, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x12, 0x1d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x1a, 0x25, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x56, 0x6f, 0x74, 0x65, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1e, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x26, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xaf, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x54, 0x78, + 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 ( @@ -6332,7 +7436,7 @@ func file_uexecutor_v1_tx_proto_rawDescGZIP() []byte { return file_uexecutor_v1_tx_proto_rawDescData } -var file_uexecutor_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_uexecutor_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_uexecutor_v1_tx_proto_goTypes = []interface{}{ (*MsgUpdateParams)(nil), // 0: uexecutor.v1.MsgUpdateParams (*MsgUpdateParamsResponse)(nil), // 1: uexecutor.v1.MsgUpdateParamsResponse @@ -6346,35 +7450,39 @@ var file_uexecutor_v1_tx_proto_goTypes = []interface{}{ (*MsgVoteOutboundResponse)(nil), // 9: uexecutor.v1.MsgVoteOutboundResponse (*MsgVoteGasPrice)(nil), // 10: uexecutor.v1.MsgVoteGasPrice (*MsgVoteGasPriceResponse)(nil), // 11: uexecutor.v1.MsgVoteGasPriceResponse - (*Params)(nil), // 12: uexecutor.v1.Params - (*UniversalAccountId)(nil), // 13: uexecutor.v1.UniversalAccountId - (*UniversalPayload)(nil), // 14: uexecutor.v1.UniversalPayload - (*MigrationPayload)(nil), // 15: uexecutor.v1.MigrationPayload - (*Inbound)(nil), // 16: uexecutor.v1.Inbound - (*OutboundObservation)(nil), // 17: uexecutor.v1.OutboundObservation + (*MsgVoteChainMeta)(nil), // 12: uexecutor.v1.MsgVoteChainMeta + (*MsgVoteChainMetaResponse)(nil), // 13: uexecutor.v1.MsgVoteChainMetaResponse + (*Params)(nil), // 14: uexecutor.v1.Params + (*UniversalAccountId)(nil), // 15: uexecutor.v1.UniversalAccountId + (*UniversalPayload)(nil), // 16: uexecutor.v1.UniversalPayload + (*MigrationPayload)(nil), // 17: uexecutor.v1.MigrationPayload + (*Inbound)(nil), // 18: uexecutor.v1.Inbound + (*OutboundObservation)(nil), // 19: uexecutor.v1.OutboundObservation } var file_uexecutor_v1_tx_proto_depIdxs = []int32{ - 12, // 0: uexecutor.v1.MsgUpdateParams.params:type_name -> uexecutor.v1.Params - 13, // 1: uexecutor.v1.MsgExecutePayload.universal_account_id:type_name -> uexecutor.v1.UniversalAccountId - 14, // 2: uexecutor.v1.MsgExecutePayload.universal_payload:type_name -> uexecutor.v1.UniversalPayload - 13, // 3: uexecutor.v1.MsgMigrateUEA.universal_account_id:type_name -> uexecutor.v1.UniversalAccountId - 15, // 4: uexecutor.v1.MsgMigrateUEA.migration_payload:type_name -> uexecutor.v1.MigrationPayload - 16, // 5: uexecutor.v1.MsgVoteInbound.inbound:type_name -> uexecutor.v1.Inbound - 17, // 6: uexecutor.v1.MsgVoteOutbound.observed_tx:type_name -> uexecutor.v1.OutboundObservation + 14, // 0: uexecutor.v1.MsgUpdateParams.params:type_name -> uexecutor.v1.Params + 15, // 1: uexecutor.v1.MsgExecutePayload.universal_account_id:type_name -> uexecutor.v1.UniversalAccountId + 16, // 2: uexecutor.v1.MsgExecutePayload.universal_payload:type_name -> uexecutor.v1.UniversalPayload + 15, // 3: uexecutor.v1.MsgMigrateUEA.universal_account_id:type_name -> uexecutor.v1.UniversalAccountId + 17, // 4: uexecutor.v1.MsgMigrateUEA.migration_payload:type_name -> uexecutor.v1.MigrationPayload + 18, // 5: uexecutor.v1.MsgVoteInbound.inbound:type_name -> uexecutor.v1.Inbound + 19, // 6: uexecutor.v1.MsgVoteOutbound.observed_tx:type_name -> uexecutor.v1.OutboundObservation 0, // 7: uexecutor.v1.Msg.UpdateParams:input_type -> uexecutor.v1.MsgUpdateParams 2, // 8: uexecutor.v1.Msg.ExecutePayload:input_type -> uexecutor.v1.MsgExecutePayload 4, // 9: uexecutor.v1.Msg.MigrateUEA:input_type -> uexecutor.v1.MsgMigrateUEA 6, // 10: uexecutor.v1.Msg.VoteInbound:input_type -> uexecutor.v1.MsgVoteInbound 8, // 11: uexecutor.v1.Msg.VoteOutbound:input_type -> uexecutor.v1.MsgVoteOutbound 10, // 12: uexecutor.v1.Msg.VoteGasPrice:input_type -> uexecutor.v1.MsgVoteGasPrice - 1, // 13: uexecutor.v1.Msg.UpdateParams:output_type -> uexecutor.v1.MsgUpdateParamsResponse - 3, // 14: uexecutor.v1.Msg.ExecutePayload:output_type -> uexecutor.v1.MsgExecutePayloadResponse - 5, // 15: uexecutor.v1.Msg.MigrateUEA:output_type -> uexecutor.v1.MsgMigrateUEAResponse - 7, // 16: uexecutor.v1.Msg.VoteInbound:output_type -> uexecutor.v1.MsgVoteInboundResponse - 9, // 17: uexecutor.v1.Msg.VoteOutbound:output_type -> uexecutor.v1.MsgVoteOutboundResponse - 11, // 18: uexecutor.v1.Msg.VoteGasPrice:output_type -> uexecutor.v1.MsgVoteGasPriceResponse - 13, // [13:19] is the sub-list for method output_type - 7, // [7:13] is the sub-list for method input_type + 12, // 13: uexecutor.v1.Msg.VoteChainMeta:input_type -> uexecutor.v1.MsgVoteChainMeta + 1, // 14: uexecutor.v1.Msg.UpdateParams:output_type -> uexecutor.v1.MsgUpdateParamsResponse + 3, // 15: uexecutor.v1.Msg.ExecutePayload:output_type -> uexecutor.v1.MsgExecutePayloadResponse + 5, // 16: uexecutor.v1.Msg.MigrateUEA:output_type -> uexecutor.v1.MsgMigrateUEAResponse + 7, // 17: uexecutor.v1.Msg.VoteInbound:output_type -> uexecutor.v1.MsgVoteInboundResponse + 9, // 18: uexecutor.v1.Msg.VoteOutbound:output_type -> uexecutor.v1.MsgVoteOutboundResponse + 11, // 19: uexecutor.v1.Msg.VoteGasPrice:output_type -> uexecutor.v1.MsgVoteGasPriceResponse + 13, // 20: uexecutor.v1.Msg.VoteChainMeta:output_type -> uexecutor.v1.MsgVoteChainMetaResponse + 14, // [14:21] is the sub-list for method output_type + 7, // [7:14] is the sub-list for method input_type 7, // [7:7] is the sub-list for extension type_name 7, // [7:7] is the sub-list for extension extendee 0, // [0:7] is the sub-list for field type_name @@ -6386,6 +7494,7 @@ func file_uexecutor_v1_tx_proto_init() { return } file_uexecutor_v1_types_proto_init() + file_uexecutor_v1_chain_meta_proto_init() if !protoimpl.UnsafeEnabled { file_uexecutor_v1_tx_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MsgUpdateParams); i { @@ -6531,6 +7640,30 @@ func file_uexecutor_v1_tx_proto_init() { return nil } } + file_uexecutor_v1_tx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgVoteChainMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_uexecutor_v1_tx_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgVoteChainMetaResponse); 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{ @@ -6538,7 +7671,7 @@ func file_uexecutor_v1_tx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_uexecutor_v1_tx_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 14, NumExtensions: 0, NumServices: 1, }, diff --git a/api/uexecutor/v1/tx_grpc.pb.go b/api/uexecutor/v1/tx_grpc.pb.go index 7da7d9f3..f2e562d4 100644 --- a/api/uexecutor/v1/tx_grpc.pb.go +++ b/api/uexecutor/v1/tx_grpc.pb.go @@ -25,6 +25,7 @@ const ( Msg_VoteInbound_FullMethodName = "/uexecutor.v1.Msg/VoteInbound" Msg_VoteOutbound_FullMethodName = "/uexecutor.v1.Msg/VoteOutbound" Msg_VoteGasPrice_FullMethodName = "/uexecutor.v1.Msg/VoteGasPrice" + Msg_VoteChainMeta_FullMethodName = "/uexecutor.v1.Msg/VoteChainMeta" ) // MsgClient is the client API for Msg service. @@ -45,6 +46,8 @@ type MsgClient interface { VoteOutbound(ctx context.Context, in *MsgVoteOutbound, opts ...grpc.CallOption) (*MsgVoteOutboundResponse, error) // VoteGasPrice defines a message for universal validators to vote on the gas price VoteGasPrice(ctx context.Context, in *MsgVoteGasPrice, opts ...grpc.CallOption) (*MsgVoteGasPriceResponse, error) + // VoteChainMeta defines a message for universal validators to vote on chain metadata (gas price + block height) + VoteChainMeta(ctx context.Context, in *MsgVoteChainMeta, opts ...grpc.CallOption) (*MsgVoteChainMetaResponse, error) } type msgClient struct { @@ -109,6 +112,15 @@ func (c *msgClient) VoteGasPrice(ctx context.Context, in *MsgVoteGasPrice, opts return out, nil } +func (c *msgClient) VoteChainMeta(ctx context.Context, in *MsgVoteChainMeta, opts ...grpc.CallOption) (*MsgVoteChainMetaResponse, error) { + out := new(MsgVoteChainMetaResponse) + err := c.cc.Invoke(ctx, Msg_VoteChainMeta_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. // All implementations must embed UnimplementedMsgServer // for forward compatibility @@ -127,6 +139,8 @@ type MsgServer interface { VoteOutbound(context.Context, *MsgVoteOutbound) (*MsgVoteOutboundResponse, error) // VoteGasPrice defines a message for universal validators to vote on the gas price VoteGasPrice(context.Context, *MsgVoteGasPrice) (*MsgVoteGasPriceResponse, error) + // VoteChainMeta defines a message for universal validators to vote on chain metadata (gas price + block height) + VoteChainMeta(context.Context, *MsgVoteChainMeta) (*MsgVoteChainMetaResponse, error) mustEmbedUnimplementedMsgServer() } @@ -152,6 +166,9 @@ func (UnimplementedMsgServer) VoteOutbound(context.Context, *MsgVoteOutbound) (* func (UnimplementedMsgServer) VoteGasPrice(context.Context, *MsgVoteGasPrice) (*MsgVoteGasPriceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method VoteGasPrice not implemented") } +func (UnimplementedMsgServer) VoteChainMeta(context.Context, *MsgVoteChainMeta) (*MsgVoteChainMetaResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VoteChainMeta not implemented") +} func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} // UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. @@ -273,6 +290,24 @@ func _Msg_VoteGasPrice_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Msg_VoteChainMeta_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgVoteChainMeta) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).VoteChainMeta(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_VoteChainMeta_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).VoteChainMeta(ctx, req.(*MsgVoteChainMeta)) + } + return interceptor(ctx, in, info, handler) +} + // Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -304,6 +339,10 @@ var Msg_ServiceDesc = grpc.ServiceDesc{ MethodName: "VoteGasPrice", Handler: _Msg_VoteGasPrice_Handler, }, + { + MethodName: "VoteChainMeta", + Handler: _Msg_VoteChainMeta_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "uexecutor/v1/tx.proto", diff --git a/api/uexecutor/v1/types.pulsar.go b/api/uexecutor/v1/types.pulsar.go index 6f3d4cbd..228be4f2 100644 --- a/api/uexecutor/v1/types.pulsar.go +++ b/api/uexecutor/v1/types.pulsar.go @@ -4698,6 +4698,7 @@ var ( fd_OutboundObservation_block_height protoreflect.FieldDescriptor fd_OutboundObservation_tx_hash protoreflect.FieldDescriptor fd_OutboundObservation_error_msg protoreflect.FieldDescriptor + fd_OutboundObservation_gas_fee_used protoreflect.FieldDescriptor ) func init() { @@ -4707,6 +4708,7 @@ func init() { fd_OutboundObservation_block_height = md_OutboundObservation.Fields().ByName("block_height") fd_OutboundObservation_tx_hash = md_OutboundObservation.Fields().ByName("tx_hash") fd_OutboundObservation_error_msg = md_OutboundObservation.Fields().ByName("error_msg") + fd_OutboundObservation_gas_fee_used = md_OutboundObservation.Fields().ByName("gas_fee_used") } var _ protoreflect.Message = (*fastReflection_OutboundObservation)(nil) @@ -4798,6 +4800,12 @@ func (x *fastReflection_OutboundObservation) Range(f func(protoreflect.FieldDesc return } } + if x.GasFeeUsed != "" { + value := protoreflect.ValueOfString(x.GasFeeUsed) + if !f(fd_OutboundObservation_gas_fee_used, value) { + return + } + } } // Has reports whether a field is populated. @@ -4821,6 +4829,8 @@ func (x *fastReflection_OutboundObservation) Has(fd protoreflect.FieldDescriptor return x.TxHash != "" case "uexecutor.v1.OutboundObservation.error_msg": return x.ErrorMsg != "" + case "uexecutor.v1.OutboundObservation.gas_fee_used": + return x.GasFeeUsed != "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservation")) @@ -4845,6 +4855,8 @@ func (x *fastReflection_OutboundObservation) Clear(fd protoreflect.FieldDescript x.TxHash = "" case "uexecutor.v1.OutboundObservation.error_msg": x.ErrorMsg = "" + case "uexecutor.v1.OutboundObservation.gas_fee_used": + x.GasFeeUsed = "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservation")) @@ -4873,6 +4885,9 @@ func (x *fastReflection_OutboundObservation) Get(descriptor protoreflect.FieldDe case "uexecutor.v1.OutboundObservation.error_msg": value := x.ErrorMsg return protoreflect.ValueOfString(value) + case "uexecutor.v1.OutboundObservation.gas_fee_used": + value := x.GasFeeUsed + return protoreflect.ValueOfString(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservation")) @@ -4901,6 +4916,8 @@ func (x *fastReflection_OutboundObservation) Set(fd protoreflect.FieldDescriptor x.TxHash = value.Interface().(string) case "uexecutor.v1.OutboundObservation.error_msg": x.ErrorMsg = value.Interface().(string) + case "uexecutor.v1.OutboundObservation.gas_fee_used": + x.GasFeeUsed = value.Interface().(string) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservation")) @@ -4929,6 +4946,8 @@ func (x *fastReflection_OutboundObservation) Mutable(fd protoreflect.FieldDescri panic(fmt.Errorf("field tx_hash of message uexecutor.v1.OutboundObservation is not mutable")) case "uexecutor.v1.OutboundObservation.error_msg": panic(fmt.Errorf("field error_msg of message uexecutor.v1.OutboundObservation is not mutable")) + case "uexecutor.v1.OutboundObservation.gas_fee_used": + panic(fmt.Errorf("field gas_fee_used of message uexecutor.v1.OutboundObservation is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservation")) @@ -4950,6 +4969,8 @@ func (x *fastReflection_OutboundObservation) NewField(fd protoreflect.FieldDescr return protoreflect.ValueOfString("") case "uexecutor.v1.OutboundObservation.error_msg": return protoreflect.ValueOfString("") + case "uexecutor.v1.OutboundObservation.gas_fee_used": + return protoreflect.ValueOfString("") default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundObservation")) @@ -5033,6 +5054,10 @@ func (x *fastReflection_OutboundObservation) ProtoMethods() *protoiface.Methods if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } + l = len(x.GasFeeUsed) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -5062,6 +5087,13 @@ func (x *fastReflection_OutboundObservation) ProtoMethods() *protoiface.Methods i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.GasFeeUsed) > 0 { + i -= len(x.GasFeeUsed) + copy(dAtA[i:], x.GasFeeUsed) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GasFeeUsed))) + i-- + dAtA[i] = 0x2a + } if len(x.ErrorMsg) > 0 { i -= len(x.ErrorMsg) copy(dAtA[i:], x.ErrorMsg) @@ -5243,6 +5275,38 @@ func (x *fastReflection_OutboundObservation) ProtoMethods() *protoiface.Methods } x.ErrorMsg = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GasFeeUsed", 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.GasFeeUsed = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -5779,6 +5843,11 @@ var ( fd_OutboundTx_outbound_status protoreflect.FieldDescriptor fd_OutboundTx_revert_instructions protoreflect.FieldDescriptor fd_OutboundTx_pc_revert_execution protoreflect.FieldDescriptor + fd_OutboundTx_gas_price protoreflect.FieldDescriptor + fd_OutboundTx_gas_fee protoreflect.FieldDescriptor + fd_OutboundTx_pc_refund_execution protoreflect.FieldDescriptor + fd_OutboundTx_refund_swap_error protoreflect.FieldDescriptor + fd_OutboundTx_gas_token protoreflect.FieldDescriptor ) func init() { @@ -5799,6 +5868,11 @@ func init() { fd_OutboundTx_outbound_status = md_OutboundTx.Fields().ByName("outbound_status") fd_OutboundTx_revert_instructions = md_OutboundTx.Fields().ByName("revert_instructions") fd_OutboundTx_pc_revert_execution = md_OutboundTx.Fields().ByName("pc_revert_execution") + fd_OutboundTx_gas_price = md_OutboundTx.Fields().ByName("gas_price") + fd_OutboundTx_gas_fee = md_OutboundTx.Fields().ByName("gas_fee") + fd_OutboundTx_pc_refund_execution = md_OutboundTx.Fields().ByName("pc_refund_execution") + fd_OutboundTx_refund_swap_error = md_OutboundTx.Fields().ByName("refund_swap_error") + fd_OutboundTx_gas_token = md_OutboundTx.Fields().ByName("gas_token") } var _ protoreflect.Message = (*fastReflection_OutboundTx)(nil) @@ -5956,6 +6030,36 @@ func (x *fastReflection_OutboundTx) Range(f func(protoreflect.FieldDescriptor, p return } } + if x.GasPrice != "" { + value := protoreflect.ValueOfString(x.GasPrice) + if !f(fd_OutboundTx_gas_price, value) { + return + } + } + if x.GasFee != "" { + value := protoreflect.ValueOfString(x.GasFee) + if !f(fd_OutboundTx_gas_fee, value) { + return + } + } + if x.PcRefundExecution != nil { + value := protoreflect.ValueOfMessage(x.PcRefundExecution.ProtoReflect()) + if !f(fd_OutboundTx_pc_refund_execution, value) { + return + } + } + if x.RefundSwapError != "" { + value := protoreflect.ValueOfString(x.RefundSwapError) + if !f(fd_OutboundTx_refund_swap_error, value) { + return + } + } + if x.GasToken != "" { + value := protoreflect.ValueOfString(x.GasToken) + if !f(fd_OutboundTx_gas_token, value) { + return + } + } } // Has reports whether a field is populated. @@ -6001,6 +6105,16 @@ func (x *fastReflection_OutboundTx) Has(fd protoreflect.FieldDescriptor) bool { return x.RevertInstructions != nil case "uexecutor.v1.OutboundTx.pc_revert_execution": return x.PcRevertExecution != nil + case "uexecutor.v1.OutboundTx.gas_price": + return x.GasPrice != "" + case "uexecutor.v1.OutboundTx.gas_fee": + return x.GasFee != "" + case "uexecutor.v1.OutboundTx.pc_refund_execution": + return x.PcRefundExecution != nil + case "uexecutor.v1.OutboundTx.refund_swap_error": + return x.RefundSwapError != "" + case "uexecutor.v1.OutboundTx.gas_token": + return x.GasToken != "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundTx")) @@ -6047,6 +6161,16 @@ func (x *fastReflection_OutboundTx) Clear(fd protoreflect.FieldDescriptor) { x.RevertInstructions = nil case "uexecutor.v1.OutboundTx.pc_revert_execution": x.PcRevertExecution = nil + case "uexecutor.v1.OutboundTx.gas_price": + x.GasPrice = "" + case "uexecutor.v1.OutboundTx.gas_fee": + x.GasFee = "" + case "uexecutor.v1.OutboundTx.pc_refund_execution": + x.PcRefundExecution = nil + case "uexecutor.v1.OutboundTx.refund_swap_error": + x.RefundSwapError = "" + case "uexecutor.v1.OutboundTx.gas_token": + x.GasToken = "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundTx")) @@ -6108,6 +6232,21 @@ func (x *fastReflection_OutboundTx) Get(descriptor protoreflect.FieldDescriptor) case "uexecutor.v1.OutboundTx.pc_revert_execution": value := x.PcRevertExecution return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "uexecutor.v1.OutboundTx.gas_price": + value := x.GasPrice + return protoreflect.ValueOfString(value) + case "uexecutor.v1.OutboundTx.gas_fee": + value := x.GasFee + return protoreflect.ValueOfString(value) + case "uexecutor.v1.OutboundTx.pc_refund_execution": + value := x.PcRefundExecution + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "uexecutor.v1.OutboundTx.refund_swap_error": + value := x.RefundSwapError + return protoreflect.ValueOfString(value) + case "uexecutor.v1.OutboundTx.gas_token": + value := x.GasToken + return protoreflect.ValueOfString(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundTx")) @@ -6158,6 +6297,16 @@ func (x *fastReflection_OutboundTx) Set(fd protoreflect.FieldDescriptor, value p x.RevertInstructions = value.Message().Interface().(*RevertInstructions) case "uexecutor.v1.OutboundTx.pc_revert_execution": x.PcRevertExecution = value.Message().Interface().(*PCTx) + case "uexecutor.v1.OutboundTx.gas_price": + x.GasPrice = value.Interface().(string) + case "uexecutor.v1.OutboundTx.gas_fee": + x.GasFee = value.Interface().(string) + case "uexecutor.v1.OutboundTx.pc_refund_execution": + x.PcRefundExecution = value.Message().Interface().(*PCTx) + case "uexecutor.v1.OutboundTx.refund_swap_error": + x.RefundSwapError = value.Interface().(string) + case "uexecutor.v1.OutboundTx.gas_token": + x.GasToken = value.Interface().(string) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundTx")) @@ -6198,6 +6347,11 @@ func (x *fastReflection_OutboundTx) Mutable(fd protoreflect.FieldDescriptor) pro x.PcRevertExecution = new(PCTx) } return protoreflect.ValueOfMessage(x.PcRevertExecution.ProtoReflect()) + case "uexecutor.v1.OutboundTx.pc_refund_execution": + if x.PcRefundExecution == nil { + x.PcRefundExecution = new(PCTx) + } + return protoreflect.ValueOfMessage(x.PcRefundExecution.ProtoReflect()) case "uexecutor.v1.OutboundTx.destination_chain": panic(fmt.Errorf("field destination_chain of message uexecutor.v1.OutboundTx is not mutable")) case "uexecutor.v1.OutboundTx.recipient": @@ -6220,6 +6374,14 @@ func (x *fastReflection_OutboundTx) Mutable(fd protoreflect.FieldDescriptor) pro panic(fmt.Errorf("field id of message uexecutor.v1.OutboundTx is not mutable")) case "uexecutor.v1.OutboundTx.outbound_status": panic(fmt.Errorf("field outbound_status of message uexecutor.v1.OutboundTx is not mutable")) + case "uexecutor.v1.OutboundTx.gas_price": + panic(fmt.Errorf("field gas_price of message uexecutor.v1.OutboundTx is not mutable")) + case "uexecutor.v1.OutboundTx.gas_fee": + panic(fmt.Errorf("field gas_fee of message uexecutor.v1.OutboundTx is not mutable")) + case "uexecutor.v1.OutboundTx.refund_swap_error": + panic(fmt.Errorf("field refund_swap_error of message uexecutor.v1.OutboundTx is not mutable")) + case "uexecutor.v1.OutboundTx.gas_token": + panic(fmt.Errorf("field gas_token of message uexecutor.v1.OutboundTx is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundTx")) @@ -6267,6 +6429,17 @@ func (x *fastReflection_OutboundTx) NewField(fd protoreflect.FieldDescriptor) pr case "uexecutor.v1.OutboundTx.pc_revert_execution": m := new(PCTx) return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "uexecutor.v1.OutboundTx.gas_price": + return protoreflect.ValueOfString("") + case "uexecutor.v1.OutboundTx.gas_fee": + return protoreflect.ValueOfString("") + case "uexecutor.v1.OutboundTx.pc_refund_execution": + m := new(PCTx) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "uexecutor.v1.OutboundTx.refund_swap_error": + return protoreflect.ValueOfString("") + case "uexecutor.v1.OutboundTx.gas_token": + return protoreflect.ValueOfString("") default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: uexecutor.v1.OutboundTx")) @@ -6394,6 +6567,26 @@ func (x *fastReflection_OutboundTx) ProtoMethods() *protoiface.Methods { l = options.Size(x.PcRevertExecution) n += 1 + l + runtime.Sov(uint64(l)) } + l = len(x.GasPrice) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.GasFee) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + if x.PcRefundExecution != nil { + l = options.Size(x.PcRefundExecution) + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.RefundSwapError) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.GasToken) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -6423,6 +6616,58 @@ func (x *fastReflection_OutboundTx) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.GasToken) > 0 { + i -= len(x.GasToken) + copy(dAtA[i:], x.GasToken) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GasToken))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + } + if len(x.RefundSwapError) > 0 { + i -= len(x.RefundSwapError) + copy(dAtA[i:], x.RefundSwapError) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.RefundSwapError))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } + if x.PcRefundExecution != nil { + encoded, err := options.Marshal(x.PcRefundExecution) + 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] = 0x1 + i-- + dAtA[i] = 0x92 + } + if len(x.GasFee) > 0 { + i -= len(x.GasFee) + copy(dAtA[i:], x.GasFee) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GasFee))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + if len(x.GasPrice) > 0 { + i -= len(x.GasPrice) + copy(dAtA[i:], x.GasPrice) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GasPrice))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } if x.PcRevertExecution != nil { encoded, err := options.Marshal(x.PcRevertExecution) if err != nil { @@ -7071,6 +7316,170 @@ func (x *fastReflection_OutboundTx) ProtoMethods() *protoiface.Methods { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } iNdEx = postIndex + case 16: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GasPrice", 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.GasPrice = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 17: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GasFee", 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.GasFee = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 18: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PcRefundExecution", 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.PcRefundExecution == nil { + x.PcRefundExecution = &PCTx{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.PcRefundExecution); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RefundSwapError", 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.RefundSwapError = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 20: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GasToken", 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.GasToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -11081,6 +11490,7 @@ type OutboundObservation struct { BlockHeight uint64 `protobuf:"varint,2,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` // block height on external chain TxHash string `protobuf:"bytes,3,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` // external chain tx hash ErrorMsg string `protobuf:"bytes,4,opt,name=error_msg,json=errorMsg,proto3" json:"error_msg,omitempty"` + GasFeeUsed string `protobuf:"bytes,5,opt,name=gas_fee_used,json=gasFeeUsed,proto3" json:"gas_fee_used,omitempty"` // actual gas fee consumed on destination chain; used to compute excess refund } func (x *OutboundObservation) Reset() { @@ -11131,6 +11541,13 @@ func (x *OutboundObservation) GetErrorMsg() string { return "" } +func (x *OutboundObservation) GetGasFeeUsed() string { + if x != nil { + return x.GasFeeUsed + } + return "" +} + type OriginatingPcTx struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -11194,6 +11611,11 @@ type OutboundTx struct { OutboundStatus Status `protobuf:"varint,13,opt,name=outbound_status,json=outboundStatus,proto3,enum=uexecutor.v1.Status" json:"outbound_status,omitempty"` // status of outbound tx RevertInstructions *RevertInstructions `protobuf:"bytes,14,opt,name=revert_instructions,json=revertInstructions,proto3" json:"revert_instructions,omitempty"` PcRevertExecution *PCTx `protobuf:"bytes,15,opt,name=pc_revert_execution,json=pcRevertExecution,proto3" json:"pc_revert_execution,omitempty"` + GasPrice string `protobuf:"bytes,16,opt,name=gas_price,json=gasPrice,proto3" json:"gas_price,omitempty"` // gas price on destination chain at time of outbound + GasFee string `protobuf:"bytes,17,opt,name=gas_fee,json=gasFee,proto3" json:"gas_fee,omitempty"` // gas fee paid to relayer on destination chain + PcRefundExecution *PCTx `protobuf:"bytes,18,opt,name=pc_refund_execution,json=pcRefundExecution,proto3" json:"pc_refund_execution,omitempty"` // PC tx that executed the gas refund (non-nil if refund ran) + RefundSwapError string `protobuf:"bytes,19,opt,name=refund_swap_error,json=refundSwapError,proto3" json:"refund_swap_error,omitempty"` // non-empty if swap-refund failed and we fell back to no-swap + GasToken string `protobuf:"bytes,20,opt,name=gas_token,json=gasToken,proto3" json:"gas_token,omitempty"` // gas token PRC20 address used to pay relayer fee } func (x *OutboundTx) Reset() { @@ -11321,6 +11743,41 @@ func (x *OutboundTx) GetPcRevertExecution() *PCTx { return nil } +func (x *OutboundTx) GetGasPrice() string { + if x != nil { + return x.GasPrice + } + return "" +} + +func (x *OutboundTx) GetGasFee() string { + if x != nil { + return x.GasFee + } + return "" +} + +func (x *OutboundTx) GetPcRefundExecution() *PCTx { + if x != nil { + return x.PcRefundExecution + } + return nil +} + +func (x *OutboundTx) GetRefundSwapError() string { + if x != nil { + return x.RefundSwapError + } + return "" +} + +func (x *OutboundTx) GetGasToken() string { + if x != nil { + return x.GasToken + } + return "" +} + type UniversalTx struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -11724,7 +12181,7 @@ var file_uexecutor_v1_types_proto_rawDesc = []byte{ 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x3a, 0x1c, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x0f, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x63, 0x5f, 0x74, 0x78, 0x22, - 0xb1, 0x01, 0x0a, 0x13, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4f, 0x62, 0x73, 0x65, + 0xd3, 0x01, 0x0a, 0x13, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, @@ -11732,194 +12189,208 @@ var file_uexecutor_v1_types_proto_rawDesc = []byte{ 0x69, 0x67, 0x68, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x3a, 0x27, 0xe8, 0xa0, 0x1f, 0x01, - 0x8a, 0xe7, 0xb0, 0x2a, 0x1e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x6f, - 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x6d, 0x0a, 0x0f, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x50, 0x63, 0x54, 0x78, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x24, 0xe8, 0xa0, - 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x63, 0x5f, - 0x74, 0x78, 0x22, 0xaf, 0x05, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, - 0x78, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x41, 0x64, 0x64, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x63, 0x32, 0x30, 0x5f, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x70, 0x72, 0x63, 0x32, 0x30, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2d, 0x0a, - 0x07, 0x74, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, - 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x78, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x74, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x05, - 0x70, 0x63, 0x5f, 0x74, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x75, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x63, 0x54, 0x78, 0x52, 0x04, 0x70, 0x63, 0x54, 0x78, - 0x12, 0x42, 0x0a, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x74, 0x78, 0x18, - 0x0b, 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, 0x52, 0x0a, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x64, 0x54, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, - 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x13, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x76, - 0x65, 0x72, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x43, 0x54, 0x78, 0x52, 0x11, 0x70, 0x63, 0x52, 0x65, 0x76, 0x65, 0x72, - 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, - 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xa8, 0x02, 0x0a, 0x0b, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x6c, 0x54, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x0a, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x74, 0x78, 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, - 0x09, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x63, - 0x5f, 0x74, 0x78, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x43, 0x54, 0x78, 0x52, 0x04, 0x70, - 0x63, 0x54, 0x78, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x74, 0x78, 0x18, 0x04, 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, 0x0a, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x12, 0x4a, - 0x0a, 0x10, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 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, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0f, 0x75, 0x6e, 0x69, 0x76, 0x65, - 0x72, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, 0x23, 0x98, 0xa0, 0x1f, 0x00, - 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x16, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x2f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x22, - 0xab, 0x03, 0x0a, 0x0d, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, - 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, + 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x0c, 0x67, 0x61, + 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x67, 0x61, 0x73, 0x46, 0x65, 0x65, 0x55, 0x73, 0x65, 0x64, 0x3a, 0x27, 0xe8, 0xa0, + 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6d, 0x0a, 0x0f, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x50, 0x63, 0x54, 0x78, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x24, + 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, + 0x63, 0x5f, 0x74, 0x78, 0x22, 0xf2, 0x06, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x78, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x63, 0x32, 0x30, 0x5f, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x70, 0x72, 0x63, 0x32, 0x30, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x2d, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x14, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x74, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, + 0x0a, 0x05, 0x70, 0x63, 0x5f, 0x74, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x63, 0x54, 0x78, 0x52, 0x04, 0x70, 0x63, + 0x54, 0x78, 0x12, 0x42, 0x0a, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x74, + 0x78, 0x18, 0x0b, 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, 0x52, 0x0a, 0x6f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x64, 0x54, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x14, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x5f, + 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x13, 0x70, 0x63, 0x5f, 0x72, + 0x65, 0x76, 0x65, 0x72, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x43, 0x54, 0x78, 0x52, 0x11, 0x70, 0x63, 0x52, 0x65, 0x76, + 0x65, 0x72, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, + 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x73, + 0x5f, 0x66, 0x65, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x61, 0x73, 0x46, + 0x65, 0x65, 0x12, 0x42, 0x0a, 0x13, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x5f, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x43, 0x54, 0x78, 0x52, 0x11, 0x70, 0x63, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, + 0x5f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x53, 0x77, 0x61, 0x70, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x3a, + 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xa8, 0x02, 0x0a, 0x0b, 0x55, 0x6e, + 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x0a, 0x69, 0x6e, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x78, 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, 0x09, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x12, + 0x27, 0x0a, 0x05, 0x70, 0x63, 0x5f, 0x74, 0x78, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x43, + 0x54, 0x78, 0x52, 0x04, 0x70, 0x63, 0x54, 0x78, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x78, 0x18, 0x04, 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, 0x0a, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x78, 0x12, 0x4a, 0x0a, 0x10, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 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, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0f, + 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, + 0x23, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x16, 0x75, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x6c, 0x5f, 0x74, 0x78, 0x22, 0xab, 0x03, 0x0a, 0x0d, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, + 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, + 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, + 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, + 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3a, 0x0a, 0x07, + 0x74, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, + 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, + 0x52, 0x06, 0x74, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4b, 0x0a, 0x11, 0x75, 0x6e, 0x69, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x09, 0x20, + 0x01, 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, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x10, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x3a, 0x1e, 0x98, 0xa0, 0x1f, 0x01, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, + 0x11, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x22, 0xd1, 0x01, 0x0a, 0x10, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, + 0x78, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, - 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, - 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, - 0x67, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, - 0x6f, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3a, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, - 0x78, 0x54, 0x79, 0x70, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x06, 0x74, 0x78, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x4b, 0x0a, 0x11, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, - 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x09, 0x20, 0x01, 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, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x10, - 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x2b, 0x0a, 0x11, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x3a, 0x1e, 0x98, - 0xa0, 0x1f, 0x01, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x11, 0x75, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0xd1, 0x01, - 0x0a, 0x10, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x4c, 0x65, 0x67, 0x61, - 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, - 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, - 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, - 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x3a, 0x22, 0x98, - 0xa0, 0x1f, 0x01, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x15, 0x75, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, - 0x78, 0x22, 0xaa, 0x02, 0x0a, 0x11, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, - 0x78, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x69, 0x6e, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x75, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x78, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x63, 0x5f, 0x74, 0x78, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x43, 0x54, 0x78, 0x52, 0x04, 0x70, 0x63, 0x54, 0x78, 0x12, 0x3f, 0x0a, 0x0b, - 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x4c, 0x65, 0x67, 0x61, 0x63, - 0x79, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x12, 0x4a, 0x0a, - 0x10, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 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, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, 0x23, 0x98, 0xa0, 0x1f, 0x01, 0xe8, - 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x16, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x2a, 0x47, - 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x75, 0x6e, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x2a, 0x83, 0x02, 0x0a, 0x11, 0x55, 0x6e, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, - 0x1f, 0x55, 0x4e, 0x49, 0x56, 0x45, 0x52, 0x53, 0x41, 0x4c, 0x5f, 0x54, 0x58, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53, 0x55, - 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x45, 0x4e, 0x44, 0x49, - 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, - 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x43, 0x5f, 0x45, 0x58, 0x45, - 0x43, 0x55, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, - 0x16, 0x0a, 0x12, 0x50, 0x43, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x45, 0x44, 0x5f, 0x46, - 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x43, 0x5f, 0x50, 0x45, - 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x54, 0x10, 0x05, 0x12, 0x14, - 0x0a, 0x10, 0x4f, 0x55, 0x54, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, - 0x4e, 0x47, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x55, 0x54, 0x42, 0x4f, 0x55, 0x4e, 0x44, - 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x55, - 0x54, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x08, 0x12, - 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x09, 0x2a, 0x42, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, - 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x42, 0x53, 0x45, 0x52, 0x56, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x56, 0x45, 0x52, 0x54, 0x45, 0x44, 0x10, - 0x03, 0x2a, 0x7d, 0x0a, 0x06, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x54, 0x58, 0x10, 0x00, 0x12, - 0x07, 0x0a, 0x03, 0x47, 0x41, 0x53, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x47, 0x41, 0x53, 0x5f, - 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x02, 0x12, 0x09, 0x0a, - 0x05, 0x46, 0x55, 0x4e, 0x44, 0x53, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x55, 0x4e, 0x44, - 0x53, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x04, 0x12, - 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, - 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x54, 0x10, 0x06, - 0x2a, 0xb4, 0x01, 0x0a, 0x13, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x54, 0x79, - 0x70, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x42, 0x4f, - 0x55, 0x4e, 0x44, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x54, 0x58, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x49, - 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x47, 0x41, - 0x53, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4c, - 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x46, 0x55, 0x4e, 0x44, 0x53, 0x10, 0x02, 0x12, 0x24, 0x0a, - 0x20, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, - 0x46, 0x55, 0x4e, 0x44, 0x53, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, - 0x44, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4c, - 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x47, 0x41, 0x53, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x41, - 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x04, 0x42, 0xb2, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, - 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x54, 0x79, - 0x70, 0x65, 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, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, + 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x41, 0x64, + 0x64, 0x72, 0x3a, 0x22, 0x98, 0xa0, 0x1f, 0x01, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, + 0x15, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x78, 0x22, 0xaa, 0x02, 0x0a, 0x11, 0x55, 0x6e, 0x69, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x3a, 0x0a, 0x0a, + 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x09, 0x69, + 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x63, 0x5f, 0x74, + 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x43, 0x54, 0x78, 0x52, 0x04, 0x70, 0x63, 0x54, + 0x78, 0x12, 0x3f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x78, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x78, + 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x54, 0x78, 0x12, 0x4a, 0x0a, 0x10, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 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, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0f, 0x75, + 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, 0x23, + 0x98, 0xa0, 0x1f, 0x01, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x16, 0x75, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, + 0x5f, 0x74, 0x78, 0x2a, 0x47, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, + 0x1b, 0x0a, 0x17, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x2a, 0x83, 0x02, 0x0a, + 0x11, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x54, 0x78, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x23, 0x0a, 0x1f, 0x55, 0x4e, 0x49, 0x56, 0x45, 0x52, 0x53, 0x41, 0x4c, 0x5f, + 0x54, 0x58, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x42, 0x4f, 0x55, + 0x4e, 0x44, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, + 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, + 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x50, + 0x43, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, + 0x53, 0x53, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x43, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, + 0x54, 0x45, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, + 0x50, 0x43, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, + 0x54, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x55, 0x54, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, + 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x55, 0x54, + 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x07, 0x12, + 0x13, 0x0a, 0x0f, 0x4f, 0x55, 0x54, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, + 0x10, 0x09, 0x2a, 0x42, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0f, 0x0a, 0x0b, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x42, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x56, 0x45, + 0x52, 0x54, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x7d, 0x0a, 0x06, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, + 0x54, 0x58, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x41, 0x53, 0x10, 0x01, 0x12, 0x13, 0x0a, + 0x0f, 0x47, 0x41, 0x53, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, + 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x55, 0x4e, 0x44, 0x53, 0x10, 0x03, 0x12, 0x15, 0x0a, + 0x11, 0x46, 0x55, 0x4e, 0x44, 0x53, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, + 0x41, 0x44, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, + 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x56, + 0x45, 0x52, 0x54, 0x10, 0x06, 0x2a, 0xb4, 0x01, 0x0a, 0x13, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x21, 0x0a, + 0x1d, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x54, 0x58, 0x10, 0x00, + 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4c, 0x45, 0x47, 0x41, + 0x43, 0x59, 0x5f, 0x47, 0x41, 0x53, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x42, 0x4f, + 0x55, 0x4e, 0x44, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x46, 0x55, 0x4e, 0x44, 0x53, + 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4c, 0x45, + 0x47, 0x41, 0x43, 0x59, 0x5f, 0x46, 0x55, 0x4e, 0x44, 0x53, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, + 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x49, 0x4e, 0x42, 0x4f, + 0x55, 0x4e, 0x44, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x47, 0x41, 0x53, 0x5f, 0x41, + 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x04, 0x42, 0xb2, 0x01, 0x0a, + 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x75, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x42, 0x0a, 0x54, 0x79, 0x70, 0x65, 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 ( @@ -11968,21 +12439,22 @@ var file_uexecutor_v1_types_proto_depIdxs = []int32{ 2, // 7: uexecutor.v1.OutboundTx.outbound_status:type_name -> uexecutor.v1.Status 9, // 8: uexecutor.v1.OutboundTx.revert_instructions:type_name -> uexecutor.v1.RevertInstructions 11, // 9: uexecutor.v1.OutboundTx.pc_revert_execution:type_name -> uexecutor.v1.PCTx - 10, // 10: uexecutor.v1.UniversalTx.inbound_tx:type_name -> uexecutor.v1.Inbound - 11, // 11: uexecutor.v1.UniversalTx.pc_tx:type_name -> uexecutor.v1.PCTx - 14, // 12: uexecutor.v1.UniversalTx.outbound_tx:type_name -> uexecutor.v1.OutboundTx - 1, // 13: uexecutor.v1.UniversalTx.universal_status:type_name -> uexecutor.v1.UniversalTxStatus - 4, // 14: uexecutor.v1.InboundLegacy.tx_type:type_name -> uexecutor.v1.InboundTxTypeLegacy - 6, // 15: uexecutor.v1.InboundLegacy.universal_payload:type_name -> uexecutor.v1.UniversalPayload - 16, // 16: uexecutor.v1.UniversalTxLegacy.inbound_tx:type_name -> uexecutor.v1.InboundLegacy - 11, // 17: uexecutor.v1.UniversalTxLegacy.pc_tx:type_name -> uexecutor.v1.PCTx - 17, // 18: uexecutor.v1.UniversalTxLegacy.outbound_tx:type_name -> uexecutor.v1.OutboundTxLegacy - 1, // 19: uexecutor.v1.UniversalTxLegacy.universal_status:type_name -> uexecutor.v1.UniversalTxStatus - 20, // [20:20] is the sub-list for method output_type - 20, // [20:20] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 11, // 10: uexecutor.v1.OutboundTx.pc_refund_execution:type_name -> uexecutor.v1.PCTx + 10, // 11: uexecutor.v1.UniversalTx.inbound_tx:type_name -> uexecutor.v1.Inbound + 11, // 12: uexecutor.v1.UniversalTx.pc_tx:type_name -> uexecutor.v1.PCTx + 14, // 13: uexecutor.v1.UniversalTx.outbound_tx:type_name -> uexecutor.v1.OutboundTx + 1, // 14: uexecutor.v1.UniversalTx.universal_status:type_name -> uexecutor.v1.UniversalTxStatus + 4, // 15: uexecutor.v1.InboundLegacy.tx_type:type_name -> uexecutor.v1.InboundTxTypeLegacy + 6, // 16: uexecutor.v1.InboundLegacy.universal_payload:type_name -> uexecutor.v1.UniversalPayload + 16, // 17: uexecutor.v1.UniversalTxLegacy.inbound_tx:type_name -> uexecutor.v1.InboundLegacy + 11, // 18: uexecutor.v1.UniversalTxLegacy.pc_tx:type_name -> uexecutor.v1.PCTx + 17, // 19: uexecutor.v1.UniversalTxLegacy.outbound_tx:type_name -> uexecutor.v1.OutboundTxLegacy + 1, // 20: uexecutor.v1.UniversalTxLegacy.universal_status:type_name -> uexecutor.v1.UniversalTxStatus + 21, // [21:21] is the sub-list for method output_type + 21, // [21:21] 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 } func init() { file_uexecutor_v1_types_proto_init() } diff --git a/app/upgrades.go b/app/upgrades.go index 4ad2a032..d2242870 100755 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -6,6 +6,7 @@ import ( upgradetypes "cosmossdk.io/x/upgrade/types" "github.com/pushchain/push-chain-node/app/upgrades" + chainmeta "github.com/pushchain/push-chain-node/app/upgrades/chain-meta" ethhashfix "github.com/pushchain/push-chain-node/app/upgrades/eth-hash-fix" evmrpcfix "github.com/pushchain/push-chain-node/app/upgrades/evm-rpc-fix" feeabs "github.com/pushchain/push-chain-node/app/upgrades/fee-abs" @@ -14,10 +15,10 @@ import ( outbound "github.com/pushchain/push-chain-node/app/upgrades/outbound" pcmintcap "github.com/pushchain/push-chain-node/app/upgrades/pc-mint-cap" proxybytecodefix "github.com/pushchain/push-chain-node/app/upgrades/proxy-bytecode-fix" - supplyslash "github.com/pushchain/push-chain-node/app/upgrades/supply-slash" - supplyburn "github.com/pushchain/push-chain-node/app/upgrades/supply-burn" removefeeabsv1 "github.com/pushchain/push-chain-node/app/upgrades/remove-fee-abs-v1" solanafix "github.com/pushchain/push-chain-node/app/upgrades/solana-fix" + supplyburn "github.com/pushchain/push-chain-node/app/upgrades/supply-burn" + supplyslash "github.com/pushchain/push-chain-node/app/upgrades/supply-slash" tsscore "github.com/pushchain/push-chain-node/app/upgrades/tss-core" tsscoreevmparamsfix "github.com/pushchain/push-chain-node/app/upgrades/tss-core-evm-params-fix" tsscorefix "github.com/pushchain/push-chain-node/app/upgrades/tss-core-fix" @@ -43,6 +44,7 @@ var Upgrades = []upgrades.Upgrade{ proxybytecodefix.NewUpgrade(), supplyslash.NewUpgrade(), supplyburn.NewUpgrade(), + chainmeta.NewUpgrade(), } // RegisterUpgradeHandlers registers the chain upgrade handlers diff --git a/app/upgrades/chain-meta/upgrade.go b/app/upgrades/chain-meta/upgrade.go new file mode 100644 index 00000000..73da6a4b --- /dev/null +++ b/app/upgrades/chain-meta/upgrade.go @@ -0,0 +1,41 @@ +package chainmeta + +import ( + "context" + + storetypes "cosmossdk.io/store/types" + upgradetypes "cosmossdk.io/x/upgrade/types" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/pushchain/push-chain-node/app/upgrades" +) + +const UpgradeName = "chain-meta" + +// NewUpgrade constructs the upgrade definition +func NewUpgrade() upgrades.Upgrade { + return upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: CreateUpgradeHandler, + StoreUpgrades: storetypes.StoreUpgrades{ + Added: []string{}, + Deleted: []string{}, + }, + } +} + +func CreateUpgradeHandler( + mm upgrades.ModuleManager, + configurator module.Configurator, + ak *upgrades.AppKeepers, +) upgradetypes.UpgradeHandler { + return func(ctx context.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + sdkCtx.Logger().Info("🔧 Running upgrade:", "name", UpgradeName) + + // RunMigrations triggers uexecutor v4→v5 which calls MigrateGasPricesToChainMeta. + return mm.RunMigrations(ctx, configurator, fromVM) + } +} diff --git a/proto/uexecutor/v1/chain_meta.proto b/proto/uexecutor/v1/chain_meta.proto new file mode 100644 index 00000000..8a10ec03 --- /dev/null +++ b/proto/uexecutor/v1/chain_meta.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +package uexecutor.v1; + +import "gogoproto/gogo.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/pushchain/push-chain-node/x/uexecutor/types"; + +// ChainMeta stores aggregated chain metadata (gas price + block height) for a given chain +message ChainMeta { + option (amino.name) = "uexecutor/chain_meta"; + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + string observed_chain_id = 1; // chain ID of observed external chain (e.g. "eip155:1" for ethereum mainnet) + repeated string signers = 2; // Validators who submitted votes + repeated uint64 prices = 3; // Submitted gas prices + repeated uint64 chain_heights = 4; // Block heights corresponding to each price observation + repeated uint64 observed_ats = 5; // Timestamps when each observation was made + uint64 median_index = 6; // Index of the median price in 'prices' +} diff --git a/proto/uexecutor/v1/query.proto b/proto/uexecutor/v1/query.proto index b231151e..b8e9eb25 100755 --- a/proto/uexecutor/v1/query.proto +++ b/proto/uexecutor/v1/query.proto @@ -4,6 +4,7 @@ package uexecutor.v1; import "google/api/annotations.proto"; import "uexecutor/v1/types.proto"; import "uexecutor/v1/gas_price.proto"; +import "uexecutor/v1/chain_meta.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; option go_package = "github.com/pushchain/push-chain-node/x/uexecutor/types"; @@ -39,6 +40,16 @@ service Query { rpc AllGasPrices(QueryAllGasPricesRequest) returns (QueryAllGasPricesResponse) { option (google.api.http).get = "/uexecutor/v1/gas_prices"; } + + // 🔹 Queries chain meta for a specific chain + rpc ChainMeta(QueryChainMetaRequest) returns (QueryChainMetaResponse) { + option (google.api.http).get = "/uexecutor/v1/chain_meta/{chain_id}"; + } + + // 🔹 Queries all chain metas across chains + rpc AllChainMetas(QueryAllChainMetasRequest) returns (QueryAllChainMetasResponse) { + option (google.api.http).get = "/uexecutor/v1/chain_metas"; + } } // ========================== @@ -64,6 +75,25 @@ message QueryAllGasPricesResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } +// Single chain meta +message QueryChainMetaRequest { + string chain_id = 1; +} + +message QueryChainMetaResponse { + ChainMeta chain_meta = 1; +} + +// All chain metas +message QueryAllChainMetasRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllChainMetasResponse { + repeated ChainMeta chain_metas = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + // Existing types message QueryParamsRequest {} diff --git a/proto/uexecutor/v1/tx.proto b/proto/uexecutor/v1/tx.proto index 7eb065aa..b8413f11 100755 --- a/proto/uexecutor/v1/tx.proto +++ b/proto/uexecutor/v1/tx.proto @@ -4,6 +4,7 @@ package uexecutor.v1; import "amino/amino.proto"; import "cosmos/msg/v1/msg.proto"; import "uexecutor/v1/types.proto"; +import "uexecutor/v1/chain_meta.proto"; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; @@ -32,6 +33,9 @@ service Msg { // VoteGasPrice defines a message for universal validators to vote on the gas price rpc VoteGasPrice(MsgVoteGasPrice) returns (MsgVoteGasPriceResponse); + + // VoteChainMeta defines a message for universal validators to vote on chain metadata (gas price + block height) + rpc VoteChainMeta(MsgVoteChainMeta) returns (MsgVoteChainMetaResponse); } // MsgUpdateParams is the Msg/UpdateParams request type. @@ -139,3 +143,18 @@ message MsgVoteGasPrice { // MsgVoteGasPriceResponse defines the response for MsgVoteGasPrice message MsgVoteGasPriceResponse {} + +// MsgVoteChainMeta is broadcasted by Universal Validators to submit observed chain metadata (gas price + block height) +message MsgVoteChainMeta { + option (amino.name) = "uexecutor/MsgVoteChainMeta"; + option (cosmos.msg.v1.signer) = "signer"; + + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // Universal Validator address submitting the vote + string observed_chain_id = 2; // CAIP-2 chain ID of observed external chain (e.g. "eip155:1") + uint64 price = 3; // Observed gas price in wei + uint64 chain_height = 4; // Block height from which observation was made + uint64 observed_at = 5; // Timestamp when the observation was made (unix seconds) +} + +// MsgVoteChainMetaResponse defines the response for MsgVoteChainMeta +message MsgVoteChainMetaResponse {} diff --git a/proto/uexecutor/v1/types.proto b/proto/uexecutor/v1/types.proto index 63a552fd..a68d8dad 100644 --- a/proto/uexecutor/v1/types.proto +++ b/proto/uexecutor/v1/types.proto @@ -137,6 +137,7 @@ message OutboundObservation { uint64 block_height = 2; // block height on external chain string tx_hash = 3; // external chain tx hash string error_msg = 4; + string gas_fee_used = 5; // actual gas fee consumed on destination chain; used to compute excess refund } message OriginatingPcTx { @@ -167,6 +168,11 @@ message OutboundTx { Status outbound_status = 13; // status of outbound tx RevertInstructions revert_instructions = 14; PCTx pc_revert_execution = 15; + string gas_price = 16; // gas price on destination chain at time of outbound + string gas_fee = 17; // gas fee paid to relayer on destination chain + PCTx pc_refund_execution = 18; // PC tx that executed the gas refund (non-nil if refund ran) + string refund_swap_error = 19; // non-empty if swap-refund failed and we fell back to no-swap + string gas_token = 20; // gas token PRC20 address used to pay relayer fee } message UniversalTx { diff --git a/test/integration/uexecutor/gas_fee_refund_test.go b/test/integration/uexecutor/gas_fee_refund_test.go new file mode 100644 index 00000000..2194488d --- /dev/null +++ b/test/integration/uexecutor/gas_fee_refund_test.go @@ -0,0 +1,249 @@ +package integrationtest + +import ( + "fmt" + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + utils "github.com/pushchain/push-chain-node/test/utils" + uexecutortypes "github.com/pushchain/push-chain-node/x/uexecutor/types" +) + +func TestGasFeeRefund(t *testing.T) { + + t.Run("no refund when gasFeeUsed is empty", func(t *testing.T) { + app, ctx, vals, utxId, outbound, coreVals := + setupOutboundVotingTest(t, 4) + + for i := 0; i < 3; i++ { + valAddr, err := sdk.ValAddressFromBech32(coreVals[i].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(valAddr).String() + + err = utils.ExecVoteOutbound( + t, + ctx, + app, + vals[i], + coreAcc, + utxId, + outbound, + true, + "", + "", // gasFeeUsed empty → no refund + ) + require.NoError(t, err) + } + + utx, _, err := app.UexecutorKeeper.GetUniversalTx(ctx, utxId) + require.NoError(t, err) + + ob := utx.OutboundTx[0] + require.Equal(t, uexecutortypes.Status_OBSERVED, ob.OutboundStatus) + require.True(t, ob.ObservedTx.Success) + // No refund should be triggered + require.Nil(t, ob.PcRefundExecution, "no refund expected when gasFeeUsed is empty") + require.Empty(t, ob.RefundSwapError) + }) + + t.Run("no refund when gasFeeUsed equals gasFee", func(t *testing.T) { + app, ctx, vals, utxId, outbound, coreVals := + setupOutboundVotingTest(t, 4) + + // The mock contract sets GasFee = 111; reporting all 111 consumed → no excess + for i := 0; i < 3; i++ { + valAddr, err := sdk.ValAddressFromBech32(coreVals[i].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(valAddr).String() + + err = utils.ExecVoteOutbound( + t, + ctx, + app, + vals[i], + coreAcc, + utxId, + outbound, + true, + "", + outbound.GasFee, // gasFeeUsed == gasFee → no excess + ) + require.NoError(t, err) + } + + utx, _, err := app.UexecutorKeeper.GetUniversalTx(ctx, utxId) + require.NoError(t, err) + + ob := utx.OutboundTx[0] + require.Equal(t, uexecutortypes.Status_OBSERVED, ob.OutboundStatus) + require.Nil(t, ob.PcRefundExecution, "no refund expected when gasFeeUsed equals gasFee") + require.Empty(t, ob.RefundSwapError) + }) + + t.Run("no refund when gasFeeUsed exceeds gasFee", func(t *testing.T) { + app, ctx, vals, utxId, outbound, coreVals := + setupOutboundVotingTest(t, 4) + + // gasFeeUsed > gasFee (e.g. 999 > 111) → gasFee - gasFeeUsed <= 0 → no refund + for i := 0; i < 3; i++ { + valAddr, err := sdk.ValAddressFromBech32(coreVals[i].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(valAddr).String() + + err = utils.ExecVoteOutbound( + t, + ctx, + app, + vals[i], + coreAcc, + utxId, + outbound, + true, + "", + "999", // gasFeeUsed > gasFee(111) → no excess + ) + require.NoError(t, err) + } + + utx, _, err := app.UexecutorKeeper.GetUniversalTx(ctx, utxId) + require.NoError(t, err) + + ob := utx.OutboundTx[0] + require.Equal(t, uexecutortypes.Status_OBSERVED, ob.OutboundStatus) + require.Nil(t, ob.PcRefundExecution, "no refund expected when gasFeeUsed > gasFee") + require.Empty(t, ob.RefundSwapError) + }) + + t.Run("refund execution recorded when gasFee exceeds gasFeeUsed", func(t *testing.T) { + app, ctx, vals, utxId, outbound, coreVals := + setupOutboundVotingTest(t, 4) + + // gasFee = 111 (set by mock), gasFeeUsed = 50 → 61 excess to refund + gasFeeUsed := "50" + + for i := 0; i < 3; i++ { + valAddr, err := sdk.ValAddressFromBech32(coreVals[i].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(valAddr).String() + + err = utils.ExecVoteOutbound( + t, + ctx, + app, + vals[i], + coreAcc, + utxId, + outbound, + true, + "", + gasFeeUsed, + ) + require.NoError(t, err) + } + + utx, _, err := app.UexecutorKeeper.GetUniversalTx(ctx, utxId) + require.NoError(t, err) + + fmt.Println(utx) + + ob := utx.OutboundTx[0] + require.Equal(t, uexecutortypes.Status_OBSERVED, ob.OutboundStatus) + require.True(t, ob.ObservedTx.Success) + + // Refund was attempted → PcRefundExecution must be set + require.NotNil(t, ob.PcRefundExecution, + "PcRefundExecution must be set when excess gas fee exists") + + // In the test environment the UniversalCore stub may or may not implement + // refundUnusedGas. The important invariant is that the execution record + // is stored regardless of EVM success/failure. + require.NotEmpty(t, ob.PcRefundExecution.Status, + "PcRefundExecution.Status must be set") + }) + + t.Run("swap fallback reason stored when swap refund fails", func(t *testing.T) { + app, ctx, vals, utxId, outbound, coreVals := + setupOutboundVotingTest(t, 4) + + // gasFee = 111, gasFeeUsed = 1 → large excess triggers refund attempt. + // The test handler's defaultFeeTier for an unknown gas token will either + // return 0 or fail, causing the swap path to fall back. In either case + // RefundSwapError must be non-empty (swap was not clean) or PcRefundExecution + // must exist. + gasFeeUsed := "1" + + for i := 0; i < 3; i++ { + valAddr, err := sdk.ValAddressFromBech32(coreVals[i].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(valAddr).String() + + err = utils.ExecVoteOutbound( + t, + ctx, + app, + vals[i], + coreAcc, + utxId, + outbound, + true, + "", + gasFeeUsed, + ) + require.NoError(t, err) + } + + utx, _, err := app.UexecutorKeeper.GetUniversalTx(ctx, utxId) + require.NoError(t, err) + + ob := utx.OutboundTx[0] + require.Equal(t, uexecutortypes.Status_OBSERVED, ob.OutboundStatus) + + // Refund execution must always be recorded when excess gas exists + require.NotNil(t, ob.PcRefundExecution) + + // The outbound status stays OBSERVED (refund failure does not revert the outbound) + require.Equal(t, uexecutortypes.Status_OBSERVED, ob.OutboundStatus) + }) + + t.Run("failed outbound still performs revert not refund", func(t *testing.T) { + app, ctx, vals, utxId, outbound, coreVals := + setupOutboundVotingTest(t, 4) + + // Vote as FAILED with gasFeeUsed set — refund should NOT run for failed outbounds + for i := 0; i < 3; i++ { + valAddr, err := sdk.ValAddressFromBech32(coreVals[i].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(valAddr).String() + + err = utils.ExecVoteOutbound( + t, + ctx, + app, + vals[i], + coreAcc, + utxId, + outbound, + false, + "execution failed", + "50", // gasFeeUsed provided but shouldn't trigger refund on failure + ) + require.NoError(t, err) + } + + utx, _, err := app.UexecutorKeeper.GetUniversalTx(ctx, utxId) + require.NoError(t, err) + + ob := utx.OutboundTx[0] + require.Equal(t, uexecutortypes.Status_REVERTED, ob.OutboundStatus) + + // Revert was executed (funds minted back) + require.NotNil(t, ob.PcRevertExecution) + require.Equal(t, "SUCCESS", ob.PcRevertExecution.Status) + + // Gas refund must NOT run for failed outbounds + require.Nil(t, ob.PcRefundExecution, + "gas refund must not run when outbound failed") + }) +} diff --git a/test/integration/uexecutor/query_chain_meta_test.go b/test/integration/uexecutor/query_chain_meta_test.go new file mode 100644 index 00000000..2e63dbc5 --- /dev/null +++ b/test/integration/uexecutor/query_chain_meta_test.go @@ -0,0 +1,156 @@ +package integrationtest + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + utils "github.com/pushchain/push-chain-node/test/utils" + uexecutorkeeper "github.com/pushchain/push-chain-node/x/uexecutor/keeper" + uexecutortypes "github.com/pushchain/push-chain-node/x/uexecutor/types" +) + +// TestQueryChainMeta tests the ChainMeta and AllChainMetas query handlers +func TestQueryChainMeta(t *testing.T) { + chainId := "eip155:11155111" + chainId2 := "eip155:1" + + t.Run("returns not found when chain meta absent", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + querier := uexecutorkeeper.NewQuerier(testApp.UexecutorKeeper) + _, err := querier.ChainMeta(ctx, &uexecutortypes.QueryChainMetaRequest{ChainId: chainId}) + require.Error(t, err) + require.Equal(t, codes.NotFound, status.Code(err)) + }) + + t.Run("returns error for empty chain_id", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + querier := uexecutorkeeper.NewQuerier(testApp.UexecutorKeeper) + _, err := querier.ChainMeta(ctx, &uexecutortypes.QueryChainMetaRequest{ChainId: ""}) + require.Error(t, err) + require.Equal(t, codes.InvalidArgument, status.Code(err)) + }) + + t.Run("returns chain meta after vote", func(t *testing.T) { + testApp, ctx, uvals, vals := setupVoteChainMetaTest(t, 2) + + coreVal0, _ := sdk.ValAddressFromBech32(vals[0].OperatorAddress) + coreVal1, _ := sdk.ValAddressFromBech32(vals[1].OperatorAddress) + + require.NoError(t, utils.ExecVoteChainMeta(t, ctx, testApp, uvals[0], sdk.AccAddress(coreVal0).String(), chainId, 100_000_000_000, 12345, 1700000000)) + require.NoError(t, utils.ExecVoteChainMeta(t, ctx, testApp, uvals[1], sdk.AccAddress(coreVal1).String(), chainId, 200_000_000_000, 12346, 1700000001)) + + querier := uexecutorkeeper.NewQuerier(testApp.UexecutorKeeper) + resp, err := querier.ChainMeta(ctx, &uexecutortypes.QueryChainMetaRequest{ChainId: chainId}) + require.NoError(t, err) + require.NotNil(t, resp.ChainMeta) + require.Equal(t, chainId, resp.ChainMeta.ObservedChainId) + require.Len(t, resp.ChainMeta.Prices, 2) + require.Len(t, resp.ChainMeta.ChainHeights, 2) + require.Len(t, resp.ChainMeta.ObservedAts, 2) + }) + + t.Run("all chain metas returns empty when nothing stored", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + querier := uexecutorkeeper.NewQuerier(testApp.UexecutorKeeper) + resp, err := querier.AllChainMetas(ctx, &uexecutortypes.QueryAllChainMetasRequest{}) + require.NoError(t, err) + require.Empty(t, resp.ChainMetas) + }) + + t.Run("all chain metas returns all entries", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + require.NoError(t, testApp.UexecutorKeeper.SetChainMeta(ctx, chainId, uexecutortypes.ChainMeta{ + ObservedChainId: chainId, + Signers: []string{"cosmos1abc"}, + Prices: []uint64{100}, + ChainHeights: []uint64{1}, + ObservedAts: []uint64{0}, + MedianIndex: 0, + })) + require.NoError(t, testApp.UexecutorKeeper.SetChainMeta(ctx, chainId2, uexecutortypes.ChainMeta{ + ObservedChainId: chainId2, + Signers: []string{"cosmos1def"}, + Prices: []uint64{200}, + ChainHeights: []uint64{2}, + ObservedAts: []uint64{0}, + MedianIndex: 0, + })) + + querier := uexecutorkeeper.NewQuerier(testApp.UexecutorKeeper) + resp, err := querier.AllChainMetas(ctx, &uexecutortypes.QueryAllChainMetasRequest{}) + require.NoError(t, err) + require.Len(t, resp.ChainMetas, 2) + }) +} + +// TestQueryGasPriceFromChainMeta ensures the legacy GasPrice query routes through ChainMetas +func TestQueryGasPriceFromChainMeta(t *testing.T) { + chainId := "eip155:11155111" + + t.Run("gas price query reads from chain metas", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + require.NoError(t, testApp.UexecutorKeeper.SetChainMeta(ctx, chainId, uexecutortypes.ChainMeta{ + ObservedChainId: chainId, + Signers: []string{"cosmos1abc", "cosmos1def"}, + Prices: []uint64{100_000_000_000, 200_000_000_000}, + ChainHeights: []uint64{12345, 12346}, + ObservedAts: []uint64{17000000, 17000001}, + MedianIndex: 1, + })) + + querier := uexecutorkeeper.NewQuerier(testApp.UexecutorKeeper) + resp, err := querier.GasPrice(ctx, &uexecutortypes.QueryGasPriceRequest{ChainId: chainId}) + require.NoError(t, err) + require.NotNil(t, resp.GasPrice) + require.Equal(t, chainId, resp.GasPrice.ObservedChainId) + require.Equal(t, []uint64{100_000_000_000, 200_000_000_000}, resp.GasPrice.Prices) + // ChainHeights should be mapped back to BlockNums for backward compat + require.Equal(t, []uint64{12345, 12346}, resp.GasPrice.BlockNums) + require.Equal(t, uint64(1), resp.GasPrice.MedianIndex) + }) + + t.Run("gas price query falls back to legacy store when chain meta absent", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + require.NoError(t, testApp.UexecutorKeeper.SetGasPrice(ctx, chainId, uexecutortypes.GasPrice{ + ObservedChainId: chainId, + Signers: []string{"cosmos1abc"}, + Prices: []uint64{50_000_000_000}, + BlockNums: []uint64{9999}, + MedianIndex: 0, + })) + + querier := uexecutorkeeper.NewQuerier(testApp.UexecutorKeeper) + resp, err := querier.GasPrice(ctx, &uexecutortypes.QueryGasPriceRequest{ChainId: chainId}) + require.NoError(t, err) + require.Equal(t, uint64(50_000_000_000), resp.GasPrice.Prices[0]) + require.Equal(t, uint64(9999), resp.GasPrice.BlockNums[0]) + }) + + t.Run("all gas prices sources from chain metas", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + require.NoError(t, testApp.UexecutorKeeper.SetChainMeta(ctx, chainId, uexecutortypes.ChainMeta{ + ObservedChainId: chainId, + Prices: []uint64{100}, + ChainHeights: []uint64{1}, + ObservedAts: []uint64{0}, + MedianIndex: 0, + })) + + querier := uexecutorkeeper.NewQuerier(testApp.UexecutorKeeper) + resp, err := querier.AllGasPrices(ctx, &uexecutortypes.QueryAllGasPricesRequest{}) + require.NoError(t, err) + require.Len(t, resp.GasPrices, 1) + require.Equal(t, chainId, resp.GasPrices[0].ObservedChainId) + }) +} diff --git a/test/integration/uexecutor/vote_chain_meta_test.go b/test/integration/uexecutor/vote_chain_meta_test.go new file mode 100644 index 00000000..81ebae13 --- /dev/null +++ b/test/integration/uexecutor/vote_chain_meta_test.go @@ -0,0 +1,264 @@ +package integrationtest + +import ( + "fmt" + "math/big" + "testing" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" + authz "github.com/cosmos/cosmos-sdk/x/authz" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/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" + uregistrytypes "github.com/pushchain/push-chain-node/x/uregistry/types" + uvalidatortypes "github.com/pushchain/push-chain-node/x/uvalidator/types" +) + +func setupVoteChainMetaTest(t *testing.T, numVals int) (*app.ChainApp, sdk.Context, []string, []stakingtypes.Validator) { + testApp, ctx, _, validators := utils.SetAppWithMultipleValidators(t, numVals) + + chainConfig := uregistrytypes.ChainConfig{ + Chain: "eip155:11155111", + VmType: uregistrytypes.VmType_EVM, + PublicRpcUrl: "https://sepolia.drpc.org", + GatewayAddress: "0x28E0F09bE2321c1420Dc60Ee146aACbD68B335Fe", + Enabled: &uregistrytypes.ChainEnabled{ + IsInboundEnabled: true, + IsOutboundEnabled: true, + }, + } + require.NoError(t, testApp.UregistryKeeper.AddChainConfig(ctx, &chainConfig)) + + universalVals := make([]string, len(validators)) + for i, val := range validators { + network := uvalidatortypes.NetworkInfo{PeerId: fmt.Sprintf("temp%d", i+1), MultiAddrs: []string{"temp"}} + require.NoError(t, testApp.UvalidatorKeeper.AddUniversalValidator(ctx, val.OperatorAddress, network)) + universalVals[i] = sdk.AccAddress([]byte(fmt.Sprintf("universal-validator-%d", i))).String() + } + + for i, val := range validators { + accAddr, err := sdk.ValAddressFromBech32(val.OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(accAddr) + uniAcc := sdk.MustAccAddressFromBech32(universalVals[i]) + auth := authz.NewGenericAuthorization(sdk.MsgTypeURL(&uexecutortypes.MsgVoteChainMeta{})) + exp := ctx.BlockTime().Add(time.Hour) + require.NoError(t, testApp.AuthzKeeper.SaveGrant(ctx, uniAcc, coreAcc, auth, &exp)) + } + + return testApp, ctx, universalVals, validators +} + +func TestVoteChainMetaIntegration(t *testing.T) { + t.Parallel() + chainId := "eip155:11155111" + + t.Run("single validator vote stores chain meta", func(t *testing.T) { + testApp, ctx, uvals, vals := setupVoteChainMetaTest(t, 1) + + coreVal, err := sdk.ValAddressFromBech32(vals[0].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(coreVal).String() + + err = utils.ExecVoteChainMeta(t, ctx, testApp, uvals[0], coreAcc, chainId, 100_000_000_000, 12345, 1700000000) + require.NoError(t, err) + + stored, found, err := testApp.UexecutorKeeper.GetChainMeta(ctx, chainId) + require.NoError(t, err) + require.True(t, found) + require.Len(t, stored.Prices, 1) + require.Equal(t, uint64(100_000_000_000), stored.Prices[0]) + require.Len(t, stored.ChainHeights, 1) + require.Equal(t, uint64(12345), stored.ChainHeights[0]) + require.Len(t, stored.ObservedAts, 1) + require.Equal(t, uint64(1700000000), stored.ObservedAts[0]) + }) + + t.Run("multiple validators vote and median calculated", func(t *testing.T) { + testApp, ctx, uvals, vals := setupVoteChainMetaTest(t, 4) + + votes := []struct { + uniVal string + price uint64 + height uint64 + observedAt uint64 + }{ + {uvals[0], 300_000_000_000, 12345, 1700000001}, + {uvals[1], 200_000_000_000, 12346, 1700000002}, + {uvals[2], 400_000_000_000, 12347, 1700000003}, + {uvals[3], 250_000_000_000, 12348, 1700000004}, + } + + for i, v := range votes { + coreVal, err := sdk.ValAddressFromBech32(vals[i].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(coreVal).String() + err = utils.ExecVoteChainMeta(t, ctx, testApp, v.uniVal, coreAcc, chainId, v.price, v.height, v.observedAt) + require.NoError(t, err) + } + + stored, found, err := testApp.UexecutorKeeper.GetChainMeta(ctx, chainId) + require.NoError(t, err) + require.True(t, found) + require.Len(t, stored.Prices, 4) + require.Len(t, stored.ChainHeights, 4) + require.Len(t, stored.ObservedAts, 4) + + median := stored.Prices[stored.MedianIndex] + // sorted: 200, 250, 300, 400 → median at index 2 → 300 + require.Equal(t, uint64(300_000_000_000), median) + }) + + t.Run("update existing vote", func(t *testing.T) { + testApp, ctx, uvals, vals := setupVoteChainMetaTest(t, 1) + + coreVal, err := sdk.ValAddressFromBech32(vals[0].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(coreVal).String() + + require.NoError(t, utils.ExecVoteChainMeta(t, ctx, testApp, uvals[0], coreAcc, chainId, 100_000_000_000, 12345, 1700000000)) + // Update same validator's vote + require.NoError(t, utils.ExecVoteChainMeta(t, ctx, testApp, uvals[0], coreAcc, chainId, 400_000_000_000, 12350, 1700000100)) + + stored, found, err := testApp.UexecutorKeeper.GetChainMeta(ctx, chainId) + require.NoError(t, err) + require.True(t, found) + require.Len(t, stored.Prices, 1, "should have only one entry (updated in-place)") + require.Equal(t, uint64(400_000_000_000), stored.Prices[0]) + require.Equal(t, uint64(12350), stored.ChainHeights[0]) + require.Equal(t, uint64(1700000100), stored.ObservedAts[0]) + }) + + t.Run("odd number of votes median", func(t *testing.T) { + testApp, ctx, uvals, vals := setupVoteChainMetaTest(t, 3) + prices := []uint64{100, 300, 200} + + for i, price := range prices { + coreVal, _ := sdk.ValAddressFromBech32(vals[i].OperatorAddress) + coreAcc := sdk.AccAddress(coreVal).String() + require.NoError(t, utils.ExecVoteChainMeta(t, ctx, testApp, uvals[i], coreAcc, chainId, price, uint64(i+1), uint64(1700000000+i))) + } + + stored, _, _ := testApp.UexecutorKeeper.GetChainMeta(ctx, chainId) + median := stored.Prices[stored.MedianIndex] + require.Equal(t, uint64(200), median) + }) +} + +func TestMigrateGasPricesToChainMeta(t *testing.T) { + chainId := "eip155:11155111" + + t.Run("migrates gas prices to chain meta", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + // Seed a GasPrice entry manually (simulating pre-upgrade state) + require.NoError(t, testApp.UexecutorKeeper.SetGasPrice(ctx, chainId, uexecutortypes.GasPrice{ + ObservedChainId: chainId, + Signers: []string{"cosmos1abc", "cosmos1def"}, + Prices: []uint64{100_000_000_000, 200_000_000_000}, + BlockNums: []uint64{12345, 12346}, + MedianIndex: 1, + })) + + // Run migration + require.NoError(t, testApp.UexecutorKeeper.MigrateGasPricesToChainMeta(ctx)) + + // Verify ChainMeta was created + cm, found, err := testApp.UexecutorKeeper.GetChainMeta(ctx, chainId) + require.NoError(t, err) + require.True(t, found) + + require.Equal(t, chainId, cm.ObservedChainId) + require.Equal(t, []string{"cosmos1abc", "cosmos1def"}, cm.Signers) + require.Equal(t, []uint64{100_000_000_000, 200_000_000_000}, cm.Prices) + // block_nums from GasPrice become chain_heights in ChainMeta + require.Equal(t, []uint64{12345, 12346}, cm.ChainHeights) + // observedAts unknown at migration time → all 0 + require.Equal(t, []uint64{0, 0}, cm.ObservedAts) + require.Equal(t, uint64(1), cm.MedianIndex) + }) + + t.Run("migration is idempotent: does not overwrite existing chain meta", func(t *testing.T) { + testApp, ctx, _, _ := utils.SetAppWithMultipleValidators(t, 1) + + // Pre-seed a GasPrice entry + require.NoError(t, testApp.UexecutorKeeper.SetGasPrice(ctx, chainId, uexecutortypes.GasPrice{ + ObservedChainId: chainId, + Signers: []string{"cosmos1abc"}, + Prices: []uint64{100_000_000_000}, + BlockNums: []uint64{12345}, + MedianIndex: 0, + })) + + // Pre-seed a ChainMeta entry (simulating a validator already voted post-upgrade) + require.NoError(t, testApp.UexecutorKeeper.SetChainMeta(ctx, chainId, uexecutortypes.ChainMeta{ + ObservedChainId: chainId, + Signers: []string{"cosmos1xyz"}, + Prices: []uint64{999_000_000_000}, + ChainHeights: []uint64{99999}, + ObservedAts: []uint64{1700000099}, + MedianIndex: 0, + })) + + // Run migration — should skip because ChainMeta already exists + require.NoError(t, testApp.UexecutorKeeper.MigrateGasPricesToChainMeta(ctx)) + + // Verify the existing entry was NOT overwritten + cm, found, err := testApp.UexecutorKeeper.GetChainMeta(ctx, chainId) + require.NoError(t, err) + require.True(t, found) + require.Equal(t, []string{"cosmos1xyz"}, cm.Signers, "existing chain meta should not be overwritten") + require.Equal(t, uint64(999_000_000_000), cm.Prices[0]) + }) +} + +// TestVoteChainMetaContractState verifies that after voting, the UniversalCore contract's +// on-chain storage reflects the correct gas price, chain height, and observed timestamp. +func TestVoteChainMetaContractState(t *testing.T) { + chainId := "eip155:11155111" + const ( + price = uint64(100_000_000_000) + height = uint64(12345) + observedAt = uint64(1700000000) + ) + + testApp, ctx, uvals, vals := setupVoteChainMetaTest(t, 1) + + coreVal, err := sdk.ValAddressFromBech32(vals[0].OperatorAddress) + require.NoError(t, err) + coreAcc := sdk.AccAddress(coreVal).String() + + require.NoError(t, utils.ExecVoteChainMeta(t, ctx, testApp, uvals[0], coreAcc, chainId, price, height, observedAt)) + + // Read from the UniversalCore contract using the public mapping getters + universalCoreAddr := utils.GetDefaultAddresses().HandlerAddr + ucABI, err := uexecutortypes.ParseUniversalCoreABI() + require.NoError(t, err) + + caller, _ := testApp.UexecutorKeeper.GetUeModuleAddress(ctx) + + t.Run("gasPriceByChainNamespace matches voted price", func(t *testing.T) { + res, err := testApp.EVMKeeper.CallEVM(ctx, ucABI, caller, universalCoreAddr, false, "gasPriceByChainNamespace", chainId) + require.NoError(t, err) + got := new(big.Int).SetBytes(res.Ret) + require.Equal(t, new(big.Int).SetUint64(price), got) + }) + + t.Run("chainHeightByChainNamespace matches voted height", func(t *testing.T) { + res, err := testApp.EVMKeeper.CallEVM(ctx, ucABI, caller, universalCoreAddr, false, "chainHeightByChainNamespace", chainId) + require.NoError(t, err) + got := new(big.Int).SetBytes(res.Ret) + require.Equal(t, new(big.Int).SetUint64(height), got) + }) + + t.Run("timestampObservedAtByChainNamespace matches voted observedAt", func(t *testing.T) { + res, err := testApp.EVMKeeper.CallEVM(ctx, ucABI, caller, universalCoreAddr, false, "timestampObservedAtByChainNamespace", chainId) + require.NoError(t, err) + got := new(big.Int).SetBytes(res.Ret) + require.Equal(t, new(big.Int).SetUint64(observedAt), got) + }) +} diff --git a/test/integration/uexecutor/vote_outbound_test.go b/test/integration/uexecutor/vote_outbound_test.go index 55312e7c..39d47be5 100644 --- a/test/integration/uexecutor/vote_outbound_test.go +++ b/test/integration/uexecutor/vote_outbound_test.go @@ -94,6 +94,7 @@ func TestOutboundVoting(t *testing.T) { outbound, true, "", + "", ) require.NoError(t, err) @@ -125,6 +126,7 @@ func TestOutboundVoting(t *testing.T) { outbound, true, "", + "", ) require.NoError(t, err) } @@ -155,6 +157,7 @@ func TestOutboundVoting(t *testing.T) { outbound, true, "", + "", ) require.NoError(t, err) @@ -168,6 +171,7 @@ func TestOutboundVoting(t *testing.T) { outbound, true, "", + "", ) require.Error(t, err) require.Contains(t, err.Error(), "already voted") @@ -192,6 +196,7 @@ func TestOutboundVoting(t *testing.T) { outbound, true, "", + "", ) require.NoError(t, err) } @@ -210,6 +215,7 @@ func TestOutboundVoting(t *testing.T) { outbound, true, "", + "", ) require.Error(t, err) require.Contains(t, err.Error(), "already finalized") @@ -234,6 +240,7 @@ func TestOutboundVoting(t *testing.T) { outbound, false, "execution reverted", // revert reason + "", ) require.NoError(t, err) } @@ -274,6 +281,7 @@ func TestOutboundVoting(t *testing.T) { outbound, false, "failed", + "", ) require.NoError(t, err) } @@ -312,6 +320,7 @@ func TestOutboundVoting(t *testing.T) { &prefixedOutbound, true, "", + "", ) require.NoError(t, err) } @@ -342,6 +351,7 @@ func TestOutboundVoting(t *testing.T) { outbound, true, "", + "", ) require.Error(t, err) require.Contains(t, err.Error(), "not found") @@ -367,6 +377,7 @@ func TestOutboundVoting(t *testing.T) { &badOutbound, true, "", + "", ) require.Error(t, err) require.Contains(t, err.Error(), "not found") diff --git a/test/utils/bytecode.go b/test/utils/bytecode.go index 7e8177be..72bf82bb 100644 --- a/test/utils/bytecode.go +++ b/test/utils/bytecode.go @@ -6,11 +6,11 @@ const UEA_SVM_BYTECODE = "6080604052348015600e575f80fd5b5060015f55611cf780610020 const UEA_PROXY_BYTECODE = "608060405260043610610028575f3560e01c806323efa7ec14610032578063aaf10f4214610051575b6100306100a8565b005b34801561003d575f80fd5b5061003061004c366004610368565b6100ba565b34801561005c575f80fd5b507f868a771a75a4aa6c2be13e9a9617cb8ea240ed84a3a90c8469537393ec3e115d5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100b86100b36102cc565b61034a565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156101045750825b90505f8267ffffffffffffffff1660011480156101205750303b155b90508115801561012e575080155b15610165576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156101c65784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f6101ef7f868a771a75a4aa6c2be13e9a9617cb8ea240ed84a3a90c8469537393ec3e115d5490565b905073ffffffffffffffffffffffffffffffffffffffff81161561023f576040517fae962d4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b867f868a771a75a4aa6c2be13e9a9617cb8ea240ed84a3a90c8469537393ec3e115d555083156102c45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f806102f67f868a771a75a4aa6c2be13e9a9617cb8ea240ed84a3a90c8469537393ec3e115d5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610345576040517fae962d4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b365f80375f80365f845af43d5f803e808015610364573d5ff35b3d5ffd5b5f60208284031215610378575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461039b575f80fd5b939250505056fea2646970667358221220c4b8f9457567bdcd08b95faef7df86de4e9daead65e2db22018126d9eb77d85864736f6c634300081a0033" -const HANDLER_CONTRACT_BYTECODE = "6080604052600436106102ae575f3560e01c80638456cb5911610165578063c6f1b7e7116100c6578063dcc16b5c1161007c578063f220e73e11610062578063f220e73e14610924578063f8c8765e14610971578063fb46e99d14610990575f80fd5b8063dcc16b5c146108d2578063ec87621c146108f1575f80fd5b8063d17c872c116100ac578063d17c872c14610875578063d547741f14610894578063db9a0daf146108b3575f80fd5b8063c6f1b7e71461080b578063c98018971461083e575f80fd5b8063a861469f1161011b578063b8efe33411610101578063b8efe33414610794578063be0580c0146107c0578063c344869f146107df575f80fd5b8063a861469f14610722578063ad14d38514610766575f80fd5b806391d148541161014b57806391d14854146106805780639be7fdb2146106f0578063a217fddf1461070f575f80fd5b80638456cb591461064d578063870152b714610661575f80fd5b80634eb7d1a11161020f5780636d4008a8116101c557806378a88127116101ab57806378a88127146105b55780637efbce04146105d457806380f5db8c14610621575f80fd5b80636d4008a81461056b578063780ad82714610596575f80fd5b80635c975abb116101f55780635c975abb146104f75780636341c64d1461052d57806364f10e501461054c575f80fd5b80634eb7d1a11461049757806357724c41146104d8575f80fd5b80632f2ff15d116102645780633f4ba83a1161024a5780633f4ba83a146103f157806346c72fdd146104055780634b1d2eeb14610456575f80fd5b80632f2ff15d146103b357806336568abe146103d2575f80fd5b80630ac6eb77116102945780630ac6eb771461030e5780631a4e49d41461032d578063248a9ca314610366575f80fd5b806301ffc9a7146102b95780630379eae8146102ed575f80fd5b366102b557005b5f80fd5b3480156102c4575f80fd5b506102d86102d3366004612be8565b6109a5565b60405190151581526020015b60405180910390f35b3480156102f8575f80fd5b5061030c610307366004612d23565b610a3d565b005b348015610319575f80fd5b5061030c610328366004612d93565b610a9d565b348015610338575f80fd5b50610358610347366004612dca565b5f6020819052908152604090205481565b6040519081526020016102e4565b348015610371575f80fd5b50610358610380366004612dca565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156103be575f80fd5b5061030c6103cd366004612de1565b610b8a565b3480156103dd575f80fd5b5061030c6103ec366004612de1565b610bd3565b3480156103fc575f80fd5b5061030c610c31565b348015610410575f80fd5b50600a546104319073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e4565b348015610461575f80fd5b50610431610470366004612dca565b60016020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156104a2575f80fd5b506104316104b1366004612dca565b60026020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e3575f80fd5b5061030c6104f2366004612e04565b610ca2565b348015610502575f80fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166102d8565b348015610538575f80fd5b5061030c610547366004612e2e565b610df7565b348015610557575f80fd5b5061030c610566366004612e49565b610f25565b348015610576575f80fd5b50610358610585366004612e2e565b60056020525f908152604090205481565b3480156105a1575f80fd5b5061030c6105b0366004612e9f565b6110ef565b3480156105c0575f80fd5b5061030c6105cf366004612e49565b611a28565b3480156105df575f80fd5b506104316105ee366004612efe565b8051602081830181018051600d8252928201919093012091525473ffffffffffffffffffffffffffffffffffffffff1681565b34801561062c575f80fd5b506007546104319073ffffffffffffffffffffffffffffffffffffffff1681565b348015610658575f80fd5b5061030c611a8f565b34801561066c575f80fd5b5061035861067b366004612f30565b611afe565b34801561068b575f80fd5b506102d861069a366004612de1565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156106fb575f80fd5b5061030c61070a366004612f7c565b611bf9565b34801561071a575f80fd5b506103585f81565b34801561072d575f80fd5b5061075261073c366004612e2e565b60046020525f908152604090205462ffffff1681565b60405162ffffff90911681526020016102e4565b348015610771575f80fd5b506102d8610780366004612e2e565b60036020525f908152604090205460ff1681565b34801561079f575f80fd5b506008546104319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156107cb575f80fd5b5061030c6107da366004612fc0565b611d12565b3480156107ea575f80fd5b506009546104319073ffffffffffffffffffffffffffffffffffffffff1681565b348015610816575f80fd5b506104317f000000000000000000000000000000000000000000000000000000000000000081565b348015610849575f80fd5b50610358610858366004612efe565b8051602081830181018051600b8252928201919093012091525481565b348015610880575f80fd5b5061030c61088f366004612ffd565b611ea7565b34801561089f575f80fd5b5061030c6108ae366004612de1565b612048565b3480156108be575f80fd5b5061030c6108cd366004612dca565b61208b565b3480156108dd575f80fd5b5061030c6108ec366004613030565b612127565b3480156108fc575f80fd5b506103587f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b34801561092f575f80fd5b5061043161093e366004612efe565b8051602081830181018051600c8252928201919093012091525473ffffffffffffffffffffffffffffffffffffffff1681565b34801561097c575f80fd5b5061030c61098b36600461308c565b6123c3565b34801561099b575f80fd5b5061035860065481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a3757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b80600b83604051610a4e9190613107565b9081526020016040518091039020819055507f6a59d469e3757d6e139cdf95b12740f585d553afac49b90bdbe278502a4427188282604051610a9192919061316b565b60405180910390a15050565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16610b04576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f42cc79f957a9535dc49c660eec62747fb540bef0dd29cd7f6c0a810816af4cff9101610a91565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bc3816125b0565b610bcd83836125bd565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610c22576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c2c82826126e2565b505050565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16610c98576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca06127be565b565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16610d09576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d56576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388811115610d92576040517fc31c0b6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526005602052604090819020839055517fe3e43e0700c35d0879972f000dc93907848b11360702f11ebbe14479866f806090610deb9084815260200190565b60405180910390a25050565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16610e5e576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610eab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fc2d9f94b2a169da07b0305c4fcdf5e7d988c6e4793af0796516c96727a90b70e906020015b60405180910390a150565b610f2d612855565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610f9c575073ffffffffffffffffffffffffffffffffffffffff811630145b15610fd3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f03611059576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152602482018490528416906347e7ef24906044016020604051808303815f875af11580156110cb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bcd919061318c565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115e576040517f53e5172300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611166612855565b61116e6128b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111dd575073ffffffffffffffffffffffffffffffffffffffff841630145b15611214576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616611261576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845f0361129a576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86165f9081526003602052604090205460ff166112f8576040517f4e38f95a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8262ffffff165f036113695773ffffffffffffffffffffffffffffffffffffffff86165f9081526004602052604081205462ffffff169350839003611369576040517f3733548a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f0361138b5760065461137e90603c6131d4565b61138890426131eb565b90505b804211156113c5576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754600a545f9173ffffffffffffffffffffffffffffffffffffffff90811691631698ee8291908116908a161061141557600a5473ffffffffffffffffffffffffffffffffffffffff16611417565b885b600a5473ffffffffffffffffffffffffffffffffffffffff908116908b1610611440578961145a565b600a5473ffffffffffffffffffffffffffffffffffffffff165b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015262ffffff87166044820152606401602060405180830381865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906131fe565b905073ffffffffffffffffffffffffffffffffffffffff8116611546576040517f76ecffc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f0361158557600a545f9061157590899073ffffffffffffffffffffffffffffffffffffffff16878a611afe565b90506115818189612932565b9350505b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081523060048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8816906347e7ef24906044016020604051808303815f875af11580156115f5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611619919061318c565b506008546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018890529088169063095ea7b3906044016020604051808303815f875af1158015611690573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b4919061318c565b50604080516101008101825273ffffffffffffffffffffffffffffffffffffffff808a168252600a548116602083015262ffffff8716828401523060608301526080820185905260a0820189905260c082018690525f60e0830181905260085493517f414bf3890000000000000000000000000000000000000000000000000000000081529293909291169063414bf38990611754908590600401613219565b6020604051808303815f875af1158015611770573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061179491906132d7565b9050848110156117d0576040517f8199f5f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d906024015f604051808303815f87803b158015611839575f80fd5b505af115801561184b573d5f803e3d5ffd5b505050505f8773ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146118a5576040519150601f19603f3d011682016040523d82523d5f602084013e6118aa565b606091505b50509050806118e5576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f6024820152908b169063095ea7b3906044016020604051808303815f875af115801561195a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197e919061318c565b50600a546040805173ffffffffffffffffffffffffffffffffffffffff8d81168252602082018d9052928316818301526060810185905262ffffff8a166080820152918a1660a0830152517ff5d6ca9b390b5271e0cbb3d43b4d708d5b17804cb81a4c65e027226d87ccf0e29181900360c00190a150505050611a2060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16610f25576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611af6576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca06129c2565b6040805160a08101825273ffffffffffffffffffffffffffffffffffffffff86811682528581166020830190815282840185815262ffffff878116606086019081525f6080870181815260095498517fc6a5026a0000000000000000000000000000000000000000000000000000000081528851881660048201529551871660248701529351604486015290519091166064840152905183166084830152938492169063c6a5026a9060a4016080604051808303815f875af1158015611bc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bea91906132ee565b50919998505050505050505050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08611c23816125b0565b73ffffffffffffffffffffffffffffffffffffffff8216611c70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600c84604051611c819190613107565b908152604051908190036020018120805473ffffffffffffffffffffffffffffffffffffffff939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091557f0c7d242571a289736ea536c54ebe236d31ba62abfd4f22b8d54d2988dc0dd94990611d05908590859061333d565b60405180910390a1505050565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611d79576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83161580611db0575073ffffffffffffffffffffffffffffffffffffffff8216155b80611dcf575073ffffffffffffffffffffffffffffffffffffffff8116155b15611e06576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560088054868316908416811790915560098054928616929093168217909255604080519384526020840192909252908201527f95d3bff4dd1ae411fd49ebc9fcc62f464b6b60cd9b4eacd860da89045c8d4c8290606001611d05565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611f0e576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611f5b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8062ffffff166101f414158015611f7957508062ffffff16610bb814155b8015611f8c57508062ffffff1661271014155b15611fc3576040517f3733548a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff861690811790915591519182527f5734dc08ec8c21bd34e0f102d90ea2d1a9dbdcf23e787dc8744d2d0dd227fc739101610deb565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154612081816125b0565b610bcd83836126e2565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166120f2576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068190556040518181527f424b07caa75ce8e1c3985f334273f957db9ce138de114e48e50d8240d4d7300b90602001610f1a565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08612151816125b0565b73ffffffffffffffffffffffffffffffffffffffff831661219e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754600a545f9173ffffffffffffffffffffffffffffffffffffffff90811691631698ee82918781169116106121d557856121ef565b600a5473ffffffffffffffffffffffffffffffffffffffff165b600a5473ffffffffffffffffffffffffffffffffffffffff80891691161061222f57600a5473ffffffffffffffffffffffffffffffffffffffff16612231565b865b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015262ffffff86166044820152606401602060405180830381865afa1580156122aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ce91906131fe565b905073ffffffffffffffffffffffffffffffffffffffff811661231d576040517f76ecffc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d8660405161232e9190613107565b908152604051908190036020018120805473ffffffffffffffffffffffffffffffffffffffff939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091557f21e3c1439de176cb39006e603b26a8d890fe2267c804597e40d2954871141d7d906123b490879084908790613374565b60405180910390a15050505050565b5f6123cc612a3b565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156123f85750825b90505f8267ffffffffffffffff1660011480156124145750303b155b905081158015612422575080155b15612459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156124ba5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6124c2612a63565b6124ca612a73565b6124d45f336125bd565b50600a805473ffffffffffffffffffffffffffffffffffffffff808c167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600780548b8416908316179055600880548a8416908316179055600980549289169290911691909117905583156125a55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b6125ba8133612a7b565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff166126d2575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561266e3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610a37565b5f915050610a37565b5092915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16156126d2575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610a37565b6127c6612b29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610f1a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610ca0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161292c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260056020526040812054808203612963575061012c5b835f03612973575f915050610a37565b61271061298082826133b7565b61298a90866131d4565b61299491906133ca565b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6129ca612855565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612830565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610a37565b612a6b612b84565b610ca0612bc2565b610ca0612b84565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16612b25576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610ca0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b8c612bca565b610ca0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61299c612b84565b5f612bd3612a3b565b5468010000000000000000900460ff16919050565b5f60208284031215612bf8575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612c27575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112612c6a575f80fd5b813567ffffffffffffffff811115612c8457612c84612c2e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612cf057612cf0612c2e565b604052818152838201602001851015612d07575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215612d34575f80fd5b823567ffffffffffffffff811115612d4a575f80fd5b612d5685828601612c5b565b95602094909401359450505050565b73ffffffffffffffffffffffffffffffffffffffff811681146125ba575f80fd5b80151581146125ba575f80fd5b5f8060408385031215612da4575f80fd5b8235612daf81612d65565b91506020830135612dbf81612d86565b809150509250929050565b5f60208284031215612dda575f80fd5b5035919050565b5f8060408385031215612df2575f80fd5b823591506020830135612dbf81612d65565b5f8060408385031215612e15575f80fd5b8235612e2081612d65565b946020939093013593505050565b5f60208284031215612e3e575f80fd5b8135612c2781612d65565b5f805f60608486031215612e5b575f80fd5b8335612e6681612d65565b9250602084013591506040840135612e7d81612d65565b809150509250925092565b803562ffffff81168114612e9a575f80fd5b919050565b5f805f805f8060c08789031215612eb4575f80fd5b8635612ebf81612d65565b9550602087013594506040870135612ed681612d65565b9350612ee460608801612e88565b9598949750929560808101359460a0909101359350915050565b5f60208284031215612f0e575f80fd5b813567ffffffffffffffff811115612f24575f80fd5b61299484828501612c5b565b5f805f8060808587031215612f43575f80fd5b8435612f4e81612d65565b93506020850135612f5e81612d65565b9250612f6c60408601612e88565b9396929550929360600135925050565b5f8060408385031215612f8d575f80fd5b823567ffffffffffffffff811115612fa3575f80fd5b612faf85828601612c5b565b9250506020830135612dbf81612d65565b5f805f60608486031215612fd2575f80fd5b8335612fdd81612d65565b92506020840135612fed81612d65565b91506040840135612e7d81612d65565b5f806040838503121561300e575f80fd5b823561301981612d65565b915061302760208401612e88565b90509250929050565b5f805f60608486031215613042575f80fd5b833567ffffffffffffffff811115613058575f80fd5b61306486828701612c5b565b935050602084013561307581612d65565b915061308360408501612e88565b90509250925092565b5f805f806080858703121561309f575f80fd5b84356130aa81612d65565b935060208501356130ba81612d65565b925060408501356130ca81612d65565b915060608501356130da81612d65565b939692955090935050565b5f5b838110156130ff5781810151838201526020016130e7565b50505f910152565b5f82516131188184602087016130e5565b9190910192915050565b5f81518084526131398160208601602086016130e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f61317d6040830185613122565b90508260208301529392505050565b5f6020828403121561319c575f80fd5b8151612c2781612d86565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a3757610a376131a7565b80820180821115610a3757610a376131a7565b5f6020828403121561320e575f80fd5b8151612c2781612d65565b5f6101008201905073ffffffffffffffffffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff602084015116602083015262ffffff60408401511660408301526060830151613291606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151608083015260a083015160a083015260c083015160c083015260e08301516126db60e084018273ffffffffffffffffffffffffffffffffffffffff169052565b5f602082840312156132e7575f80fd5b5051919050565b5f805f8060808587031215613301575f80fd5b8451602086015190945061331481612d65565b604086015190935063ffffffff8116811461332d575f80fd5b6060959095015193969295505050565b604081525f61334f6040830185613122565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b606081525f6133866060830186613122565b905073ffffffffffffffffffffffffffffffffffffffff8416602083015262ffffff83166040830152949350505050565b81810381811115610a3757610a376131a7565b5f826133fd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea2646970667358221220be7683826e35c7cef49a08ea8ce84884a78fea00c3f7eced428fd855051f979864736f6c634300081a0033" +const HANDLER_CONTRACT_BYTECODE = "608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c908162bc574b146137825750806301ffc9a7146136e15780630379eae8146136815780630ac6eb77146135d5578063172bfc1c146135595780631a4e49d4146135305780631a873ce4146134fd578063240028e8146134b3578063248a9ca3146134615780632f2ff15d1461340457806336568abe1461339a5780633f4ba83a146132915780634b1d2eeb146132515780634d20d0f81461321e5780634eb7d1a1146131de57806357724c41146130dd5780635b549182146130aa5780635c975abb14613069578063606b05a414612ffc5780636435967b1461282f57806364f10e501461281457806368c70c9e146127c95780636ca752e31461277e5780636d4008a814612739578063780ad8271461203357806378a8812714611fb857806381fbadad14611f9a5780638377e23014611f6657806383b94a5214611eb05780638456cb5914611d8557806391d1485414611d0e5780639be7fdb214611c23578063a217fddf14611c07578063a5172ddb14611bbc578063a861469f14611b72578063ad14d38514611b28578063af90f35114611a4a578063b5d8349f146119e9578063be0580c014611843578063c6f1b7e7146117f2578063cd20c6e8146117ad578063d17c872c14611687578063d547741f14611620578063db9a0daf1461155d578063dbc1b464146114fc578063dcc16b5c146112be578063dd19e7551461102a578063e798646614610f4b578063ec87621c14610f10578063f881446714610716578063f8c8765e146103e4578063fa064472146102f3578063fb46e99d146102d55763fc6b5de80361000f57346102d25760206003193601126102d2576004359067ffffffffffffffff82116102d25760206102bf816102ac3660048701613877565b81604051938285809451938492016139cd565b8101601281520301902054604051908152f35b80fd5b50346102d257806003193601126102d2576020600654604051908152f35b50346102d25760806003193601126102d25760043567ffffffffffffffff81116103e0576103ca6103497f5e41bf0052b493123a63e4e0d9095ed4324108e489d58c9a0948b2be366ac8c6923690600401613877565b60243560443560643590816103ab6020604051868851918381818c01946103718183886139cd565b8101600b815203019020558460405183818b5161038f8183886139cd565b8101601181520301902055604051809381928a519283916139cd565b81016012815203019020556040519485946080865260808601906139ee565b926020850152604084015260608301520390a180f35b5080fd5b50346102d25760806003193601126102d2576103fe6138ef565b610406613912565b61040e613935565b6064359173ffffffffffffffffffffffffffffffffffffffff8316809303610712577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549360ff8560401c16159467ffffffffffffffff81168015908161070a575b6001149081610700575b1590816106f7575b506106cf579173ffffffffffffffffffffffffffffffffffffffff80949392838860017fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000859716177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005561067a575b506104fa614135565b610502614135565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005561052e614135565b61053733613c89565b50167fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a55167fffffffffffffffffffffffff00000000000000000000000000000000000000006007541617600755167fffffffffffffffffffffffff000000000000000000000000000000000000000060085416176008557fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556105e65780f35b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f6104f1565b6004877ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f610482565b303b15915061047a565b879150610470565b8480fd5b5060a06003193601126102d25761072b6138ef565b90610734613967565b9160443591606435936084359273ffffffffffffffffffffffffffffffffffffffff8416928385036102d25773ffffffffffffffffffffffffffffffffffffffff601054163303610ee857610787613f8a565b61078f613fdd565b8691839773ffffffffffffffffffffffffffffffffffffffff8216948515610ec0578615610ec0573415610e98578815610e985762ffffff1615610e56575b15610e2e575b824211610e065761088f60208973ffffffffffffffffffffffffffffffffffffffff6007541673ffffffffffffffffffffffffffffffffffffffff600a54169488861090815f14610dff5786915b15610df757905b604051958694859384937f1698ee820000000000000000000000000000000000000000000000000000000085526004850191604091949373ffffffffffffffffffffffffffffffffffffffff62ffffff9281606087019816865216602085015216910152565b03915afa908115610c98579073ffffffffffffffffffffffffffffffffffffffff918491610dc8575b501615610da057803b156103e05781600491604051928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af18015610d0157908291610d8b575b50600a546008546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015234602482015292602092849260449284929091165af18015610d0157610d6e575b5062ffffff73ffffffffffffffffffffffffffffffffffffffff600a5416976040519861099d8a6137b2565b89528460208a0152169182604089015230606089015260808801528560a08801523460c08801528060e08801526020610a8961010473ffffffffffffffffffffffffffffffffffffffff6008541699846040519b8c9485937fdb3e2198000000000000000000000000000000000000000000000000000000008552600485019073ffffffffffffffffffffffffffffffffffffffff60e0809282815116855282602082015116602086015262ffffff60408201511660408601528260608201511660608601526080810151608086015260a081015160a086015260c081015160c0860152015116910152565b5af1968715610d61578197610d29575b5080602073ffffffffffffffffffffffffffffffffffffffff600a5416604473ffffffffffffffffffffffffffffffffffffffff6008541660405194859384927f095ea7b300000000000000000000000000000000000000000000000000000000845260048401528160248401525af18015610d0157610d0c575b506040517f42966c6800000000000000000000000000000000000000000000000000000000815286600482015260208160248185885af18015610d0157610cd4575b5086340394348611610ca757873403610bd3575b505060606040967f01fd625a5ce1109c10761818e2ef64ea92cd4966d78086d37e5a4b50e322687892885191825287602083015288820152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005582519182526020820152f35b73ffffffffffffffffffffffffffffffffffffffff600a5416803b15610ca3578280916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528c60048401525af18015610c98579183918893610c7e575b5081809381925af1610c4a613b4c565b5015610c565780610b6a565b807f90b8ec180000000000000000000000000000000000000000000000000000000060049252fd5b610c8b91935082906137fc565b6103e0578186915f610c3a565b6040513d85823e3d90fd5b8280fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b610cf59060203d602011610cfa575b610ced81836137fc565b810190613a4d565b610b56565b503d610ce3565b6040513d84823e3d90fd5b610d249060203d602011610cfa57610ced81836137fc565b610b14565b9096506020813d602011610d59575b81610d45602093836137fc565b81010312610d555751955f610a99565b5f80fd5b3d9150610d38565b50604051903d90823e3d90fd5b610d869060203d602011610cfa57610ced81836137fc565b610971565b81610d95916137fc565b6102d257805f610906565b6004827f76ecffc0000000000000000000000000000000000000000000000000000000008152fd5b610dea915060203d602011610df0575b610de281836137fc565b810190613b13565b5f6108b8565b503d610dd8565b508590610829565b8091610822565b6004827f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b9150600654603c810290808204603c1490151715610ca757610e509042613b3f565b916107d4565b8483526004602052604083205462ffffff169850886107ce575b6004837f3733548a000000000000000000000000000000000000000000000000000000008152fd5b6004847f1f2a2005000000000000000000000000000000000000000000000000000000008152fd5b6004847fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b807fbce361b00000000000000000000000000000000000000000000000000000000060049252fd5b50346102d257806003193601126102d25760206040517f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088152f35b50346102d25760406003193601126102d257610f656138ef565b73ffffffffffffffffffffffffffffffffffffffff610f82613958565b91610f8b613b7b565b169081156110025760207f16ef4de07b0452a43221c91064fb645963a8e2e60bd8a7514da58d56e315c42291838552600f8252610ff681604087209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b6040519015158152a280f35b6004837fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b50346102d25760406003193601126102d2576110446138ef565b73ffffffffffffffffffffffffffffffffffffffff6024359116906040517fa0c50b690000000000000000000000000000000000000000000000000000000081528381600481865afa9081156112b3578491611236575b5060405191815192602081818501956110b58183896139cd565b81016014815203019020549080155f146111f75750925b73ffffffffffffffffffffffffffffffffffffffff60405160208185516110f481838a6139cd565b8101600c81520301902054169283156111cf57602061111e916040518093819287519283916139cd565b8101600b815203019020549081156111a757848202948286040361117a57856040916111769596975260136020522054604051958695865260208601526040850152606084015260a0608084015260a08301906139ee565b0390f35b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004867fe661aed0000000000000000000000000000000000000000000000000000000008152fd5b6004867fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b939080851061120657506110cc565b85604491867fff632bea000000000000000000000000000000000000000000000000000000008352600452602452fd5b90503d8085833e61124781836137fc565b8101906020818303126107125780519067ffffffffffffffff82116112af570181601f8201121561071257805161127d8161383d565b9261128b60405194856137fc565b818452602082840101116112af576112a991602080850191016139cd565b5f61109b565b8580fd5b6040513d86823e3d90fd5b50346102d25760606003193601126102d25760043567ffffffffffffffff81116103e0576112f0903690600401613877565b6112f8613912565b60443562ffffff81169182820361071257611311613b7b565b73ffffffffffffffffffffffffffffffffffffffff811680156111cf57916020916113e39373ffffffffffffffffffffffffffffffffffffffff600754169173ffffffffffffffffffffffffffffffffffffffff600a541691821091825f146114f55780925b156114ed57506040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015262ffffff90921660448301529092839190829081906064820190565b03915afa80156112b35773ffffffffffffffffffffffffffffffffffffffff9185916114ce575b50169081156114a65791611495917f21e3c1439de176cb39006e603b26a8d890fe2267c804597e40d2954871141d7d93604051602081855161144f8183858a016139cd565b8101600d815203019020827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556040519384936060855260608501906139ee565b91602084015260408301520390a180f35b6004847f76ecffc0000000000000000000000000000000000000000000000000000000008152fd5b6114e7915060203d602011610df057610de281836137fc565b5f61140a565b905090610829565b8192611377565b50346102d25760206003193601126102d2576004359067ffffffffffffffff82116102d257602073ffffffffffffffffffffffffffffffffffffffff611549826102ac3660048801613877565b8101600c8152030190205416604051908152f35b50346102d25760206003193601126102d2576004358180527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040822073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156115f8576020817f424b07caa75ce8e1c3985f334273f957db9ce138de114e48e50d8240d4d7300b92600655604051908152a180f35b6004827f49e27cff000000000000000000000000000000000000000000000000000000008152fd5b50346102d25760406003193601126102d257611683600435611640613912565b9061167e611679825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b613c03565b613e82565b5080f35b50346102d25760406003193601126102d2576116a16138ef565b6116a9613967565b908280527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040832073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156117855773ffffffffffffffffffffffffffffffffffffffff169081156110025762ffffff16906101f482141580611779575b8061176d575b610e70578252600460205260408220907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082541617905580f35b50612710821415611733565b50610bb882141561172d565b6004837f49e27cff000000000000000000000000000000000000000000000000000000008152fd5b50346102d25760206003193601126102d257604060209173ffffffffffffffffffffffffffffffffffffffff6117e16138ef565b168152601383522054604051908152f35b50346102d257806003193601126102d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102d25760606003193601126102d25761185d6138ef565b611865613912565b61186d613935565b918380527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040842073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156119c15773ffffffffffffffffffffffffffffffffffffffff16801580156119a3575b8015611985575b610ec05773ffffffffffffffffffffffffffffffffffffffff929183917fffffffffffffffffffffffff00000000000000000000000000000000000000006007541617600755167fffffffffffffffffffffffff00000000000000000000000000000000000000006008541617600855167fffffffffffffffffffffffff0000000000000000000000000000000000000000600954161760095580f35b5073ffffffffffffffffffffffffffffffffffffffff8316156118e8565b5073ffffffffffffffffffffffffffffffffffffffff8216156118e1565b6004847f49e27cff000000000000000000000000000000000000000000000000000000008152fd5b50346102d25760206003193601126102d2576004359067ffffffffffffffff82116102d257602073ffffffffffffffffffffffffffffffffffffffff611a36826102ac3660048801613877565b8101600d8152030190205416604051908152f35b50346102d25760206003193601126102d257611a646138ef565b8180527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040822073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156115f85773ffffffffffffffffffffffffffffffffffffffff168015611b00577fffffffffffffffffffffffff0000000000000000000000000000000000000000601054161760105580f35b6004827fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b50346102d25760206003193601126102d25760ff604060209273ffffffffffffffffffffffffffffffffffffffff611b5e6138ef565b168152600384522054166040519015158152f35b50346102d25760206003193601126102d25762ffffff604060209273ffffffffffffffffffffffffffffffffffffffff611baa6138ef565b16815260048452205416604051908152f35b50346102d25760206003193601126102d2576004359067ffffffffffffffff82116102d2576020611bf4816102ac3660048701613877565b8101600b81520301902054604051908152f35b50346102d257806003193601126102d257602090604051908152f35b50346102d25760406003193601126102d25760043567ffffffffffffffff81116103e057611c55903690600401613877565b73ffffffffffffffffffffffffffffffffffffffff611c72613912565b611c7a613b7b565b168015611002577f0c7d242571a289736ea536c54ebe236d31ba62abfd4f22b8d54d2988dc0dd94991611d02916040516020818451611cbc81838589016139cd565b8101600c815203019020817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556040519283926040845260408401906139ee565b9060208301520390a180f35b50346102d25760406003193601126102d25773ffffffffffffffffffffffffffffffffffffffff6040611d3f613912565b9260043581527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020522091165f52602052602060ff60405f2054166040519015158152f35b50346102d257806003193601126102d2578080527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040812073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f20541615611e8857611df2613f8a565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b807f49e27cff0000000000000000000000000000000000000000000000000000000060049252fd5b50346102d25760206003193601126102d257611eca6138ef565b8180527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040822073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156115f85773ffffffffffffffffffffffffffffffffffffffff168015611b00577fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a5580f35b50346102d257806003193601126102d257602073ffffffffffffffffffffffffffffffffffffffff60105416604051908152f35b50346102d257806003193601126102d2576020600e54604051908152f35b50346102d257611fc736613979565b9083809394527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040832073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f2054161561178557612030929361202b613f8a565b613a65565b80f35b50346102d25760c06003193601126102d25761204d6138ef565b60243590612059613935565b906064359262ffffff8416908185036112af5760843560a4359361207b613f8a565b612083613fdd565b61208e868483614054565b8473ffffffffffffffffffffffffffffffffffffffff821697888a52600360205260ff60408b205416156127115794156126d0575b1561267b575b84421161265357602084612186928a73ffffffffffffffffffffffffffffffffffffffff600754169173ffffffffffffffffffffffffffffffffffffffff600a541690818d10805f1461264c5781935b50156114ed57506040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015262ffffff90921660448301529092839190829081906064820190565b03915afa80156125b55773ffffffffffffffffffffffffffffffffffffffff91899161262d575b5016156126055780156125dd576040517f47e7ef24000000000000000000000000000000000000000000000000000000008152306004820152602481018390526020816044818b8b5af180156125b5576125c0575b506008546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018390526020816044818b8b5af180156125b557612598575b5062ffffff73ffffffffffffffffffffffffffffffffffffffff600a54169360405194612291866137b2565b8886526020808701918252929091166040808701828152306060890190815260808901998a5260a0890188815260c08a0188815260e08b018f815260085495517f414bf3890000000000000000000000000000000000000000000000000000000081529b5173ffffffffffffffffffffffffffffffffffffffff90811660048e01529751881660248d0152935162ffffff1660448c01529151861660648b0152995160848a0152985160a4890152975160c48801529651821660e48701529585916101049183918c91165af1928315612531578793612564575b50821061253c5773ffffffffffffffffffffffffffffffffffffffff60085416604051907f095ea7b300000000000000000000000000000000000000000000000000000000825260048201528660248201526020816044818a8a5af1801561253157612514575b508573ffffffffffffffffffffffffffffffffffffffff600a5416803b156103e0578180916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af18015610d01576124ff575b5080808085885af1612446613b4c565b50156124d757927ff5d6ca9b390b5271e0cbb3d43b4d708d5b17804cb81a4c65e027226d87ccf0e2949273ffffffffffffffffffffffffffffffffffffffff9260c09584600a54169060405196875260208701526040860152606085015260808401521660a0820152a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b6004867f90b8ec18000000000000000000000000000000000000000000000000000000008152fd5b81612509916137fc565b6112af57855f612436565b61252c9060203d602011610cfa57610ced81836137fc565b6123d2565b6040513d89823e3d90fd5b6004867f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b9092506020813d602011612590575b81612580602093836137fc565b81010312610d555751915f61236b565b3d9150612573565b6125b09060203d602011610cfa57610ced81836137fc565b612265565b6040513d8a823e3d90fd5b6125d89060203d602011610cfa57610ced81836137fc565b612202565b6004877f1f2a2005000000000000000000000000000000000000000000000000000000008152fd5b6004877f76ecffc0000000000000000000000000000000000000000000000000000000008152fd5b612646915060203d602011610df057610de281836137fc565b5f6121ad565b8293612119565b6004887f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b9350600654603c810290808204603c14901517156126a35761269d9042613b3f565b936120c9565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8789526004602052604089205462ffffff169450846120c3576004897f3733548a000000000000000000000000000000000000000000000000000000008152fd5b60048a7f4e38f95a000000000000000000000000000000000000000000000000000000008152fd5b50346102d25760206003193601126102d257604060209173ffffffffffffffffffffffffffffffffffffffff61276d6138ef565b168152600583522054604051908152f35b50346102d25760206003193601126102d2576004359067ffffffffffffffff82116102d25760206127b6816102ac3660048701613877565b8101601481520301902054604051908152f35b50346102d25760206003193601126102d2576004359067ffffffffffffffff82116102d2576020612801816102ac3660048701613877565b8101601181520301902054604051908152f35b50346102d25761203061282636613979565b9161202b613f8a565b5034610d555760c0600319360112610d55576128496138ef565b602435612854613935565b6064358015918215809203610d555760843562ffffff811690818103610d555760a43561287f613f8a565b612887613fdd565b61289284888a614054565b5f95156129b15750506040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101869052919050602082806044810103818a73ffffffffffffffffffffffffffffffffffffffff8b165af1908115612531577ffa6ff091ec99bdfd127d51e7786764f2ff7e39f866bbb2a2996e1597052641e49460609473ffffffffffffffffffffffffffffffffffffffff948594612992575b505b6040519788526020880152604087015216941692a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b6129aa9060203d602011610cfa57610ced81836137fc565b505f612954565b80919293955015612fd45773ffffffffffffffffffffffffffffffffffffffff871691825f52600360205260ff60405f20541615612fac579215612f6a575b600654603c810290808204603c1490151715612f3d57612a109042613b3f565b804211612f1557612ac860208573ffffffffffffffffffffffffffffffffffffffff6007541673ffffffffffffffffffffffffffffffffffffffff600a541680881090815f14612f0e578d915b15612f06576040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015262ffffff90921660448301529092839190829081906064820190565b03915afa8015612e015773ffffffffffffffffffffffffffffffffffffffff915f91612ee7575b501615612ebf576040517f47e7ef24000000000000000000000000000000000000000000000000000000008152306004820152602481018890526020816044815f885af18015612e0157612ea2575b506008546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018890526020816044815f885af18015612e0157612e85575b5062ffffff73ffffffffffffffffffffffffffffffffffffffff600a54169460405195612bcd876137b2565b858752602087015216604085015230606085015260808401528560a08401528060c08401525f60e08401526020612cb761010473ffffffffffffffffffffffffffffffffffffffff60085416955f60405197889485937f414bf389000000000000000000000000000000000000000000000000000000008552600485019073ffffffffffffffffffffffffffffffffffffffff60e0809282815116855282602082015116602086015262ffffff60408201511660408601528260608201511660608601526080810151608086015260a081015160a086015260c081015160c0860152015116910152565b5af1928315612e01575f93612e51575b508210612e295760205f91604473ffffffffffffffffffffffffffffffffffffffff6008541660405194859384927f095ea7b300000000000000000000000000000000000000000000000000000000845260048401528160248401525af18015612e0157612e0c575b5073ffffffffffffffffffffffffffffffffffffffff600a5416803b15610d55575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528760048401525af18015612e0157612dec575b508580808084875af1612da4613b4c565b50156124d75773ffffffffffffffffffffffffffffffffffffffff7ffa6ff091ec99bdfd127d51e7786764f2ff7e39f866bbb2a2996e1597052641e493606093829390612956565b612df99196505f906137fc565b5f945f612d93565b6040513d5f823e3d90fd5b612e249060203d602011610cfa57610ced81836137fc565b612d30565b7f8199f5f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d602011612e7d575b81612e6d602093836137fc565b81010312610d555751915f612cc7565b3d9150612e60565b612e9d9060203d602011610cfa57610ced81836137fc565b612ba1565b612eba9060203d602011610cfa57610ced81836137fc565b612b3e565b7f76ecffc0000000000000000000000000000000000000000000000000000000005f5260045ffd5b612f00915060203d602011610df057610de281836137fc565b5f612aef565b508c90610829565b8091612a5d565b7f1ab7da6b000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9150805f52600460205262ffffff60405f20541691826129f0577f3733548a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e38f95a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f22c50cbf000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610d55577f882f47825d4043cd04a564cad4f524a7fe00a604ae024c23dbc8065b77668b4761302b366138bd565b90613034613b7b565b81604051602081845161304a81838589016139cd565b810160148152030190205561306460405192839283613a31565b0390a1005b34610d55575f600319360112610d5557602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b34610d55575f600319360112610d5557602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b34610d55576040600319360112610d55576130f66138ef565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040902054602435919060ff16156131b65773ffffffffffffffffffffffffffffffffffffffff16801561318e576113888211613166575f52600560205260405f20555f80f35b7fc31c0b6e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f49e27cff000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610d55576020600319360112610d55576004355f526002602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b34610d55575f600319360112610d5557602073ffffffffffffffffffffffffffffffffffffffff60095416604051908152f35b34610d55576020600319360112610d55576004355f526001602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b34610d55575f600319360112610d5557335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16156131b6577fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811615613372577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610d55576040600319360112610d55576133b3613912565b3373ffffffffffffffffffffffffffffffffffffffff8216036133dc5761001a90600435613e82565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610d55576040600319360112610d555761001a600435613423613912565b9061345c611679825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b613d70565b34610d55576020600319360112610d555760206134ab6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b34610d55576020600319360112610d555773ffffffffffffffffffffffffffffffffffffffff6134e16138ef565b165f52600f602052602060ff60405f2054166040519015158152f35b34610d55575f600319360112610d5557602073ffffffffffffffffffffffffffffffffffffffff600a5416604051908152f35b34610d55576020600319360112610d55576004355f525f602052602060405f2054604051908152f35b34610d55576040600319360112610d55576135726138ef565b73ffffffffffffffffffffffffffffffffffffffff60243591613593613b7b565b1690811561318e5760207f911a025fb070fa2a29c37a3bf4c00d16acf15583cd050f17bdbacbab7e72320391835f52601382528060405f2055604051908152a2005b34610d55576040600319360112610d55576135ee6138ef565b6135f6613958565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16156131b65773ffffffffffffffffffffffffffffffffffffffff61001a92165f52600360205260405f209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b34610d55577f6a59d469e3757d6e139cdf95b12740f585d553afac49b90bdbe278502a4427186136b0366138bd565b908160405160208184516136c781838589016139cd565b8101600b8152030190205561306460405192839283613a31565b34610d55576020600319360112610d55576004357fffffffff000000000000000000000000000000000000000000000000000000008116809103610d5557807f7965db0b0000000000000000000000000000000000000000000000000000000060209214908115613758575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148261374d565b34610d55575f600319360112610d555760209073ffffffffffffffffffffffffffffffffffffffff600854168152f35b610100810190811067ffffffffffffffff8211176137cf57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176137cf57604052565b67ffffffffffffffff81116137cf57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215610d555780359061388e8261383d565b9261389c60405194856137fc565b82845260208383010111610d5557815f926020809301838601378301015290565b6040600319820112610d55576004359067ffffffffffffffff8211610d55576138e891600401613877565b9060243590565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610d5557565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610d5557565b6044359073ffffffffffffffffffffffffffffffffffffffff82168203610d5557565b602435908115158203610d5557565b6024359062ffffff82168203610d5557565b6003196060910112610d555760043573ffffffffffffffffffffffffffffffffffffffff81168103610d5557906024359060443573ffffffffffffffffffffffffffffffffffffffff81168103610d555790565b5f5b8381106139de5750505f910152565b81810151838201526020016139cf565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093613a2a815180928187528780880191016139cd565b0116010190565b929190613a486020916040865260408601906139ee565b930152565b90816020910312610d5557518015158103610d555790565b90602091613ae693613a78818484614054565b5f73ffffffffffffffffffffffffffffffffffffffff6040518097819682957f47e7ef24000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0393165af18015612e0157613af85750565b613b109060203d602011610cfa57610ced81836137fc565b50565b90816020910312610d55575173ffffffffffffffffffffffffffffffffffffffff81168103610d555790565b91908201809211612f3d57565b3d15613b76573d90613b5d8261383d565b91613b6b60405193846137fc565b82523d5f602084013e565b606090565b335f9081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff1615613bb357565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0860245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f20541615613c5a5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16613d6b5773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f14613e7c57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f14613e7c57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416613fb557565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00541461402c5760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919073ffffffffffffffffffffffffffffffffffffffff161561318e5773ffffffffffffffffffffffffffffffffffffffff16801561318e5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016811490811561412b575b5061410357156140db57565b7f1f2a2005000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f82d5d76a000000000000000000000000000000000000000000000000000000005f5260045ffd5b905030145f6140cf565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561416457565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffdfea26469706673582212200a731130a8c5bcf01626a6f678a302cf572f981bffc866cffc5f6e8689e9ff9e64736f6c634300081a0033" const PRC20_CREATION_BYTECODE = "608060405234801561000f575f80fd5b50600436106101a5575f3560e01c806374be2150116100e8578063c701262611610093578063eddeb1231161006e578063eddeb12314610457578063f687d12a1461046a578063f97c007a1461047d578063fc5fecd514610486575f80fd5b8063c7012626146103cb578063d9eeebed146103de578063dd62ed3e14610412575f80fd5b8063b84c8246116100c3578063b84c82461461037e578063c47f002714610391578063c6f1b7e7146103a4575f80fd5b806374be21501461033c57806395d89b4114610363578063a9059cbb1461036b575f80fd5b806323b872dd1161015357806347e7ef241161012e57806347e7ef24146102a1578063609c92b8146102b4578063701cd43b146102e857806370a0823114610307575f80fd5b806323b872dd14610266578063313ce5671461027957806342966c681461028e575f80fd5b8063091d278811610183578063091d278814610224578063095ea7b31461023b57806318160ddd1461025e575f80fd5b8063044d9371146101a957806306fdde03146101fa57806307e2bd8d1461020f575b5f80fd5b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610202610499565b6040516101f1919061143c565b61022261021d366004611479565b610529565b005b61022d60015481565b6040519081526020016101f1565b61024e610249366004611494565b6105ef565b60405190151581526020016101f1565b60065461022d565b61024e6102743660046114be565b6106ae565b60055460405160ff90911681526020016101f1565b61024e61029c3660046114fc565b61079b565b61024e6102af366004611494565b6107ae565b6102db7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101f19190611513565b5f546101d09073ffffffffffffffffffffffffffffffffffffffff1681565b61022d610315366004611479565b73ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205490565b61022d7f000000000000000000000000000000000000000000000000000000000000000081565b610202610879565b61024e610379366004611494565b610888565b61022261038c36600461157f565b61089d565b61022261039f36600461157f565b61091c565b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b61024e6103d936600461166f565b610997565b6103e6610af9565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101f1565b61022d6104203660046116e1565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260086020908152604080832093909416825291909152205490565b6102226104653660046114fc565b610d04565b6102226104783660046114fc565b610da8565b61022d60025481565b6103e66104943660046114fc565b610e4c565b6060600380546104a890611718565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490611718565b801561051f5780601f106104f65761010080835404028352916020019161051f565b820191905f5260205f20905b81548152906001019060200180831161050257829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff8116610576576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f412d5a95dc32cbb6bd9319bccf1bc1febeda71e734893a440f1f6853252fe99f906020015b60405180910390a150565b5f73ffffffffffffffffffffffffffffffffffffffff831661063d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f81815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b5f6106ba848484611055565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260086020908152604080832033845290915290205482811015610724576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85165f81815260086020908152604080832033808552908352928190208786039081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3506001949350505050565b5f6107a6338361119c565b506001919050565b5f6107b983836112ed565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b1660208201527f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526108689186908690611769565b60405180910390a150600192915050565b6060600480546104a890611718565b5f610894338484611055565b50600192915050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461090c576040517f6626eaef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600461091882826117ef565b5050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461098b576040517f6626eaef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361091882826117ef565b5f805f6109a2610af9565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018390529294509092505f918416906323b872dd906064016020604051808303815f875af1158015610a42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a669190611906565b905080610a9f576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa9338661119c565b7f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9553388888886600254604051610ae496959493929190611925565b60405180910390a15060019695505050505050565b5f80546040517f7471e6970000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152829173ffffffffffffffffffffffffffffffffffffffff1690637471e69790602401602060405180830381865afa158015610b85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba991906119a5565b915073ffffffffffffffffffffffffffffffffffffffff8216610bf8576040517f3d5729c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca891906119c0565b9050805f03610ce3576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254600154610cf39083611a04565b610cfd9190611a1b565b9150509091565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d73576040517f6626eaef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f906020016105e4565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e17576040517f6626eaef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a906020016105e4565b5f80546040517f7471e6970000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152829173ffffffffffffffffffffffffffffffffffffffff1690637471e69790602401602060405180830381865afa158015610ed8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efc91906119a5565b915073ffffffffffffffffffffffffffffffffffffffff8216610f4b576040517f3d5729c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610fd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ffb91906119c0565b9050805f03611036576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546110438583611a04565b61104d9190611a1b565b915050915091565b73ffffffffffffffffffffffffffffffffffffffff8316158061108c575073ffffffffffffffffffffffffffffffffffffffff8216155b156110c3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f9081526007602052604090205481811015611122576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8085165f8181526007602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061118e9086815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166111e9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03611222576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f9081526007602052604090205481811015611281576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f8181526007602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff821661133a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03611373576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680548201905573ffffffffffffffffffffffffffffffffffffffff82165f818152600760209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b5f81518084525f5b818110156113ff576020818501810151868301820152016113e3565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61144e60208301846113db565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611476575f80fd5b50565b5f60208284031215611489575f80fd5b813561144e81611455565b5f80604083850312156114a5575f80fd5b82356114b081611455565b946020939093013593505050565b5f805f606084860312156114d0575f80fd5b83356114db81611455565b925060208401356114eb81611455565b929592945050506040919091013590565b5f6020828403121561150c575f80fd5b5035919050565b602081016003831061154c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020828403121561158f575f80fd5b813567ffffffffffffffff8111156115a5575f80fd5b8201601f810184136115b5575f80fd5b803567ffffffffffffffff8111156115cf576115cf611552565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561163b5761163b611552565b604052818152828201602001861015611652575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f805f60408486031215611681575f80fd5b833567ffffffffffffffff811115611697575f80fd5b8401601f810186136116a7575f80fd5b803567ffffffffffffffff8111156116bd575f80fd5b8660208284010111156116ce575f80fd5b6020918201979096509401359392505050565b5f80604083850312156116f2575f80fd5b82356116fd81611455565b9150602083013561170d81611455565b809150509250929050565b600181811c9082168061172c57607f821691505b602082108103611763577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b606081525f61177b60608301866113db565b73ffffffffffffffffffffffffffffffffffffffff9490941660208301525060400152919050565b601f8211156117ea57805f5260205f20601f840160051c810160208510156117c85750805b601f840160051c820191505b818110156117e7575f81556001016117d4565b50505b505050565b815167ffffffffffffffff81111561180957611809611552565b61181d816118178454611718565b846117a3565b6020601f82116001811461186e575f83156118385750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1784556117e7565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156118bb578785015182556020948501946001909201910161189b565b50848210156118f757868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215611916575f80fd5b8151801515811461144e575f80fd5b73ffffffffffffffffffffffffffffffffffffffff8716815260a060208201528460a0820152848660c08301375f60c086830101525f60c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8801168301019050846040830152836060830152826080830152979650505050505050565b5f602082840312156119b5575f80fd5b815161144e81611455565b5f602082840312156119d0575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176106a8576106a86119d7565b808201808211156106a8576106a86119d756fea26469706673582212206be692aa215f21df823c52c689a11caa03254730bfade7b8b36788d6a72ba61764736f6c634300081a0033" -const UNIVERSAL_GATEWAY_PC_BYTECODE = "6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714610f6857508063248a9ca314610ef85780632f2ff15d14610e7d57806336568abe14610df55780633f4ba83a14610d1d5780635c975abb14610cbe5780637f57735014610c6e5780638456cb5914610b935780638e61856014610a6a57806391d14854146109d6578063a217fddf1461099e578063affed0e014610963578063b3ca1fbc1461058e578063c1ee135a1461053d578063d547741f146104bb578063e63ab1e9146104635763f8c8765e146100d7575f80fd5b3461045f5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f5761010e611047565b610116611024565b9060443573ffffffffffffffffffffffffffffffffffffffff811680910361045f576064359173ffffffffffffffffffffffffffffffffffffffff831680930361045f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549360ff8560401c16159467ffffffffffffffff811680159081610457575b600114908161044d575b159081610444575b5061041c578560017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556103c7575b5073ffffffffffffffffffffffffffffffffffffffff82161580156103a9575b80156103a1575b8015610399575b61037157610281610287926102406117ef565b6102486117ef565b6102506117ef565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005561027c6117ef565b6112c6565b506113ad565b507fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001556102de57005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b50831561022d565b508215610226565b5073ffffffffffffffffffffffffffffffffffffffff81161561021f565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f6101ff565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f6101ac565b303b1591506101a4565b87915061019a565b5f80fd5b3461045f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f5760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b3461045f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f5761053b6004356104f8611024565b90610536610531825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611240565b6115c3565b005b3461045f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461045f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f5760043567ffffffffffffffff811161045f578060040160c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261045f5761060761171f565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00541461093b5761063981611772565b6040805191610648828461106a565b600f83527f6569703135353a313131353531313100000000000000000000000000000000006020840152600254946001860180871161090e576002556024810193610692856110ab565b9360448301359460848401936106a8858a6110cc565b97909a67ffffffffffffffff89116108e1578451956106ef601f8b017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020018861106a565b8987526020870197368e8c011161045f576107e36107da6107f99f8f9d60a499610807976107c273ffffffffffffffffffffffffffffffffffffffff9f61082f9f908f915f6020886107cb996107d29b8637830101525190209281519373ffffffffffffffffffffffffffffffffffffffff928593602085019733895216908401528d6060840152608083015260c060a083015261079060e083018c61111d565b9060c0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261106a565b5190209f6110ab565b9d806110cc565b93909f6110cc565b979096016110ab565b9c87519e8f93610140855261014085019061111d565b92602081850391015261117a565b938b0152600160608b015261520860808b015261520860a08b015289830360c08b015261117a565b9461520860e08801521661010086015260048110156108b4577fd8352005a8b681f8cf230f28f60cef58ebe9a25d92e88f72cb6cb78799a6ca6d9173ffffffffffffffffffffffffffffffffffffffff9161012087015216938033940390a460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461045f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f576020600254604051908152f35b3461045f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f5760206040515f8152f35b3461045f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57610a0d611024565b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b3461045f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57610aa1611047565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615610b635773ffffffffffffffffffffffffffffffffffffffff90610af561171f565b1680156103715773ffffffffffffffffffffffffffffffffffffffff600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167fd0ef78509e8ed82196200827f0d10672cfab667994f990456881f413c1c475eb5f80a3005b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004525f60245260445ffd5b3461045f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57610bc96111b8565b610bd161171f565b610bd961171f565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461045f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461045f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b3461045f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57610d536111b8565b610d5b6116cb565b610d636116cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b3461045f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57610e2c611024565b3373ffffffffffffffffffffffffffffffffffffffff821603610e555761053b906004356115c3565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461045f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f5761053b600435610eba611024565b90610ef3610531825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b6114b1565b3461045f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f576020610f606004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b3461045f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261045f57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361045f57817f7965db0b0000000000000000000000000000000000000000000000000000000060209314908115610ffa575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610ff3565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361045f57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361045f57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108e157604052565b3573ffffffffffffffffffffffffffffffffffffffff8116810361045f5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561045f570180359067ffffffffffffffff821161045f5760200191813603831361045f57565b91908251928382525f5b8481106111655750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b80602080928401015182828601015201611127565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b335f9081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b602052604090205460ff16156111f057565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156112975750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166113a85773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b602052604090205460ff166113a85773ffffffffffffffffffffffffffffffffffffffff165f8181527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f146115bd57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f146115bd57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416156116f757565b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300541661174a57565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b61177f60808201826110cc565b15801592604001351591506117e85781806117e0575b6117d957816117d1575b506117cc577fb4fa3fb3000000000000000000000000000000000000000000000000000000005f5260045ffd5b600190565b90505f61179f565b5050600390565b508015611795565b5050600290565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561181e57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffdfea26469706673582212206796924c3fa73cff81856f96b0134a35adc90b65de0eff7f3363998084206a5064736f6c634300081a0033" +const UNIVERSAL_GATEWAY_PC_BYTECODE = "6080806040526004361015610012575f80fd5b5f3560e01c9081637f577350146102f757508063affed0e0146102da578063b3ca1fbc146100745763c1ee135a14610048575f80fd5b34610070575f366003190112610070576001546040516001600160a01b039091168152602090f35b5f80fd5b60203660031901126100705760043567ffffffffffffffff8111610070578060040160c0600319833603011261007057600254600181018082116102c6576002556100bf8280610319565b91909360248101926100d08461034c565b60448301359060848401976100e58989610319565b67ffffffffffffffff81969296116102b2576040519061010f601f8201601f191660200183610360565b80825260208201933682890111610070577f8882d1d8f7b1750e49d021ea8d62e07c2d163645b8fa31c035905d6572ffc637996101d060a49787610186965f60208861027f9f996101e49a6101ed9e37830101525190206040519687956020870199338b5260e06040890152610100880191610382565b6001600160a01b039092166060860152608085018b905260a0850152838103601f190160c0850152600f81526e6569703135353a313131353531313160881b602082015260400190565b9060e083015203601f198101835282610360565b5190209661034c565b936102556102126102096102018b80610319565b9c909b610319565b9490930161034c565b986040519a6101608c526102476101608d01604090600f81526e6569703135353a313131353531313160881b60208201520190565b8c810360208e015291610382565b9260408a015261111160608a0152606f60808a015261520860a08a015288830360c08a0152610382565b5f60e087018190526001600160a01b039586166101008801526002610120880152610140870152931693339381900390a4005b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b34610070575f366003190112610070576020600254604051908152f35b34610070575f366003190112610070575f546001600160a01b03168152602090f35b903590601e1981360301821215610070570180359067ffffffffffffffff82116100705760200191813603831361007057565b356001600160a01b03811681036100705790565b90601f8019910116810190811067ffffffffffffffff8211176102b257604052565b908060209392818452848401375f828201840152601f01601f191601019056fea264697066735822122079614179005ddf0c314633ad63c96a5c52a1a1b032f71791f9eddc160bd868ed64736f6c634300081a0033" const UEA_MIGRATION_BYTECODE = "608060405234801561000f575f80fd5b506004361061006f575f3560e01c80639538c4b31161004d5780639538c4b3146100e7578063a5df53a01461010b578063f6829c321461012a575f80fd5b806352fa5c221461007357806367f102111461007d5780638c9ec7f5146100c7575b5f80fd5b61007b610132565b005b60025461009d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b60015461009d9073ffffffffffffffffffffffffffffffffffffffff1681565b6100fb6100f5366004610248565b3b151590565b60405190151581526020016100be565b5f5461009d9073ffffffffffffffffffffffffffffffffffffffff1681565b61007b61018a565b610e077f868a771a75a4aa6c2be13e9a9617cb8ea240ed84a3a90c8469537393ec3e115d81815560405190919081907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03905f90a25050565b5f5473ffffffffffffffffffffffffffffffffffffffff1630036101da576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff167f868a771a75a4aa6c2be13e9a9617cb8ea240ed84a3a90c8469537393ec3e115d81815560405190919081907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03905f90a25050565b5f60208284031215610258575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461027b575f80fd5b939250505056fea2646970667358221220b7392b390eabe1d8398ca6a63c585fe969825199b6bfe2a285e4edf564c16b6a64736f6c634300081a0033" diff --git a/test/utils/helpers.go b/test/utils/helpers.go index 5a485e3c..c06787d8 100644 --- a/test/utils/helpers.go +++ b/test/utils/helpers.go @@ -48,6 +48,7 @@ func ExecVoteOutbound( outbound *uexecutortypes.OutboundTx, success bool, errorMsg string, + gasFeeUsed string, // actual gas fee consumed on destination chain; "" means no refund ) error { t.Helper() @@ -56,6 +57,7 @@ func ExecVoteOutbound( ErrorMsg: errorMsg, TxHash: fmt.Sprintf("0xobserved-%s", outbound.Id), BlockHeight: 1, + GasFeeUsed: gasFeeUsed, } msg := &uexecutortypes.MsgVoteOutbound{ @@ -106,3 +108,35 @@ func ExecVoteGasPrice( _, err := app.AuthzKeeper.Exec(ctx, &execMsg) return err } + +// ExecVoteChainMeta executes a MsgVoteChainMeta on behalf of the core validator +// through the universal validator using authz Exec. +func ExecVoteChainMeta( + t *testing.T, + ctx sdk.Context, + app *app.ChainApp, + universalAddr string, + coreValAddr string, + chainID string, + price uint64, + blockNumber uint64, + observedAt uint64, +) error { + t.Helper() + + msg := &uexecutortypes.MsgVoteChainMeta{ + Signer: coreValAddr, + ObservedChainId: chainID, + Price: price, + ChainHeight: blockNumber, + ObservedAt: observedAt, + } + + execMsg := authz.NewMsgExec( + sdk.MustAccAddressFromBech32(universalAddr), + []sdk.Msg{msg}, + ) + + _, err := app.AuthzKeeper.Exec(ctx, &execMsg) + return err +} diff --git a/x/uexecutor/autocli.go b/x/uexecutor/autocli.go index 5856254f..2eca2060 100755 --- a/x/uexecutor/autocli.go +++ b/x/uexecutor/autocli.go @@ -17,6 +17,32 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { Use: "params", Short: "Query the current gov gated parameters", }, + { + RpcMethod: "GasPrice", + Use: "gas-price [chain-id]", + Short: "Query the median gas price for a specific chain (reads from ChainMeta store)", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "chain_id"}, + }, + }, + { + RpcMethod: "AllGasPrices", + Use: "all-gas-prices", + Short: "Query gas prices for all chains (reads from ChainMeta store)", + }, + { + RpcMethod: "ChainMeta", + Use: "chain-meta [chain-id]", + Short: "Query aggregated chain metadata (gas price + block height) for a specific chain", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "chain_id"}, + }, + }, + { + RpcMethod: "AllChainMetas", + Use: "all-chain-metas", + Short: "Query chain metadata for all chains", + }, }, SubCommands: map[string]*autocliv1.ServiceCommandDescriptor{ "v2": { diff --git a/x/uexecutor/keeper/chain_meta.go b/x/uexecutor/keeper/chain_meta.go new file mode 100644 index 00000000..f64d8c2d --- /dev/null +++ b/x/uexecutor/keeper/chain_meta.go @@ -0,0 +1,134 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdkerrors "cosmossdk.io/errors" + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pushchain/push-chain-node/x/uexecutor/types" +) + +func (k Keeper) GetChainMeta(ctx context.Context, chainID string) (types.ChainMeta, bool, error) { + cm, err := k.ChainMetas.Get(ctx, chainID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return types.ChainMeta{}, false, nil + } + return types.ChainMeta{}, false, err + } + return cm, true, nil +} + +func (k Keeper) SetChainMeta(ctx context.Context, chainID string, chainMeta types.ChainMeta) error { + return k.ChainMetas.Set(ctx, chainID, chainMeta) +} + +// VoteChainMeta processes a universal validator's vote on chain metadata (gas price + chain height + observed timestamp). +// It accumulates votes, computes the median price, and calls setChainMeta on the UniversalCore contract. +func (k Keeper) VoteChainMeta(ctx context.Context, universalValidator sdk.ValAddress, observedChainId string, price, blockNumber, observedAt uint64) error { + sdkCtx := sdk.UnwrapSDKContext(ctx) + + entry, found, err := k.GetChainMeta(ctx, observedChainId) + if err != nil { + return sdkerrors.Wrap(err, "failed to fetch chain meta entry") + } + + if !found { + // First vote for this chain + newEntry := types.ChainMeta{ + ObservedChainId: observedChainId, + Signers: []string{universalValidator.String()}, + Prices: []uint64{price}, + ChainHeights: []uint64{blockNumber}, + ObservedAts: []uint64{observedAt}, + MedianIndex: 0, + } + + if err := k.SetChainMeta(ctx, observedChainId, newEntry); err != nil { + return sdkerrors.Wrap(err, "failed to set initial chain meta entry") + } + + // EVM call with single price + priceBig := math.NewUint(price).BigInt() + chainHeightBig := math.NewUint(blockNumber).BigInt() + observedAtBig := math.NewUint(observedAt).BigInt() + if _, evmErr := k.CallUniversalCoreSetChainMeta(sdkCtx, observedChainId, priceBig, chainHeightBig, observedAtBig); evmErr != nil { + // Non-fatal: log the error. The EVM call may fail if the contract hasn't been upgraded yet + // (old bytecode only has setGasPrice). State is still persisted. + sdkCtx.Logger().Error("VoteChainMeta: EVM setChainMeta call failed", "chain", observedChainId, "error", evmErr) + } + + return nil + } + + // Update or insert vote for this validator + var updated bool + for i, s := range entry.Signers { + if s == universalValidator.String() { + entry.Prices[i] = price + entry.ChainHeights[i] = blockNumber + entry.ObservedAts[i] = observedAt + updated = true + break + } + } + + if !updated { + entry.Signers = append(entry.Signers, universalValidator.String()) + entry.Prices = append(entry.Prices, price) + entry.ChainHeights = append(entry.ChainHeights, blockNumber) + entry.ObservedAts = append(entry.ObservedAts, observedAt) + } + + // Recompute median on price + medianIdx := computeMedianIndex(entry.Prices) + entry.MedianIndex = uint64(medianIdx) + + if err := k.SetChainMeta(ctx, observedChainId, entry); err != nil { + return sdkerrors.Wrap(err, "failed to set updated chain meta entry") + } + + medianPrice := math.NewUint(entry.Prices[medianIdx]).BigInt() + medianChainHeight := math.NewUint(entry.ChainHeights[medianIdx]).BigInt() + medianObservedAt := math.NewUint(entry.ObservedAts[medianIdx]).BigInt() + if _, evmErr := k.CallUniversalCoreSetChainMeta(sdkCtx, observedChainId, medianPrice, medianChainHeight, medianObservedAt); evmErr != nil { + // Non-fatal: log. Same forward-compat reason as above. + sdkCtx.Logger().Error("VoteChainMeta: EVM setChainMeta call failed", "chain", observedChainId, "error", evmErr) + } + + return nil +} + +// MigrateGasPricesToChainMeta seeds ChainMetas from existing GasPrices entries. +// Called once during the chain-meta upgrade. Existing gas price data (prices, block_nums, median_index) +// is carried over; observedAts is set to 0 since the timestamp was not tracked before. +func (k Keeper) MigrateGasPricesToChainMeta(ctx context.Context) error { + return k.GasPrices.Walk(ctx, nil, func(chainID string, gp types.GasPrice) (bool, error) { + // Skip if already migrated + existing, err := k.ChainMetas.Get(ctx, chainID) + if err == nil && existing.ObservedChainId != "" { + return false, nil // already exists, skip + } + + observedAts := make([]uint64, len(gp.Prices)) + // observedAts unknown at migration time — leave as 0 + + cm := types.ChainMeta{ + ObservedChainId: gp.ObservedChainId, + Signers: gp.Signers, + Prices: gp.Prices, + ChainHeights: gp.BlockNums, + ObservedAts: observedAts, + MedianIndex: gp.MedianIndex, + } + + if err := k.ChainMetas.Set(ctx, chainID, cm); err != nil { + return true, err + } + + return false, nil + }) +} diff --git a/x/uexecutor/keeper/create_outbound.go b/x/uexecutor/keeper/create_outbound.go index 04ba8121..5c59967f 100644 --- a/x/uexecutor/keeper/create_outbound.go +++ b/x/uexecutor/keeper/create_outbound.go @@ -70,7 +70,10 @@ func (k Keeper) BuildOutboundsFromReceipt( Prc20AssetAddr: event.Token, Sender: event.Sender, Payload: event.Payload, + GasFee: event.GasFee.String(), GasLimit: event.GasLimit.String(), + GasPrice: event.GasPrice.String(), + GasToken: event.GasToken, TxType: event.TxType, PcTx: &types.OriginatingPcTx{ TxHash: receipt.Hash, @@ -201,7 +204,10 @@ func (k Keeper) attachOutboundsToUtx( AssetAddr: outbound.ExternalAssetAddr, Sender: outbound.Sender, Payload: outbound.Payload, + GasFee: outbound.GasFee, GasLimit: outbound.GasLimit, + GasPrice: outbound.GasPrice, + GasToken: outbound.GasToken, TxType: outbound.TxType.String(), PcTxHash: pcTxHash, LogIndex: logIndex, diff --git a/x/uexecutor/keeper/evm.go b/x/uexecutor/keeper/evm.go index 292de1e7..05ec3fc8 100644 --- a/x/uexecutor/keeper/evm.go +++ b/x/uexecutor/keeper/evm.go @@ -316,11 +316,175 @@ func (k Keeper) CallUniversalCoreSetGasPrice( ) } -// Calls Handler Contract to deposit prc20 tokens +// Calls UniversalCore Contract to set chain metadata (gas price + chain height + observed timestamp) +func (k Keeper) CallUniversalCoreSetChainMeta( + ctx sdk.Context, + chainNamespace string, + price *big.Int, + chainHeight *big.Int, + observedAt *big.Int, +) (*evmtypes.MsgEthereumTxResponse, error) { + handlerAddr := common.HexToAddress(uregistrytypes.SYSTEM_CONTRACTS["UNIVERSAL_CORE"].Address) + + abi, err := types.ParseUniversalCoreABI() + if err != nil { + return nil, errors.Wrap(err, "failed to parse Handler Contract ABI") + } + + ueModuleAccAddress, _ := k.GetUeModuleAddress(ctx) + + nonce, err := k.GetModuleAccountNonce(ctx) + if err != nil { + return nil, err + } + + if _, err := k.IncrementModuleAccountNonce(ctx); err != nil { + return nil, err + } + + return k.evmKeeper.DerivedEVMCall( + ctx, + abi, + ueModuleAccAddress, + handlerAddr, + big.NewInt(0), + nil, + true, + false, + true, + &nonce, + "setChainMeta", + chainNamespace, + price, + chainHeight, + observedAt, + ) +} + +// GetUniversalCoreQuoterAddress reads the uniswapV3Quoter address stored in UniversalCore. +func (k Keeper) GetUniversalCoreQuoterAddress(ctx sdk.Context) (common.Address, error) { + handlerAddr := common.HexToAddress(uregistrytypes.SYSTEM_CONTRACTS["UNIVERSAL_CORE"].Address) + + abi, err := types.ParseUniversalCoreABI() + if err != nil { + return common.Address{}, errors.Wrap(err, "failed to parse UniversalCore ABI") + } + + ueModuleAccAddress, _ := k.GetUeModuleAddress(ctx) + + receipt, err := k.evmKeeper.CallEVM(ctx, abi, ueModuleAccAddress, handlerAddr, false, "uniswapV3Quoter") + if err != nil { + return common.Address{}, errors.Wrap(err, "failed to call uniswapV3Quoter") + } + + results, err := abi.Methods["uniswapV3Quoter"].Outputs.Unpack(receipt.Ret) + if err != nil { + return common.Address{}, errors.Wrap(err, "failed to unpack uniswapV3Quoter result") + } + + return results[0].(common.Address), nil +} + +// GetUniversalCoreWPCAddress reads the WPC (wrapped PC) address stored in UniversalCore. +func (k Keeper) GetUniversalCoreWPCAddress(ctx sdk.Context) (common.Address, error) { + handlerAddr := common.HexToAddress(uregistrytypes.SYSTEM_CONTRACTS["UNIVERSAL_CORE"].Address) + + abi, err := types.ParseUniversalCoreABI() + if err != nil { + return common.Address{}, errors.Wrap(err, "failed to parse UniversalCore ABI") + } + + ueModuleAccAddress, _ := k.GetUeModuleAddress(ctx) + + receipt, err := k.evmKeeper.CallEVM(ctx, abi, ueModuleAccAddress, handlerAddr, false, "WPC") + if err != nil { + return common.Address{}, errors.Wrap(err, "failed to call WPC") + } + + results, err := abi.Methods["WPC"].Outputs.Unpack(receipt.Ret) + if err != nil { + return common.Address{}, errors.Wrap(err, "failed to unpack WPC result") + } + + return results[0].(common.Address), nil +} + +// GetDefaultFeeTierForToken reads defaultFeeTier[prc20] from UniversalCore. +func (k Keeper) GetDefaultFeeTierForToken(ctx sdk.Context, prc20Address common.Address) (*big.Int, error) { + handlerAddr := common.HexToAddress(uregistrytypes.SYSTEM_CONTRACTS["UNIVERSAL_CORE"].Address) + + abi, err := types.ParseUniversalCoreABI() + if err != nil { + return nil, errors.Wrap(err, "failed to parse UniversalCore ABI") + } + + ueModuleAccAddress, _ := k.GetUeModuleAddress(ctx) + + receipt, err := k.evmKeeper.CallEVM(ctx, abi, ueModuleAccAddress, handlerAddr, false, "defaultFeeTier", prc20Address) + if err != nil { + return nil, errors.Wrap(err, "failed to call defaultFeeTier") + } + + results, err := abi.Methods["defaultFeeTier"].Outputs.Unpack(receipt.Ret) + if err != nil { + return nil, errors.Wrap(err, "failed to unpack defaultFeeTier result") + } + + // go-ethereum unpacks uint24 as *big.Int (non-standard widths always map to *big.Int) + fee, ok := results[0].(*big.Int) + if !ok { + return nil, fmt.Errorf("unexpected type for defaultFeeTier: %T", results[0]) + } + + return fee, nil +} + +// GetSwapQuote calls QuoterV2.quoteExactInputSingle (commit=false) to get the expected +// output amount for swapping prc20 → wpc. +func (k Keeper) GetSwapQuote( + ctx sdk.Context, + quoterAddr, prc20Address, wpcAddress common.Address, + fee, amount *big.Int, +) (*big.Int, error) { + quoterABI, err := types.ParseUniswapQuoterV2ABI() + if err != nil { + return nil, errors.Wrap(err, "failed to parse QuoterV2 ABI") + } + + ueModuleAccAddress, _ := k.GetUeModuleAddress(ctx) + + params := types.AbiQuoteExactInputSingleParams{ + TokenIn: prc20Address, + TokenOut: wpcAddress, + AmountIn: amount, + Fee: fee, + SqrtPriceLimitX96: big.NewInt(0), + } + + receipt, err := k.evmKeeper.CallEVM(ctx, quoterABI, ueModuleAccAddress, quoterAddr, false, "quoteExactInputSingle", params) + if err != nil { + return nil, errors.Wrap(err, "QuoterV2 quoteExactInputSingle failed") + } + + results, err := quoterABI.Methods["quoteExactInputSingle"].Outputs.Unpack(receipt.Ret) + if err != nil { + return nil, errors.Wrap(err, "failed to unpack quoteExactInputSingle result") + } + + amountOut, ok := results[0].(*big.Int) + if !ok { + return nil, fmt.Errorf("unexpected type for amountOut: %T", results[0]) + } + + return amountOut, nil +} + +// Calls Handler Contract to deposit prc20 tokens with auto-swap. +// fee and minPCOut must be pre-computed by the caller (see GetDefaultFeeTierForToken / GetSwapQuote). func (k Keeper) CallPRC20DepositAutoSwap( ctx sdk.Context, prc20Address, to common.Address, - amount *big.Int, + amount, fee, minPCOut *big.Int, ) (*evmtypes.MsgEthereumTxResponse, error) { handlerAddr := common.HexToAddress(uregistrytypes.SYSTEM_CONTRACTS["UNIVERSAL_CORE"].Address) @@ -357,8 +521,59 @@ func (k Keeper) CallPRC20DepositAutoSwap( prc20Address, amount, to, + fee, + minPCOut, + big.NewInt(0), // deadline = 0 → contract uses its default + ) +} + +// CallUniversalCoreRefundUnusedGas calls refundUnusedGas on UniversalCore to return excess gas fee +// to the recipient. withSwap=true swaps the gas token back to PC; withSwap=false deposits PRC20 directly. +func (k Keeper) CallUniversalCoreRefundUnusedGas( + ctx sdk.Context, + gasToken common.Address, + amount *big.Int, + recipient common.Address, + withSwap bool, + fee *big.Int, + minPCOut *big.Int, +) (*evmtypes.MsgEthereumTxResponse, error) { + handlerAddr := common.HexToAddress(uregistrytypes.SYSTEM_CONTRACTS["UNIVERSAL_CORE"].Address) + + abi, err := types.ParseUniversalCoreABI() + if err != nil { + return nil, errors.Wrap(err, "failed to parse UniversalCore ABI") + } + + ueModuleAccAddress, _ := k.GetUeModuleAddress(ctx) + + nonce, err := k.GetModuleAccountNonce(ctx) + if err != nil { + return nil, err + } + + if _, err := k.IncrementModuleAccountNonce(ctx); err != nil { + return nil, err + } + + // fee is uint24 in Solidity — pass as *big.Int (go-ethereum ABI packs non-standard widths as *big.Int) + return k.evmKeeper.DerivedEVMCall( + ctx, + abi, + ueModuleAccAddress, + handlerAddr, big.NewInt(0), - big.NewInt(0), - big.NewInt(0), + nil, + true, + false, + true, + &nonce, + "refundUnusedGas", + gasToken, + amount, + recipient, + withSwap, + fee, + minPCOut, ) } diff --git a/x/uexecutor/keeper/execute_inbound_gas.go b/x/uexecutor/keeper/execute_inbound_gas.go index f1388e8e..3d28d083 100644 --- a/x/uexecutor/keeper/execute_inbound_gas.go +++ b/x/uexecutor/keeper/execute_inbound_gas.go @@ -87,12 +87,56 @@ func (k Keeper) ExecuteInboundGas(ctx context.Context, inbound types.Inbound) er } if execErr == nil { - // --- step 4: deposit + swap - receipt, execErr = k.CallPRC20DepositAutoSwap(sdkCtx, prc20AddressHex, ueaAddr, amount) + // --- step 4: fetch swap quote and compute minPCOut with 5% slippage + var ( + quoterAddr common.Address + wpcAddr common.Address + fee *big.Int + quote *big.Int + ) + + quoterAddr, execErr = k.GetUniversalCoreQuoterAddress(sdkCtx) if execErr != nil { shouldRevert = true revertReason = execErr.Error() } + + if execErr == nil { + wpcAddr, execErr = k.GetUniversalCoreWPCAddress(sdkCtx) + if execErr != nil { + shouldRevert = true + revertReason = execErr.Error() + } + } + + if execErr == nil { + fee, execErr = k.GetDefaultFeeTierForToken(sdkCtx, prc20AddressHex) + if execErr != nil { + shouldRevert = true + revertReason = execErr.Error() + } + } + + if execErr == nil { + quote, execErr = k.GetSwapQuote(sdkCtx, quoterAddr, prc20AddressHex, wpcAddr, fee, amount) + if execErr != nil { + shouldRevert = true + revertReason = execErr.Error() + } + } + + if execErr == nil { + // 5% slippage: minPCOut = quote * 95 / 100 + minPCOut := new(big.Int).Mul(quote, big.NewInt(95)) + minPCOut.Div(minPCOut, big.NewInt(100)) + + // --- step 5: deposit + swap + receipt, execErr = k.CallPRC20DepositAutoSwap(sdkCtx, prc20AddressHex, ueaAddr, amount, fee, minPCOut) + if execErr != nil { + shouldRevert = true + revertReason = execErr.Error() + } + } } } } diff --git a/x/uexecutor/keeper/execute_inbound_gas_and_payload.go b/x/uexecutor/keeper/execute_inbound_gas_and_payload.go index b6b52fc1..9a9f4420 100644 --- a/x/uexecutor/keeper/execute_inbound_gas_and_payload.go +++ b/x/uexecutor/keeper/execute_inbound_gas_and_payload.go @@ -84,20 +84,60 @@ func (k Keeper) ExecuteInboundGasAndPayload(ctx context.Context, utx types.Unive } if execErr == nil { - // --- Step 4: deposit + autoswap + // --- Step 4: fetch swap quote and compute minPCOut with 5% slippage prc20AddressHex := common.HexToAddress( tokenConfig.NativeRepresentation.ContractAddress, ) - receipt, execErr = k.CallPRC20DepositAutoSwap( - sdkCtx, - prc20AddressHex, - ueaAddr, - amount, + + var ( + quoterAddr common.Address + wpcAddr common.Address + fee *big.Int + quote *big.Int ) + + quoterAddr, execErr = k.GetUniversalCoreQuoterAddress(sdkCtx) if execErr != nil { shouldRevert = true revertReason = execErr.Error() } + + if execErr == nil { + wpcAddr, execErr = k.GetUniversalCoreWPCAddress(sdkCtx) + if execErr != nil { + shouldRevert = true + revertReason = execErr.Error() + } + } + + if execErr == nil { + fee, execErr = k.GetDefaultFeeTierForToken(sdkCtx, prc20AddressHex) + if execErr != nil { + shouldRevert = true + revertReason = execErr.Error() + } + } + + if execErr == nil { + quote, execErr = k.GetSwapQuote(sdkCtx, quoterAddr, prc20AddressHex, wpcAddr, fee, amount) + if execErr != nil { + shouldRevert = true + revertReason = execErr.Error() + } + } + + if execErr == nil { + // 5% slippage: minPCOut = quote * 95 / 100 + minPCOut := new(big.Int).Mul(quote, big.NewInt(95)) + minPCOut.Div(minPCOut, big.NewInt(100)) + + // --- Step 5: deposit + autoswap + receipt, execErr = k.CallPRC20DepositAutoSwap(sdkCtx, prc20AddressHex, ueaAddr, amount, fee, minPCOut) + if execErr != nil { + shouldRevert = true + revertReason = execErr.Error() + } + } } } } @@ -160,7 +200,7 @@ func (k Keeper) ExecuteInboundGasAndPayload(ctx context.Context, utx types.Unive ueModuleAddr, _ := k.GetUeModuleAddress(ctx) - // --- Step 5: payload hash + // --- Step 6: payload hash payloadHashErr := k.StoreVerifiedPayloadHash(sdkCtx, utx, ueaAddr, ueModuleAddr) if payloadHashErr != nil { errorPcTx := types.PCTx{ @@ -177,7 +217,7 @@ func (k Keeper) ExecuteInboundGasAndPayload(ctx context.Context, utx types.Unive return nil } - // --- Step 6: execute payload + // --- Step 7: execute payload // ueaAddr is already resolved and validated in step 3 receipt, err = k.ExecutePayloadV2( ctx, diff --git a/x/uexecutor/keeper/keeper.go b/x/uexecutor/keeper/keeper.go index c959e948..1fd4d8c3 100755 --- a/x/uexecutor/keeper/keeper.go +++ b/x/uexecutor/keeper/keeper.go @@ -49,6 +49,9 @@ type Keeper struct { // GasPrices collection stores aggregated gas price data for each chain GasPrices collections.Map[string, types.GasPrice] + + // ChainMetas collection stores aggregated chain metadata (gas price + block height) for each chain + ChainMetas collections.Map[string, types.ChainMeta] } // NewKeeper creates a new Keeper instance @@ -118,6 +121,14 @@ func NewKeeper( collections.StringKey, codec.CollValue[types.GasPrice](cdc), ), + + ChainMetas: collections.NewMap( + sb, + types.ChainMetaKey, + types.ChainMetasName, + collections.StringKey, + codec.CollValue[types.ChainMeta](cdc), + ), } return k diff --git a/x/uexecutor/keeper/msg_server.go b/x/uexecutor/keeper/msg_server.go index 5ef96f65..ce2d4f4c 100755 --- a/x/uexecutor/keeper/msg_server.go +++ b/x/uexecutor/keeper/msg_server.go @@ -176,3 +176,35 @@ func (ms msgServer) VoteOutbound(ctx context.Context, msg *types.MsgVoteOutbound return &types.MsgVoteOutboundResponse{}, nil } + +// VoteChainMeta implements types.MsgServer. +func (ms msgServer) VoteChainMeta(ctx context.Context, msg *types.MsgVoteChainMeta) (*types.MsgVoteChainMetaResponse, error) { + signerAccAddr, err := sdk.AccAddressFromBech32(msg.Signer) + if err != nil { + return nil, fmt.Errorf("invalid signer address: %w", err) + } + + signerValAddr := sdk.ValAddress(signerAccAddr) + + isBonded, err := ms.k.uvalidatorKeeper.IsBondedUniversalValidator(ctx, msg.Signer) + if err != nil { + return nil, errors.Wrapf(err, "failed to check bonded status for signer %s", msg.Signer) + } + if !isBonded { + return nil, fmt.Errorf("universal validator for signer %s is not bonded", msg.Signer) + } + + isTombstoned, err := ms.k.uvalidatorKeeper.IsTombstonedUniversalValidator(ctx, msg.Signer) + if err != nil { + return nil, errors.Wrapf(err, "failed to check tombstoned status for signer %s", msg.Signer) + } + if isTombstoned { + return nil, fmt.Errorf("universal validator for signer %s is tombstoned", msg.Signer) + } + + err = ms.k.VoteChainMeta(ctx, signerValAddr, msg.ObservedChainId, msg.Price, msg.ChainHeight, msg.ObservedAt) + if err != nil { + return nil, err + } + return &types.MsgVoteChainMetaResponse{}, nil +} diff --git a/x/uexecutor/keeper/outbound.go b/x/uexecutor/keeper/outbound.go index 11d6042d..9839c21f 100644 --- a/x/uexecutor/keeper/outbound.go +++ b/x/uexecutor/keeper/outbound.go @@ -44,18 +44,27 @@ func (k Keeper) FinalizeOutbound(ctx context.Context, utxId string, outbound typ } obs := outbound.ObservedTx - if obs == nil || obs.Success { + if obs == nil { return nil } + sdkCtx := sdk.UnwrapSDKContext(ctx) + + if !obs.Success { + return k.handleFailedOutbound(sdkCtx, utxId, outbound) + } + + return k.handleSuccessfulOutbound(sdkCtx, utxId, outbound, obs) +} + +// handleFailedOutbound mints back the bridged tokens to the revert recipient. +func (k Keeper) handleFailedOutbound(ctx sdk.Context, utxId string, outbound types.OutboundTx) error { // Only refund for funds-related tx types if outbound.TxType != types.TxType_FUNDS && outbound.TxType != types.TxType_GAS_AND_PAYLOAD && outbound.TxType != types.TxType_FUNDS_AND_PAYLOAD { return nil } - sdkCtx := sdk.UnwrapSDKContext(ctx) - // Decide refund recipient safely recipient := outbound.Sender if outbound.RevertInstructions != nil && @@ -69,16 +78,16 @@ func (k Keeper) FinalizeOutbound(ctx context.Context, utxId string, outbound typ if !ok { return fmt.Errorf("invalid amount: %s", outbound.Amount) } - receipt, err := k.CallPRC20Deposit(sdkCtx, common.HexToAddress(outbound.Prc20AssetAddr), common.HexToAddress(recipient), amount) + receipt, err := k.CallPRC20Deposit(ctx, common.HexToAddress(outbound.Prc20AssetAddr), common.HexToAddress(recipient), amount) // Update outbound status outbound.OutboundStatus = types.Status_REVERTED pcTx := types.PCTx{ - TxHash: "", // no hash if depositPRC20 failed + TxHash: "", Sender: outbound.Sender, GasUsed: 0, - BlockHeight: uint64(sdkCtx.BlockHeight()), + BlockHeight: uint64(ctx.BlockHeight()), } if err != nil { @@ -88,11 +97,110 @@ func (k Keeper) FinalizeOutbound(ctx context.Context, utxId string, outbound typ pcTx.TxHash = receipt.Hash pcTx.GasUsed = receipt.GasUsed pcTx.Status = "SUCCESS" - pcTx.ErrorMsg = "" } outbound.PcRevertExecution = &pcTx - // Store Reverted tx in Outbound return k.UpdateOutbound(ctx, utxId, outbound) } + +// handleSuccessfulOutbound refunds unused gas fee when gasFee > gasFeeUsed. +func (k Keeper) handleSuccessfulOutbound(ctx sdk.Context, utxId string, outbound types.OutboundTx, obs *types.OutboundObservation) error { + // Only attempt refund if gas_fee_used is populated and gas token is known + if obs.GasFeeUsed == "" || outbound.GasFee == "" || outbound.GasToken == "" { + return k.UpdateOutbound(ctx, utxId, outbound) + } + + gasFee := new(big.Int) + if _, ok := gasFee.SetString(outbound.GasFee, 10); !ok { + return k.UpdateOutbound(ctx, utxId, outbound) + } + + gasFeeUsed := new(big.Int) + if _, ok := gasFeeUsed.SetString(obs.GasFeeUsed, 10); !ok { + return k.UpdateOutbound(ctx, utxId, outbound) + } + + // No refund needed + if gasFee.Cmp(gasFeeUsed) <= 0 { + return k.UpdateOutbound(ctx, utxId, outbound) + } + + refundAmount := new(big.Int).Sub(gasFee, gasFeeUsed) + gasToken := common.HexToAddress(outbound.GasToken) + + // Refund recipient: prefer fund_recipient in revert_instructions, fall back to sender + refundRecipient := outbound.Sender + if outbound.RevertInstructions != nil && outbound.RevertInstructions.FundRecipient != "" { + refundRecipient = outbound.RevertInstructions.FundRecipient + } + recipientAddr := common.HexToAddress(refundRecipient) + + refundPcTx := &types.PCTx{ + Sender: outbound.Sender, + BlockHeight: uint64(ctx.BlockHeight()), + } + + // Step 1: try refund with swap (gasToken → PC native) + fee, swapErr := k.GetDefaultFeeTierForToken(ctx, gasToken) + var swapFallbackReason string + var receipt interface{ GetHash() string } + + if swapErr == nil { + quote, quoteErr := k.getSwapQuoteForRefund(ctx, gasToken, fee, refundAmount) + if quoteErr == nil { + minPCOut := new(big.Int).Mul(quote, big.NewInt(95)) + minPCOut.Div(minPCOut, big.NewInt(100)) + + resp, err := k.CallUniversalCoreRefundUnusedGas(ctx, gasToken, refundAmount, recipientAddr, true, fee, minPCOut) + if err == nil { + refundPcTx.TxHash = resp.Hash + refundPcTx.GasUsed = resp.GasUsed + refundPcTx.Status = "SUCCESS" + outbound.PcRefundExecution = refundPcTx + return k.UpdateOutbound(ctx, utxId, outbound) + } + swapFallbackReason = fmt.Sprintf("swap refund failed: %s", err.Error()) + } else { + swapFallbackReason = fmt.Sprintf("quote fetch failed: %s", quoteErr.Error()) + } + } else { + swapFallbackReason = fmt.Sprintf("fee tier fetch failed: %s", swapErr.Error()) + } + + _ = receipt + + // Step 2: fallback — refund without swap (deposit PRC20 directly to recipient) + ctx.Logger().Error("FinalizeOutbound: swap refund failed, falling back to no-swap", + "outbound_id", outbound.Id, + "reason", swapFallbackReason, + ) + + resp, err := k.CallUniversalCoreRefundUnusedGas(ctx, gasToken, refundAmount, recipientAddr, false, big.NewInt(0), big.NewInt(0)) + if err != nil { + refundPcTx.Status = "FAILED" + refundPcTx.ErrorMsg = err.Error() + } else { + refundPcTx.TxHash = resp.Hash + refundPcTx.GasUsed = resp.GasUsed + refundPcTx.Status = "SUCCESS" + } + + outbound.PcRefundExecution = refundPcTx + outbound.RefundSwapError = swapFallbackReason + + return k.UpdateOutbound(ctx, utxId, outbound) +} + +// getSwapQuoteForRefund fetches a Uniswap quote for the gas token refund swap. +func (k Keeper) getSwapQuoteForRefund(ctx sdk.Context, gasToken common.Address, fee *big.Int, amount *big.Int) (*big.Int, error) { + quoterAddr, err := k.GetUniversalCoreQuoterAddress(ctx) + if err != nil { + return nil, err + } + wpcAddr, err := k.GetUniversalCoreWPCAddress(ctx) + if err != nil { + return nil, err + } + return k.GetSwapQuote(ctx, quoterAddr, gasToken, wpcAddr, fee, amount) +} diff --git a/x/uexecutor/keeper/query_server.go b/x/uexecutor/keeper/query_server.go index 1dbf79ed..d9e50aa9 100755 --- a/x/uexecutor/keeper/query_server.go +++ b/x/uexecutor/keeper/query_server.go @@ -179,6 +179,7 @@ func (k Keeper) AllPendingInbounds(goCtx context.Context, req *types.QueryAllPen } // GasPrice implements types.QueryServer. +// Sources data from ChainMetas (the new unified store) to maintain backward compatibility. func (k Querier) GasPrice(goCtx context.Context, req *types.QueryGasPriceRequest) (*types.QueryGasPriceResponse, error) { if req == nil || req.ChainId == "" { return nil, status.Error(codes.InvalidArgument, "chain_id is required") @@ -186,7 +187,18 @@ func (k Querier) GasPrice(goCtx context.Context, req *types.QueryGasPriceRequest ctx := sdk.UnwrapSDKContext(goCtx) - // Try to fetch the gas price from keeper + // Source from ChainMetas first (preferred post-upgrade storage) + cm, err := k.ChainMetas.Get(ctx, req.ChainId) + if err == nil { + return &types.QueryGasPriceResponse{ + GasPrice: chainMetaToGasPrice(&cm), + }, nil + } + if !errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.Internal, err.Error()) + } + + // Fallback to legacy GasPrices store (pre-upgrade nodes) gasPrice, err := k.GasPrices.Get(ctx, req.ChainId) if err != nil { if errors.Is(err, collections.ErrNotFound) { @@ -195,12 +207,12 @@ func (k Querier) GasPrice(goCtx context.Context, req *types.QueryGasPriceRequest return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryGasPriceResponse{ - GasPrice: &gasPrice, - }, nil + return &types.QueryGasPriceResponse{GasPrice: &gasPrice}, nil } // AllGasPrices implements types.QueryServer. +// Sources data from ChainMetas (the new unified store) to maintain backward compatibility. +// Falls back to the legacy GasPrices store for entries not yet migrated. func (k Querier) AllGasPrices(goCtx context.Context, req *types.QueryAllGasPricesRequest) (*types.QueryAllGasPricesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") @@ -210,8 +222,9 @@ func (k Querier) AllGasPrices(goCtx context.Context, req *types.QueryAllGasPrice var all []*types.GasPrice - items, pageRes, err := query.CollectionPaginate(ctx, k.GasPrices, req.Pagination, func(key string, value types.GasPrice) (*types.GasPrice, error) { - return &value, nil + // Primary: read from ChainMetas + items, pageRes, err := query.CollectionPaginate(ctx, k.ChainMetas, req.Pagination, func(_ string, value types.ChainMeta) (*types.GasPrice, error) { + return chainMetaToGasPrice(&value), nil }) if err != nil { return nil, status.Error(codes.Internal, err.Error()) @@ -224,3 +237,57 @@ func (k Querier) AllGasPrices(goCtx context.Context, req *types.QueryAllGasPrice Pagination: pageRes, }, nil } + +// ChainMeta implements types.QueryServer. +// Returns the aggregated chain metadata (gas price + chain height) for a specific chain. +func (k Querier) ChainMeta(goCtx context.Context, req *types.QueryChainMetaRequest) (*types.QueryChainMetaResponse, error) { + if req == nil || req.ChainId == "" { + return nil, status.Error(codes.InvalidArgument, "chain_id is required") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + cm, err := k.ChainMetas.Get(ctx, req.ChainId) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Errorf(codes.NotFound, "no chain meta found for chain_id: %s", req.ChainId) + } + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryChainMetaResponse{ChainMeta: &cm}, nil +} + +// AllChainMetas implements types.QueryServer. +// Returns paginated chain meta entries for all registered chains. +func (k Querier) AllChainMetas(goCtx context.Context, req *types.QueryAllChainMetasRequest) (*types.QueryAllChainMetasResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + items, pageRes, err := query.CollectionPaginate(ctx, k.ChainMetas, req.Pagination, func(_ string, value types.ChainMeta) (*types.ChainMeta, error) { + return &value, nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllChainMetasResponse{ + ChainMetas: items, + Pagination: pageRes, + }, nil +} + +// chainMetaToGasPrice converts a ChainMeta into the legacy GasPrice shape +// so that existing API consumers see no breaking change. +func chainMetaToGasPrice(cm *types.ChainMeta) *types.GasPrice { + return &types.GasPrice{ + ObservedChainId: cm.ObservedChainId, + Signers: cm.Signers, + BlockNums: cm.ChainHeights, + Prices: cm.Prices, + MedianIndex: cm.MedianIndex, + } +} diff --git a/x/uexecutor/migrations/v5/migrate.go b/x/uexecutor/migrations/v5/migrate.go new file mode 100644 index 00000000..cc82b1b6 --- /dev/null +++ b/x/uexecutor/migrations/v5/migrate.go @@ -0,0 +1,13 @@ +package v5 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/pushchain/push-chain-node/x/uexecutor/keeper" +) + +// MigrateGasPricesToChainMeta seeds the ChainMetas collection from the legacy +// GasPrices store. This is idempotent — existing ChainMeta entries are not overwritten. +func MigrateGasPricesToChainMeta(ctx sdk.Context, k *keeper.Keeper) error { + return k.MigrateGasPricesToChainMeta(ctx) +} diff --git a/x/uexecutor/module.go b/x/uexecutor/module.go index 2e7f261d..dbe947e8 100755 --- a/x/uexecutor/module.go +++ b/x/uexecutor/module.go @@ -25,11 +25,12 @@ import ( v2 "github.com/pushchain/push-chain-node/x/uexecutor/migrations/v2" v4 "github.com/pushchain/push-chain-node/x/uexecutor/migrations/v4" + v5 "github.com/pushchain/push-chain-node/x/uexecutor/migrations/v5" ) const ( // ConsensusVersion defines the current x/uexecutor module consensus version. - ConsensusVersion = 4 + ConsensusVersion = 5 ) var ( @@ -180,7 +181,14 @@ func (a AppModule) RegisterServices(cfg module.Configurator) { // Register UExecutor custom migration for v2 (from version 3 -> 4) if err := cfg.RegisterMigration(types.ModuleName, 3, a.migrateToV4()); err != nil { - panic(fmt.Sprintf("failed to migrate %s from version 2 to 3: %v", types.ModuleName, err)) + panic(fmt.Sprintf("failed to migrate %s from version 3 to 4: %v", types.ModuleName, err)) + } + + // Register UExecutor migration from version 4 -> 5 (chain-meta upgrade) + // GasPrices → ChainMetas migration is handled explicitly in the upgrade handler + // before RunMigrations is called, so this is a no-op. + if err := cfg.RegisterMigration(types.ModuleName, 4, a.migrateToV5()); err != nil { + panic(fmt.Sprintf("failed to migrate %s from version 4 to 5: %v", types.ModuleName, err)) } } @@ -208,6 +216,13 @@ func (a AppModule) migrateToV4() module.MigrationHandler { } } +func (a AppModule) migrateToV5() module.MigrationHandler { + return func(ctx sdk.Context) error { + ctx.Logger().Info("🔧 Running uexecutor module migration: v4 → v5 (chain-meta)") + return v5.MigrateGasPricesToChainMeta(ctx, &a.keeper) + } +} + // ConsensusVersion is a sequence number for state-breaking change of the // module. It should be incremented on each consensus-breaking change // introduced by the module. To avoid wrong/empty versions, the initial version diff --git a/x/uexecutor/types/abi.go b/x/uexecutor/types/abi.go index 05a652a6..37587e4a 100644 --- a/x/uexecutor/types/abi.go +++ b/x/uexecutor/types/abi.go @@ -299,9 +299,105 @@ const UNIVERSAL_CORE_ABI = `[ ], "outputs": [], "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setChainMeta", + "inputs": [ + { "name": "chainNamespace", "type": "string", "internalType": "string" }, + { "name": "price", "type": "uint256", "internalType": "uint256" }, + { "name": "chainHeight", "type": "uint256", "internalType": "uint256" }, + { "name": "observedAt", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "gasPriceByChainNamespace", + "inputs": [{ "name": "", "type": "string", "internalType": "string" }], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "chainHeightByChainNamespace", + "inputs": [{ "name": "", "type": "string", "internalType": "string" }], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "timestampObservedAtByChainNamespace", + "inputs": [{ "name": "", "type": "string", "internalType": "string" }], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uniswapV3Quoter", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "WPC", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultFeeTier", + "inputs": [{ "name": "", "type": "address", "internalType": "address" }], + "outputs": [{ "name": "", "type": "uint24", "internalType": "uint24" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "refundUnusedGas", + "inputs": [ + { "name": "gasToken", "type": "address", "internalType": "address" }, + { "name": "amount", "type": "uint256", "internalType": "uint256" }, + { "name": "recipient", "type": "address", "internalType": "address" }, + { "name": "withSwap", "type": "bool", "internalType": "bool" }, + { "name": "fee", "type": "uint24", "internalType": "uint24" }, + { "name": "minPCOut", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "nonpayable" } ]` +const UNISWAP_QUOTER_V2_ABI = `[ + { + "type": "function", + "name": "quoteExactInputSingle", + "inputs": [ + { + "name": "params", + "type": "tuple", + "internalType": "struct IQuoterV2.QuoteExactInputSingleParams", + "components": [ + { "name": "tokenIn", "type": "address", "internalType": "address" }, + { "name": "tokenOut", "type": "address", "internalType": "address" }, + { "name": "amountIn", "type": "uint256", "internalType": "uint256" }, + { "name": "fee", "type": "uint24", "internalType": "uint24" }, + { "name": "sqrtPriceLimitX96", "type": "uint160", "internalType": "uint160" } + ] + } + ], + "outputs": [ + { "name": "amountOut", "type": "uint256", "internalType": "uint256" }, + { "name": "sqrtPriceX96After", "type": "uint160", "internalType": "uint160" }, + { "name": "initializedTicksCrossed", "type": "uint32", "internalType": "uint32" }, + { "name": "gasEstimate", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "nonpayable" + } +]` + const PRC20ABI = `[ { "type": "function", @@ -691,6 +787,10 @@ func ParseFactoryABI() (abi.ABI, error) { return abi.JSON(strings.NewReader(FactoryV1ABI)) } +func ParseUniswapQuoterV2ABI() (abi.ABI, error) { + return abi.JSON(strings.NewReader(UNISWAP_QUOTER_V2_ABI)) +} + func ParseUeaABI() (abi.ABI, error) { return abi.JSON(strings.NewReader(UeaV1ABI)) } @@ -768,3 +868,12 @@ func NewAbiUniversalAccountId(proto *UniversalAccountId) (AbiUniversalAccountId, Owner: owner, }, nil } + +// AbiQuoteExactInputSingleParams matches IQuoterV2.QuoteExactInputSingleParams +type AbiQuoteExactInputSingleParams struct { + TokenIn common.Address + TokenOut common.Address + AmountIn *big.Int + Fee *big.Int // uint24 + SqrtPriceLimitX96 *big.Int // uint160, 0 = no limit +} diff --git a/x/uexecutor/types/chain_meta.go b/x/uexecutor/types/chain_meta.go new file mode 100644 index 00000000..8a80d9c7 --- /dev/null +++ b/x/uexecutor/types/chain_meta.go @@ -0,0 +1,19 @@ +package types + +import ( + "encoding/json" +) + +// Stringer method for ChainMeta. +func (p ChainMeta) String() string { + bz, err := json.Marshal(p) + if err != nil { + panic(err) + } + return string(bz) +} + +// ValidateBasic does the sanity check on the ChainMeta fields. +func (p ChainMeta) ValidateBasic() error { + return nil +} diff --git a/x/uexecutor/types/chain_meta.pb.go b/x/uexecutor/types/chain_meta.pb.go new file mode 100644 index 00000000..af8df41f --- /dev/null +++ b/x/uexecutor/types/chain_meta.pb.go @@ -0,0 +1,803 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: uexecutor/v1/chain_meta.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// ChainMeta stores aggregated chain metadata (gas price + block height) for a given chain +type ChainMeta struct { + ObservedChainId string `protobuf:"bytes,1,opt,name=observed_chain_id,json=observedChainId,proto3" json:"observed_chain_id,omitempty"` + Signers []string `protobuf:"bytes,2,rep,name=signers,proto3" json:"signers,omitempty"` + Prices []uint64 `protobuf:"varint,3,rep,packed,name=prices,proto3" json:"prices,omitempty"` + ChainHeights []uint64 `protobuf:"varint,4,rep,packed,name=chain_heights,json=chainHeights,proto3" json:"chain_heights,omitempty"` + ObservedAts []uint64 `protobuf:"varint,5,rep,packed,name=observed_ats,json=observedAts,proto3" json:"observed_ats,omitempty"` + MedianIndex uint64 `protobuf:"varint,6,opt,name=median_index,json=medianIndex,proto3" json:"median_index,omitempty"` +} + +func (m *ChainMeta) Reset() { *m = ChainMeta{} } +func (*ChainMeta) ProtoMessage() {} +func (*ChainMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_7d3b1b8d71b3d806, []int{0} +} +func (m *ChainMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ChainMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ChainMeta.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 *ChainMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChainMeta.Merge(m, src) +} +func (m *ChainMeta) XXX_Size() int { + return m.Size() +} +func (m *ChainMeta) XXX_DiscardUnknown() { + xxx_messageInfo_ChainMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_ChainMeta proto.InternalMessageInfo + +func (m *ChainMeta) GetObservedChainId() string { + if m != nil { + return m.ObservedChainId + } + return "" +} + +func (m *ChainMeta) GetSigners() []string { + if m != nil { + return m.Signers + } + return nil +} + +func (m *ChainMeta) GetPrices() []uint64 { + if m != nil { + return m.Prices + } + return nil +} + +func (m *ChainMeta) GetChainHeights() []uint64 { + if m != nil { + return m.ChainHeights + } + return nil +} + +func (m *ChainMeta) GetObservedAts() []uint64 { + if m != nil { + return m.ObservedAts + } + return nil +} + +func (m *ChainMeta) GetMedianIndex() uint64 { + if m != nil { + return m.MedianIndex + } + return 0 +} + +func init() { + proto.RegisterType((*ChainMeta)(nil), "uexecutor.v1.ChainMeta") +} + +func init() { proto.RegisterFile("uexecutor/v1/chain_meta.proto", fileDescriptor_7d3b1b8d71b3d806) } + +var fileDescriptor_7d3b1b8d71b3d806 = []byte{ + // 324 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2d, 0x4d, 0xad, 0x48, + 0x4d, 0x2e, 0x2d, 0xc9, 0x2f, 0xd2, 0x2f, 0x33, 0xd4, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0x8b, 0xcf, + 0x4d, 0x2d, 0x49, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x81, 0x4b, 0xeb, 0x95, 0x19, + 0x4a, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, 0x25, 0xf4, 0x41, 0x2c, 0x88, 0x1a, 0x29, 0xc1, 0xc4, + 0xdc, 0xcc, 0xbc, 0x7c, 0x7d, 0x30, 0x09, 0x11, 0x52, 0xfa, 0xce, 0xc8, 0xc5, 0xe9, 0x0c, 0x32, + 0xcb, 0x37, 0xb5, 0x24, 0x51, 0x48, 0x8b, 0x4b, 0x30, 0x3f, 0xa9, 0x38, 0xb5, 0xa8, 0x2c, 0x35, + 0x25, 0x1e, 0x62, 0x43, 0x66, 0x8a, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x3f, 0x4c, 0x02, + 0xac, 0xda, 0x33, 0x45, 0x48, 0x82, 0x8b, 0xbd, 0x38, 0x33, 0x3d, 0x2f, 0xb5, 0xa8, 0x58, 0x82, + 0x49, 0x81, 0x59, 0x83, 0x33, 0x08, 0xc6, 0x15, 0x12, 0xe3, 0x62, 0x2b, 0x28, 0xca, 0x4c, 0x4e, + 0x2d, 0x96, 0x60, 0x56, 0x60, 0xd6, 0x60, 0x09, 0x82, 0xf2, 0x84, 0x94, 0xb9, 0x78, 0x21, 0x86, + 0x66, 0xa4, 0x66, 0xa6, 0x67, 0x94, 0x14, 0x4b, 0xb0, 0x80, 0xa5, 0x79, 0xc0, 0x82, 0x1e, 0x10, + 0x31, 0x21, 0x45, 0x2e, 0x1e, 0xb8, 0x13, 0x12, 0x4b, 0x8a, 0x25, 0x58, 0xc1, 0x6a, 0xb8, 0x61, + 0x62, 0x8e, 0x10, 0x25, 0xb9, 0xa9, 0x29, 0x99, 0x89, 0x79, 0xf1, 0x99, 0x79, 0x29, 0xa9, 0x15, + 0x12, 0x6c, 0x0a, 0x8c, 0x20, 0x25, 0x10, 0x31, 0x4f, 0x90, 0x90, 0x95, 0xe2, 0x8c, 0x05, 0xf2, + 0x0c, 0x2f, 0x16, 0xc8, 0x33, 0x76, 0x3d, 0xdf, 0xa0, 0x25, 0x82, 0x08, 0x39, 0x44, 0xb0, 0x39, + 0x05, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, + 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x59, 0x7a, 0x66, 0x49, + 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x41, 0x69, 0x71, 0x06, 0x58, 0x13, 0x98, 0xa5, + 0x0b, 0x66, 0xea, 0xe6, 0xe5, 0xa7, 0xa4, 0xea, 0x57, 0xe8, 0x23, 0x8c, 0x2d, 0xa9, 0x2c, 0x48, + 0x2d, 0x4e, 0x62, 0x03, 0x07, 0xa9, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x91, 0x64, 0xde, 0x80, + 0xaa, 0x01, 0x00, 0x00, +} + +func (this *ChainMeta) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*ChainMeta) + if !ok { + that2, ok := that.(ChainMeta) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ObservedChainId != that1.ObservedChainId { + return false + } + if len(this.Signers) != len(that1.Signers) { + return false + } + for i := range this.Signers { + if this.Signers[i] != that1.Signers[i] { + return false + } + } + if len(this.Prices) != len(that1.Prices) { + return false + } + for i := range this.Prices { + if this.Prices[i] != that1.Prices[i] { + return false + } + } + if len(this.ChainHeights) != len(that1.ChainHeights) { + return false + } + for i := range this.ChainHeights { + if this.ChainHeights[i] != that1.ChainHeights[i] { + return false + } + } + if len(this.ObservedAts) != len(that1.ObservedAts) { + return false + } + for i := range this.ObservedAts { + if this.ObservedAts[i] != that1.ObservedAts[i] { + return false + } + } + if this.MedianIndex != that1.MedianIndex { + return false + } + return true +} +func (m *ChainMeta) 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 *ChainMeta) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ChainMeta) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MedianIndex != 0 { + i = encodeVarintChainMeta(dAtA, i, uint64(m.MedianIndex)) + i-- + dAtA[i] = 0x30 + } + if len(m.ObservedAts) > 0 { + dAtA2 := make([]byte, len(m.ObservedAts)*10) + var j1 int + for _, num := range m.ObservedAts { + for num >= 1<<7 { + dAtA2[j1] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j1++ + } + dAtA2[j1] = uint8(num) + j1++ + } + i -= j1 + copy(dAtA[i:], dAtA2[:j1]) + i = encodeVarintChainMeta(dAtA, i, uint64(j1)) + i-- + dAtA[i] = 0x2a + } + if len(m.ChainHeights) > 0 { + dAtA4 := make([]byte, len(m.ChainHeights)*10) + var j3 int + for _, num := range m.ChainHeights { + for num >= 1<<7 { + dAtA4[j3] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j3++ + } + dAtA4[j3] = uint8(num) + j3++ + } + i -= j3 + copy(dAtA[i:], dAtA4[:j3]) + i = encodeVarintChainMeta(dAtA, i, uint64(j3)) + i-- + dAtA[i] = 0x22 + } + if len(m.Prices) > 0 { + dAtA6 := make([]byte, len(m.Prices)*10) + var j5 int + for _, num := range m.Prices { + for num >= 1<<7 { + dAtA6[j5] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j5++ + } + dAtA6[j5] = uint8(num) + j5++ + } + i -= j5 + copy(dAtA[i:], dAtA6[:j5]) + i = encodeVarintChainMeta(dAtA, i, uint64(j5)) + i-- + dAtA[i] = 0x1a + } + if len(m.Signers) > 0 { + for iNdEx := len(m.Signers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Signers[iNdEx]) + copy(dAtA[i:], m.Signers[iNdEx]) + i = encodeVarintChainMeta(dAtA, i, uint64(len(m.Signers[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.ObservedChainId) > 0 { + i -= len(m.ObservedChainId) + copy(dAtA[i:], m.ObservedChainId) + i = encodeVarintChainMeta(dAtA, i, uint64(len(m.ObservedChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintChainMeta(dAtA []byte, offset int, v uint64) int { + offset -= sovChainMeta(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ChainMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ObservedChainId) + if l > 0 { + n += 1 + l + sovChainMeta(uint64(l)) + } + if len(m.Signers) > 0 { + for _, s := range m.Signers { + l = len(s) + n += 1 + l + sovChainMeta(uint64(l)) + } + } + if len(m.Prices) > 0 { + l = 0 + for _, e := range m.Prices { + l += sovChainMeta(uint64(e)) + } + n += 1 + sovChainMeta(uint64(l)) + l + } + if len(m.ChainHeights) > 0 { + l = 0 + for _, e := range m.ChainHeights { + l += sovChainMeta(uint64(e)) + } + n += 1 + sovChainMeta(uint64(l)) + l + } + if len(m.ObservedAts) > 0 { + l = 0 + for _, e := range m.ObservedAts { + l += sovChainMeta(uint64(e)) + } + n += 1 + sovChainMeta(uint64(l)) + l + } + if m.MedianIndex != 0 { + n += 1 + sovChainMeta(uint64(m.MedianIndex)) + } + return n +} + +func sovChainMeta(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozChainMeta(x uint64) (n int) { + return sovChainMeta(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ChainMeta) 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 ErrIntOverflowChainMeta + } + 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: ChainMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ChainMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + 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 ErrInvalidLengthChainMeta + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthChainMeta + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObservedChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + 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 ErrInvalidLengthChainMeta + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthChainMeta + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signers = append(m.Signers, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Prices = append(m.Prices, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthChainMeta + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthChainMeta + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Prices) == 0 { + m.Prices = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Prices = append(m.Prices, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field Prices", wireType) + } + case 4: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ChainHeights = append(m.ChainHeights, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthChainMeta + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthChainMeta + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.ChainHeights) == 0 { + m.ChainHeights = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ChainHeights = append(m.ChainHeights, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field ChainHeights", wireType) + } + case 5: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ObservedAts = append(m.ObservedAts, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthChainMeta + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthChainMeta + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.ObservedAts) == 0 { + m.ObservedAts = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ObservedAts = append(m.ObservedAts, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedAts", wireType) + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MedianIndex", wireType) + } + m.MedianIndex = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChainMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MedianIndex |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipChainMeta(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthChainMeta + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipChainMeta(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, ErrIntOverflowChainMeta + } + 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, ErrIntOverflowChainMeta + } + 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, ErrIntOverflowChainMeta + } + 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, ErrInvalidLengthChainMeta + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupChainMeta + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthChainMeta + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthChainMeta = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowChainMeta = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupChainMeta = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/uexecutor/types/constants.go b/x/uexecutor/types/constants.go index 35d94535..53285709 100644 --- a/x/uexecutor/types/constants.go +++ b/x/uexecutor/types/constants.go @@ -43,5 +43,5 @@ const ( ) var UniversalTxOutboundEventSig = crypto.Keccak256Hash([]byte( - "UniversalTxOutbound(bytes32,address,string,address,bytes,uint256,address,uint256,uint256,bytes,uint256,address,uint8)", + "UniversalTxOutbound(bytes32,address,string,address,bytes,uint256,address,uint256,uint256,bytes,uint256,address,uint8,uint256)", )).Hex() diff --git a/x/uexecutor/types/events.go b/x/uexecutor/types/events.go index 8ad2f911..59e62187 100644 --- a/x/uexecutor/types/events.go +++ b/x/uexecutor/types/events.go @@ -21,7 +21,10 @@ type OutboundCreatedEvent struct { AssetAddr string `json:"asset_addr"` Sender string `json:"sender"` Payload string `json:"payload"` + GasFee string `json:"gas_fee"` GasLimit string `json:"gas_limit"` + GasPrice string `json:"gas_price"` + GasToken string `json:"gas_token"` TxType string `json:"tx_type"` PcTxHash string `json:"pc_tx_hash"` LogIndex string `json:"log_index"` @@ -49,7 +52,10 @@ func NewOutboundCreatedEvent(e OutboundCreatedEvent) (sdk.Event, error) { sdk.NewAttribute("asset_addr", e.AssetAddr), sdk.NewAttribute("sender", e.Sender), sdk.NewAttribute("payload", e.Payload), + sdk.NewAttribute("gas_fee", e.GasFee), sdk.NewAttribute("gas_limit", e.GasLimit), + sdk.NewAttribute("gas_price", e.GasPrice), + sdk.NewAttribute("gas_token", e.GasToken), sdk.NewAttribute("tx_type", e.TxType), sdk.NewAttribute("pc_tx_hash", e.PcTxHash), sdk.NewAttribute("log_index", e.LogIndex), diff --git a/x/uexecutor/types/gateway_pc_event_decode.go b/x/uexecutor/types/gateway_pc_event_decode.go index 8a2da39b..9cfc1a36 100644 --- a/x/uexecutor/types/gateway_pc_event_decode.go +++ b/x/uexecutor/types/gateway_pc_event_decode.go @@ -24,6 +24,7 @@ type UniversalTxOutboundEvent struct { ProtocolFee *big.Int // fee kept by protocol RevertRecipient string // where funds go on full revert TxType TxType // ← single source of truth from proto + GasPrice *big.Int // gas price on destination chain at time of outbound } func DecodeUniversalTxOutboundFromLog(log *evmtypes.Log) (*UniversalTxOutboundEvent, error) { @@ -58,6 +59,7 @@ func DecodeUniversalTxOutboundFromLog(log *evmtypes.Log) (*UniversalTxOutboundEv {Type: uint256Type}, // protocolFee {Type: addressType}, // revertRecipient {Type: uint8Type}, // txType + {Type: uint256Type}, // gasPrice } values, err := arguments.Unpack(log.Data) @@ -65,7 +67,7 @@ func DecodeUniversalTxOutboundFromLog(log *evmtypes.Log) (*UniversalTxOutboundEv return nil, fmt.Errorf("failed to unpack UniversalTxOutbound: %w", err) } - if len(values) != 10 { + if len(values) != 11 { return nil, fmt.Errorf("unexpected number of unpacked values: %d", len(values)) } @@ -89,6 +91,8 @@ func DecodeUniversalTxOutboundFromLog(log *evmtypes.Log) (*UniversalTxOutboundEv event.RevertRecipient = values[i].(common.Address).Hex() i++ event.TxType = SolidityTxTypeToProto(values[i].(uint8)) + i++ + event.GasPrice = values[i].(*big.Int) return event, nil } diff --git a/x/uexecutor/types/keys.go b/x/uexecutor/types/keys.go index d2c7c880..cc8ced32 100755 --- a/x/uexecutor/types/keys.go +++ b/x/uexecutor/types/keys.go @@ -30,6 +30,9 @@ var ( GasPricesKey = collections.NewPrefix(5) GasPricesName = "gas_prices" + + ChainMetaKey = collections.NewPrefix(6) + ChainMetasName = "chain_metas" ) const ( diff --git a/x/uexecutor/types/msg_vote_chain_meta.go b/x/uexecutor/types/msg_vote_chain_meta.go new file mode 100644 index 00000000..775fea99 --- /dev/null +++ b/x/uexecutor/types/msg_vote_chain_meta.go @@ -0,0 +1,60 @@ +package types + +import ( + "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var ( + _ sdk.Msg = &MsgVoteChainMeta{} +) + +// NewMsgVoteChainMeta creates new instance of MsgVoteChainMeta +func NewMsgVoteChainMeta( + sender sdk.Address, + observedChainId string, + price, chainHeight, observedAt uint64, +) *MsgVoteChainMeta { + return &MsgVoteChainMeta{ + Signer: sender.String(), + ObservedChainId: observedChainId, + Price: price, + ChainHeight: chainHeight, + ObservedAt: observedAt, + } +} + +// Route returns the name of the module +func (msg MsgVoteChainMeta) Route() string { return ModuleName } + +// Type returns the action +func (msg MsgVoteChainMeta) Type() string { return "msg_vote_chain_meta" } + +// GetSignBytes implements the LegacyMsg interface. +func (msg MsgVoteChainMeta) GetSignBytes() []byte { + return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg)) +} + +// GetSigners returns the expected signers for a MsgVoteChainMeta message. +func (msg *MsgVoteChainMeta) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Signer) + return []sdk.AccAddress{addr} +} + +// ValidateBasic does a sanity check on the provided data. +func (msg *MsgVoteChainMeta) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Signer); err != nil { + return errors.Wrap(err, "invalid signer address") + } + if msg.ObservedChainId == "" { + return errors.Wrap(sdkerrors.ErrInvalidRequest, "observed_chain_id cannot be empty") + } + if msg.Price == 0 { + return errors.Wrap(sdkerrors.ErrInvalidRequest, "price must be greater than 0") + } + if msg.ChainHeight == 0 { + return errors.Wrap(sdkerrors.ErrInvalidRequest, "chain_height must be greater than 0") + } + return nil +} diff --git a/x/uexecutor/types/query.pb.go b/x/uexecutor/types/query.pb.go index 9d058555..d47a8f5c 100644 --- a/x/uexecutor/types/query.pb.go +++ b/x/uexecutor/types/query.pb.go @@ -215,6 +215,192 @@ func (m *QueryAllGasPricesResponse) GetPagination() *query.PageResponse { return nil } +// Single chain meta +type QueryChainMetaRequest struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` +} + +func (m *QueryChainMetaRequest) Reset() { *m = QueryChainMetaRequest{} } +func (m *QueryChainMetaRequest) String() string { return proto.CompactTextString(m) } +func (*QueryChainMetaRequest) ProtoMessage() {} +func (*QueryChainMetaRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_94816af5d57d33a7, []int{4} +} +func (m *QueryChainMetaRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryChainMetaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryChainMetaRequest.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 *QueryChainMetaRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryChainMetaRequest.Merge(m, src) +} +func (m *QueryChainMetaRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryChainMetaRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryChainMetaRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryChainMetaRequest proto.InternalMessageInfo + +func (m *QueryChainMetaRequest) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type QueryChainMetaResponse struct { + ChainMeta *ChainMeta `protobuf:"bytes,1,opt,name=chain_meta,json=chainMeta,proto3" json:"chain_meta,omitempty"` +} + +func (m *QueryChainMetaResponse) Reset() { *m = QueryChainMetaResponse{} } +func (m *QueryChainMetaResponse) String() string { return proto.CompactTextString(m) } +func (*QueryChainMetaResponse) ProtoMessage() {} +func (*QueryChainMetaResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_94816af5d57d33a7, []int{5} +} +func (m *QueryChainMetaResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryChainMetaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryChainMetaResponse.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 *QueryChainMetaResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryChainMetaResponse.Merge(m, src) +} +func (m *QueryChainMetaResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryChainMetaResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryChainMetaResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryChainMetaResponse proto.InternalMessageInfo + +func (m *QueryChainMetaResponse) GetChainMeta() *ChainMeta { + if m != nil { + return m.ChainMeta + } + return nil +} + +// All chain metas +type QueryAllChainMetasRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllChainMetasRequest) Reset() { *m = QueryAllChainMetasRequest{} } +func (m *QueryAllChainMetasRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllChainMetasRequest) ProtoMessage() {} +func (*QueryAllChainMetasRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_94816af5d57d33a7, []int{6} +} +func (m *QueryAllChainMetasRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllChainMetasRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllChainMetasRequest.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 *QueryAllChainMetasRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllChainMetasRequest.Merge(m, src) +} +func (m *QueryAllChainMetasRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllChainMetasRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllChainMetasRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllChainMetasRequest proto.InternalMessageInfo + +func (m *QueryAllChainMetasRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllChainMetasResponse struct { + ChainMetas []*ChainMeta `protobuf:"bytes,1,rep,name=chain_metas,json=chainMetas,proto3" json:"chain_metas,omitempty"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllChainMetasResponse) Reset() { *m = QueryAllChainMetasResponse{} } +func (m *QueryAllChainMetasResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllChainMetasResponse) ProtoMessage() {} +func (*QueryAllChainMetasResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_94816af5d57d33a7, []int{7} +} +func (m *QueryAllChainMetasResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllChainMetasResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllChainMetasResponse.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 *QueryAllChainMetasResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllChainMetasResponse.Merge(m, src) +} +func (m *QueryAllChainMetasResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllChainMetasResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllChainMetasResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllChainMetasResponse proto.InternalMessageInfo + +func (m *QueryAllChainMetasResponse) GetChainMetas() []*ChainMeta { + if m != nil { + return m.ChainMetas + } + return nil +} + +func (m *QueryAllChainMetasResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + // Existing types type QueryParamsRequest struct { } @@ -223,7 +409,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{4} + return fileDescriptor_94816af5d57d33a7, []int{8} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -262,7 +448,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{5} + return fileDescriptor_94816af5d57d33a7, []int{9} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -307,7 +493,7 @@ func (m *QueryAllPendingInboundsRequest) Reset() { *m = QueryAllPendingI func (m *QueryAllPendingInboundsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllPendingInboundsRequest) ProtoMessage() {} func (*QueryAllPendingInboundsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{6} + return fileDescriptor_94816af5d57d33a7, []int{10} } func (m *QueryAllPendingInboundsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -352,7 +538,7 @@ func (m *QueryAllPendingInboundsResponse) Reset() { *m = QueryAllPending func (m *QueryAllPendingInboundsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllPendingInboundsResponse) ProtoMessage() {} func (*QueryAllPendingInboundsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_94816af5d57d33a7, []int{7} + return fileDescriptor_94816af5d57d33a7, []int{11} } func (m *QueryAllPendingInboundsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -404,7 +590,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{8} + return fileDescriptor_94816af5d57d33a7, []int{12} } func (m *QueryGetUniversalTxRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -448,7 +634,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{9} + return fileDescriptor_94816af5d57d33a7, []int{13} } func (m *QueryGetUniversalTxResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -492,7 +678,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{10} + return fileDescriptor_94816af5d57d33a7, []int{14} } func (m *QueryAllUniversalTxRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -537,7 +723,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{11} + return fileDescriptor_94816af5d57d33a7, []int{15} } func (m *QueryAllUniversalTxResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -585,6 +771,10 @@ func init() { proto.RegisterType((*QueryGasPriceResponse)(nil), "uexecutor.v1.QueryGasPriceResponse") proto.RegisterType((*QueryAllGasPricesRequest)(nil), "uexecutor.v1.QueryAllGasPricesRequest") proto.RegisterType((*QueryAllGasPricesResponse)(nil), "uexecutor.v1.QueryAllGasPricesResponse") + proto.RegisterType((*QueryChainMetaRequest)(nil), "uexecutor.v1.QueryChainMetaRequest") + proto.RegisterType((*QueryChainMetaResponse)(nil), "uexecutor.v1.QueryChainMetaResponse") + proto.RegisterType((*QueryAllChainMetasRequest)(nil), "uexecutor.v1.QueryAllChainMetasRequest") + proto.RegisterType((*QueryAllChainMetasResponse)(nil), "uexecutor.v1.QueryAllChainMetasResponse") proto.RegisterType((*QueryParamsRequest)(nil), "uexecutor.v1.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "uexecutor.v1.QueryParamsResponse") proto.RegisterType((*QueryAllPendingInboundsRequest)(nil), "uexecutor.v1.QueryAllPendingInboundsRequest") @@ -598,53 +788,61 @@ func init() { func init() { proto.RegisterFile("uexecutor/v1/query.proto", fileDescriptor_94816af5d57d33a7) } var fileDescriptor_94816af5d57d33a7 = []byte{ - // 735 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x41, 0x4f, 0x13, 0x4d, - 0x18, 0xc7, 0xd9, 0xbe, 0x79, 0xfb, 0xd2, 0x87, 0xbe, 0x1c, 0xc6, 0x4a, 0xca, 0x82, 0x4b, 0x5d, - 0x0c, 0x20, 0x81, 0xdd, 0x14, 0xa2, 0x47, 0x13, 0x30, 0x91, 0x90, 0x70, 0xa8, 0x8d, 0x5e, 0xbc, - 0x34, 0xd3, 0xee, 0x64, 0x3b, 0xb1, 0xec, 0x2e, 0x9d, 0xdd, 0xa6, 0x84, 0x10, 0xa3, 0x47, 0x3d, - 0x68, 0xe2, 0xc9, 0x78, 0xf7, 0x13, 0xf8, 0x21, 0x3c, 0x92, 0x78, 0xf1, 0x68, 0xc0, 0x0f, 0x62, - 0x98, 0x9d, 0x29, 0x3b, 0x65, 0x5a, 0x38, 0xf4, 0xb6, 0x7d, 0xe6, 0x3f, 0xcf, 0xf3, 0xfb, 0x3f, - 0x7d, 0x66, 0x67, 0xa1, 0x9c, 0x90, 0x3e, 0x69, 0x25, 0x71, 0xd8, 0x75, 0x7b, 0x55, 0xf7, 0x28, - 0x21, 0xdd, 0x63, 0x27, 0xea, 0x86, 0x71, 0x88, 0x8a, 0x83, 0x15, 0xa7, 0x57, 0x35, 0x17, 0xfd, - 0x30, 0xf4, 0x3b, 0xc4, 0xc5, 0x11, 0x75, 0x71, 0x10, 0x84, 0x31, 0x8e, 0x69, 0x18, 0xb0, 0x54, - 0x6b, 0xaa, 0x59, 0xe2, 0xe3, 0x88, 0xc8, 0x95, 0x45, 0x65, 0xc5, 0xc7, 0xac, 0x11, 0x75, 0x69, - 0x8b, 0x88, 0xd5, 0xf5, 0x56, 0xc8, 0x0e, 0x43, 0xe6, 0x36, 0x31, 0x23, 0x69, 0x71, 0xb7, 0x57, - 0x6d, 0x92, 0x18, 0x57, 0xdd, 0x08, 0xfb, 0x34, 0xe0, 0x45, 0x52, 0xad, 0x5d, 0x85, 0xd2, 0xf3, - 0x4b, 0xc5, 0x1e, 0x66, 0xb5, 0xcb, 0x14, 0x75, 0x72, 0x94, 0x10, 0x16, 0xa3, 0x79, 0x98, 0x6e, - 0xb5, 0x31, 0x0d, 0x1a, 0xd4, 0x2b, 0x1b, 0x15, 0x63, 0xad, 0x50, 0xff, 0x8f, 0xff, 0xde, 0xf7, - 0xec, 0x03, 0xb8, 0x3b, 0xb4, 0x85, 0x45, 0x61, 0xc0, 0x08, 0xda, 0x86, 0xc2, 0x00, 0x85, 0x6f, - 0x9a, 0xd9, 0x9a, 0x73, 0xb2, 0x7e, 0x9d, 0xc1, 0x96, 0x69, 0x5f, 0x3c, 0xd9, 0x4d, 0x28, 0xf3, - 0x6c, 0x3b, 0x9d, 0x8e, 0x5c, 0x65, 0x12, 0xe2, 0x19, 0xc0, 0x15, 0xb0, 0xc8, 0xb8, 0xe2, 0xa4, - 0xee, 0x9c, 0x4b, 0x77, 0x4e, 0xda, 0x5a, 0xe1, 0xce, 0xa9, 0x61, 0x5f, 0x1a, 0xa8, 0x67, 0x76, - 0xda, 0x5f, 0x0d, 0x98, 0xd7, 0x14, 0x11, 0xd8, 0x8f, 0x00, 0x06, 0xd8, 0xac, 0x6c, 0x54, 0xfe, - 0x19, 0xc3, 0x5d, 0x90, 0xdc, 0x0c, 0xed, 0x29, 0x70, 0x39, 0x0e, 0xb7, 0x7a, 0x23, 0x5c, 0x5a, - 0x53, 0xa1, 0x2b, 0x01, 0xe2, 0x70, 0x35, 0xdc, 0xc5, 0x87, 0xd2, 0xbb, 0xfd, 0x14, 0xee, 0x28, - 0x51, 0x01, 0xbb, 0x01, 0xf9, 0x88, 0x47, 0x44, 0x3b, 0x4a, 0x2a, 0xa8, 0x50, 0x0b, 0x8d, 0xdd, - 0x06, 0x4b, 0xfa, 0xae, 0x91, 0xc0, 0xa3, 0x81, 0xbf, 0x1f, 0x34, 0xc3, 0x24, 0xf0, 0x26, 0xde, - 0xe2, 0x0f, 0x06, 0x2c, 0x8d, 0x2c, 0x25, 0xd8, 0x97, 0x60, 0x86, 0xa6, 0xb1, 0x06, 0xf5, 0xd2, - 0x4e, 0x17, 0xea, 0x20, 0x42, 0xfb, 0xde, 0x04, 0x5b, 0xba, 0x01, 0x66, 0x3a, 0xa2, 0x24, 0x7e, - 0x19, 0xd0, 0x1e, 0xe9, 0x32, 0xdc, 0x79, 0xd1, 0x97, 0x9e, 0x67, 0x21, 0x37, 0x98, 0xea, 0x1c, - 0xf5, 0x6c, 0x0c, 0x0b, 0x5a, 0xb5, 0xc0, 0xde, 0x85, 0x62, 0x22, 0xc3, 0x8d, 0xb8, 0x2f, 0x9a, - 0xb4, 0xa4, 0x36, 0x3e, 0xb3, 0xf1, 0x80, 0xf8, 0xb8, 0x75, 0x5c, 0x9f, 0x49, 0xae, 0x42, 0xb6, - 0x27, 0x80, 0x76, 0x3a, 0x1d, 0x0d, 0xd0, 0xa4, 0xfe, 0x84, 0x6f, 0x86, 0x70, 0x32, 0x5c, 0x46, - 0x38, 0x79, 0x02, 0xff, 0x67, 0x9d, 0xc8, 0x61, 0x9f, 0x1f, 0x69, 0xa5, 0x5e, 0xcc, 0x98, 0x98, - 0xdc, 0xff, 0xb3, 0xf5, 0x3d, 0x0f, 0xff, 0x72, 0x50, 0xf4, 0x1a, 0xf2, 0xe9, 0xcc, 0xa2, 0x8a, - 0x4a, 0x71, 0xfd, 0x48, 0x98, 0xf7, 0xc7, 0x28, 0xd2, 0x22, 0xf6, 0xe2, 0xbb, 0x9f, 0x7f, 0x3e, - 0xe7, 0xe6, 0x50, 0xc9, 0x55, 0xde, 0x90, 0xe9, 0x71, 0x40, 0x5f, 0x0c, 0x40, 0xd7, 0xe7, 0x13, - 0x6d, 0x68, 0xf2, 0x8e, 0x3c, 0x31, 0xe6, 0xe6, 0x2d, 0xd5, 0x82, 0x68, 0x85, 0x13, 0x55, 0x90, - 0x35, 0x44, 0x94, 0xca, 0x1b, 0x54, 0x42, 0x7c, 0x34, 0x60, 0x56, 0x1d, 0x40, 0xb4, 0xa6, 0xa9, - 0xa4, 0x9d, 0x68, 0xf3, 0xe1, 0x2d, 0x94, 0x82, 0x67, 0x8d, 0xf3, 0xd8, 0xa8, 0xa2, 0xf2, 0x28, - 0x73, 0xe1, 0x9e, 0x50, 0xef, 0x14, 0xbd, 0x37, 0x60, 0x56, 0x1d, 0x24, 0x2d, 0x91, 0x76, 0xa4, - 0xb5, 0x44, 0xfa, 0xa9, 0xb4, 0x97, 0x39, 0xd1, 0x3d, 0xb4, 0x30, 0x86, 0x08, 0xbd, 0x81, 0x69, - 0xf9, 0x12, 0x46, 0xb6, 0xce, 0xad, 0x7a, 0x7f, 0x99, 0xcb, 0x63, 0x35, 0xa2, 0xf2, 0x3a, 0xaf, - 0xfc, 0x00, 0xd9, 0xae, 0xfe, 0x3e, 0x75, 0x4f, 0xe4, 0x1d, 0x78, 0x8a, 0xde, 0x1a, 0x50, 0xcc, - 0x5e, 0x1f, 0x68, 0x45, 0xef, 0x70, 0xf8, 0x12, 0x33, 0x57, 0x6f, 0xd4, 0x09, 0x9a, 0x0a, 0xa7, - 0x31, 0x51, 0x79, 0x04, 0x0d, 0xdb, 0xad, 0xfd, 0x38, 0xb7, 0x8c, 0xb3, 0x73, 0xcb, 0xf8, 0x7d, - 0x6e, 0x19, 0x9f, 0x2e, 0xac, 0xa9, 0xb3, 0x0b, 0x6b, 0xea, 0xd7, 0x85, 0x35, 0xf5, 0xea, 0xb1, - 0x4f, 0xe3, 0x76, 0xd2, 0x74, 0x5a, 0xe1, 0xa1, 0x1b, 0x25, 0xac, 0xcd, 0xb9, 0xf9, 0xd3, 0x26, - 0x7f, 0xdc, 0x0c, 0x42, 0x8f, 0xb8, 0xfd, 0x4c, 0x66, 0xfe, 0x39, 0xd1, 0xcc, 0xf3, 0xaf, 0x80, - 0xed, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x67, 0x0b, 0x8a, 0x2c, 0xb1, 0x08, 0x00, 0x00, + // 862 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x41, 0x6f, 0xeb, 0x44, + 0x10, 0xc7, 0xbb, 0x41, 0x94, 0x64, 0x92, 0xd7, 0xc3, 0x12, 0x4a, 0xe2, 0xf6, 0xb9, 0x79, 0x6e, + 0x69, 0x43, 0x69, 0x6d, 0xa5, 0x15, 0x15, 0x27, 0x24, 0x5a, 0x89, 0xaa, 0x52, 0x91, 0x42, 0x04, + 0x17, 0x2e, 0xd1, 0xc6, 0x5e, 0x39, 0x16, 0x89, 0xed, 0x66, 0xed, 0x28, 0x55, 0x55, 0x21, 0x40, + 0x5c, 0xe0, 0x00, 0x12, 0x27, 0xc4, 0x81, 0x1b, 0x1f, 0x84, 0x13, 0xc7, 0x4a, 0x5c, 0x38, 0xa2, + 0x96, 0x0f, 0xf2, 0x94, 0xf5, 0xda, 0xf1, 0xa6, 0x76, 0xda, 0x43, 0x6e, 0xeb, 0x9d, 0x99, 0x9d, + 0xdf, 0x7f, 0x76, 0xac, 0x59, 0xa8, 0x85, 0x74, 0x42, 0xcd, 0x30, 0xf0, 0x46, 0xc6, 0xb8, 0x65, + 0x5c, 0x85, 0x74, 0x74, 0xad, 0xfb, 0x23, 0x2f, 0xf0, 0x70, 0x25, 0xb1, 0xe8, 0xe3, 0x96, 0xb2, + 0x69, 0x7b, 0x9e, 0x3d, 0xa0, 0x06, 0xf1, 0x1d, 0x83, 0xb8, 0xae, 0x17, 0x90, 0xc0, 0xf1, 0x5c, + 0x16, 0xf9, 0x2a, 0xf2, 0x29, 0xc1, 0xb5, 0x4f, 0x63, 0xcb, 0xa6, 0x64, 0xb1, 0x09, 0xeb, 0xfa, + 0x23, 0xc7, 0xa4, 0xc2, 0xfa, 0x52, 0xb2, 0x9a, 0x7d, 0xe2, 0xb8, 0xdd, 0x21, 0x0d, 0x88, 0x30, + 0xef, 0x9b, 0x1e, 0x1b, 0x7a, 0xcc, 0xe8, 0x11, 0x46, 0x23, 0x36, 0x63, 0xdc, 0xea, 0xd1, 0x80, + 0xb4, 0x0c, 0x9f, 0xd8, 0x8e, 0xcb, 0x19, 0x22, 0x5f, 0xad, 0x05, 0xd5, 0xcf, 0xa7, 0x1e, 0xe7, + 0x84, 0xb5, 0xa7, 0x19, 0x3a, 0xf4, 0x2a, 0xa4, 0x2c, 0xc0, 0x75, 0x28, 0x46, 0xe7, 0x3a, 0x56, + 0x0d, 0x35, 0x50, 0xb3, 0xd4, 0x79, 0x8b, 0x7f, 0x5f, 0x58, 0xda, 0x25, 0xbc, 0x33, 0x17, 0xc2, + 0x7c, 0xcf, 0x65, 0x14, 0x1f, 0x43, 0x29, 0x21, 0xe5, 0x41, 0xe5, 0xa3, 0x75, 0x3d, 0x5d, 0x0e, + 0x3d, 0x09, 0x29, 0xda, 0x62, 0xa5, 0xf5, 0xa0, 0xc6, 0x4f, 0xfb, 0x64, 0x30, 0x88, 0xad, 0x2c, + 0x86, 0xf8, 0x14, 0x60, 0x06, 0x2c, 0x4e, 0xdc, 0xd5, 0x23, 0x75, 0xfa, 0x54, 0x9d, 0x1e, 0x55, + 0x5e, 0xa8, 0xd3, 0xdb, 0xc4, 0x8e, 0x05, 0x74, 0x52, 0x91, 0xda, 0xef, 0x08, 0xea, 0x19, 0x49, + 0x04, 0xf6, 0x87, 0x00, 0x09, 0x36, 0xab, 0xa1, 0xc6, 0x1b, 0x0b, 0xb8, 0x4b, 0x31, 0x37, 0xc3, + 0xe7, 0x12, 0x5c, 0x81, 0xc3, 0xed, 0x3d, 0x09, 0x17, 0xe5, 0x94, 0xe8, 0x8e, 0x44, 0x3d, 0xcf, + 0xa6, 0xf5, 0xfd, 0x8c, 0x06, 0xe4, 0x19, 0x77, 0xd0, 0x86, 0xf5, 0xf9, 0x18, 0xa1, 0xe6, 0x04, + 0x60, 0xd6, 0x10, 0xa2, 0x66, 0xef, 0xca, 0x6a, 0x66, 0x41, 0x25, 0x33, 0x5e, 0x6a, 0xe6, 0xac, + 0x44, 0x89, 0x7d, 0xe9, 0x17, 0xf1, 0x07, 0x02, 0x25, 0x2b, 0x8b, 0x60, 0xff, 0x08, 0xca, 0x33, + 0xf6, 0xf8, 0x2a, 0x72, 0xe1, 0x21, 0x81, 0x5f, 0xe2, 0x65, 0x54, 0x01, 0x73, 0xc0, 0x36, 0x19, + 0x91, 0x61, 0xac, 0x5f, 0x3b, 0x83, 0xb7, 0xa5, 0x5d, 0xc1, 0x7b, 0x00, 0xab, 0x3e, 0xdf, 0x11, + 0x25, 0xa9, 0xca, 0xa8, 0xc2, 0x5b, 0xf8, 0x68, 0x7d, 0x50, 0x63, 0xed, 0x6d, 0xea, 0x5a, 0x8e, + 0x6b, 0x5f, 0xb8, 0x3d, 0x2f, 0x74, 0xad, 0xa5, 0x97, 0xf9, 0x27, 0x04, 0x5b, 0xb9, 0xa9, 0x04, + 0xfb, 0x16, 0x94, 0x9d, 0x68, 0xaf, 0xeb, 0x58, 0x51, 0xad, 0x4b, 0x1d, 0x10, 0x5b, 0x17, 0xd6, + 0x12, 0x4b, 0x7a, 0x20, 0xee, 0xfc, 0x9c, 0x06, 0x5f, 0xba, 0xce, 0x98, 0x8e, 0x18, 0x19, 0x7c, + 0x31, 0x89, 0x35, 0xaf, 0x41, 0x21, 0x69, 0xef, 0x82, 0x63, 0x69, 0x04, 0x36, 0x32, 0xbd, 0x05, + 0xf6, 0x29, 0x54, 0xc2, 0x78, 0xbb, 0x1b, 0x4c, 0x44, 0x91, 0xb6, 0xe4, 0xc2, 0xa7, 0x02, 0x2f, + 0xa9, 0x4d, 0xcc, 0xeb, 0x4e, 0x39, 0x9c, 0x6d, 0x69, 0xd6, 0xac, 0x09, 0x33, 0x80, 0x96, 0x75, + 0x09, 0x7f, 0x22, 0xa1, 0x64, 0x3e, 0x8d, 0x50, 0xf2, 0x31, 0xbc, 0x48, 0x2b, 0x89, 0xdb, 0xbd, + 0x9e, 0x2b, 0xa5, 0x53, 0x49, 0x89, 0x58, 0xde, 0xfd, 0x1c, 0xfd, 0x55, 0x84, 0x37, 0x39, 0x28, + 0xfe, 0x1a, 0x56, 0xa3, 0x9e, 0xc5, 0x0d, 0x99, 0xe2, 0xf1, 0x2f, 0xa1, 0xbc, 0x5a, 0xe0, 0x11, + 0x25, 0xd1, 0x36, 0xbf, 0xfb, 0xe7, 0xff, 0x5f, 0x0b, 0xeb, 0xb8, 0x6a, 0x48, 0xf3, 0x2a, 0xfa, + 0x1d, 0xf0, 0x6f, 0x08, 0xf0, 0xe3, 0xfe, 0xc4, 0x07, 0x19, 0xe7, 0xe6, 0xfe, 0x31, 0xca, 0xe1, + 0x33, 0xbd, 0x05, 0xd1, 0x2e, 0x27, 0x6a, 0x60, 0x75, 0x8e, 0x28, 0x72, 0xef, 0x3a, 0x31, 0xc4, + 0xcf, 0x08, 0xd6, 0xe4, 0x06, 0xc4, 0xcd, 0x8c, 0x4c, 0x99, 0x1d, 0xad, 0xbc, 0xff, 0x0c, 0x4f, + 0xc1, 0xd3, 0xe4, 0x3c, 0x1a, 0x6e, 0xc8, 0x3c, 0x52, 0x5f, 0x18, 0x37, 0x8e, 0x75, 0x8b, 0x7f, + 0x44, 0xb0, 0x26, 0x37, 0x52, 0x26, 0x51, 0x66, 0x4b, 0x67, 0x12, 0x65, 0x77, 0xa5, 0xb6, 0xcd, + 0x89, 0x5e, 0xe2, 0x8d, 0x05, 0x44, 0xf8, 0x1b, 0x28, 0xc6, 0x13, 0x11, 0x6b, 0x59, 0x6a, 0xe5, + 0xc7, 0x84, 0xb2, 0xbd, 0xd0, 0x47, 0x64, 0xde, 0xe7, 0x99, 0x77, 0xb0, 0x66, 0x64, 0xbf, 0x7d, + 0x8c, 0x9b, 0x78, 0x18, 0xde, 0xe2, 0x6f, 0x11, 0x54, 0xd2, 0xb3, 0x1c, 0xef, 0x66, 0x2b, 0x9c, + 0x7f, 0x51, 0x28, 0x7b, 0x4f, 0xfa, 0x09, 0x9a, 0x06, 0xa7, 0x51, 0x70, 0x2d, 0x87, 0x86, 0xe1, + 0xef, 0x11, 0x94, 0x92, 0x61, 0x84, 0xb3, 0x24, 0xce, 0x0f, 0x74, 0x65, 0x67, 0xb1, 0x93, 0x48, + 0xfd, 0x01, 0x4f, 0xfd, 0x1e, 0xde, 0x36, 0x72, 0x9e, 0x79, 0xe9, 0x4a, 0xfc, 0x80, 0xe0, 0x85, + 0x34, 0x4c, 0x71, 0x8e, 0xc4, 0x47, 0x43, 0x5d, 0x69, 0x3e, 0xed, 0x28, 0x88, 0x5e, 0x71, 0xa2, + 0x0d, 0x5c, 0xcf, 0x23, 0x62, 0xa7, 0xed, 0xbf, 0xef, 0x55, 0x74, 0x77, 0xaf, 0xa2, 0xff, 0xee, + 0x55, 0xf4, 0xcb, 0x83, 0xba, 0x72, 0xf7, 0xa0, 0xae, 0xfc, 0xfb, 0xa0, 0xae, 0x7c, 0x75, 0x62, + 0x3b, 0x41, 0x3f, 0xec, 0xe9, 0xa6, 0x37, 0x34, 0xfc, 0x90, 0xf5, 0x79, 0x14, 0x5f, 0x1d, 0xf2, + 0xe5, 0xa1, 0xeb, 0x59, 0xd4, 0x98, 0xa4, 0x8e, 0xe6, 0x0f, 0xe1, 0xde, 0x2a, 0x7f, 0xa0, 0x1e, + 0xbf, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x2c, 0x9d, 0xe7, 0x6b, 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -671,6 +869,10 @@ type QueryClient interface { GasPrice(ctx context.Context, in *QueryGasPriceRequest, opts ...grpc.CallOption) (*QueryGasPriceResponse, error) // 🔹 Queries all gas prices across chains AllGasPrices(ctx context.Context, in *QueryAllGasPricesRequest, opts ...grpc.CallOption) (*QueryAllGasPricesResponse, error) + // 🔹 Queries chain meta for a specific chain + ChainMeta(ctx context.Context, in *QueryChainMetaRequest, opts ...grpc.CallOption) (*QueryChainMetaResponse, error) + // 🔹 Queries all chain metas across chains + AllChainMetas(ctx context.Context, in *QueryAllChainMetasRequest, opts ...grpc.CallOption) (*QueryAllChainMetasResponse, error) } type queryClient struct { @@ -735,6 +937,24 @@ func (c *queryClient) AllGasPrices(ctx context.Context, in *QueryAllGasPricesReq return out, nil } +func (c *queryClient) ChainMeta(ctx context.Context, in *QueryChainMetaRequest, opts ...grpc.CallOption) (*QueryChainMetaResponse, error) { + out := new(QueryChainMetaResponse) + err := c.cc.Invoke(ctx, "/uexecutor.v1.Query/ChainMeta", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AllChainMetas(ctx context.Context, in *QueryAllChainMetasRequest, opts ...grpc.CallOption) (*QueryAllChainMetasResponse, error) { + out := new(QueryAllChainMetasResponse) + err := c.cc.Invoke(ctx, "/uexecutor.v1.Query/AllChainMetas", 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. @@ -749,6 +969,10 @@ type QueryServer interface { GasPrice(context.Context, *QueryGasPriceRequest) (*QueryGasPriceResponse, error) // 🔹 Queries all gas prices across chains AllGasPrices(context.Context, *QueryAllGasPricesRequest) (*QueryAllGasPricesResponse, error) + // 🔹 Queries chain meta for a specific chain + ChainMeta(context.Context, *QueryChainMetaRequest) (*QueryChainMetaResponse, error) + // 🔹 Queries all chain metas across chains + AllChainMetas(context.Context, *QueryAllChainMetasRequest) (*QueryAllChainMetasResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -773,6 +997,12 @@ func (*UnimplementedQueryServer) GasPrice(ctx context.Context, req *QueryGasPric func (*UnimplementedQueryServer) AllGasPrices(ctx context.Context, req *QueryAllGasPricesRequest) (*QueryAllGasPricesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllGasPrices not implemented") } +func (*UnimplementedQueryServer) ChainMeta(ctx context.Context, req *QueryChainMetaRequest) (*QueryChainMetaResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChainMeta not implemented") +} +func (*UnimplementedQueryServer) AllChainMetas(ctx context.Context, req *QueryAllChainMetasRequest) (*QueryAllChainMetasResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllChainMetas not implemented") +} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) @@ -886,6 +1116,42 @@ func _Query_AllGasPrices_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } +func _Query_ChainMeta_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryChainMetaRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ChainMeta(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/uexecutor.v1.Query/ChainMeta", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ChainMeta(ctx, req.(*QueryChainMetaRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AllChainMetas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllChainMetasRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllChainMetas(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/uexecutor.v1.Query/AllChainMetas", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllChainMetas(ctx, req.(*QueryAllChainMetasRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "uexecutor.v1.Query", HandlerType: (*QueryServer)(nil), @@ -914,6 +1180,14 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "AllGasPrices", Handler: _Query_AllGasPrices_Handler, }, + { + MethodName: "ChainMeta", + Handler: _Query_ChainMeta_Handler, + }, + { + MethodName: "AllChainMetas", + Handler: _Query_AllChainMetas_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "uexecutor/v1/query.proto", @@ -1068,7 +1342,7 @@ func (m *QueryAllGasPricesResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryChainMetaRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1078,20 +1352,27 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryChainMetaRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryChainMetaRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryChainMetaResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1101,19 +1382,19 @@ func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryChainMetaResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryChainMetaResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Params != nil { + if m.ChainMeta != nil { { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ChainMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1126,7 +1407,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllPendingInboundsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllChainMetasRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1136,12 +1417,12 @@ func (m *QueryAllPendingInboundsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPendingInboundsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllChainMetasRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPendingInboundsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllChainMetasRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1161,7 +1442,7 @@ func (m *QueryAllPendingInboundsRequest) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryAllPendingInboundsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllChainMetasResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1171,12 +1452,12 @@ func (m *QueryAllPendingInboundsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPendingInboundsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllChainMetasResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPendingInboundsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllChainMetasResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1193,11 +1474,16 @@ 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.ChainMetas) > 0 { + for iNdEx := len(m.ChainMetas) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ChainMetas[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0xa } @@ -1205,7 +1491,7 @@ func (m *QueryAllPendingInboundsResponse) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *QueryGetUniversalTxRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1215,27 +1501,20 @@ func (m *QueryGetUniversalTxRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetUniversalTxRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetUniversalTxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Id) > 0 { - i -= len(m.Id) - copy(dAtA[i:], m.Id) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Id))) - i-- - dAtA[i] = 0xa - } return len(dAtA) - i, nil } -func (m *QueryGetUniversalTxResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1245,19 +1524,19 @@ func (m *QueryGetUniversalTxResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetUniversalTxResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetUniversalTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.UniversalTx != nil { + if m.Params != nil { { - size, err := m.UniversalTx.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1270,7 +1549,7 @@ func (m *QueryGetUniversalTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *QueryAllUniversalTxRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllPendingInboundsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1280,12 +1559,12 @@ func (m *QueryAllUniversalTxRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllUniversalTxRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllPendingInboundsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllUniversalTxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllPendingInboundsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1305,7 +1584,7 @@ func (m *QueryAllUniversalTxRequest) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } -func (m *QueryAllUniversalTxResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllPendingInboundsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1315,12 +1594,12 @@ func (m *QueryAllUniversalTxResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllUniversalTxResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllPendingInboundsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllUniversalTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllPendingInboundsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1337,19 +1616,163 @@ func (m *QueryAllUniversalTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, er i-- dAtA[i] = 0x12 } - if len(m.UniversalTxs) > 0 { - for iNdEx := len(m.UniversalTxs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.UniversalTxs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + 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]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryGetUniversalTxRequest) 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 *QueryGetUniversalTxRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetUniversalTxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryGetUniversalTxResponse) 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 *QueryGetUniversalTxResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetUniversalTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.UniversalTx != nil { + { + size, err := m.UniversalTx.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 *QueryAllUniversalTxRequest) 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 *QueryAllUniversalTxRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllUniversalTxRequest) 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 *QueryAllUniversalTxResponse) 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 *QueryAllUniversalTxResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllUniversalTxResponse) 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.UniversalTxs) > 0 { + for iNdEx := len(m.UniversalTxs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.UniversalTxs[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 } @@ -1423,6 +1846,64 @@ func (m *QueryAllGasPricesResponse) Size() (n int) { return n } +func (m *QueryChainMetaRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryChainMetaResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ChainMeta != nil { + l = m.ChainMeta.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllChainMetasRequest) 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 *QueryAllChainMetasResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ChainMetas) > 0 { + for _, e := range m.ChainMetas { + 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 *QueryParamsRequest) Size() (n int) { if m == nil { return 0 @@ -1915,6 +2396,380 @@ func (m *QueryAllGasPricesResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryChainMetaRequest) 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: QueryChainMetaRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryChainMetaRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryChainMetaResponse) 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: QueryChainMetaResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryChainMetaResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainMeta", 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.ChainMeta == nil { + m.ChainMeta = &ChainMeta{} + } + if err := m.ChainMeta.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 *QueryAllChainMetasRequest) 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: QueryAllChainMetasRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllChainMetasRequest: 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 *QueryAllChainMetasResponse) 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: QueryAllChainMetasResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllChainMetasResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainMetas", 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.ChainMetas = append(m.ChainMetas, &ChainMeta{}) + if err := m.ChainMetas[len(m.ChainMetas)-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 *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/uexecutor/types/query.pb.gw.go b/x/uexecutor/types/query.pb.gw.go index cb34f647..1317b283 100644 --- a/x/uexecutor/types/query.pb.gw.go +++ b/x/uexecutor/types/query.pb.gw.go @@ -267,6 +267,96 @@ func local_request_Query_AllGasPrices_0(ctx context.Context, marshaler runtime.M } +func request_Query_ChainMeta_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryChainMetaRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + msg, err := client.ChainMeta(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ChainMeta_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryChainMetaRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + msg, err := server.ChainMeta(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_AllChainMetas_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_AllChainMetas_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllChainMetasRequest + 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_AllChainMetas_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AllChainMetas(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AllChainMetas_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllChainMetasRequest + 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_AllChainMetas_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AllChainMetas(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. @@ -411,6 +501,52 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_ChainMeta_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_ChainMeta_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_ChainMeta_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AllChainMetas_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_AllChainMetas_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_AllChainMetas_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -572,6 +708,46 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_ChainMeta_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_ChainMeta_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_ChainMeta_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AllChainMetas_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_AllChainMetas_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_AllChainMetas_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -587,6 +763,10 @@ var ( pattern_Query_GasPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"uexecutor", "v1", "gas_price", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_AllGasPrices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"uexecutor", "v1", "gas_prices"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ChainMeta_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"uexecutor", "v1", "chain_meta", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AllChainMetas_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"uexecutor", "v1", "chain_metas"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -601,4 +781,8 @@ var ( forward_Query_GasPrice_0 = runtime.ForwardResponseMessage forward_Query_AllGasPrices_0 = runtime.ForwardResponseMessage + + forward_Query_ChainMeta_0 = runtime.ForwardResponseMessage + + forward_Query_AllChainMetas_0 = runtime.ForwardResponseMessage ) diff --git a/x/uexecutor/types/tx.pb.go b/x/uexecutor/types/tx.pb.go index 348a8d59..075e0d32 100644 --- a/x/uexecutor/types/tx.pb.go +++ b/x/uexecutor/types/tx.pb.go @@ -654,6 +654,120 @@ func (m *MsgVoteGasPriceResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgVoteGasPriceResponse proto.InternalMessageInfo +// MsgVoteChainMeta is broadcasted by Universal Validators to submit observed chain metadata (gas price + block height) +type MsgVoteChainMeta struct { + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` + ObservedChainId string `protobuf:"bytes,2,opt,name=observed_chain_id,json=observedChainId,proto3" json:"observed_chain_id,omitempty"` + Price uint64 `protobuf:"varint,3,opt,name=price,proto3" json:"price,omitempty"` + ChainHeight uint64 `protobuf:"varint,4,opt,name=chain_height,json=chainHeight,proto3" json:"chain_height,omitempty"` + ObservedAt uint64 `protobuf:"varint,5,opt,name=observed_at,json=observedAt,proto3" json:"observed_at,omitempty"` +} + +func (m *MsgVoteChainMeta) Reset() { *m = MsgVoteChainMeta{} } +func (m *MsgVoteChainMeta) String() string { return proto.CompactTextString(m) } +func (*MsgVoteChainMeta) ProtoMessage() {} +func (*MsgVoteChainMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_88d6216044506365, []int{12} +} +func (m *MsgVoteChainMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgVoteChainMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgVoteChainMeta.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 *MsgVoteChainMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgVoteChainMeta.Merge(m, src) +} +func (m *MsgVoteChainMeta) XXX_Size() int { + return m.Size() +} +func (m *MsgVoteChainMeta) XXX_DiscardUnknown() { + xxx_messageInfo_MsgVoteChainMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgVoteChainMeta proto.InternalMessageInfo + +func (m *MsgVoteChainMeta) GetSigner() string { + if m != nil { + return m.Signer + } + return "" +} + +func (m *MsgVoteChainMeta) GetObservedChainId() string { + if m != nil { + return m.ObservedChainId + } + return "" +} + +func (m *MsgVoteChainMeta) GetPrice() uint64 { + if m != nil { + return m.Price + } + return 0 +} + +func (m *MsgVoteChainMeta) GetChainHeight() uint64 { + if m != nil { + return m.ChainHeight + } + return 0 +} + +func (m *MsgVoteChainMeta) GetObservedAt() uint64 { + if m != nil { + return m.ObservedAt + } + return 0 +} + +// MsgVoteChainMetaResponse defines the response for MsgVoteChainMeta +type MsgVoteChainMetaResponse struct { +} + +func (m *MsgVoteChainMetaResponse) Reset() { *m = MsgVoteChainMetaResponse{} } +func (m *MsgVoteChainMetaResponse) String() string { return proto.CompactTextString(m) } +func (*MsgVoteChainMetaResponse) ProtoMessage() {} +func (*MsgVoteChainMetaResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_88d6216044506365, []int{13} +} +func (m *MsgVoteChainMetaResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgVoteChainMetaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgVoteChainMetaResponse.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 *MsgVoteChainMetaResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgVoteChainMetaResponse.Merge(m, src) +} +func (m *MsgVoteChainMetaResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgVoteChainMetaResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgVoteChainMetaResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgVoteChainMetaResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgUpdateParams)(nil), "uexecutor.v1.MsgUpdateParams") proto.RegisterType((*MsgUpdateParamsResponse)(nil), "uexecutor.v1.MsgUpdateParamsResponse") @@ -667,65 +781,72 @@ func init() { proto.RegisterType((*MsgVoteOutboundResponse)(nil), "uexecutor.v1.MsgVoteOutboundResponse") proto.RegisterType((*MsgVoteGasPrice)(nil), "uexecutor.v1.MsgVoteGasPrice") proto.RegisterType((*MsgVoteGasPriceResponse)(nil), "uexecutor.v1.MsgVoteGasPriceResponse") + proto.RegisterType((*MsgVoteChainMeta)(nil), "uexecutor.v1.MsgVoteChainMeta") + proto.RegisterType((*MsgVoteChainMetaResponse)(nil), "uexecutor.v1.MsgVoteChainMetaResponse") } func init() { proto.RegisterFile("uexecutor/v1/tx.proto", fileDescriptor_88d6216044506365) } var fileDescriptor_88d6216044506365 = []byte{ - // 840 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0x4f, 0x4f, 0x33, 0x45, - 0x1c, 0xee, 0x42, 0x5b, 0xd3, 0x69, 0x7d, 0xdf, 0xb7, 0x6b, 0x6b, 0xff, 0x00, 0x05, 0xaa, 0x06, - 0x2c, 0xd2, 0x95, 0x9a, 0x70, 0xe8, 0x8d, 0x2a, 0x31, 0x8d, 0x29, 0xd4, 0x15, 0x3c, 0x70, 0x69, - 0xa6, 0xbb, 0xe3, 0x76, 0x23, 0xbb, 0xb3, 0xd9, 0x99, 0x69, 0xca, 0xcd, 0x78, 0x34, 0x31, 0xf1, - 0xe4, 0x77, 0x30, 0x5e, 0x38, 0xf8, 0x01, 0x3c, 0x72, 0x24, 0x7a, 0xf1, 0x44, 0x0c, 0x1c, 0xf8, - 0x1a, 0x66, 0x67, 0xff, 0x6f, 0x4b, 0x31, 0x9c, 0xde, 0x0b, 0x99, 0x7d, 0x9e, 0xdf, 0xef, 0xe1, - 0xf7, 0x3c, 0x3b, 0x33, 0x5d, 0x50, 0x66, 0x68, 0x86, 0x14, 0x46, 0xb1, 0x2d, 0x4d, 0x0f, 0x24, - 0x3a, 0x6b, 0x5b, 0x36, 0xa6, 0x58, 0x2c, 0x04, 0x70, 0x7b, 0x7a, 0x50, 0x2f, 0x42, 0x43, 0x37, - 0xb1, 0xc4, 0xff, 0xba, 0x05, 0xf5, 0x8a, 0x82, 0x89, 0x81, 0x89, 0x64, 0x10, 0xcd, 0x69, 0x34, - 0x88, 0xe6, 0x11, 0xd5, 0xb8, 0xe0, 0x95, 0x85, 0x88, 0xc7, 0x94, 0x34, 0xac, 0x61, 0xbe, 0x94, - 0x9c, 0x95, 0x87, 0xd6, 0x5c, 0xa1, 0x91, 0x4b, 0xb8, 0x0f, 0x2e, 0xd5, 0xfc, 0x5d, 0x00, 0xaf, - 0x07, 0x44, 0x3b, 0xb7, 0x54, 0x48, 0xd1, 0x10, 0xda, 0xd0, 0x20, 0xe2, 0x21, 0xc8, 0x41, 0x46, - 0x27, 0xd8, 0xd6, 0xe9, 0x55, 0x55, 0xd8, 0x12, 0x76, 0x73, 0xbd, 0xea, 0x5f, 0x7f, 0xec, 0x97, - 0xbc, 0xc6, 0x23, 0x55, 0xb5, 0x11, 0x21, 0xdf, 0x50, 0x5b, 0x37, 0x35, 0x39, 0x2c, 0x15, 0x3b, - 0x20, 0x6b, 0x71, 0x85, 0xea, 0xca, 0x96, 0xb0, 0x9b, 0xef, 0x94, 0xda, 0x51, 0x87, 0x6d, 0x57, - 0xbd, 0x97, 0xbe, 0xb9, 0xdb, 0x4c, 0xc9, 0x5e, 0x65, 0xf7, 0x93, 0x1f, 0x1f, 0xaf, 0x5b, 0xa1, - 0xc6, 0x4f, 0x8f, 0xd7, 0xad, 0x5a, 0xe8, 0x2e, 0x31, 0x59, 0xb3, 0x06, 0x2a, 0x09, 0x48, 0x46, - 0xc4, 0xc2, 0x26, 0x41, 0xcd, 0x3f, 0x57, 0x40, 0x71, 0x40, 0xb4, 0x63, 0xde, 0x8a, 0x86, 0xf0, - 0xea, 0x12, 0x43, 0x55, 0xfc, 0x14, 0x64, 0x89, 0xae, 0x99, 0xc8, 0x7e, 0xd6, 0x87, 0x57, 0x27, - 0xca, 0xa0, 0xc4, 0x4c, 0x7d, 0x8a, 0x6c, 0x02, 0x2f, 0x47, 0x50, 0x51, 0x30, 0x33, 0xe9, 0x48, - 0x57, 0x3d, 0x4b, 0x5b, 0x71, 0x4b, 0xe7, 0x7e, 0xe5, 0x91, 0x5b, 0xd8, 0x57, 0x65, 0x91, 0xcd, - 0x61, 0xe2, 0x57, 0xa0, 0x18, 0x6a, 0x5a, 0xee, 0x68, 0xd5, 0x55, 0x2e, 0xd8, 0x78, 0x42, 0xd0, - 0x33, 0x20, 0xbf, 0x61, 0x09, 0x44, 0xdc, 0x03, 0xc5, 0x29, 0xb2, 0xf5, 0xef, 0x74, 0x05, 0x52, - 0x1d, 0x9b, 0x23, 0x15, 0x52, 0x58, 0x4d, 0x3b, 0xee, 0xe4, 0x37, 0x51, 0xe2, 0x0b, 0x48, 0x61, - 0x77, 0xcf, 0x89, 0xd7, 0xb3, 0xe6, 0x64, 0xbb, 0x16, 0xcb, 0x36, 0x1e, 0x56, 0x73, 0x0d, 0xd4, - 0xe6, 0xc0, 0x20, 0xdf, 0xdf, 0x56, 0xc0, 0xbb, 0x03, 0xa2, 0x0d, 0x74, 0xcd, 0x86, 0x14, 0x9d, - 0x1f, 0x1f, 0xbd, 0x3d, 0xd9, 0x1a, 0x7c, 0x26, 0x27, 0x8b, 0xa5, 0xd9, 0x0e, 0xfc, 0xb2, 0x20, - 0x5b, 0x23, 0x81, 0x88, 0xeb, 0x20, 0xe7, 0x8c, 0x0a, 0x29, 0xb3, 0x91, 0x97, 0x69, 0x08, 0x74, - 0x77, 0x12, 0x61, 0x56, 0x62, 0x61, 0x86, 0xc9, 0x34, 0x2b, 0xa0, 0x1c, 0x03, 0x82, 0x10, 0x7f, - 0x15, 0xc0, 0xab, 0x01, 0xd1, 0xbe, 0xc5, 0x14, 0xf5, 0xcd, 0x31, 0x66, 0xe6, 0x4b, 0x76, 0xa8, - 0x04, 0xde, 0xd1, 0xdd, 0x66, 0x2f, 0xb8, 0x72, 0xdc, 0xa7, 0xa7, 0x2c, 0xfb, 0x55, 0xdd, 0xed, - 0xc4, 0xdc, 0x45, 0x86, 0xa4, 0xf8, 0x14, 0xcd, 0x2a, 0x78, 0x3f, 0x8e, 0x04, 0x23, 0xdf, 0xb9, - 0x17, 0x84, 0x43, 0x9d, 0x32, 0xfa, 0xd2, 0x99, 0xdf, 0x03, 0x19, 0x3a, 0xf3, 0x5f, 0x75, 0x4e, - 0x4e, 0xd3, 0x59, 0x5f, 0x15, 0xcb, 0x20, 0xcb, 0x5c, 0x74, 0x95, 0xa3, 0x19, 0xc6, 0xe1, 0x1e, - 0xc8, 0xe3, 0x31, 0x41, 0xf6, 0x14, 0xa9, 0x23, 0x3a, 0xe3, 0xaf, 0x21, 0xdf, 0xd9, 0x8e, 0x7b, - 0xf4, 0x47, 0x39, 0xe5, 0x85, 0xfc, 0x1d, 0xca, 0xc0, 0xef, 0x3a, 0x9b, 0x75, 0x3f, 0x4e, 0x58, - 0x8e, 0xdf, 0x29, 0x51, 0x33, 0xde, 0x9d, 0x12, 0x85, 0x02, 0xef, 0x7f, 0x87, 0xde, 0xbf, 0x84, - 0x64, 0x68, 0xeb, 0x0a, 0x7a, 0x81, 0xf7, 0x16, 0x28, 0x06, 0x7e, 0x94, 0x09, 0xd4, 0xcd, 0x30, - 0x87, 0xd7, 0x3e, 0xf1, 0xb9, 0x83, 0xf7, 0x55, 0xb1, 0x04, 0x32, 0x96, 0xf3, 0x6f, 0x78, 0x22, - 0x69, 0xd9, 0x7d, 0x10, 0xb7, 0x41, 0x61, 0x7c, 0x89, 0x95, 0xef, 0x47, 0x26, 0x33, 0xc6, 0xc8, - 0xe6, 0x91, 0xa4, 0xe5, 0x3c, 0xc7, 0x4e, 0x38, 0xf4, 0x3f, 0x0c, 0xfb, 0x0e, 0x22, 0x86, 0x7d, - 0xc8, 0x37, 0xdc, 0xf9, 0x39, 0x0d, 0x56, 0x07, 0x44, 0x13, 0xcf, 0x40, 0x21, 0xf6, 0x8b, 0xb0, - 0x91, 0x38, 0x49, 0xf1, 0x3b, 0xb8, 0xfe, 0xd1, 0x52, 0xda, 0x57, 0x17, 0x2f, 0xc0, 0xab, 0xc4, - 0xf5, 0xbc, 0x39, 0xd7, 0x18, 0x2f, 0xa8, 0xef, 0x3c, 0x53, 0x10, 0x68, 0x9f, 0x00, 0x10, 0xb9, - 0x9a, 0xd6, 0xe6, 0xda, 0x42, 0xb2, 0xfe, 0xc1, 0x12, 0x32, 0xd0, 0xfb, 0x1a, 0xe4, 0xa3, 0xa7, - 0x74, 0x7d, 0xae, 0x27, 0xc2, 0xd6, 0x3f, 0x5c, 0xc6, 0x06, 0x92, 0x67, 0xa0, 0x10, 0x3b, 0x45, - 0x1b, 0x0b, 0xbb, 0x7c, 0x7a, 0x41, 0xa8, 0x8b, 0xf6, 0xa8, 0xaf, 0x1a, 0xec, 0xcf, 0xc5, 0xaa, - 0x3e, 0xfd, 0x84, 0x6a, 0x72, 0x23, 0xd4, 0x33, 0x3f, 0x3c, 0x5e, 0xb7, 0x84, 0xde, 0xf0, 0xe6, - 0xbe, 0x21, 0xdc, 0xde, 0x37, 0x84, 0x7f, 0xef, 0x1b, 0xc2, 0x2f, 0x0f, 0x8d, 0xd4, 0xed, 0x43, - 0x23, 0xf5, 0xcf, 0x43, 0x23, 0x75, 0x71, 0xa8, 0xe9, 0x74, 0xc2, 0xc6, 0x6d, 0x05, 0x1b, 0x92, - 0xc5, 0xc8, 0x84, 0x6f, 0x6c, 0xbe, 0xda, 0xe7, 0xcb, 0x7d, 0x13, 0xab, 0x48, 0x9a, 0x49, 0xe1, - 0x36, 0xe4, 0x9f, 0x29, 0xe3, 0x2c, 0xff, 0xec, 0xf8, 0xec, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x77, 0x92, 0x41, 0x7c, 0x14, 0x09, 0x00, 0x00, + // 926 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0xae, 0xdb, 0xa4, 0xa8, 0x2f, 0xdd, 0xdd, 0xc6, 0xa4, 0xd4, 0x75, 0xb7, 0x69, 0x1b, 0x7e, + 0xec, 0x92, 0xa5, 0x31, 0x5b, 0xa4, 0x3d, 0xe4, 0xd6, 0xc2, 0x0a, 0x2a, 0x94, 0xdd, 0x62, 0x5a, + 0x90, 0xf6, 0x12, 0x4d, 0xec, 0xc1, 0xb1, 0xa8, 0x3d, 0x96, 0x67, 0x1c, 0xa5, 0x37, 0xc4, 0x91, + 0x13, 0x27, 0xfe, 0x07, 0xc4, 0xa5, 0x07, 0xfe, 0x00, 0x8e, 0x7b, 0x5c, 0xc1, 0x85, 0xd3, 0x0a, + 0xb5, 0x12, 0xfd, 0x0f, 0x38, 0x23, 0x8f, 0xed, 0xb1, 0xc7, 0xc9, 0xa6, 0xa8, 0x17, 0xf6, 0x12, + 0x39, 0xdf, 0xf7, 0xde, 0x97, 0xf7, 0x7d, 0xf6, 0x3c, 0x07, 0x56, 0x23, 0x3c, 0xc6, 0x56, 0xc4, + 0x48, 0x68, 0x8c, 0x1e, 0x1a, 0x6c, 0xdc, 0x09, 0x42, 0xc2, 0x88, 0xba, 0x2c, 0xe0, 0xce, 0xe8, + 0xa1, 0x5e, 0x47, 0x9e, 0xeb, 0x13, 0x83, 0x7f, 0x26, 0x05, 0xfa, 0x9a, 0x45, 0xa8, 0x47, 0xa8, + 0xe1, 0x51, 0x27, 0x6e, 0xf4, 0xa8, 0x93, 0x12, 0x9a, 0x2c, 0x78, 0x16, 0x60, 0x9a, 0x32, 0x9b, + 0x12, 0x63, 0x0d, 0x91, 0xeb, 0xf7, 0x3d, 0xcc, 0x50, 0x4a, 0x37, 0x1c, 0xe2, 0x10, 0x7e, 0x69, + 0xc4, 0x57, 0x29, 0xba, 0x9e, 0xfc, 0x4e, 0x3f, 0x21, 0x92, 0x2f, 0x09, 0xd5, 0xfa, 0x45, 0x81, + 0x3b, 0x3d, 0xea, 0x9c, 0x04, 0x36, 0x62, 0xf8, 0x08, 0x85, 0xc8, 0xa3, 0xea, 0x23, 0x58, 0x42, + 0x11, 0x1b, 0x92, 0xd0, 0x65, 0x67, 0x9a, 0xb2, 0xad, 0xdc, 0x5f, 0x3a, 0xd0, 0x7e, 0xff, 0x75, + 0xb7, 0x91, 0x36, 0xee, 0xdb, 0x76, 0x88, 0x29, 0xfd, 0x92, 0x85, 0xae, 0xef, 0x98, 0x79, 0xa9, + 0xba, 0x07, 0x8b, 0x01, 0x57, 0xd0, 0xe6, 0xb7, 0x95, 0xfb, 0xb5, 0xbd, 0x46, 0xa7, 0x18, 0x40, + 0x27, 0x51, 0x3f, 0xa8, 0x3c, 0x7f, 0xb9, 0x35, 0x67, 0xa6, 0x95, 0xdd, 0x0f, 0xbe, 0xbf, 0x3a, + 0x6f, 0xe7, 0x1a, 0x3f, 0x5c, 0x9d, 0xb7, 0xd7, 0x73, 0x8b, 0xa5, 0xc9, 0x5a, 0xeb, 0xb0, 0x56, + 0x82, 0x4c, 0x4c, 0x03, 0xe2, 0x53, 0xdc, 0xfa, 0x6d, 0x1e, 0xea, 0x3d, 0xea, 0x3c, 0xe6, 0xad, + 0xf8, 0x08, 0x9d, 0x9d, 0x12, 0x64, 0xab, 0x1f, 0xc2, 0x22, 0x75, 0x1d, 0x1f, 0x87, 0xd7, 0xfa, + 0x48, 0xeb, 0x54, 0x13, 0x1a, 0x91, 0xef, 0x8e, 0x70, 0x48, 0xd1, 0x69, 0x1f, 0x59, 0x16, 0x89, + 0x7c, 0xd6, 0x77, 0xed, 0xd4, 0xd2, 0xb6, 0x6c, 0xe9, 0x24, 0xab, 0xdc, 0x4f, 0x0a, 0x0f, 0x6d, + 0x53, 0x8d, 0x26, 0x30, 0xf5, 0x73, 0xa8, 0xe7, 0x9a, 0x41, 0x32, 0x9a, 0xb6, 0xc0, 0x05, 0x9b, + 0xaf, 0x10, 0x4c, 0x0d, 0x98, 0x2b, 0x51, 0x09, 0x51, 0x1f, 0x40, 0x7d, 0x84, 0x43, 0xf7, 0x1b, + 0xd7, 0x42, 0xcc, 0x25, 0x7e, 0xdf, 0x46, 0x0c, 0x69, 0x95, 0xd8, 0x9d, 0xb9, 0x52, 0x24, 0x3e, + 0x41, 0x0c, 0x75, 0x1f, 0xc4, 0xf1, 0xa6, 0xd6, 0xe2, 0x6c, 0x37, 0xa4, 0x6c, 0xe5, 0xb0, 0x5a, + 0x1b, 0xb0, 0x3e, 0x01, 0x8a, 0x7c, 0x7f, 0x9e, 0x87, 0x5b, 0x3d, 0xea, 0xf4, 0x5c, 0x27, 0x44, + 0x0c, 0x9f, 0x3c, 0xde, 0x7f, 0x7d, 0xb2, 0xf5, 0xf8, 0x4c, 0x71, 0x16, 0x33, 0xb3, 0xed, 0x65, + 0x65, 0x22, 0x5b, 0xaf, 0x84, 0xa8, 0x77, 0x61, 0x29, 0x1e, 0x15, 0xb1, 0x28, 0xc4, 0x69, 0xa6, + 0x39, 0xd0, 0xbd, 0x57, 0x0a, 0x73, 0x4d, 0x0a, 0x33, 0x4f, 0xa6, 0xb5, 0x06, 0xab, 0x12, 0x20, + 0x42, 0xfc, 0x49, 0x81, 0xdb, 0x3d, 0xea, 0x7c, 0x45, 0x18, 0x3e, 0xf4, 0x07, 0x24, 0xf2, 0x6f, + 0xf2, 0x84, 0x1a, 0xf0, 0x86, 0x9b, 0x34, 0xa7, 0xc1, 0xad, 0xca, 0x3e, 0x53, 0x65, 0x33, 0xab, + 0xea, 0xee, 0x94, 0xe6, 0xae, 0x47, 0xd8, 0x90, 0xa7, 0x68, 0x69, 0xf0, 0x96, 0x8c, 0x88, 0x91, + 0x5f, 0x26, 0x0b, 0x22, 0xa6, 0x9e, 0x46, 0xec, 0xa6, 0x33, 0xbf, 0x09, 0x55, 0x36, 0xce, 0x6e, + 0xf5, 0x92, 0x59, 0x61, 0xe3, 0x43, 0x5b, 0x5d, 0x85, 0xc5, 0x28, 0x41, 0x17, 0x38, 0x5a, 0x8d, + 0x38, 0x7c, 0x00, 0x35, 0x32, 0xa0, 0x38, 0x1c, 0x61, 0xbb, 0xcf, 0xc6, 0xfc, 0x36, 0xd4, 0xf6, + 0x76, 0x64, 0x8f, 0xd9, 0x28, 0x4f, 0x79, 0x21, 0xbf, 0x87, 0x26, 0x64, 0x5d, 0xc7, 0xe3, 0xee, + 0xfb, 0x25, 0xcb, 0xf2, 0x4e, 0x29, 0x9a, 0x49, 0x77, 0x4a, 0x11, 0x12, 0xde, 0xff, 0xc8, 0xbd, + 0x7f, 0x8a, 0xe8, 0x51, 0xe8, 0x5a, 0xf8, 0x06, 0xde, 0xdb, 0x50, 0x17, 0x7e, 0x92, 0x85, 0x2d, + 0x72, 0xb8, 0x93, 0x11, 0x1f, 0xc7, 0xf8, 0xa1, 0xad, 0x36, 0xa0, 0x1a, 0xc4, 0x3f, 0xc3, 0x13, + 0xa9, 0x98, 0xc9, 0x17, 0x75, 0x07, 0x96, 0x07, 0xa7, 0xc4, 0xfa, 0xb6, 0xef, 0x47, 0xde, 0x00, + 0x87, 0x3c, 0x92, 0x8a, 0x59, 0xe3, 0xd8, 0x13, 0x0e, 0xfd, 0x07, 0xc3, 0x99, 0x83, 0x82, 0xe1, + 0x0c, 0x12, 0x86, 0xff, 0x51, 0x60, 0x25, 0xe5, 0xf8, 0x44, 0x3d, 0xcc, 0xd0, 0xff, 0xe5, 0x38, + 0x69, 0x1c, 0x62, 0xd7, 0x19, 0xb2, 0xcc, 0x31, 0xc7, 0x3e, 0xe3, 0x90, 0xba, 0x55, 0x78, 0x4c, + 0x10, 0xd3, 0xaa, 0xbc, 0x42, 0x3c, 0x03, 0xfb, 0xac, 0xdb, 0x2e, 0x45, 0xa2, 0x4f, 0x44, 0x22, + 0x3c, 0xb6, 0x74, 0xd0, 0xca, 0x58, 0x16, 0xca, 0xde, 0xdf, 0x15, 0x58, 0xe8, 0x51, 0x47, 0x3d, + 0x86, 0x65, 0xe9, 0x35, 0xb9, 0x59, 0x5a, 0x2f, 0xf2, 0x8b, 0x49, 0x7f, 0x77, 0x26, 0x9d, 0xa9, + 0xab, 0xcf, 0xe0, 0x76, 0xe9, 0x9d, 0xb5, 0x35, 0xd1, 0x28, 0x17, 0xe8, 0xf7, 0xae, 0x29, 0x10, + 0xda, 0x4f, 0x00, 0x0a, 0xfb, 0x7a, 0x63, 0xa2, 0x2d, 0x27, 0xf5, 0xb7, 0x67, 0x90, 0x42, 0xef, + 0x0b, 0xa8, 0x15, 0x57, 0xd7, 0xdd, 0x89, 0x9e, 0x02, 0xab, 0xbf, 0x33, 0x8b, 0x15, 0x92, 0xc7, + 0xb0, 0x2c, 0xad, 0x96, 0xcd, 0xa9, 0x5d, 0x19, 0x3d, 0x25, 0xd4, 0x69, 0x07, 0x37, 0x53, 0x15, + 0x87, 0x76, 0xba, 0x6a, 0x46, 0xbf, 0x42, 0xb5, 0x7c, 0x3a, 0xd4, 0xaf, 0xe1, 0x96, 0x7c, 0x32, + 0x9a, 0x53, 0xfb, 0x04, 0xaf, 0xbf, 0x37, 0x9b, 0xcf, 0x84, 0xf5, 0xea, 0x77, 0x57, 0xe7, 0x6d, + 0xe5, 0xe0, 0xe8, 0xf9, 0x45, 0x53, 0x79, 0x71, 0xd1, 0x54, 0xfe, 0xba, 0x68, 0x2a, 0x3f, 0x5e, + 0x36, 0xe7, 0x5e, 0x5c, 0x36, 0xe7, 0xfe, 0xbc, 0x6c, 0xce, 0x3d, 0x7b, 0xe4, 0xb8, 0x6c, 0x18, + 0x0d, 0x3a, 0x16, 0xf1, 0x8c, 0x20, 0xa2, 0x43, 0x7e, 0x0e, 0xf8, 0xd5, 0x2e, 0xbf, 0xdc, 0xf5, + 0x89, 0x8d, 0x8d, 0xb1, 0x91, 0x3f, 0xe1, 0xfc, 0x3f, 0xe3, 0x60, 0x91, 0xff, 0xc9, 0xfb, 0xe8, + 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x21, 0xaa, 0x85, 0x4a, 0xa1, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -754,6 +875,8 @@ type MsgClient interface { VoteOutbound(ctx context.Context, in *MsgVoteOutbound, opts ...grpc.CallOption) (*MsgVoteOutboundResponse, error) // VoteGasPrice defines a message for universal validators to vote on the gas price VoteGasPrice(ctx context.Context, in *MsgVoteGasPrice, opts ...grpc.CallOption) (*MsgVoteGasPriceResponse, error) + // VoteChainMeta defines a message for universal validators to vote on chain metadata (gas price + block height) + VoteChainMeta(ctx context.Context, in *MsgVoteChainMeta, opts ...grpc.CallOption) (*MsgVoteChainMetaResponse, error) } type msgClient struct { @@ -818,6 +941,15 @@ func (c *msgClient) VoteGasPrice(ctx context.Context, in *MsgVoteGasPrice, opts return out, nil } +func (c *msgClient) VoteChainMeta(ctx context.Context, in *MsgVoteChainMeta, opts ...grpc.CallOption) (*MsgVoteChainMetaResponse, error) { + out := new(MsgVoteChainMetaResponse) + err := c.cc.Invoke(ctx, "/uexecutor.v1.Msg/VoteChainMeta", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // UpdateParams defines a governance operation for updating the parameters. @@ -834,6 +966,8 @@ type MsgServer interface { VoteOutbound(context.Context, *MsgVoteOutbound) (*MsgVoteOutboundResponse, error) // VoteGasPrice defines a message for universal validators to vote on the gas price VoteGasPrice(context.Context, *MsgVoteGasPrice) (*MsgVoteGasPriceResponse, error) + // VoteChainMeta defines a message for universal validators to vote on chain metadata (gas price + block height) + VoteChainMeta(context.Context, *MsgVoteChainMeta) (*MsgVoteChainMetaResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -858,6 +992,9 @@ func (*UnimplementedMsgServer) VoteOutbound(ctx context.Context, req *MsgVoteOut func (*UnimplementedMsgServer) VoteGasPrice(ctx context.Context, req *MsgVoteGasPrice) (*MsgVoteGasPriceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method VoteGasPrice not implemented") } +func (*UnimplementedMsgServer) VoteChainMeta(ctx context.Context, req *MsgVoteChainMeta) (*MsgVoteChainMetaResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VoteChainMeta not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -971,6 +1108,24 @@ func _Msg_VoteGasPrice_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Msg_VoteChainMeta_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgVoteChainMeta) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).VoteChainMeta(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/uexecutor.v1.Msg/VoteChainMeta", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).VoteChainMeta(ctx, req.(*MsgVoteChainMeta)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "uexecutor.v1.Msg", HandlerType: (*MsgServer)(nil), @@ -999,6 +1154,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "VoteGasPrice", Handler: _Msg_VoteGasPrice_Handler, }, + { + MethodName: "VoteChainMeta", + Handler: _Msg_VoteChainMeta_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "uexecutor/v1/tx.proto", @@ -1449,6 +1608,81 @@ func (m *MsgVoteGasPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *MsgVoteChainMeta) 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 *MsgVoteChainMeta) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgVoteChainMeta) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ObservedAt != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.ObservedAt)) + i-- + dAtA[i] = 0x28 + } + if m.ChainHeight != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.ChainHeight)) + i-- + dAtA[i] = 0x20 + } + if m.Price != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Price)) + i-- + dAtA[i] = 0x18 + } + if len(m.ObservedChainId) > 0 { + i -= len(m.ObservedChainId) + copy(dAtA[i:], m.ObservedChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ObservedChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgVoteChainMetaResponse) 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 *MsgVoteChainMetaResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgVoteChainMetaResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -1644,6 +1878,41 @@ func (m *MsgVoteGasPriceResponse) Size() (n int) { return n } +func (m *MsgVoteChainMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ObservedChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Price != 0 { + n += 1 + sovTx(uint64(m.Price)) + } + if m.ChainHeight != 0 { + n += 1 + sovTx(uint64(m.ChainHeight)) + } + if m.ObservedAt != 0 { + n += 1 + sovTx(uint64(m.ObservedAt)) + } + return n +} + +func (m *MsgVoteChainMetaResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -2889,6 +3158,227 @@ func (m *MsgVoteGasPriceResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgVoteChainMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgVoteChainMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgVoteChainMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObservedChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Price", wireType) + } + m.Price = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Price |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainHeight", wireType) + } + m.ChainHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ChainHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedAt", wireType) + } + m.ObservedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ObservedAt |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgVoteChainMetaResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgVoteChainMetaResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgVoteChainMetaResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/uexecutor/types/types.pb.go b/x/uexecutor/types/types.pb.go index 41fbf44e..462d4216 100644 --- a/x/uexecutor/types/types.pb.go +++ b/x/uexecutor/types/types.pb.go @@ -740,6 +740,7 @@ type OutboundObservation struct { BlockHeight uint64 `protobuf:"varint,2,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` TxHash string `protobuf:"bytes,3,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` ErrorMsg string `protobuf:"bytes,4,opt,name=error_msg,json=errorMsg,proto3" json:"error_msg,omitempty"` + GasFeeUsed string `protobuf:"bytes,5,opt,name=gas_fee_used,json=gasFeeUsed,proto3" json:"gas_fee_used,omitempty"` } func (m *OutboundObservation) Reset() { *m = OutboundObservation{} } @@ -803,6 +804,13 @@ func (m *OutboundObservation) GetErrorMsg() string { return "" } +func (m *OutboundObservation) GetGasFeeUsed() string { + if m != nil { + return m.GasFeeUsed + } + return "" +} + type OriginatingPcTx struct { TxHash string `protobuf:"bytes,1,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` LogIndex string `protobuf:"bytes,2,opt,name=log_index,json=logIndex,proto3" json:"log_index,omitempty"` @@ -871,6 +879,11 @@ type OutboundTx struct { OutboundStatus Status `protobuf:"varint,13,opt,name=outbound_status,json=outboundStatus,proto3,enum=uexecutor.v1.Status" json:"outbound_status,omitempty"` RevertInstructions *RevertInstructions `protobuf:"bytes,14,opt,name=revert_instructions,json=revertInstructions,proto3" json:"revert_instructions,omitempty"` PcRevertExecution *PCTx `protobuf:"bytes,15,opt,name=pc_revert_execution,json=pcRevertExecution,proto3" json:"pc_revert_execution,omitempty"` + GasPrice string `protobuf:"bytes,16,opt,name=gas_price,json=gasPrice,proto3" json:"gas_price,omitempty"` + GasFee string `protobuf:"bytes,17,opt,name=gas_fee,json=gasFee,proto3" json:"gas_fee,omitempty"` + PcRefundExecution *PCTx `protobuf:"bytes,18,opt,name=pc_refund_execution,json=pcRefundExecution,proto3" json:"pc_refund_execution,omitempty"` + RefundSwapError string `protobuf:"bytes,19,opt,name=refund_swap_error,json=refundSwapError,proto3" json:"refund_swap_error,omitempty"` + GasToken string `protobuf:"bytes,20,opt,name=gas_token,json=gasToken,proto3" json:"gas_token,omitempty"` } func (m *OutboundTx) Reset() { *m = OutboundTx{} } @@ -1010,6 +1023,41 @@ func (m *OutboundTx) GetPcRevertExecution() *PCTx { return nil } +func (m *OutboundTx) GetGasPrice() string { + if m != nil { + return m.GasPrice + } + return "" +} + +func (m *OutboundTx) GetGasFee() string { + if m != nil { + return m.GasFee + } + return "" +} + +func (m *OutboundTx) GetPcRefundExecution() *PCTx { + if m != nil { + return m.PcRefundExecution + } + return nil +} + +func (m *OutboundTx) GetRefundSwapError() string { + if m != nil { + return m.RefundSwapError + } + return "" +} + +func (m *OutboundTx) GetGasToken() string { + if m != nil { + return m.GasToken + } + return "" +} + type UniversalTx struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` InboundTx *Inbound `protobuf:"bytes,2,opt,name=inbound_tx,json=inboundTx,proto3" json:"inbound_tx,omitempty"` @@ -1370,115 +1418,121 @@ func init() { func init() { proto.RegisterFile("uexecutor/v1/types.proto", fileDescriptor_fab6d3ca71d1e2a5) } var fileDescriptor_fab6d3ca71d1e2a5 = []byte{ - // 1717 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4b, 0x6f, 0xdb, 0xd8, - 0x15, 0x36, 0xa9, 0xf7, 0x91, 0x63, 0x51, 0xd7, 0x4e, 0xc2, 0x24, 0x63, 0xd9, 0xd1, 0xcc, 0x34, - 0x86, 0x8b, 0xd8, 0x1d, 0xb7, 0x1d, 0xa0, 0x02, 0x8a, 0x42, 0x96, 0x69, 0x8f, 0x5a, 0x8f, 0xac, - 0x52, 0x92, 0x91, 0xe9, 0x86, 0xa0, 0xc9, 0x1b, 0x9a, 0xa8, 0x44, 0x0a, 0x7c, 0xa8, 0xf4, 0xa2, - 0xab, 0xee, 0x8a, 0x2e, 0xba, 0xcc, 0x32, 0xcb, 0xa2, 0x5d, 0xb4, 0x05, 0xfa, 0x23, 0x66, 0x39, - 0xdd, 0x15, 0xe8, 0xa6, 0x48, 0x16, 0x2d, 0xd0, 0x3f, 0x51, 0xdc, 0x07, 0x45, 0x52, 0x8f, 0xc9, - 0x14, 0x59, 0x14, 0xe8, 0x26, 0xe6, 0x79, 0xdc, 0x73, 0xbf, 0x73, 0xbe, 0x73, 0xce, 0x75, 0x0c, - 0x72, 0x88, 0x23, 0x6c, 0x84, 0x81, 0xeb, 0x1d, 0xcf, 0x3e, 0x39, 0x0e, 0xee, 0xa6, 0xd8, 0x3f, - 0x9a, 0x7a, 0x6e, 0xe0, 0xa2, 0xcd, 0xb9, 0xe5, 0x68, 0xf6, 0xc9, 0xe3, 0x1d, 0xcb, 0xb5, 0x5c, - 0x6a, 0x38, 0x26, 0x5f, 0xcc, 0xe7, 0x71, 0x5d, 0x9f, 0xd8, 0x8e, 0x7b, 0x4c, 0xff, 0x65, 0xaa, - 0xe6, 0x39, 0x14, 0xfb, 0xba, 0xa7, 0x4f, 0x7c, 0xb4, 0x0b, 0xe0, 0xbb, 0x13, 0xac, 0xcd, 0xf4, - 0x71, 0x88, 0x65, 0x71, 0x5f, 0x38, 0x28, 0xab, 0x15, 0xa2, 0xb9, 0x26, 0x8a, 0xd6, 0xee, 0xab, - 0xd7, 0x7b, 0x1b, 0xff, 0x7a, 0xbd, 0x27, 0xfc, 0xfa, 0x9f, 0x7f, 0x3a, 0x94, 0x12, 0x18, 0x53, - 0x7a, 0xba, 0xf9, 0x77, 0x11, 0xa4, 0x91, 0x63, 0xcf, 0xb0, 0xe7, 0xeb, 0xe3, 0xbe, 0x7e, 0x37, - 0x76, 0x75, 0x13, 0x6d, 0x81, 0x18, 0xb8, 0xb2, 0xb0, 0x2f, 0x1c, 0x54, 0x54, 0x31, 0x70, 0xd1, - 0x0e, 0x14, 0x92, 0xe8, 0x15, 0x95, 0x09, 0x08, 0x41, 0xde, 0xd4, 0x03, 0x5d, 0xce, 0x51, 0x25, - 0xfd, 0x46, 0x4f, 0xa0, 0x62, 0xe9, 0xbe, 0x36, 0xb6, 0x27, 0x76, 0x20, 0xe7, 0xa9, 0xa1, 0x6c, - 0xe9, 0xfe, 0x25, 0x91, 0xd1, 0xc7, 0x50, 0x9b, 0xe8, 0x91, 0xf6, 0x12, 0x63, 0x6d, 0x8a, 0x3d, - 0xcd, 0xd2, 0x7d, 0xb9, 0x40, 0x5d, 0x36, 0x27, 0x7a, 0x74, 0x8e, 0x71, 0x1f, 0x7b, 0x17, 0xba, - 0x8f, 0x3e, 0x05, 0x99, 0xb8, 0x4d, 0x3d, 0xdb, 0xf5, 0xec, 0xe0, 0x2e, 0xe3, 0x5f, 0xa4, 0xfe, - 0x3b, 0x13, 0x3d, 0xea, 0x73, 0x73, 0x72, 0x6e, 0x07, 0x0a, 0x8e, 0xeb, 0x18, 0x58, 0x2e, 0x31, - 0x94, 0x54, 0x40, 0x8f, 0xa1, 0x6c, 0x62, 0xdd, 0x1c, 0xdb, 0x0e, 0x96, 0xcb, 0x0c, 0x50, 0x2c, - 0xa3, 0xef, 0x43, 0x71, 0xa6, 0x11, 0x32, 0xe4, 0xca, 0xbe, 0x70, 0xb0, 0x75, 0xd2, 0x38, 0x4a, - 0x93, 0x71, 0x74, 0x8d, 0x3d, 0xfb, 0xa5, 0x6d, 0xe8, 0x81, 0xed, 0x3a, 0xc3, 0xbb, 0x29, 0x56, - 0x0b, 0x33, 0xf2, 0xa3, 0x75, 0x90, 0x2e, 0xe9, 0x93, 0xa4, 0xa4, 0x61, 0x5c, 0x47, 0x6d, 0xca, - 0x0a, 0xd9, 0xfc, 0x8d, 0x00, 0xd2, 0xe7, 0xb6, 0xe5, 0xd1, 0x10, 0x71, 0x75, 0x3f, 0x80, 0xca, - 0x24, 0xd6, 0xf1, 0x22, 0x27, 0x8a, 0x24, 0x0b, 0x71, 0x5d, 0x16, 0xb9, 0x6c, 0x16, 0x6b, 0xe1, - 0xcc, 0x63, 0xce, 0xe1, 0xbc, 0x12, 0x00, 0xcd, 0xc9, 0x6e, 0x1b, 0x86, 0x1b, 0x3a, 0x41, 0xd7, - 0x44, 0xcf, 0xa0, 0x66, 0xdc, 0xea, 0xb6, 0xa3, 0x39, 0xfa, 0x04, 0xfb, 0x53, 0xdd, 0xc0, 0x1c, - 0xd6, 0x16, 0x55, 0xf7, 0x62, 0x2d, 0x7a, 0x04, 0x65, 0xe6, 0x68, 0x9b, 0x1c, 0x5e, 0x89, 0xca, - 0x5d, 0x93, 0xc0, 0x76, 0x7f, 0xe1, 0x60, 0x8f, 0xa3, 0x63, 0xc2, 0x37, 0xa8, 0x94, 0xce, 0x50, - 0x34, 0x0d, 0x40, 0x2a, 0x9e, 0x61, 0x2f, 0xe8, 0x3a, 0x7e, 0xe0, 0x85, 0x06, 0xc1, 0xed, 0xa3, - 0x8f, 0x61, 0xeb, 0x65, 0xe8, 0x98, 0x9a, 0x87, 0x0d, 0x7b, 0x6a, 0x63, 0x27, 0xe0, 0xc0, 0xee, - 0x11, 0xad, 0x1a, 0x2b, 0x5b, 0xdf, 0x8a, 0xaf, 0xd8, 0x4d, 0xae, 0xf0, 0x68, 0x34, 0xcd, 0x4e, - 0x85, 0x6b, 0xfe, 0x3b, 0x07, 0xa5, 0xae, 0x73, 0xe3, 0x86, 0x8e, 0x89, 0x9e, 0xc2, 0xa6, 0xef, - 0x86, 0x9e, 0x81, 0x35, 0x9a, 0x02, 0x0f, 0x5c, 0x65, 0xba, 0x0e, 0x51, 0xa1, 0x87, 0x50, 0x0a, - 0x22, 0xed, 0x56, 0xf7, 0x6f, 0x79, 0xb6, 0xc5, 0x20, 0xfa, 0x4c, 0xf7, 0x6f, 0xd1, 0x03, 0x28, - 0xfa, 0xd8, 0x31, 0xe7, 0xd9, 0x72, 0x89, 0x30, 0x9b, 0x20, 0x65, 0xdd, 0x9f, 0x28, 0xc8, 0x29, - 0x7d, 0x42, 0x92, 0xe5, 0x5d, 0xcf, 0x25, 0x32, 0xc0, 0xba, 0xef, 0xe3, 0x40, 0xd3, 0x4d, 0xd3, - 0xe3, 0x1d, 0x5e, 0xa1, 0x9a, 0xb6, 0x69, 0x7a, 0x64, 0xa4, 0xc6, 0xae, 0xa5, 0xd9, 0x8e, 0x89, - 0x23, 0xde, 0xda, 0xe5, 0xb1, 0x6b, 0x75, 0x89, 0x8c, 0x9e, 0x53, 0x88, 0xb4, 0x85, 0xcb, 0xb4, - 0x85, 0x77, 0xb2, 0x2d, 0x3c, 0x8c, 0x68, 0xe3, 0x16, 0x03, 0xfa, 0x13, 0xfd, 0x04, 0xea, 0x4b, - 0x4d, 0x4a, 0x7b, 0xbf, 0xba, 0xd8, 0xfb, 0x8b, 0x3b, 0x41, 0x95, 0xc2, 0xc5, 0x2d, 0xf1, 0x6d, - 0xa8, 0xcf, 0x52, 0x13, 0xa2, 0xd1, 0x65, 0x00, 0x14, 0xa0, 0x94, 0x36, 0x9c, 0x91, 0xc5, 0xf0, - 0x53, 0xd8, 0x5e, 0xc1, 0x88, 0x5c, 0xa5, 0x77, 0xef, 0x67, 0xef, 0x5e, 0x6e, 0x04, 0x15, 0x79, - 0xcb, 0xcd, 0xb1, 0x03, 0x05, 0xdb, 0xef, 0x28, 0x6d, 0x79, 0x93, 0xee, 0x3c, 0x26, 0xb4, 0xca, - 0x71, 0xcb, 0x35, 0xbf, 0x14, 0x20, 0xdf, 0xef, 0x0c, 0xa3, 0x34, 0x8f, 0xc2, 0x1a, 0x1e, 0xc5, - 0x0c, 0x8f, 0x8f, 0x80, 0x2c, 0x2d, 0x2d, 0xf4, 0xb1, 0x49, 0x19, 0xce, 0xab, 0x25, 0x4b, 0xf7, - 0x47, 0x3e, 0xa6, 0x6d, 0x73, 0x33, 0x76, 0x8d, 0x9f, 0x6b, 0xb7, 0xd8, 0xb6, 0x6e, 0x19, 0xcb, - 0x79, 0xb5, 0x4a, 0x75, 0x9f, 0x51, 0x15, 0x8d, 0x1a, 0xe8, 0x41, 0x18, 0x6f, 0x2b, 0x2e, 0x11, - 0x22, 0xb1, 0xe7, 0xb9, 0x9e, 0x36, 0xf1, 0xad, 0x98, 0x48, 0xaa, 0xf8, 0xdc, 0xb7, 0x5a, 0x1f, - 0xa4, 0x27, 0xa5, 0x96, 0x5a, 0xd3, 0x86, 0x16, 0x44, 0xcd, 0x3f, 0x0b, 0xb0, 0x7d, 0x15, 0x06, - 0xb4, 0x73, 0xaf, 0x6e, 0x7c, 0xec, 0xcd, 0xd8, 0xb2, 0x90, 0xa1, 0xe4, 0x87, 0x86, 0x81, 0x7d, - 0x9f, 0x66, 0x56, 0x56, 0x63, 0x71, 0x09, 0xa7, 0xb8, 0x8c, 0x33, 0x55, 0x96, 0x5c, 0xa6, 0x2c, - 0x19, 0xa0, 0xf9, 0x05, 0xa0, 0xcf, 0x62, 0x90, 0x8d, 0x04, 0xa4, 0xcb, 0xa1, 0x69, 0x6e, 0x82, - 0xad, 0x39, 0x81, 0xda, 0x95, 0x67, 0x5b, 0xb6, 0xa3, 0x07, 0xb6, 0x63, 0xf5, 0x8d, 0xaf, 0x23, - 0x22, 0xd3, 0xe3, 0x62, 0xb6, 0xc7, 0x5b, 0x1f, 0xad, 0x58, 0x20, 0x6e, 0x12, 0x59, 0x63, 0x25, - 0xfa, 0x63, 0x01, 0x20, 0x2e, 0xd1, 0x30, 0x22, 0xcd, 0x69, 0x62, 0x3f, 0xa0, 0x3e, 0xae, 0x93, - 0x99, 0x71, 0x29, 0x65, 0x60, 0x83, 0x9e, 0x99, 0x5b, 0x71, 0xfd, 0xdc, 0xe6, 0x32, 0x73, 0x7b, - 0x04, 0xdb, 0x38, 0x0a, 0xb0, 0xe7, 0x90, 0x35, 0x96, 0x0c, 0x30, 0x2b, 0x58, 0x3d, 0x36, 0xb5, - 0xe7, 0x83, 0x7c, 0x00, 0xd2, 0xd4, 0x33, 0x4e, 0xbe, 0x93, 0x76, 0x66, 0x9b, 0x60, 0x8b, 0xea, - 0x13, 0xcf, 0xa4, 0x2f, 0x8b, 0x99, 0xbe, 0x94, 0xa1, 0x14, 0x0f, 0x2d, 0xeb, 0x9f, 0x58, 0xcc, - 0xbe, 0xbb, 0xe5, 0x85, 0x77, 0x37, 0xb5, 0x24, 0x2a, 0xdf, 0x60, 0x49, 0x9c, 0x40, 0x81, 0x96, - 0x94, 0xce, 0x72, 0xf5, 0x64, 0x37, 0xeb, 0xbc, 0xc0, 0xa9, 0x9a, 0x9f, 0x12, 0x66, 0x4f, 0xa1, - 0xca, 0xb8, 0xc7, 0x26, 0x39, 0xc9, 0xc6, 0xfa, 0xe9, 0xc2, 0xc9, 0xe5, 0x06, 0x56, 0x21, 0x3e, - 0x35, 0x8c, 0xc8, 0x6f, 0x1d, 0xb6, 0x49, 0x87, 0xb9, 0xa2, 0x8a, 0xb6, 0x89, 0x7e, 0x08, 0xb5, - 0x79, 0x63, 0xf1, 0x81, 0xba, 0xb7, 0x0a, 0xfe, 0x80, 0xda, 0xd4, 0xad, 0xd8, 0x99, 0xc9, 0xeb, - 0x36, 0xce, 0xd6, 0x7b, 0x6c, 0x9c, 0x53, 0xd8, 0x9e, 0x1a, 0x1a, 0x8f, 0xca, 0xce, 0x93, 0x37, - 0xbc, 0x46, 0x43, 0xa2, 0x6c, 0x48, 0xb2, 0x79, 0xd4, 0xfa, 0xd4, 0x60, 0xa1, 0x95, 0xd8, 0x39, - 0xb5, 0x9f, 0x7e, 0x27, 0x42, 0x75, 0xbe, 0x66, 0xe7, 0xf9, 0x0b, 0xf3, 0xfc, 0xbf, 0x07, 0x60, - 0xb3, 0xc7, 0x8a, 0x94, 0x54, 0xa4, 0x97, 0xdc, 0xcf, 0x5e, 0xc2, 0x1f, 0x33, 0xb5, 0xc2, 0x1d, - 0x87, 0x11, 0x7a, 0x16, 0xb3, 0x97, 0xdb, 0xcf, 0xad, 0x41, 0xc5, 0x28, 0xfb, 0x01, 0x54, 0xe7, - 0xe5, 0x0d, 0x22, 0x39, 0x4f, 0xdd, 0xe5, 0xd5, 0x94, 0x0d, 0x23, 0x15, 0xdc, 0x64, 0xb8, 0x7e, - 0x0c, 0xc9, 0x6b, 0x10, 0x53, 0x53, 0xa0, 0xd4, 0xec, 0xad, 0x79, 0x45, 0x86, 0x11, 0x67, 0xa9, - 0x36, 0x3f, 0xc8, 0x14, 0xad, 0x0f, 0xd3, 0x8b, 0xef, 0xc1, 0xaa, 0x5f, 0x11, 0x82, 0xa8, 0xf9, - 0x87, 0x1c, 0xdc, 0xe3, 0xb9, 0x5e, 0x62, 0x4b, 0x37, 0xee, 0xfe, 0x4f, 0x9e, 0xef, 0xd6, 0xe2, - 0xf3, 0xfd, 0x74, 0x25, 0xbf, 0x6c, 0x40, 0x59, 0xe6, 0xff, 0xfb, 0xb7, 0xbc, 0xd5, 0x78, 0xf5, - 0x7a, 0x4f, 0x88, 0x29, 0xab, 0x27, 0x94, 0xf1, 0x26, 0x6c, 0xfe, 0x55, 0x00, 0x29, 0xe9, 0x1c, - 0x4e, 0xd8, 0x7f, 0xb5, 0x90, 0xd7, 0x52, 0x97, 0xa1, 0x28, 0xb7, 0x9e, 0xa2, 0xfc, 0xd7, 0x50, - 0x54, 0x58, 0xa0, 0xa8, 0xd5, 0x4c, 0xe7, 0x73, 0x7f, 0xc5, 0xb3, 0x16, 0x44, 0xcd, 0xdf, 0x8b, - 0x50, 0x4f, 0x75, 0x33, 0x4f, 0xaa, 0x95, 0x19, 0x51, 0x81, 0x16, 0xff, 0xc9, 0x4a, 0x0a, 0x39, - 0x79, 0xab, 0x06, 0x55, 0x7c, 0xc7, 0xa0, 0xfe, 0x28, 0x3b, 0xa8, 0xb9, 0x55, 0x14, 0x2f, 0x96, - 0xfb, 0x9d, 0xe3, 0x9a, 0x7f, 0x8f, 0x71, 0x15, 0xde, 0x31, 0xae, 0x87, 0x17, 0x20, 0x2d, 0xfe, - 0xdf, 0x09, 0x3d, 0x00, 0xe4, 0xdb, 0x96, 0x83, 0xcd, 0xb4, 0x45, 0xda, 0x40, 0x4f, 0xe0, 0x61, - 0x98, 0x5c, 0x9b, 0x31, 0x0a, 0x87, 0xbf, 0xca, 0x56, 0x9d, 0x6f, 0xf6, 0x0f, 0x61, 0x6f, 0xd4, - 0xeb, 0x5e, 0x2b, 0xea, 0xa0, 0x7d, 0xa9, 0x0d, 0x5f, 0x68, 0x83, 0x61, 0x7b, 0x38, 0x1a, 0x68, - 0xa3, 0xde, 0xa0, 0xaf, 0x74, 0xba, 0xe7, 0x5d, 0xe5, 0x4c, 0xda, 0x40, 0xdb, 0x50, 0xeb, 0xf6, - 0x4e, 0xaf, 0x46, 0xbd, 0x33, 0x6d, 0x30, 0xea, 0x74, 0x94, 0xc1, 0x40, 0x12, 0xd0, 0x2e, 0x3c, - 0xea, 0x2b, 0xbd, 0xb3, 0x6e, 0xef, 0x42, 0x8b, 0x8d, 0xca, 0x0b, 0xa5, 0x33, 0x1a, 0x76, 0xaf, - 0x7a, 0x92, 0x88, 0x1e, 0xc2, 0x76, 0xbf, 0xc3, 0x35, 0x4a, 0x72, 0x2e, 0x47, 0xc0, 0xa7, 0x0d, - 0xe7, 0xed, 0xee, 0xa5, 0x72, 0x26, 0xe5, 0xd1, 0x7d, 0xa8, 0xf7, 0x3b, 0x5a, 0x1c, 0x52, 0x55, - 0xae, 0x15, 0x75, 0x28, 0x15, 0xd0, 0x0e, 0x48, 0x57, 0xa3, 0x21, 0x8b, 0xcf, 0x8d, 0x52, 0x31, - 0xa3, 0x8d, 0x43, 0x97, 0x08, 0xce, 0xb9, 0x96, 0xc7, 0x2d, 0xa3, 0x4d, 0x28, 0x77, 0xda, 0xbd, - 0x8e, 0x42, 0xa4, 0xca, 0xe1, 0x29, 0x14, 0x79, 0xe6, 0x35, 0xa8, 0x66, 0xb3, 0xac, 0x42, 0x29, - 0xbe, 0x40, 0x20, 0xa7, 0xae, 0x4e, 0x07, 0x8a, 0x7a, 0xad, 0x9c, 0x49, 0x22, 0x91, 0x18, 0x20, - 0xe5, 0x4c, 0xca, 0x1d, 0xfe, 0x12, 0x8a, 0x6c, 0x8b, 0x20, 0x04, 0x5b, 0xa9, 0x18, 0xda, 0xf0, - 0x85, 0xb4, 0x81, 0x4a, 0x90, 0xbb, 0x68, 0x93, 0x02, 0x6d, 0x43, 0xed, 0xa2, 0x3d, 0xd0, 0xda, - 0x04, 0x78, 0xfb, 0x8b, 0xcb, 0xab, 0x36, 0x89, 0x54, 0x81, 0xc2, 0xf9, 0xa8, 0x77, 0x46, 0x0a, - 0x71, 0x1f, 0xea, 0xf4, 0x33, 0xe3, 0x91, 0xa7, 0x30, 0xb8, 0x50, 0x20, 0x17, 0xc4, 0xc5, 0xe5, - 0x15, 0x29, 0x1e, 0xfe, 0x45, 0x80, 0xed, 0x15, 0xcb, 0x0c, 0x3d, 0x85, 0xdd, 0xd8, 0xf7, 0x52, - 0xb9, 0x68, 0x77, 0xbe, 0xd0, 0x96, 0xb0, 0x3d, 0x00, 0xb4, 0xe0, 0xc2, 0xa0, 0xca, 0xb0, 0xb3, - 0xa0, 0x67, 0x20, 0x45, 0xf4, 0x11, 0xec, 0xaf, 0xb2, 0x64, 0x30, 0xe7, 0x50, 0x13, 0x1a, 0xcb, - 0x71, 0xb3, 0x79, 0x9d, 0xf6, 0xbf, 0x7c, 0xd3, 0x10, 0xbe, 0x7a, 0xd3, 0x10, 0xfe, 0xf1, 0xa6, - 0x21, 0xfc, 0xf6, 0x6d, 0x63, 0xe3, 0xab, 0xb7, 0x8d, 0x8d, 0xbf, 0xbd, 0x6d, 0x6c, 0xfc, 0xec, - 0x53, 0xcb, 0x0e, 0x6e, 0xc3, 0x9b, 0x23, 0xc3, 0x9d, 0x1c, 0x4f, 0x43, 0xff, 0x96, 0xee, 0x33, - 0xfa, 0xf5, 0x9c, 0x7e, 0x3e, 0x77, 0x5c, 0x13, 0x1f, 0x47, 0xc7, 0xc9, 0x84, 0xd0, 0x3f, 0xfa, - 0xdc, 0x14, 0xe9, 0x9f, 0x6f, 0xbe, 0xfb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x67, 0xec, - 0x6e, 0x11, 0x12, 0x00, 0x00, + // 1811 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4f, 0x6f, 0xdb, 0xd8, + 0x11, 0x37, 0xf5, 0x5f, 0x23, 0xc7, 0xa2, 0x9e, 0x94, 0x84, 0x49, 0xd6, 0xb2, 0xa3, 0xdd, 0x6d, + 0x0c, 0x17, 0xb1, 0xbb, 0x69, 0xbb, 0x40, 0x05, 0x14, 0x85, 0x2c, 0xd3, 0x5e, 0xb5, 0x5e, 0x59, + 0xa5, 0x24, 0x23, 0xdb, 0x0b, 0xf1, 0x4c, 0xbe, 0xd0, 0xc4, 0x5a, 0xa4, 0x40, 0x52, 0x0a, 0x7d, + 0xe8, 0xa9, 0xb7, 0xa2, 0x87, 0x1e, 0x73, 0xcc, 0xb1, 0x68, 0x2f, 0x3d, 0xf4, 0x43, 0xec, 0x71, + 0x8b, 0x5e, 0x0a, 0xf4, 0x52, 0x24, 0x87, 0x16, 0xe8, 0xad, 0x9f, 0xa0, 0x78, 0x7f, 0x28, 0x92, + 0xb2, 0x94, 0x6c, 0xb1, 0x87, 0x02, 0xbd, 0x58, 0x9c, 0x79, 0xf3, 0xe6, 0xfd, 0x66, 0xe6, 0x37, + 0xf3, 0x68, 0x82, 0x32, 0x23, 0x21, 0x31, 0x66, 0x81, 0xeb, 0x1d, 0xce, 0x3f, 0x39, 0x0c, 0x6e, + 0xa6, 0xc4, 0x3f, 0x98, 0x7a, 0x6e, 0xe0, 0xa2, 0xcd, 0xc5, 0xca, 0xc1, 0xfc, 0x93, 0x87, 0x0d, + 0xcb, 0xb5, 0x5c, 0xb6, 0x70, 0x48, 0x9f, 0xb8, 0xcd, 0xc3, 0x1a, 0x9e, 0xd8, 0x8e, 0x7b, 0xc8, + 0xfe, 0x72, 0x55, 0xeb, 0x04, 0x0a, 0x03, 0xec, 0xe1, 0x89, 0x8f, 0xb6, 0x01, 0x7c, 0x77, 0x42, + 0xf4, 0x39, 0xbe, 0x9e, 0x11, 0x25, 0xb3, 0x2b, 0xed, 0x95, 0xb4, 0x32, 0xd5, 0x5c, 0x50, 0x45, + 0x7b, 0xfb, 0xd5, 0xeb, 0x9d, 0x8d, 0x7f, 0xbe, 0xde, 0x91, 0x7e, 0xfd, 0x8f, 0x3f, 0xee, 0xcb, + 0x31, 0x8c, 0x29, 0xdb, 0xdd, 0xfa, 0x5b, 0x06, 0xe4, 0xb1, 0x63, 0xcf, 0x89, 0xe7, 0xe3, 0xeb, + 0x01, 0xbe, 0xb9, 0x76, 0xb1, 0x89, 0xb6, 0x20, 0x13, 0xb8, 0x8a, 0xb4, 0x2b, 0xed, 0x95, 0xb5, + 0x4c, 0xe0, 0xa2, 0x06, 0xe4, 0x63, 0xef, 0x65, 0x8d, 0x0b, 0x08, 0x41, 0xce, 0xc4, 0x01, 0x56, + 0xb2, 0x4c, 0xc9, 0x9e, 0xd1, 0x23, 0x28, 0x5b, 0xd8, 0xd7, 0xaf, 0xed, 0x89, 0x1d, 0x28, 0x39, + 0xb6, 0x50, 0xb2, 0xb0, 0x7f, 0x46, 0x65, 0xf4, 0x31, 0x54, 0x27, 0x38, 0xd4, 0x5f, 0x10, 0xa2, + 0x4f, 0x89, 0xa7, 0x5b, 0xd8, 0x57, 0xf2, 0xcc, 0x64, 0x73, 0x82, 0xc3, 0x13, 0x42, 0x06, 0xc4, + 0x3b, 0xc5, 0x3e, 0xfa, 0x14, 0x14, 0x6a, 0x36, 0xf5, 0x6c, 0xd7, 0xb3, 0x83, 0x9b, 0x94, 0x7d, + 0x81, 0xd9, 0x37, 0x26, 0x38, 0x1c, 0x88, 0xe5, 0x78, 0x5f, 0x03, 0xf2, 0x8e, 0xeb, 0x18, 0x44, + 0x29, 0x72, 0x94, 0x4c, 0x40, 0x0f, 0xa1, 0x64, 0x12, 0x6c, 0x5e, 0xdb, 0x0e, 0x51, 0x4a, 0x1c, + 0x50, 0x24, 0xa3, 0x1f, 0x42, 0x61, 0xae, 0xd3, 0x62, 0x28, 0xe5, 0x5d, 0x69, 0x6f, 0xeb, 0x59, + 0xf3, 0x20, 0x59, 0x8c, 0x83, 0x0b, 0xe2, 0xd9, 0x2f, 0x6c, 0x03, 0x07, 0xb6, 0xeb, 0x8c, 0x6e, + 0xa6, 0x44, 0xcb, 0xcf, 0xe9, 0x4f, 0x7b, 0x2f, 0x99, 0xd2, 0x47, 0x71, 0x4a, 0x67, 0x51, 0x1e, + 0xf5, 0x29, 0x4f, 0x64, 0xeb, 0x37, 0x12, 0xc8, 0x9f, 0xdb, 0x96, 0xc7, 0x5c, 0x44, 0xd9, 0xfd, + 0x00, 0xca, 0x93, 0x48, 0x27, 0x92, 0x1c, 0x2b, 0xe2, 0x28, 0x32, 0xeb, 0xa2, 0xc8, 0xa6, 0xa3, + 0x58, 0x0b, 0x67, 0xe1, 0x73, 0x01, 0xe7, 0x95, 0x04, 0x68, 0x51, 0xec, 0x8e, 0x61, 0xb8, 0x33, + 0x27, 0xe8, 0x99, 0xe8, 0x09, 0x54, 0x8d, 0x2b, 0x6c, 0x3b, 0xba, 0x83, 0x27, 0xc4, 0x9f, 0x62, + 0x83, 0x08, 0x58, 0x5b, 0x4c, 0xdd, 0x8f, 0xb4, 0xe8, 0x01, 0x94, 0xb8, 0xa1, 0x6d, 0x0a, 0x78, + 0x45, 0x26, 0xf7, 0x4c, 0x0a, 0xdb, 0x7d, 0xe9, 0x10, 0x4f, 0xa0, 0xe3, 0xc2, 0x37, 0xc8, 0x14, + 0xe6, 0x28, 0x5a, 0x06, 0x20, 0x8d, 0xcc, 0x89, 0x17, 0xf4, 0x1c, 0x3f, 0xf0, 0x66, 0x06, 0xc5, + 0xed, 0xa3, 0x8f, 0x61, 0xeb, 0xc5, 0xcc, 0x31, 0x75, 0x8f, 0x18, 0xf6, 0xd4, 0x26, 0x4e, 0x20, + 0x80, 0xdd, 0xa1, 0x5a, 0x2d, 0x52, 0xb6, 0xbf, 0x13, 0x1d, 0xb1, 0x1d, 0x1f, 0xe1, 0x31, 0x6f, + 0xba, 0x9d, 0x70, 0xd7, 0xfa, 0x57, 0x16, 0x8a, 0x3d, 0xe7, 0xd2, 0x9d, 0x39, 0x26, 0x7a, 0x0c, + 0x9b, 0xbe, 0x3b, 0xf3, 0x0c, 0xa2, 0xb3, 0x10, 0x84, 0xe3, 0x0a, 0xd7, 0x75, 0xa9, 0x0a, 0xdd, + 0x87, 0x62, 0x10, 0xea, 0x57, 0xd8, 0xbf, 0x12, 0xd1, 0x16, 0x82, 0xf0, 0x33, 0xec, 0x5f, 0xa1, + 0x7b, 0x50, 0xf0, 0x89, 0x63, 0x2e, 0xa2, 0x15, 0x12, 0xad, 0x6c, 0x8c, 0x94, 0xb3, 0x3f, 0x56, + 0xd0, 0x5d, 0x78, 0x42, 0x83, 0x15, 0xac, 0x17, 0x12, 0x6d, 0x60, 0xec, 0xfb, 0x24, 0xd0, 0xb1, + 0x69, 0x7a, 0x82, 0xe1, 0x65, 0xa6, 0xe9, 0x98, 0xa6, 0x47, 0x5b, 0xea, 0xda, 0xb5, 0x74, 0xdb, + 0x31, 0x49, 0x28, 0xa8, 0x5d, 0xba, 0x76, 0xad, 0x1e, 0x95, 0xd1, 0x53, 0x06, 0x91, 0x51, 0xb8, + 0xc4, 0x28, 0xdc, 0x48, 0x53, 0x78, 0x14, 0x32, 0xe2, 0x16, 0x02, 0xf6, 0x8b, 0x7e, 0x06, 0xb5, + 0x5b, 0x24, 0x65, 0xdc, 0xaf, 0x2c, 0x73, 0x7f, 0x79, 0x26, 0x68, 0xf2, 0x6c, 0x79, 0x4a, 0x7c, + 0x17, 0x6a, 0xf3, 0x44, 0x87, 0xe8, 0x6c, 0x18, 0x00, 0x03, 0x28, 0x27, 0x17, 0x8e, 0xe9, 0x60, + 0xf8, 0x39, 0xd4, 0x57, 0x54, 0x44, 0xa9, 0xb0, 0xb3, 0x77, 0xd3, 0x67, 0xdf, 0x26, 0x82, 0x86, + 0xbc, 0xdb, 0xe4, 0x68, 0x40, 0xde, 0xf6, 0xbb, 0x6a, 0x47, 0xd9, 0x64, 0x33, 0x8f, 0x0b, 0xed, + 0x52, 0x44, 0xb9, 0xd6, 0x57, 0x12, 0xe4, 0x06, 0xdd, 0x51, 0x98, 0xac, 0xa3, 0xb4, 0xa6, 0x8e, + 0x99, 0x54, 0x1d, 0x1f, 0x00, 0x1d, 0x5a, 0xfa, 0xcc, 0x27, 0x26, 0xab, 0x70, 0x4e, 0x2b, 0x5a, + 0xd8, 0x1f, 0xfb, 0x84, 0xd1, 0xe6, 0xf2, 0xda, 0x35, 0xbe, 0xd4, 0xaf, 0x88, 0x6d, 0x5d, 0xf1, + 0x2a, 0xe7, 0xb4, 0x0a, 0xd3, 0x7d, 0xc6, 0x54, 0xcc, 0x6b, 0x80, 0x83, 0x59, 0x34, 0xad, 0x84, + 0x44, 0x0b, 0x49, 0x3c, 0xcf, 0xf5, 0xf4, 0x89, 0x6f, 0x45, 0x85, 0x64, 0x8a, 0xcf, 0x7d, 0xab, + 0xfd, 0x41, 0xb2, 0x53, 0xaa, 0x89, 0x31, 0x6d, 0xe8, 0x41, 0xd8, 0xfa, 0x8b, 0x04, 0xf5, 0xf3, + 0x59, 0xc0, 0x98, 0x7b, 0x7e, 0xe9, 0x13, 0x6f, 0xce, 0x87, 0x85, 0x02, 0x45, 0x7f, 0x66, 0x18, + 0xc4, 0xf7, 0x59, 0x64, 0x25, 0x2d, 0x12, 0x6f, 0xe1, 0xcc, 0xdc, 0xc6, 0x99, 0x48, 0x4b, 0x36, + 0x95, 0x96, 0x14, 0xd0, 0x5c, 0x1a, 0x28, 0xda, 0x85, 0x4d, 0x9a, 0x1b, 0x3a, 0x94, 0x59, 0x7e, + 0x38, 0x97, 0xc1, 0xc2, 0xfe, 0x09, 0x21, 0x34, 0x45, 0xed, 0x27, 0x51, 0x18, 0xcd, 0x38, 0x0c, + 0x57, 0x80, 0xd7, 0xdd, 0x18, 0x7d, 0x6b, 0x02, 0xd5, 0x73, 0xcf, 0xb6, 0x6c, 0x07, 0x07, 0xb6, + 0x63, 0x0d, 0x8c, 0x77, 0x95, 0x2a, 0xd5, 0x05, 0x99, 0x74, 0x17, 0xb4, 0x3f, 0x5a, 0x31, 0x62, + 0xdc, 0xd8, 0xb3, 0xce, 0x93, 0xf8, 0xef, 0x02, 0x40, 0x94, 0xc4, 0x51, 0x48, 0xe9, 0x6b, 0x12, + 0x3f, 0x60, 0x36, 0xae, 0x93, 0x9a, 0x02, 0x72, 0x62, 0x81, 0x8f, 0x82, 0x54, 0x67, 0x67, 0xd6, + 0x77, 0x76, 0x36, 0xd5, 0xd9, 0x07, 0x50, 0x27, 0x61, 0x40, 0x3c, 0x87, 0x0e, 0xba, 0xb8, 0xc5, + 0x79, 0x4a, 0x6b, 0xd1, 0x52, 0x67, 0xd1, 0xea, 0x7b, 0x20, 0x4f, 0x3d, 0xe3, 0xd9, 0xf7, 0x92, + 0xc6, 0x3c, 0xbf, 0x5b, 0x4c, 0x1f, 0x5b, 0xc6, 0xcc, 0x2d, 0xa4, 0x98, 0xab, 0x40, 0x31, 0x6a, + 0x6b, 0xce, 0xb0, 0x48, 0x4c, 0xdf, 0xcc, 0xa5, 0xa5, 0x9b, 0x39, 0x31, 0x46, 0xca, 0xdf, 0x60, + 0x8c, 0x3c, 0x83, 0x3c, 0x4b, 0x29, 0xeb, 0xf6, 0xca, 0xb3, 0xed, 0xb4, 0xf1, 0x52, 0x4d, 0xb5, + 0xdc, 0x94, 0x56, 0xf6, 0x08, 0x2a, 0xbc, 0xf6, 0xc4, 0xa4, 0x3b, 0x79, 0xe3, 0x3f, 0x5e, 0xda, + 0x79, 0x9b, 0xe2, 0x1a, 0x44, 0xbb, 0x46, 0x21, 0x7d, 0x2f, 0xb1, 0x4d, 0xd6, 0xee, 0x65, 0x2d, + 0x63, 0x9b, 0xe8, 0xc7, 0x50, 0x5d, 0x10, 0x4b, 0xb4, 0xdc, 0x9d, 0x55, 0xf0, 0x87, 0x6c, 0x4d, + 0xdb, 0x8a, 0x8c, 0xb9, 0xbc, 0x6e, 0x26, 0x6d, 0x7d, 0x8b, 0x99, 0x74, 0x04, 0xf5, 0xa9, 0xa1, + 0x0b, 0xaf, 0x7c, 0x3f, 0xbd, 0xe5, 0xab, 0xcc, 0x25, 0x4a, 0xbb, 0xa4, 0xb3, 0x49, 0xab, 0x4d, + 0x0d, 0xee, 0x5a, 0x8d, 0x8c, 0xa3, 0x4a, 0x4d, 0x3d, 0xdb, 0x20, 0x8a, 0xbc, 0xa8, 0xd4, 0x80, + 0xca, 0xb4, 0x41, 0x44, 0xfb, 0x29, 0x35, 0x5e, 0x79, 0xde, 0x79, 0x8b, 0x93, 0xd9, 0x7d, 0x19, + 0x9f, 0x8c, 0xde, 0x7d, 0x32, 0xb5, 0x8e, 0x4f, 0xde, 0x87, 0x9a, 0x70, 0xe0, 0xbf, 0xc4, 0x53, + 0x9d, 0xf5, 0xbc, 0x52, 0x67, 0xc7, 0x54, 0xf9, 0xc2, 0xf0, 0x25, 0x9e, 0xaa, 0x54, 0x1d, 0xa1, + 0x0c, 0xdc, 0x2f, 0x89, 0xa3, 0x34, 0x16, 0x28, 0x47, 0x54, 0x4e, 0x0c, 0xe1, 0xdf, 0x65, 0xa0, + 0xb2, 0xb8, 0x4b, 0x16, 0x25, 0x94, 0x16, 0x25, 0xfc, 0x01, 0x80, 0xcd, 0x6f, 0x64, 0xca, 0x8a, + 0x0c, 0x43, 0x7b, 0x37, 0x8d, 0x56, 0xdc, 0xd8, 0x5a, 0x59, 0x18, 0x8e, 0x42, 0xf4, 0x24, 0x22, + 0x60, 0x76, 0x37, 0xbb, 0x26, 0x3c, 0xce, 0xba, 0x1f, 0x41, 0x65, 0xc1, 0x90, 0x20, 0x54, 0x72, + 0xcc, 0x5c, 0x59, 0xcd, 0xba, 0x51, 0xa8, 0x81, 0x1b, 0xcf, 0x87, 0x9f, 0x42, 0x7c, 0xe5, 0x45, + 0xec, 0xca, 0x33, 0x76, 0xed, 0xac, 0xb9, 0x2a, 0x47, 0xa1, 0x20, 0x5a, 0x75, 0xb1, 0x91, 0x2b, + 0xda, 0x1f, 0x26, 0xa7, 0xfb, 0xbd, 0x55, 0xef, 0x41, 0x41, 0xd8, 0xfa, 0x43, 0x16, 0xee, 0x88, + 0x58, 0xcf, 0x88, 0x85, 0x8d, 0x9b, 0xff, 0x93, 0x77, 0x94, 0xf6, 0xf2, 0x3b, 0xca, 0xe3, 0x95, + 0xf5, 0xe5, 0x33, 0x86, 0x47, 0xfe, 0xbf, 0x7f, 0x61, 0x69, 0x37, 0x5f, 0xbd, 0xde, 0x91, 0xa2, + 0x92, 0xd5, 0xe2, 0x92, 0x09, 0x12, 0xb6, 0xfe, 0x2c, 0x81, 0x1c, 0x33, 0x47, 0x14, 0xec, 0xbf, + 0xba, 0x53, 0xd6, 0x96, 0x2e, 0x55, 0xa2, 0xec, 0xfa, 0x12, 0xe5, 0xde, 0x51, 0xa2, 0xfc, 0x52, + 0x89, 0xda, 0xad, 0x64, 0x3c, 0x77, 0x57, 0xdc, 0xcc, 0x41, 0xd8, 0xfa, 0x7d, 0x06, 0x6a, 0x09, + 0x36, 0x8b, 0xa0, 0xda, 0xa9, 0x16, 0x95, 0x58, 0xf2, 0x1f, 0xad, 0x2c, 0xa1, 0x28, 0xde, 0xaa, + 0x46, 0xcd, 0xbc, 0xa7, 0x51, 0x7f, 0x92, 0x6e, 0xd4, 0xec, 0xaa, 0x12, 0x2f, 0xa7, 0xfb, 0xbd, + 0xed, 0x9a, 0xfb, 0x16, 0xed, 0x2a, 0xbd, 0xa7, 0x5d, 0xf7, 0x4f, 0x41, 0x5e, 0xfe, 0x07, 0x11, + 0xdd, 0x03, 0xe4, 0xdb, 0x96, 0x43, 0xcc, 0xe4, 0x8a, 0xbc, 0x81, 0x1e, 0xc1, 0xfd, 0x59, 0x7c, + 0x6c, 0x6a, 0x51, 0xda, 0xff, 0x55, 0x3a, 0xeb, 0xe2, 0x72, 0xfa, 0x10, 0x76, 0xc6, 0xfd, 0xde, + 0x85, 0xaa, 0x0d, 0x3b, 0x67, 0xfa, 0xe8, 0xb9, 0x3e, 0x1c, 0x75, 0x46, 0xe3, 0xa1, 0x3e, 0xee, + 0x0f, 0x07, 0x6a, 0xb7, 0x77, 0xd2, 0x53, 0x8f, 0xe5, 0x0d, 0x54, 0x87, 0x6a, 0xaf, 0x7f, 0x74, + 0x3e, 0xee, 0x1f, 0xeb, 0xc3, 0x71, 0xb7, 0xab, 0x0e, 0x87, 0xb2, 0x84, 0xb6, 0xe1, 0xc1, 0x40, + 0xed, 0x1f, 0xf7, 0xfa, 0xa7, 0x7a, 0xb4, 0xa8, 0x3e, 0x57, 0xbb, 0xe3, 0x51, 0xef, 0xbc, 0x2f, + 0x67, 0xd0, 0x7d, 0xa8, 0x0f, 0xba, 0x42, 0xa3, 0xc6, 0xfb, 0xb2, 0x14, 0x7c, 0x72, 0xe1, 0xa4, + 0xd3, 0x3b, 0x53, 0x8f, 0xe5, 0x1c, 0xba, 0x0b, 0xb5, 0x41, 0x57, 0x8f, 0x5c, 0x6a, 0xea, 0x85, + 0xaa, 0x8d, 0xe4, 0x3c, 0x6a, 0x80, 0x7c, 0x3e, 0x1e, 0x71, 0xff, 0x62, 0x51, 0x2e, 0xa4, 0xb4, + 0x91, 0xeb, 0x22, 0xc5, 0xb9, 0xd0, 0x0a, 0xbf, 0x25, 0xb4, 0x09, 0xa5, 0x6e, 0xa7, 0xdf, 0x55, + 0xa9, 0x54, 0xde, 0x3f, 0x82, 0x82, 0x88, 0xbc, 0x0a, 0x95, 0x74, 0x94, 0x15, 0x28, 0x46, 0x07, + 0x48, 0x74, 0xd7, 0xf9, 0xd1, 0x50, 0xd5, 0x2e, 0xd4, 0x63, 0x39, 0x43, 0x25, 0x0e, 0x48, 0x3d, + 0x96, 0xb3, 0xfb, 0xbf, 0x84, 0x02, 0x9f, 0x22, 0x08, 0xc1, 0x56, 0xc2, 0x87, 0x3e, 0x7a, 0x2e, + 0x6f, 0xa0, 0x22, 0x64, 0x4f, 0x3b, 0x34, 0x41, 0x75, 0xa8, 0x9e, 0x76, 0x86, 0x7a, 0x87, 0x02, + 0xef, 0x7c, 0x71, 0x76, 0xde, 0xa1, 0x9e, 0xca, 0x90, 0x3f, 0x19, 0xf7, 0x8f, 0x69, 0x22, 0xee, + 0x42, 0x8d, 0x3d, 0xa6, 0x2c, 0x72, 0x0c, 0x86, 0x10, 0xf2, 0xf4, 0x80, 0x28, 0xb9, 0x22, 0x23, + 0x85, 0xfd, 0x3f, 0x49, 0x50, 0x5f, 0x31, 0xcc, 0xd0, 0x63, 0xd8, 0x8e, 0x6c, 0xcf, 0xd4, 0xd3, + 0x4e, 0xf7, 0x0b, 0xfd, 0x16, 0xb6, 0x7b, 0x80, 0x96, 0x4c, 0x38, 0x54, 0x05, 0x1a, 0x4b, 0x7a, + 0x0e, 0x32, 0x83, 0x3e, 0x82, 0xdd, 0x55, 0x2b, 0x29, 0xcc, 0x59, 0xd4, 0x82, 0xe6, 0x6d, 0xbf, + 0xe9, 0xb8, 0x8e, 0x06, 0x5f, 0xbd, 0x69, 0x4a, 0x5f, 0xbf, 0x69, 0x4a, 0x7f, 0x7f, 0xd3, 0x94, + 0x7e, 0xfb, 0xb6, 0xb9, 0xf1, 0xf5, 0xdb, 0xe6, 0xc6, 0x5f, 0xdf, 0x36, 0x37, 0x7e, 0xf1, 0xa9, + 0x65, 0x07, 0x57, 0xb3, 0xcb, 0x03, 0xc3, 0x9d, 0x1c, 0x4e, 0x67, 0xfe, 0x15, 0x9b, 0x67, 0xec, + 0xe9, 0x29, 0x7b, 0x7c, 0xea, 0xb8, 0x26, 0x39, 0x0c, 0x0f, 0xe3, 0x0e, 0x61, 0x5f, 0xb6, 0x2e, + 0x0b, 0xec, 0x1b, 0xd5, 0xf7, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xd2, 0xba, 0xeb, 0xd8, 0xf6, + 0x12, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -1764,6 +1818,9 @@ func (this *OutboundObservation) Equal(that interface{}) bool { if this.ErrorMsg != that1.ErrorMsg { return false } + if this.GasFeeUsed != that1.GasFeeUsed { + return false + } return true } func (this *OriginatingPcTx) Equal(that interface{}) bool { @@ -1857,6 +1914,21 @@ func (this *OutboundTx) Equal(that interface{}) bool { if !this.PcRevertExecution.Equal(that1.PcRevertExecution) { return false } + if this.GasPrice != that1.GasPrice { + return false + } + if this.GasFee != that1.GasFee { + return false + } + if !this.PcRefundExecution.Equal(that1.PcRefundExecution) { + return false + } + if this.RefundSwapError != that1.RefundSwapError { + return false + } + if this.GasToken != that1.GasToken { + return false + } return true } func (this *UniversalTx) Equal(that interface{}) bool { @@ -2464,6 +2536,13 @@ func (m *OutboundObservation) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.GasFeeUsed) > 0 { + i -= len(m.GasFeeUsed) + copy(dAtA[i:], m.GasFeeUsed) + i = encodeVarintTypes(dAtA, i, uint64(len(m.GasFeeUsed))) + i-- + dAtA[i] = 0x2a + } if len(m.ErrorMsg) > 0 { i -= len(m.ErrorMsg) copy(dAtA[i:], m.ErrorMsg) @@ -2553,6 +2632,56 @@ func (m *OutboundTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.GasToken) > 0 { + i -= len(m.GasToken) + copy(dAtA[i:], m.GasToken) + i = encodeVarintTypes(dAtA, i, uint64(len(m.GasToken))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + } + if len(m.RefundSwapError) > 0 { + i -= len(m.RefundSwapError) + copy(dAtA[i:], m.RefundSwapError) + i = encodeVarintTypes(dAtA, i, uint64(len(m.RefundSwapError))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } + if m.PcRefundExecution != nil { + { + size, err := m.PcRefundExecution.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + if len(m.GasFee) > 0 { + i -= len(m.GasFee) + copy(dAtA[i:], m.GasFee) + i = encodeVarintTypes(dAtA, i, uint64(len(m.GasFee))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + if len(m.GasPrice) > 0 { + i -= len(m.GasPrice) + copy(dAtA[i:], m.GasPrice) + i = encodeVarintTypes(dAtA, i, uint64(len(m.GasPrice))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } if m.PcRevertExecution != nil { { size, err := m.PcRevertExecution.MarshalToSizedBuffer(dAtA[:i]) @@ -3200,6 +3329,10 @@ func (m *OutboundObservation) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + l = len(m.GasFeeUsed) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -3284,6 +3417,26 @@ func (m *OutboundTx) Size() (n int) { l = m.PcRevertExecution.Size() n += 1 + l + sovTypes(uint64(l)) } + l = len(m.GasPrice) + if l > 0 { + n += 2 + l + sovTypes(uint64(l)) + } + l = len(m.GasFee) + if l > 0 { + n += 2 + l + sovTypes(uint64(l)) + } + if m.PcRefundExecution != nil { + l = m.PcRefundExecution.Size() + n += 2 + l + sovTypes(uint64(l)) + } + l = len(m.RefundSwapError) + if l > 0 { + n += 2 + l + sovTypes(uint64(l)) + } + l = len(m.GasToken) + if l > 0 { + n += 2 + l + sovTypes(uint64(l)) + } return n } @@ -4962,6 +5115,38 @@ func (m *OutboundObservation) Unmarshal(dAtA []byte) error { } m.ErrorMsg = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GasFeeUsed", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GasFeeUsed = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -5596,6 +5781,170 @@ func (m *OutboundTx) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GasPrice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GasPrice = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GasFee", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GasFee = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PcRefundExecution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PcRefundExecution == nil { + m.PcRefundExecution = &PCTx{} + } + if err := m.PcRefundExecution.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RefundSwapError", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RefundSwapError = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GasToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GasToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:])