Handle record and authority expiry in registry module (#7)

- Registry module
  - Update module state to track record / authority expiry queues
  - Handle expired records and authorities at the end of each block
  - Add a command to handle record renewal

Reviewed-on: deep-stack/laconic2d#7
Co-authored-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
Co-committed-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
This commit is contained in:
Prathamesh Musale 2024-02-26 06:16:09 +00:00 committed by ashwin
parent 92764535a6
commit d2339e2426
17 changed files with 1612 additions and 4796 deletions

File diff suppressed because it is too large Load Diff

View File

@ -27,8 +27,6 @@ const (
Query_Whois_FullMethodName = "/cerc.registry.v1.Query/Whois" Query_Whois_FullMethodName = "/cerc.registry.v1.Query/Whois"
Query_LookupCrn_FullMethodName = "/cerc.registry.v1.Query/LookupCrn" Query_LookupCrn_FullMethodName = "/cerc.registry.v1.Query/LookupCrn"
Query_ResolveCrn_FullMethodName = "/cerc.registry.v1.Query/ResolveCrn" Query_ResolveCrn_FullMethodName = "/cerc.registry.v1.Query/ResolveCrn"
Query_GetRecordExpiryQueue_FullMethodName = "/cerc.registry.v1.Query/GetRecordExpiryQueue"
Query_GetAuthorityExpiryQueue_FullMethodName = "/cerc.registry.v1.Query/GetAuthorityExpiryQueue"
Query_GetRegistryModuleBalance_FullMethodName = "/cerc.registry.v1.Query/GetRegistryModuleBalance" Query_GetRegistryModuleBalance_FullMethodName = "/cerc.registry.v1.Query/GetRegistryModuleBalance"
) )
@ -52,10 +50,6 @@ type QueryClient interface {
LookupCrn(ctx context.Context, in *QueryLookupCrnRequest, opts ...grpc.CallOption) (*QueryLookupCrnResponse, error) LookupCrn(ctx context.Context, in *QueryLookupCrnRequest, opts ...grpc.CallOption) (*QueryLookupCrnResponse, error)
// ResolveCrn // ResolveCrn
ResolveCrn(ctx context.Context, in *QueryResolveCrnRequest, opts ...grpc.CallOption) (*QueryResolveCrnResponse, error) ResolveCrn(ctx context.Context, in *QueryResolveCrnRequest, opts ...grpc.CallOption) (*QueryResolveCrnResponse, error)
// GetRecordExpiryQueue
GetRecordExpiryQueue(ctx context.Context, in *QueryGetRecordExpiryQueueRequest, opts ...grpc.CallOption) (*QueryGetRecordExpiryQueueResponse, error)
// GetAuthorityExpiryQueue
GetAuthorityExpiryQueue(ctx context.Context, in *QueryGetAuthorityExpiryQueueRequest, opts ...grpc.CallOption) (*QueryGetAuthorityExpiryQueueResponse, error)
// Get registry module balance // Get registry module balance
GetRegistryModuleBalance(ctx context.Context, in *QueryGetRegistryModuleBalanceRequest, opts ...grpc.CallOption) (*QueryGetRegistryModuleBalanceResponse, error) GetRegistryModuleBalance(ctx context.Context, in *QueryGetRegistryModuleBalanceRequest, opts ...grpc.CallOption) (*QueryGetRegistryModuleBalanceResponse, error)
} }
@ -140,24 +134,6 @@ func (c *queryClient) ResolveCrn(ctx context.Context, in *QueryResolveCrnRequest
return out, nil return out, nil
} }
func (c *queryClient) GetRecordExpiryQueue(ctx context.Context, in *QueryGetRecordExpiryQueueRequest, opts ...grpc.CallOption) (*QueryGetRecordExpiryQueueResponse, error) {
out := new(QueryGetRecordExpiryQueueResponse)
err := c.cc.Invoke(ctx, Query_GetRecordExpiryQueue_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *queryClient) GetAuthorityExpiryQueue(ctx context.Context, in *QueryGetAuthorityExpiryQueueRequest, opts ...grpc.CallOption) (*QueryGetAuthorityExpiryQueueResponse, error) {
out := new(QueryGetAuthorityExpiryQueueResponse)
err := c.cc.Invoke(ctx, Query_GetAuthorityExpiryQueue_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *queryClient) GetRegistryModuleBalance(ctx context.Context, in *QueryGetRegistryModuleBalanceRequest, opts ...grpc.CallOption) (*QueryGetRegistryModuleBalanceResponse, error) { func (c *queryClient) GetRegistryModuleBalance(ctx context.Context, in *QueryGetRegistryModuleBalanceRequest, opts ...grpc.CallOption) (*QueryGetRegistryModuleBalanceResponse, error) {
out := new(QueryGetRegistryModuleBalanceResponse) out := new(QueryGetRegistryModuleBalanceResponse)
err := c.cc.Invoke(ctx, Query_GetRegistryModuleBalance_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, Query_GetRegistryModuleBalance_FullMethodName, in, out, opts...)
@ -187,10 +163,6 @@ type QueryServer interface {
LookupCrn(context.Context, *QueryLookupCrnRequest) (*QueryLookupCrnResponse, error) LookupCrn(context.Context, *QueryLookupCrnRequest) (*QueryLookupCrnResponse, error)
// ResolveCrn // ResolveCrn
ResolveCrn(context.Context, *QueryResolveCrnRequest) (*QueryResolveCrnResponse, error) ResolveCrn(context.Context, *QueryResolveCrnRequest) (*QueryResolveCrnResponse, error)
// GetRecordExpiryQueue
GetRecordExpiryQueue(context.Context, *QueryGetRecordExpiryQueueRequest) (*QueryGetRecordExpiryQueueResponse, error)
// GetAuthorityExpiryQueue
GetAuthorityExpiryQueue(context.Context, *QueryGetAuthorityExpiryQueueRequest) (*QueryGetAuthorityExpiryQueueResponse, error)
// Get registry module balance // Get registry module balance
GetRegistryModuleBalance(context.Context, *QueryGetRegistryModuleBalanceRequest) (*QueryGetRegistryModuleBalanceResponse, error) GetRegistryModuleBalance(context.Context, *QueryGetRegistryModuleBalanceRequest) (*QueryGetRegistryModuleBalanceResponse, error)
mustEmbedUnimplementedQueryServer() mustEmbedUnimplementedQueryServer()
@ -224,12 +196,6 @@ func (UnimplementedQueryServer) LookupCrn(context.Context, *QueryLookupCrnReques
func (UnimplementedQueryServer) ResolveCrn(context.Context, *QueryResolveCrnRequest) (*QueryResolveCrnResponse, error) { func (UnimplementedQueryServer) ResolveCrn(context.Context, *QueryResolveCrnRequest) (*QueryResolveCrnResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ResolveCrn not implemented") return nil, status.Errorf(codes.Unimplemented, "method ResolveCrn not implemented")
} }
func (UnimplementedQueryServer) GetRecordExpiryQueue(context.Context, *QueryGetRecordExpiryQueueRequest) (*QueryGetRecordExpiryQueueResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetRecordExpiryQueue not implemented")
}
func (UnimplementedQueryServer) GetAuthorityExpiryQueue(context.Context, *QueryGetAuthorityExpiryQueueRequest) (*QueryGetAuthorityExpiryQueueResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetAuthorityExpiryQueue not implemented")
}
func (UnimplementedQueryServer) GetRegistryModuleBalance(context.Context, *QueryGetRegistryModuleBalanceRequest) (*QueryGetRegistryModuleBalanceResponse, error) { func (UnimplementedQueryServer) GetRegistryModuleBalance(context.Context, *QueryGetRegistryModuleBalanceRequest) (*QueryGetRegistryModuleBalanceResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetRegistryModuleBalance not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetRegistryModuleBalance not implemented")
} }
@ -390,42 +356,6 @@ func _Query_ResolveCrn_Handler(srv interface{}, ctx context.Context, dec func(in
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Query_GetRecordExpiryQueue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(QueryGetRecordExpiryQueueRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(QueryServer).GetRecordExpiryQueue(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Query_GetRecordExpiryQueue_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(QueryServer).GetRecordExpiryQueue(ctx, req.(*QueryGetRecordExpiryQueueRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Query_GetAuthorityExpiryQueue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(QueryGetAuthorityExpiryQueueRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(QueryServer).GetAuthorityExpiryQueue(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Query_GetAuthorityExpiryQueue_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(QueryServer).GetAuthorityExpiryQueue(ctx, req.(*QueryGetAuthorityExpiryQueueRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Query_GetRegistryModuleBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Query_GetRegistryModuleBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(QueryGetRegistryModuleBalanceRequest) in := new(QueryGetRegistryModuleBalanceRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -483,14 +413,6 @@ var Query_ServiceDesc = grpc.ServiceDesc{
MethodName: "ResolveCrn", MethodName: "ResolveCrn",
Handler: _Query_ResolveCrn_Handler, Handler: _Query_ResolveCrn_Handler,
}, },
{
MethodName: "GetRecordExpiryQueue",
Handler: _Query_GetRecordExpiryQueue_Handler,
},
{
MethodName: "GetAuthorityExpiryQueue",
Handler: _Query_GetAuthorityExpiryQueue_Handler,
},
{ {
MethodName: "GetRegistryModuleBalance", MethodName: "GetRegistryModuleBalance",
Handler: _Query_GetRegistryModuleBalance_Handler, Handler: _Query_GetRegistryModuleBalance_Handler,

View File

@ -7108,6 +7108,550 @@ func (x *fastReflection_AuctionBidInfo) ProtoMethods() *protoiface.Methods {
} }
} }
var _ protoreflect.List = (*_ExpiryQueue_2_list)(nil)
type _ExpiryQueue_2_list struct {
list *[]string
}
func (x *_ExpiryQueue_2_list) Len() int {
if x.list == nil {
return 0
}
return len(*x.list)
}
func (x *_ExpiryQueue_2_list) Get(i int) protoreflect.Value {
return protoreflect.ValueOfString((*x.list)[i])
}
func (x *_ExpiryQueue_2_list) Set(i int, value protoreflect.Value) {
valueUnwrapped := value.String()
concreteValue := valueUnwrapped
(*x.list)[i] = concreteValue
}
func (x *_ExpiryQueue_2_list) Append(value protoreflect.Value) {
valueUnwrapped := value.String()
concreteValue := valueUnwrapped
*x.list = append(*x.list, concreteValue)
}
func (x *_ExpiryQueue_2_list) AppendMutable() protoreflect.Value {
panic(fmt.Errorf("AppendMutable can not be called on message ExpiryQueue at list field Value as it is not of Message kind"))
}
func (x *_ExpiryQueue_2_list) Truncate(n int) {
*x.list = (*x.list)[:n]
}
func (x *_ExpiryQueue_2_list) NewElement() protoreflect.Value {
v := ""
return protoreflect.ValueOfString(v)
}
func (x *_ExpiryQueue_2_list) IsValid() bool {
return x.list != nil
}
var (
md_ExpiryQueue protoreflect.MessageDescriptor
fd_ExpiryQueue_id protoreflect.FieldDescriptor
fd_ExpiryQueue_value protoreflect.FieldDescriptor
)
func init() {
file_cerc_registry_v1_registry_proto_init()
md_ExpiryQueue = File_cerc_registry_v1_registry_proto.Messages().ByName("ExpiryQueue")
fd_ExpiryQueue_id = md_ExpiryQueue.Fields().ByName("id")
fd_ExpiryQueue_value = md_ExpiryQueue.Fields().ByName("value")
}
var _ protoreflect.Message = (*fastReflection_ExpiryQueue)(nil)
type fastReflection_ExpiryQueue ExpiryQueue
func (x *ExpiryQueue) ProtoReflect() protoreflect.Message {
return (*fastReflection_ExpiryQueue)(x)
}
func (x *ExpiryQueue) slowProtoReflect() protoreflect.Message {
mi := &file_cerc_registry_v1_registry_proto_msgTypes[10]
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_ExpiryQueue_messageType fastReflection_ExpiryQueue_messageType
var _ protoreflect.MessageType = fastReflection_ExpiryQueue_messageType{}
type fastReflection_ExpiryQueue_messageType struct{}
func (x fastReflection_ExpiryQueue_messageType) Zero() protoreflect.Message {
return (*fastReflection_ExpiryQueue)(nil)
}
func (x fastReflection_ExpiryQueue_messageType) New() protoreflect.Message {
return new(fastReflection_ExpiryQueue)
}
func (x fastReflection_ExpiryQueue_messageType) Descriptor() protoreflect.MessageDescriptor {
return md_ExpiryQueue
}
// Descriptor returns message descriptor, which contains only the protobuf
// type information for the message.
func (x *fastReflection_ExpiryQueue) Descriptor() protoreflect.MessageDescriptor {
return md_ExpiryQueue
}
// 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_ExpiryQueue) Type() protoreflect.MessageType {
return _fastReflection_ExpiryQueue_messageType
}
// New returns a newly allocated and mutable empty message.
func (x *fastReflection_ExpiryQueue) New() protoreflect.Message {
return new(fastReflection_ExpiryQueue)
}
// Interface unwraps the message reflection interface and
// returns the underlying ProtoMessage interface.
func (x *fastReflection_ExpiryQueue) Interface() protoreflect.ProtoMessage {
return (*ExpiryQueue)(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_ExpiryQueue) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
if x.Id != "" {
value := protoreflect.ValueOfString(x.Id)
if !f(fd_ExpiryQueue_id, value) {
return
}
}
if len(x.Value) != 0 {
value := protoreflect.ValueOfList(&_ExpiryQueue_2_list{list: &x.Value})
if !f(fd_ExpiryQueue_value, 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_ExpiryQueue) Has(fd protoreflect.FieldDescriptor) bool {
switch fd.FullName() {
case "cerc.registry.v1.ExpiryQueue.id":
return x.Id != ""
case "cerc.registry.v1.ExpiryQueue.value":
return len(x.Value) != 0
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cerc.registry.v1.ExpiryQueue"))
}
panic(fmt.Errorf("message cerc.registry.v1.ExpiryQueue 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_ExpiryQueue) Clear(fd protoreflect.FieldDescriptor) {
switch fd.FullName() {
case "cerc.registry.v1.ExpiryQueue.id":
x.Id = ""
case "cerc.registry.v1.ExpiryQueue.value":
x.Value = nil
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cerc.registry.v1.ExpiryQueue"))
}
panic(fmt.Errorf("message cerc.registry.v1.ExpiryQueue 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_ExpiryQueue) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
switch descriptor.FullName() {
case "cerc.registry.v1.ExpiryQueue.id":
value := x.Id
return protoreflect.ValueOfString(value)
case "cerc.registry.v1.ExpiryQueue.value":
if len(x.Value) == 0 {
return protoreflect.ValueOfList(&_ExpiryQueue_2_list{})
}
listValue := &_ExpiryQueue_2_list{list: &x.Value}
return protoreflect.ValueOfList(listValue)
default:
if descriptor.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cerc.registry.v1.ExpiryQueue"))
}
panic(fmt.Errorf("message cerc.registry.v1.ExpiryQueue 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_ExpiryQueue) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
switch fd.FullName() {
case "cerc.registry.v1.ExpiryQueue.id":
x.Id = value.Interface().(string)
case "cerc.registry.v1.ExpiryQueue.value":
lv := value.List()
clv := lv.(*_ExpiryQueue_2_list)
x.Value = *clv.list
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cerc.registry.v1.ExpiryQueue"))
}
panic(fmt.Errorf("message cerc.registry.v1.ExpiryQueue 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_ExpiryQueue) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
switch fd.FullName() {
case "cerc.registry.v1.ExpiryQueue.value":
if x.Value == nil {
x.Value = []string{}
}
value := &_ExpiryQueue_2_list{list: &x.Value}
return protoreflect.ValueOfList(value)
case "cerc.registry.v1.ExpiryQueue.id":
panic(fmt.Errorf("field id of message cerc.registry.v1.ExpiryQueue is not mutable"))
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cerc.registry.v1.ExpiryQueue"))
}
panic(fmt.Errorf("message cerc.registry.v1.ExpiryQueue 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_ExpiryQueue) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
switch fd.FullName() {
case "cerc.registry.v1.ExpiryQueue.id":
return protoreflect.ValueOfString("")
case "cerc.registry.v1.ExpiryQueue.value":
list := []string{}
return protoreflect.ValueOfList(&_ExpiryQueue_2_list{list: &list})
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cerc.registry.v1.ExpiryQueue"))
}
panic(fmt.Errorf("message cerc.registry.v1.ExpiryQueue 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_ExpiryQueue) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
switch d.FullName() {
default:
panic(fmt.Errorf("%s is not a oneof field in cerc.registry.v1.ExpiryQueue", 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_ExpiryQueue) 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_ExpiryQueue) 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_ExpiryQueue) 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_ExpiryQueue) ProtoMethods() *protoiface.Methods {
size := func(input protoiface.SizeInput) protoiface.SizeOutput {
x := input.Message.Interface().(*ExpiryQueue)
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.Id)
if l > 0 {
n += 1 + l + runtime.Sov(uint64(l))
}
if len(x.Value) > 0 {
for _, s := range x.Value {
l = len(s)
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().(*ExpiryQueue)
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.Value) > 0 {
for iNdEx := len(x.Value) - 1; iNdEx >= 0; iNdEx-- {
i -= len(x.Value[iNdEx])
copy(dAtA[i:], x.Value[iNdEx])
i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Value[iNdEx])))
i--
dAtA[i] = 0x12
}
}
if len(x.Id) > 0 {
i -= len(x.Id)
copy(dAtA[i:], x.Id)
i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Id)))
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().(*ExpiryQueue)
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: ExpiryQueue: wiretype end group for non-group")
}
if fieldNum <= 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ExpiryQueue: 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 Id", 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.Id = 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 Value", 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.Value = append(x.Value, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := runtime.Skip(dAtA[iNdEx:])
if err != nil {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
}
if (iNdEx + skippy) > l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
if !options.DiscardUnknown {
x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
}
iNdEx += skippy
}
}
if iNdEx > l {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
}
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil
}
return &protoiface.Methods{
NoUnkeyedLiterals: struct{}{},
Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown,
Size: size,
Marshal: marshal,
Unmarshal: unmarshal,
Merge: nil,
CheckInitialized: nil,
}
}
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.27.0 // protoc-gen-go v1.27.0
@ -7764,6 +8308,52 @@ func (x *AuctionBidInfo) GetBidderAddress() string {
return "" return ""
} }
// ExpiryQueue: record / authority expiry queue type
// id: expiry time
// value: array of ids (record cids / authority names)
type ExpiryQueue struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Value []string `protobuf:"bytes,2,rep,name=value,proto3" json:"value,omitempty"`
}
func (x *ExpiryQueue) Reset() {
*x = ExpiryQueue{}
if protoimpl.UnsafeEnabled {
mi := &file_cerc_registry_v1_registry_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ExpiryQueue) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ExpiryQueue) ProtoMessage() {}
// Deprecated: Use ExpiryQueue.ProtoReflect.Descriptor instead.
func (*ExpiryQueue) Descriptor() ([]byte, []int) {
return file_cerc_registry_v1_registry_proto_rawDescGZIP(), []int{10}
}
func (x *ExpiryQueue) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *ExpiryQueue) GetValue() []string {
if x != nil {
return x.Value
}
return nil
}
var File_cerc_registry_v1_registry_proto protoreflect.FileDescriptor var File_cerc_registry_v1_registry_proto protoreflect.FileDescriptor
var file_cerc_registry_v1_registry_proto_rawDesc = []byte{ var file_cerc_registry_v1_registry_proto_rawDesc = []byte{
@ -8009,20 +8599,23 @@ var file_cerc_registry_v1_registry_proto_rawDesc = []byte{
0x6e, 0x3a, 0x22, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x6e, 0x3a, 0x22, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
0x73, 0x22, 0x20, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x22, 0x20, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x5f,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x0d, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x0d, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72,
0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0xc5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x33, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x69, 0x72,
0x63, 0x65, 0x72, 0x63, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x79, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x42, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x2e, 0x76, 0x64, 0x62, 0x2e, 0x74, 0x6f, 0x2f, 0x63, 0x65, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0xc5, 0x01, 0x0a,
0x72, 0x63, 0x2d, 0x69, 0x6f, 0x2f, 0x6c, 0x61, 0x63, 0x6f, 0x6e, 0x69, 0x63, 0x32, 0x64, 0x2f, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x65, 0x72, 0x63, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
0x61, 0x70, 0x69, 0x2f, 0x63, 0x65, 0x72, 0x63, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x42, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x50,
0x79, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x76, 0x31, 0xa2, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x2e, 0x76, 0x64, 0x62, 0x2e,
0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, 0x10, 0x43, 0x65, 0x72, 0x63, 0x2e, 0x52, 0x65, 0x67, 0x74, 0x6f, 0x2f, 0x63, 0x65, 0x72, 0x63, 0x2d, 0x69, 0x6f, 0x2f, 0x6c, 0x61, 0x63, 0x6f, 0x6e,
0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x43, 0x65, 0x72, 0x63, 0x5c, 0x69, 0x63, 0x32, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x65, 0x72, 0x63, 0x2f, 0x72, 0x65,
0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x43, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
0x72, 0x63, 0x5c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x72, 0x79, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, 0x10, 0x43, 0x65, 0x72,
0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x43, 0x65, 0x72, 0x63, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10,
0x63, 0x3a, 0x3a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x43, 0x65, 0x72, 0x63, 0x5c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x5c, 0x56, 0x31,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0xe2, 0x02, 0x1c, 0x43, 0x65, 0x72, 0x63, 0x5c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
0x02, 0x12, 0x43, 0x65, 0x72, 0x63, 0x3a, 0x3a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@ -8037,7 +8630,7 @@ func file_cerc_registry_v1_registry_proto_rawDescGZIP() []byte {
return file_cerc_registry_v1_registry_proto_rawDescData return file_cerc_registry_v1_registry_proto_rawDescData
} }
var file_cerc_registry_v1_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 10) var file_cerc_registry_v1_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
var file_cerc_registry_v1_registry_proto_goTypes = []interface{}{ var file_cerc_registry_v1_registry_proto_goTypes = []interface{}{
(*Params)(nil), // 0: cerc.registry.v1.Params (*Params)(nil), // 0: cerc.registry.v1.Params
(*Record)(nil), // 1: cerc.registry.v1.Record (*Record)(nil), // 1: cerc.registry.v1.Record
@ -8049,23 +8642,24 @@ var file_cerc_registry_v1_registry_proto_goTypes = []interface{}{
(*Signature)(nil), // 7: cerc.registry.v1.Signature (*Signature)(nil), // 7: cerc.registry.v1.Signature
(*BlockChangeSet)(nil), // 8: cerc.registry.v1.BlockChangeSet (*BlockChangeSet)(nil), // 8: cerc.registry.v1.BlockChangeSet
(*AuctionBidInfo)(nil), // 9: cerc.registry.v1.AuctionBidInfo (*AuctionBidInfo)(nil), // 9: cerc.registry.v1.AuctionBidInfo
(*v1beta1.Coin)(nil), // 10: cosmos.base.v1beta1.Coin (*ExpiryQueue)(nil), // 10: cerc.registry.v1.ExpiryQueue
(*durationpb.Duration)(nil), // 11: google.protobuf.Duration (*v1beta1.Coin)(nil), // 11: cosmos.base.v1beta1.Coin
(*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp (*durationpb.Duration)(nil), // 12: google.protobuf.Duration
(*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp
} }
var file_cerc_registry_v1_registry_proto_depIdxs = []int32{ var file_cerc_registry_v1_registry_proto_depIdxs = []int32{
10, // 0: cerc.registry.v1.Params.record_rent:type_name -> cosmos.base.v1beta1.Coin 11, // 0: cerc.registry.v1.Params.record_rent:type_name -> cosmos.base.v1beta1.Coin
11, // 1: cerc.registry.v1.Params.record_rent_duration:type_name -> google.protobuf.Duration 12, // 1: cerc.registry.v1.Params.record_rent_duration:type_name -> google.protobuf.Duration
10, // 2: cerc.registry.v1.Params.authority_rent:type_name -> cosmos.base.v1beta1.Coin 11, // 2: cerc.registry.v1.Params.authority_rent:type_name -> cosmos.base.v1beta1.Coin
11, // 3: cerc.registry.v1.Params.authority_rent_duration:type_name -> google.protobuf.Duration 12, // 3: cerc.registry.v1.Params.authority_rent_duration:type_name -> google.protobuf.Duration
11, // 4: cerc.registry.v1.Params.authority_grace_period:type_name -> google.protobuf.Duration 12, // 4: cerc.registry.v1.Params.authority_grace_period:type_name -> google.protobuf.Duration
11, // 5: cerc.registry.v1.Params.authority_auction_commits_duration:type_name -> google.protobuf.Duration 12, // 5: cerc.registry.v1.Params.authority_auction_commits_duration:type_name -> google.protobuf.Duration
11, // 6: cerc.registry.v1.Params.authority_auction_reveals_duration:type_name -> google.protobuf.Duration 12, // 6: cerc.registry.v1.Params.authority_auction_reveals_duration:type_name -> google.protobuf.Duration
10, // 7: cerc.registry.v1.Params.authority_auction_commit_fee:type_name -> cosmos.base.v1beta1.Coin 11, // 7: cerc.registry.v1.Params.authority_auction_commit_fee:type_name -> cosmos.base.v1beta1.Coin
10, // 8: cerc.registry.v1.Params.authority_auction_reveal_fee:type_name -> cosmos.base.v1beta1.Coin 11, // 8: cerc.registry.v1.Params.authority_auction_reveal_fee:type_name -> cosmos.base.v1beta1.Coin
10, // 9: cerc.registry.v1.Params.authority_auction_minimum_bid:type_name -> cosmos.base.v1beta1.Coin 11, // 9: cerc.registry.v1.Params.authority_auction_minimum_bid:type_name -> cosmos.base.v1beta1.Coin
3, // 10: cerc.registry.v1.AuthorityEntry.entry:type_name -> cerc.registry.v1.NameAuthority 3, // 10: cerc.registry.v1.AuthorityEntry.entry:type_name -> cerc.registry.v1.NameAuthority
12, // 11: cerc.registry.v1.NameAuthority.expiry_time:type_name -> google.protobuf.Timestamp 13, // 11: cerc.registry.v1.NameAuthority.expiry_time:type_name -> google.protobuf.Timestamp
5, // 12: cerc.registry.v1.NameEntry.entry:type_name -> cerc.registry.v1.NameRecord 5, // 12: cerc.registry.v1.NameEntry.entry:type_name -> cerc.registry.v1.NameRecord
6, // 13: cerc.registry.v1.NameRecord.latest:type_name -> cerc.registry.v1.NameRecordEntry 6, // 13: cerc.registry.v1.NameRecord.latest:type_name -> cerc.registry.v1.NameRecordEntry
6, // 14: cerc.registry.v1.NameRecord.history:type_name -> cerc.registry.v1.NameRecordEntry 6, // 14: cerc.registry.v1.NameRecord.history:type_name -> cerc.registry.v1.NameRecordEntry
@ -8203,6 +8797,18 @@ func file_cerc_registry_v1_registry_proto_init() {
return nil return nil
} }
} }
file_cerc_registry_v1_registry_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ExpiryQueue); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
} }
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
@ -8210,7 +8816,7 @@ func file_cerc_registry_v1_registry_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_cerc_registry_v1_registry_proto_rawDesc, RawDescriptor: file_cerc_registry_v1_registry_proto_rawDesc,
NumEnums: 0, NumEnums: 0,
NumMessages: 10, NumMessages: 11,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View File

@ -52,16 +52,6 @@ service Query {
option (google.api.http).get = "/cerc/registry/v1/resolve"; option (google.api.http).get = "/cerc/registry/v1/resolve";
} }
// GetRecordExpiryQueue
rpc GetRecordExpiryQueue(QueryGetRecordExpiryQueueRequest) returns (QueryGetRecordExpiryQueueResponse) {
option (google.api.http).get = "/cerc/registry/v1/record-expiry";
}
// GetAuthorityExpiryQueue
rpc GetAuthorityExpiryQueue(QueryGetAuthorityExpiryQueueRequest) returns (QueryGetAuthorityExpiryQueueResponse) {
option (google.api.http).get = "/cerc/registry/v1/authority-expiry";
}
// Get registry module balance // Get registry module balance
rpc GetRegistryModuleBalance(QueryGetRegistryModuleBalanceRequest) returns (QueryGetRegistryModuleBalanceResponse) { rpc GetRegistryModuleBalance(QueryGetRegistryModuleBalanceRequest) returns (QueryGetRegistryModuleBalanceResponse) {
option (google.api.http).get = "/cerc/registry/v1/balance"; option (google.api.http).get = "/cerc/registry/v1/balance";
@ -191,38 +181,6 @@ message QueryResolveCrnResponse {
Record record = 1; Record record = 1;
} }
// QueryGetRecordExpiryQueueRequest
message QueryGetRecordExpiryQueueRequest {
// pagination defines an optional pagination for the request.
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}
// QueryGetRecordExpiryQueueResponse
message QueryGetRecordExpiryQueueResponse {
repeated ExpiryQueueRecord records = 1;
// pagination defines the pagination in the response.
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}
// ExpiryQueueRecord
message ExpiryQueueRecord {
string id = 1;
repeated string value = 2;
}
// QueryGetAuthorityExpiryQueueRequest
message QueryGetAuthorityExpiryQueueRequest {
// pagination defines an optional pagination for the request.
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}
// QueryGetAuthorityExpiryQueueResponse
message QueryGetAuthorityExpiryQueueResponse {
repeated ExpiryQueueRecord authorities = 1;
// pagination defines the pagination in the response.
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}
// QueryGetRegistryModuleBalanceRequest is request type for registry module accounts balance // QueryGetRegistryModuleBalanceRequest is request type for registry module accounts balance
message QueryGetRegistryModuleBalanceRequest {} message QueryGetRegistryModuleBalanceRequest {}

View File

@ -146,3 +146,11 @@ message AuctionBidInfo {
string auction_id = 1 [(gogoproto.moretags) = "json:\"auction_id\" yaml:\"auction_id\""]; string auction_id = 1 [(gogoproto.moretags) = "json:\"auction_id\" yaml:\"auction_id\""];
string bidder_address = 2 [(gogoproto.moretags) = "json:\"bidder_address\" yaml:\"bidder_address\""]; string bidder_address = 2 [(gogoproto.moretags) = "json:\"bidder_address\" yaml:\"bidder_address\""];
} }
// ExpiryQueue: record / authority expiry queue type
// id: expiry time
// value: array of ids (record cids / authority names)
message ExpiryQueue {
string id = 1;
repeated string value = 2;
}

View File

@ -22,12 +22,13 @@ func (k *Keeper) InitGenesis(ctx sdk.Context, data *registry.GenesisState) error
// Add to record expiry queue if expiry time is in the future. // Add to record expiry queue if expiry time is in the future.
expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime) expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime)
if err != nil { if err != nil {
panic(err) return err
} }
if expiryTime.After(ctx.BlockTime()) { if expiryTime.After(ctx.BlockTime()) {
// TODO if err := k.insertRecordExpiryQueue(ctx, record); err != nil {
// k.InsertRecordExpiryQueue(ctx, record) return err
}
} }
} }
@ -38,9 +39,10 @@ func (k *Keeper) InitGenesis(ctx sdk.Context, data *registry.GenesisState) error
return err return err
} }
// TODO
// Add authority name to expiry queue. // Add authority name to expiry queue.
// k.InsertAuthorityExpiryQueue(ctx, authority.Name, authority.Entry.ExpiryTime) if err := k.insertAuthorityExpiryQueue(ctx, authority.Name, authority.Entry.ExpiryTime); err != nil {
return err
}
// TODO // TODO
// Note: Bond genesis runs first, so bonds will already be present. // Note: Bond genesis runs first, so bonds will already be present.

View File

@ -2,6 +2,7 @@ package keeper
import ( import (
"bytes" "bytes"
"errors"
"fmt" "fmt"
"sort" "sort"
"time" "time"
@ -96,6 +97,8 @@ type Keeper struct {
Records *collections.IndexedMap[string, registrytypes.Record, RecordsIndexes] Records *collections.IndexedMap[string, registrytypes.Record, RecordsIndexes]
Authorities *collections.IndexedMap[string, registrytypes.NameAuthority, AuthoritiesIndexes] Authorities *collections.IndexedMap[string, registrytypes.NameAuthority, AuthoritiesIndexes]
NameRecords *collections.IndexedMap[string, registrytypes.NameRecord, NameRecordsIndexes] NameRecords *collections.IndexedMap[string, registrytypes.NameRecord, NameRecordsIndexes]
RecordExpiryQueue collections.Map[time.Time, registrytypes.ExpiryQueue]
AuthorityExpiryQueue collections.Map[time.Time, registrytypes.ExpiryQueue]
} }
// NewKeeper creates a new Keeper instance // NewKeeper creates a new Keeper instance
@ -132,6 +135,14 @@ func NewKeeper(
collections.StringKey, codec.CollValue[registrytypes.NameRecord](cdc), collections.StringKey, codec.CollValue[registrytypes.NameRecord](cdc),
newNameRecordIndexes(sb), newNameRecordIndexes(sb),
), ),
RecordExpiryQueue: collections.NewMap(
sb, registrytypes.RecordExpiryQueuePrefix, "record_expiry_queue",
sdk.TimeKey, codec.CollValue[registrytypes.ExpiryQueue](cdc),
),
AuthorityExpiryQueue: collections.NewMap(
sb, registrytypes.AuthorityExpiryQueuePrefix, "authority_expiry_queue",
sdk.TimeKey, codec.CollValue[registrytypes.ExpiryQueue](cdc),
),
} }
schema, err := sb.Build() schema, err := sb.Build()
@ -216,10 +227,6 @@ func (k Keeper) RecordsFromAttributes(ctx sdk.Context, attributes []*registrytyp
panic("unimplemented") panic("unimplemented")
} }
func (k Keeper) GetRecordExpiryQueue(ctx sdk.Context) []*registrytypes.ExpiryQueueRecord {
panic("unimplemented")
}
// PutRecord - saves a record to the store. // PutRecord - saves a record to the store.
func (k Keeper) SaveRecord(ctx sdk.Context, record registrytypes.Record) error { func (k Keeper) SaveRecord(ctx sdk.Context, record registrytypes.Record) error {
return k.Records.Set(ctx, record.Id, record) return k.Records.Set(ctx, record.Id, record)
@ -314,9 +321,7 @@ func (k Keeper) processRecord(ctx sdk.Context, record *registrytypes.ReadableRec
// return err // return err
// } // }
// k.InsertRecordExpiryQueue(ctx, recordObj) return k.insertRecordExpiryQueue(ctx, recordObj)
return nil
} }
func (k Keeper) processAttributes(ctx sdk.Context, attrs registrytypes.AttributeMap, id string, prefix string) error { func (k Keeper) processAttributes(ctx sdk.Context, attrs registrytypes.AttributeMap, id string, prefix string) error {
@ -412,3 +417,148 @@ func (k Keeper) GetModuleBalances(ctx sdk.Context) []*registrytypes.AccountBalan
return balances return balances
} }
// ProcessRecordExpiryQueue tries to renew expiring records (by collecting rent) else marks them as deleted.
func (k Keeper) ProcessRecordExpiryQueue(ctx sdk.Context) error {
// TODO: process expired records
cids, err := k.getAllExpiredRecords(ctx, ctx.BlockHeader().Time)
if err != nil {
return err
}
for _, cid := range cids {
record, err := k.GetRecordById(ctx, cid)
if err != nil {
return err
}
bondExists := false
if record.BondId != "" {
bondExists, err = k.bondKeeper.HasBond(ctx, record.BondId)
if err != nil {
return err
}
}
// If record doesn't have an associated bond or if bond no longer exists, mark it deleted.
if !bondExists {
record.Deleted = true
if err := k.SaveRecord(ctx, record); err != nil {
return err
}
if err := k.deleteRecordExpiryQueue(ctx, record); err != nil {
return err
}
}
// Try to renew the record by taking rent.
if err := k.tryTakeRecordRent(ctx, record); err != nil {
return err
}
}
return nil
}
// getAllExpiredRecords returns a concatenated list of all the timeslices before currTime.
func (k Keeper) getAllExpiredRecords(ctx sdk.Context, currTime time.Time) ([]string, error) {
var expiredRecordCIDs []string
// Get all the records with expiry time until currTime
rng := new(collections.Range[time.Time]).EndInclusive(currTime)
err := k.RecordExpiryQueue.Walk(ctx, rng, func(key time.Time, value registrytypes.ExpiryQueue) (stop bool, err error) {
expiredRecordCIDs = append(expiredRecordCIDs, value.Value...)
return false, nil
})
if err != nil {
return []string{}, err
}
return expiredRecordCIDs, nil
}
// insertRecordExpiryQueue inserts a record CID to the appropriate timeslice in the record expiry queue.
func (k Keeper) insertRecordExpiryQueue(ctx sdk.Context, record registrytypes.Record) error {
expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime)
if err != nil {
return err
}
existingRecordsList, err := k.RecordExpiryQueue.Get(ctx, expiryTime)
if err != nil {
if errors.Is(err, collections.ErrNotFound) {
existingRecordsList = registrytypes.ExpiryQueue{
Id: expiryTime.String(),
Value: []string{},
}
} else {
return err
}
}
existingRecordsList.Value = append(existingRecordsList.Value, record.Id)
return k.RecordExpiryQueue.Set(ctx, expiryTime, existingRecordsList)
}
// deleteRecordExpiryQueue deletes a record CID from the record expiry queue.
func (k Keeper) deleteRecordExpiryQueue(ctx sdk.Context, record registrytypes.Record) error {
expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime)
if err != nil {
return err
}
existingRecordsList, err := k.RecordExpiryQueue.Get(ctx, expiryTime)
if err != nil {
return err
}
newRecordsSlice := []string{}
for _, id := range existingRecordsList.Value {
if id != record.Id {
newRecordsSlice = append(newRecordsSlice, id)
}
}
if len(existingRecordsList.Value) == 0 {
return k.RecordExpiryQueue.Remove(ctx, expiryTime)
} else {
existingRecordsList.Value = newRecordsSlice
return k.RecordExpiryQueue.Set(ctx, expiryTime, existingRecordsList)
}
}
// tryTakeRecordRent tries to take rent from the record bond.
func (k Keeper) tryTakeRecordRent(ctx sdk.Context, record registrytypes.Record) error {
params, err := k.GetParams(ctx)
if err != nil {
return err
}
rent := params.RecordRent
sdkErr := k.bondKeeper.TransferCoinsToModuleAccount(ctx, record.BondId, registrytypes.RecordRentModuleAccountName, sdk.NewCoins(rent))
if sdkErr != nil {
// Insufficient funds, mark record as deleted.
record.Deleted = true
if err := k.SaveRecord(ctx, record); err != nil {
return err
}
return k.deleteRecordExpiryQueue(ctx, record)
}
// Delete old expiry queue entry, create new one.
if err := k.deleteRecordExpiryQueue(ctx, record); err != nil {
return err
}
record.ExpiryTime = ctx.BlockHeader().Time.Add(params.RecordRentDuration).Format(time.RFC3339)
if err := k.insertRecordExpiryQueue(ctx, record); err != nil {
return err
}
// Save record.
record.Deleted = false
return k.SaveRecord(ctx, record)
}

View File

@ -169,14 +169,17 @@ func (ms msgServer) DeleteName(c context.Context, msg *registrytypes.MsgDeleteNa
func (ms msgServer) RenewRecord(c context.Context, msg *registrytypes.MsgRenewRecord) (*registrytypes.MsgRenewRecordResponse, error) { func (ms msgServer) RenewRecord(c context.Context, msg *registrytypes.MsgRenewRecord) (*registrytypes.MsgRenewRecordResponse, error) {
ctx := sdk.UnwrapSDKContext(c) ctx := sdk.UnwrapSDKContext(c)
_, err := sdk.AccAddressFromBech32(msg.Signer) _, err := sdk.AccAddressFromBech32(msg.Signer)
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = ms.k.ProcessRenewRecord(ctx, *msg)
err = ms.k.RenewRecord(ctx, *msg)
if err != nil { if err != nil {
return nil, err return nil, err
} }
ctx.EventManager().EmitEvents(sdk.Events{ ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent( sdk.NewEvent(
registrytypes.EventTypeRenewRecord, registrytypes.EventTypeRenewRecord,

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"net/url" "net/url"
"strings" "strings"
"time"
"cosmossdk.io/collections" "cosmossdk.io/collections"
errorsmod "cosmossdk.io/errors" errorsmod "cosmossdk.io/errors"
@ -318,10 +319,7 @@ func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRo
return err return err
} }
// TODO return k.insertAuthorityExpiryQueue(ctx, name, authority.ExpiryTime)
// k.InsertAuthorityExpiryQueue(ctx, name, authority.ExpiryTime)
return nil
} }
func (k Keeper) SetAuthorityBond(ctx sdk.Context, msg registrytypes.MsgSetAuthorityBond) error { func (k Keeper) SetAuthorityBond(ctx sdk.Context, msg registrytypes.MsgSetAuthorityBond) error {
@ -406,10 +404,6 @@ func (k Keeper) DeleteName(ctx sdk.Context, msg registrytypes.MsgDeleteNameAutho
return k.SaveNameRecord(ctx, msg.Crn, "") return k.SaveNameRecord(ctx, msg.Crn, "")
} }
func (k Keeper) GetAuthorityExpiryQueue(ctx sdk.Context) []*registrytypes.ExpiryQueueRecord {
panic("unimplemented")
}
// ResolveCRN resolves a CRN to a record. // ResolveCRN resolves a CRN to a record.
func (k Keeper) ResolveCRN(ctx sdk.Context, crn string) (*registrytypes.Record, error) { func (k Keeper) ResolveCRN(ctx sdk.Context, crn string) (*registrytypes.Record, error) {
_, _, authority, err := k.getAuthority(ctx, crn) _, _, authority, err := k.getAuthority(ctx, crn)
@ -520,6 +514,149 @@ func (k Keeper) checkCRNAccess(ctx sdk.Context, signer sdk.AccAddress, crn strin
return nil return nil
} }
// ProcessAuthorityExpiryQueue tries to renew expiring authorities (by collecting rent) else marks them as expired.
func (k Keeper) ProcessAuthorityExpiryQueue(ctx sdk.Context) error {
names, err := k.getAllExpiredAuthorities(ctx, ctx.BlockHeader().Time)
if err != nil {
return err
}
for _, name := range names {
authority, err := k.GetNameAuthority(ctx, name)
if err != nil {
return err
}
bondExists := false
if authority.BondId != "" {
bondExists, err = k.bondKeeper.HasBond(ctx, authority.BondId)
if err != nil {
return err
}
}
// If authority doesn't have an associated bond or if bond no longer exists, mark it expired.
if !bondExists {
authority.Status = registrytypes.AuthorityExpired
if err = k.SaveNameAuthority(ctx, name, &authority); err != nil {
return err
}
if err = k.deleteAuthorityExpiryQueue(ctx, name, authority); err != nil {
return err
}
// TODO: Setup logger
// k.Logger(ctx).Info(fmt.Sprintf("Marking authority expired as no bond present: %s", name))
return nil
}
// Try to renew the authority by taking rent.
if err := k.tryTakeAuthorityRent(ctx, name, authority); err != nil {
return err
}
}
return nil
}
// getAllExpiredAuthorities returns a concatenated list of all the timeslices before currTime.
func (k Keeper) getAllExpiredAuthorities(ctx sdk.Context, currTime time.Time) ([]string, error) {
var expiredAuthorityNames []string
// Get all the authorities with expiry time until currTime
rng := new(collections.Range[time.Time]).EndInclusive(currTime)
err := k.AuthorityExpiryQueue.Walk(ctx, rng, func(key time.Time, value registrytypes.ExpiryQueue) (stop bool, err error) {
expiredAuthorityNames = append(expiredAuthorityNames, value.Value...)
return false, nil
})
if err != nil {
return []string{}, err
}
return expiredAuthorityNames, nil
}
func (k Keeper) insertAuthorityExpiryQueue(ctx sdk.Context, name string, expiryTime time.Time) error {
existingNamesList, err := k.AuthorityExpiryQueue.Get(ctx, expiryTime)
if err != nil {
if errors.Is(err, collections.ErrNotFound) {
existingNamesList = registrytypes.ExpiryQueue{
Id: expiryTime.String(),
Value: []string{},
}
} else {
return err
}
}
existingNamesList.Value = append(existingNamesList.Value, name)
return k.AuthorityExpiryQueue.Set(ctx, expiryTime, existingNamesList)
}
// deleteAuthorityExpiryQueue deletes an authority name from the authority expiry queue.
func (k Keeper) deleteAuthorityExpiryQueue(ctx sdk.Context, name string, authority registrytypes.NameAuthority) error {
expiryTime := authority.ExpiryTime
existingNamesList, err := k.AuthorityExpiryQueue.Get(ctx, expiryTime)
if err != nil {
return err
}
newNamesSlice := []string{}
for _, id := range existingNamesList.Value {
if id != name {
newNamesSlice = append(newNamesSlice, id)
}
}
if len(existingNamesList.Value) == 0 {
return k.AuthorityExpiryQueue.Remove(ctx, expiryTime)
} else {
existingNamesList.Value = newNamesSlice
return k.AuthorityExpiryQueue.Set(ctx, expiryTime, existingNamesList)
}
}
// tryTakeAuthorityRent tries to take rent from the authority bond.
func (k Keeper) tryTakeAuthorityRent(ctx sdk.Context, name string, authority registrytypes.NameAuthority) error {
// k.Logger(ctx).Info(fmt.Sprintf("Trying to take rent for authority: %s", name))
params, err := k.GetParams(ctx)
if err != nil {
return err
}
rent := params.AuthorityRent
sdkErr := k.bondKeeper.TransferCoinsToModuleAccount(ctx, authority.BondId, registrytypes.AuthorityRentModuleAccountName, sdk.NewCoins(rent))
if sdkErr != nil {
// Insufficient funds, mark authority as expired.
authority.Status = registrytypes.AuthorityExpired
if err := k.SaveNameAuthority(ctx, name, &authority); err != nil {
return err
}
// k.Logger(ctx).Info(fmt.Sprintf("Insufficient funds in owner account to pay authority rent, marking as expired: %s", name))
return k.deleteAuthorityExpiryQueue(ctx, name, authority)
}
// Delete old expiry queue entry, create new one.
if err := k.deleteAuthorityExpiryQueue(ctx, name, authority); err != nil {
return err
}
authority.ExpiryTime = ctx.BlockTime().Add(params.AuthorityRentDuration)
if err := k.insertAuthorityExpiryQueue(ctx, name, authority.ExpiryTime); err != nil {
return err
}
// Save authority.
authority.Status = registrytypes.AuthorityActive
// k.Logger(ctx).Info(fmt.Sprintf("Authority rent paid successfully: %s", name))
return k.SaveNameAuthority(ctx, name, &authority)
}
func getAuthorityPubKey(pubKey cryptotypes.PubKey) string { func getAuthorityPubKey(pubKey cryptotypes.PubKey) string {
if pubKey == nil { if pubKey == nil {
return "" return ""

View File

@ -159,17 +159,3 @@ func (qs queryServer) ResolveCrn(c context.Context, req *registrytypes.QueryReso
return &registrytypes.QueryResolveCrnResponse{Record: record}, nil return &registrytypes.QueryResolveCrnResponse{Record: record}, nil
} }
func (qs queryServer) GetRecordExpiryQueue(c context.Context, _ *registrytypes.QueryGetRecordExpiryQueueRequest) (*registrytypes.QueryGetRecordExpiryQueueResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
records := qs.k.GetRecordExpiryQueue(ctx)
return &registrytypes.QueryGetRecordExpiryQueueResponse{Records: records}, nil
}
func (qs queryServer) GetAuthorityExpiryQueue(c context.Context,
_ *registrytypes.QueryGetAuthorityExpiryQueueRequest,
) (*registrytypes.QueryGetAuthorityExpiryQueueResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
authorities := qs.k.GetAuthorityExpiryQueue(ctx)
return &registrytypes.QueryGetAuthorityExpiryQueueResponse{Authorities: authorities}, nil
}

View File

@ -1,8 +1,12 @@
package keeper package keeper
import ( import (
"time"
errorsmod "cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper" auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
registrytypes "git.vdb.to/cerc-io/laconic2d/x/registry" registrytypes "git.vdb.to/cerc-io/laconic2d/x/registry"
@ -17,9 +21,32 @@ type RecordKeeper struct {
// storeKey storetypes.StoreKey // Unexposed key to access store from sdk.Context // storeKey storetypes.StoreKey // Unexposed key to access store from sdk.Context
} }
// ProcessRenewRecord renews a record. // RenewRecord renews a record.
func (k Keeper) ProcessRenewRecord(ctx sdk.Context, msg registrytypes.MsgRenewRecord) error { func (k Keeper) RenewRecord(ctx sdk.Context, msg registrytypes.MsgRenewRecord) error {
panic("unimplemented") if has, err := k.HasRecord(ctx, msg.RecordId); !has {
if err != nil {
return err
}
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Record not found.")
}
// Check if renewal is required (i.e. expired record marked as deleted).
record, err := k.GetRecordById(ctx, msg.RecordId)
if err != nil {
return err
}
expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime)
if err != nil {
return err
}
if !record.Deleted || expiryTime.After(ctx.BlockTime()) {
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Renewal not required.")
}
readableRecord := record.ToReadableRecord()
return k.processRecord(ctx, &readableRecord, true)
} }
// ProcessAssociateBond associates a record with a bond. // ProcessAssociateBond associates a record with a bond.

View File

@ -27,4 +27,7 @@ var (
NameRecordsPrefix = collections.NewPrefix(6) NameRecordsPrefix = collections.NewPrefix(6)
NameRecordsByCidIndexPrefix = collections.NewPrefix(7) NameRecordsByCidIndexPrefix = collections.NewPrefix(7)
RecordExpiryQueuePrefix = collections.NewPrefix(8)
AuthorityExpiryQueuePrefix = collections.NewPrefix(9)
) )

View File

@ -3,15 +3,22 @@ package module
import ( import (
"context" "context"
sdk "github.com/cosmos/cosmos-sdk/types"
"git.vdb.to/cerc-io/laconic2d/x/registry/keeper" "git.vdb.to/cerc-io/laconic2d/x/registry/keeper"
) )
// EndBlocker is called every block // EndBlocker is called every block
func EndBlocker(ctx context.Context, k keeper.Keeper) error { func EndBlocker(ctx context.Context, k keeper.Keeper) error {
// TODO: Implement sdkCtx := sdk.UnwrapSDKContext(ctx)
// k.ProcessRecordExpiryQueue(ctx) if err := k.ProcessRecordExpiryQueue(sdkCtx); err != nil {
// k.ProcessAuthorityExpiryQueue(ctx) return err
}
if err := k.ProcessAuthorityExpiryQueue(sdkCtx); err != nil {
return err
}
return nil return nil
} }

View File

@ -84,6 +84,14 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions {
Tx: &autocliv1.ServiceCommandDescriptor{ Tx: &autocliv1.ServiceCommandDescriptor{
Service: registryv1.Msg_ServiceDesc.ServiceName, Service: registryv1.Msg_ServiceDesc.ServiceName,
RpcCommandOptions: []*autocliv1.RpcCommandOptions{ RpcCommandOptions: []*autocliv1.RpcCommandOptions{
{
RpcMethod: "RenewRecord",
Use: "renew-record [record-id]",
Short: "Renew (expired) record",
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
{ProtoField: "record_id"},
},
},
{ {
RpcMethod: "ReserveName", RpcMethod: "ReserveName",
Use: "reserve-name [name] [owner]", Use: "reserve-name [name] [owner]",

File diff suppressed because it is too large Load Diff

View File

@ -375,78 +375,6 @@ func local_request_Query_ResolveCrn_0(ctx context.Context, marshaler runtime.Mar
} }
var (
filter_Query_GetRecordExpiryQueue_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Query_GetRecordExpiryQueue_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryGetRecordExpiryQueueRequest
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_GetRecordExpiryQueue_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.GetRecordExpiryQueue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_GetRecordExpiryQueue_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryGetRecordExpiryQueueRequest
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_GetRecordExpiryQueue_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetRecordExpiryQueue(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Query_GetAuthorityExpiryQueue_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Query_GetAuthorityExpiryQueue_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryGetAuthorityExpiryQueueRequest
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_GetAuthorityExpiryQueue_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.GetAuthorityExpiryQueue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_GetAuthorityExpiryQueue_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryGetAuthorityExpiryQueueRequest
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_GetAuthorityExpiryQueue_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetAuthorityExpiryQueue(ctx, &protoReq)
return msg, metadata, err
}
func request_Query_GetRegistryModuleBalance_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { func request_Query_GetRegistryModuleBalance_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryGetRegistryModuleBalanceRequest var protoReq QueryGetRegistryModuleBalanceRequest
var metadata runtime.ServerMetadata var metadata runtime.ServerMetadata
@ -655,52 +583,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
}) })
mux.Handle("GET", pattern_Query_GetRecordExpiryQueue_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_GetRecordExpiryQueue_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_GetRecordExpiryQueue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_GetAuthorityExpiryQueue_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_GetAuthorityExpiryQueue_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_GetAuthorityExpiryQueue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_GetRegistryModuleBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Query_GetRegistryModuleBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
@ -925,46 +807,6 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
}) })
mux.Handle("GET", pattern_Query_GetRecordExpiryQueue_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_GetRecordExpiryQueue_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_GetRecordExpiryQueue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_GetAuthorityExpiryQueue_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_GetAuthorityExpiryQueue_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_GetAuthorityExpiryQueue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_GetRegistryModuleBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Query_GetRegistryModuleBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
@ -1005,10 +847,6 @@ var (
pattern_Query_ResolveCrn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cerc", "registry", "v1", "resolve"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_ResolveCrn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cerc", "registry", "v1", "resolve"}, "", runtime.AssumeColonVerbOpt(false)))
pattern_Query_GetRecordExpiryQueue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cerc", "registry", "v1", "record-expiry"}, "", runtime.AssumeColonVerbOpt(false)))
pattern_Query_GetAuthorityExpiryQueue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cerc", "registry", "v1", "authority-expiry"}, "", runtime.AssumeColonVerbOpt(false)))
pattern_Query_GetRegistryModuleBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cerc", "registry", "v1", "balance"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_GetRegistryModuleBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cerc", "registry", "v1", "balance"}, "", runtime.AssumeColonVerbOpt(false)))
) )
@ -1029,9 +867,5 @@ var (
forward_Query_ResolveCrn_0 = runtime.ForwardResponseMessage forward_Query_ResolveCrn_0 = runtime.ForwardResponseMessage
forward_Query_GetRecordExpiryQueue_0 = runtime.ForwardResponseMessage
forward_Query_GetAuthorityExpiryQueue_0 = runtime.ForwardResponseMessage
forward_Query_GetRegistryModuleBalance_0 = runtime.ForwardResponseMessage forward_Query_GetRegistryModuleBalance_0 = runtime.ForwardResponseMessage
) )

View File

@ -762,6 +762,61 @@ func (m *AuctionBidInfo) GetBidderAddress() string {
return "" return ""
} }
// ExpiryQueue: record / authority expiry queue type
// id: expiry time
// value: array of ids (record cids / authority names)
type ExpiryQueue struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Value []string `protobuf:"bytes,2,rep,name=value,proto3" json:"value,omitempty"`
}
func (m *ExpiryQueue) Reset() { *m = ExpiryQueue{} }
func (m *ExpiryQueue) String() string { return proto.CompactTextString(m) }
func (*ExpiryQueue) ProtoMessage() {}
func (*ExpiryQueue) Descriptor() ([]byte, []int) {
return fileDescriptor_d792f2373089b5b9, []int{10}
}
func (m *ExpiryQueue) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *ExpiryQueue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_ExpiryQueue.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 *ExpiryQueue) XXX_Merge(src proto.Message) {
xxx_messageInfo_ExpiryQueue.Merge(m, src)
}
func (m *ExpiryQueue) XXX_Size() int {
return m.Size()
}
func (m *ExpiryQueue) XXX_DiscardUnknown() {
xxx_messageInfo_ExpiryQueue.DiscardUnknown(m)
}
var xxx_messageInfo_ExpiryQueue proto.InternalMessageInfo
func (m *ExpiryQueue) GetId() string {
if m != nil {
return m.Id
}
return ""
}
func (m *ExpiryQueue) GetValue() []string {
if m != nil {
return m.Value
}
return nil
}
func init() { func init() {
proto.RegisterType((*Params)(nil), "cerc.registry.v1.Params") proto.RegisterType((*Params)(nil), "cerc.registry.v1.Params")
proto.RegisterType((*Record)(nil), "cerc.registry.v1.Record") proto.RegisterType((*Record)(nil), "cerc.registry.v1.Record")
@ -773,96 +828,99 @@ func init() {
proto.RegisterType((*Signature)(nil), "cerc.registry.v1.Signature") proto.RegisterType((*Signature)(nil), "cerc.registry.v1.Signature")
proto.RegisterType((*BlockChangeSet)(nil), "cerc.registry.v1.BlockChangeSet") proto.RegisterType((*BlockChangeSet)(nil), "cerc.registry.v1.BlockChangeSet")
proto.RegisterType((*AuctionBidInfo)(nil), "cerc.registry.v1.AuctionBidInfo") proto.RegisterType((*AuctionBidInfo)(nil), "cerc.registry.v1.AuctionBidInfo")
proto.RegisterType((*ExpiryQueue)(nil), "cerc.registry.v1.ExpiryQueue")
} }
func init() { proto.RegisterFile("cerc/registry/v1/registry.proto", fileDescriptor_d792f2373089b5b9) } func init() { proto.RegisterFile("cerc/registry/v1/registry.proto", fileDescriptor_d792f2373089b5b9) }
var fileDescriptor_d792f2373089b5b9 = []byte{ var fileDescriptor_d792f2373089b5b9 = []byte{
// 1343 bytes of a gzipped FileDescriptorProto // 1365 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0x4d, 0x6f, 0x1b, 0xc5, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0x4f, 0x6f, 0x1b, 0x45,
0x1b, 0xcf, 0xc6, 0x89, 0x13, 0x3f, 0x69, 0xf2, 0xaf, 0xe6, 0x9f, 0xb6, 0x4e, 0x68, 0xbd, 0xa9, 0x14, 0xcf, 0xc6, 0x89, 0x13, 0x3f, 0x37, 0xa1, 0x1a, 0xd2, 0xd6, 0x09, 0xad, 0x37, 0x35, 0x42,
0x11, 0x4a, 0xab, 0xaa, 0x5e, 0xb9, 0x11, 0xaa, 0xda, 0x8a, 0x43, 0x36, 0xb4, 0x51, 0xa8, 0x80, 0x69, 0x55, 0xd5, 0xab, 0x34, 0x42, 0x55, 0x5b, 0x71, 0xc8, 0x86, 0x34, 0x0a, 0x15, 0xd0, 0x4e,
0x32, 0xa9, 0x38, 0x80, 0x90, 0xb5, 0x2f, 0x53, 0x67, 0xa8, 0x77, 0xd7, 0xda, 0x1d, 0x87, 0xfa, 0x2a, 0x0e, 0x20, 0x64, 0xed, 0x9f, 0xa9, 0x33, 0xd4, 0xbb, 0x6b, 0xed, 0xce, 0x9a, 0xfa, 0x88,
0x88, 0xc4, 0x01, 0x6e, 0x3d, 0xf6, 0xc0, 0x37, 0xe0, 0x00, 0xdf, 0x82, 0x1e, 0x7b, 0xe4, 0x82, 0xc4, 0x01, 0x6e, 0x3d, 0xf6, 0xc0, 0x37, 0xe0, 0x00, 0xdf, 0x82, 0x1e, 0x7b, 0xe4, 0x82, 0x41,
0x41, 0x8d, 0xc4, 0x07, 0xf0, 0x27, 0x40, 0xf3, 0xb6, 0x6f, 0xb6, 0x6b, 0xa0, 0xb7, 0x7d, 0xde, 0x8d, 0xc4, 0x07, 0xf0, 0x27, 0x40, 0xf3, 0x67, 0xff, 0xda, 0xae, 0x81, 0xde, 0xf6, 0xfd, 0xfb,
0x7e, 0xf3, 0x9b, 0x67, 0x9e, 0xe7, 0x99, 0x59, 0x30, 0x3d, 0x12, 0x7b, 0x56, 0x4c, 0xba, 0x34, 0xcd, 0x6f, 0xde, 0xbc, 0xf7, 0x66, 0x16, 0x74, 0x87, 0x84, 0x8e, 0x11, 0x92, 0x2e, 0x8d, 0x58,
0x61, 0xf1, 0xd0, 0x3a, 0x6d, 0xa7, 0xdf, 0xad, 0x7e, 0x1c, 0xb1, 0x08, 0x9d, 0xe7, 0x0e, 0xad, 0x38, 0x34, 0x06, 0xbb, 0xe9, 0x77, 0xbb, 0x1f, 0x06, 0x2c, 0x40, 0xe7, 0xb9, 0x43, 0x3b, 0x55,
0x54, 0x79, 0xda, 0xde, 0x6e, 0x74, 0xa3, 0xa8, 0xdb, 0x23, 0x96, 0xb0, 0xbb, 0x83, 0x27, 0x96, 0x0e, 0x76, 0xb7, 0x9a, 0xdd, 0x20, 0xe8, 0xf6, 0x88, 0x21, 0xec, 0x76, 0xfc, 0xc4, 0x70, 0xe3,
0x3f, 0x88, 0x1d, 0x46, 0xa3, 0x50, 0x46, 0x6c, 0x9b, 0x65, 0x3b, 0xa3, 0x01, 0x49, 0x98, 0x13, 0xd0, 0x62, 0x34, 0xf0, 0x65, 0xc4, 0x96, 0x5e, 0xb6, 0x33, 0xea, 0x91, 0x88, 0x59, 0x5e, 0x5f,
0xf4, 0x95, 0xc3, 0x66, 0x37, 0xea, 0x46, 0xe2, 0xd3, 0xe2, 0x5f, 0x4a, 0xdb, 0xf0, 0xa2, 0x24, 0x39, 0x6c, 0x74, 0x83, 0x6e, 0x20, 0x3e, 0x0d, 0xfe, 0xa5, 0xb4, 0x4d, 0x27, 0x88, 0xbc, 0x20,
0x88, 0x12, 0xcb, 0x75, 0x12, 0x62, 0x9d, 0xb6, 0x5d, 0xc2, 0x9c, 0xb6, 0xe5, 0x45, 0x54, 0xc1, 0x32, 0x6c, 0x2b, 0x22, 0xc6, 0x60, 0xd7, 0x26, 0xcc, 0xda, 0x35, 0x9c, 0x80, 0x2a, 0xd8, 0xd6,
0x36, 0x7f, 0x5f, 0x87, 0xea, 0x23, 0x27, 0x76, 0x82, 0x04, 0x51, 0x58, 0x8b, 0x89, 0x17, 0xc5, 0x1f, 0x6b, 0x50, 0x7d, 0x68, 0x85, 0x96, 0x17, 0x21, 0x0a, 0xf5, 0x90, 0x38, 0x41, 0xe8, 0x76,
0x7e, 0x27, 0x26, 0x21, 0xab, 0x1b, 0x3b, 0xc6, 0xb5, 0xb5, 0x5b, 0x5b, 0x2d, 0x09, 0xd0, 0xe2, 0x42, 0xe2, 0xb3, 0x86, 0xb6, 0xad, 0x5d, 0xab, 0xdf, 0xda, 0x6c, 0x4b, 0x80, 0x36, 0x07, 0x68,
0x00, 0x2d, 0x05, 0xd0, 0x3a, 0x88, 0x68, 0x68, 0xdf, 0x7c, 0x39, 0x32, 0x17, 0xc6, 0x23, 0xf3, 0x2b, 0x80, 0xf6, 0x41, 0x40, 0x7d, 0xf3, 0xe6, 0xcb, 0x91, 0xbe, 0x30, 0x1e, 0xe9, 0x1f, 0x7c,
0xbd, 0xaf, 0x93, 0x28, 0xbc, 0xdb, 0xcc, 0xc5, 0x36, 0x77, 0x86, 0x4e, 0xd0, 0x2b, 0xaa, 0x30, 0x13, 0x05, 0xfe, 0xdd, 0x56, 0x2e, 0xb6, 0xb5, 0x3d, 0xb4, 0xbc, 0x5e, 0x51, 0x85, 0x41, 0x4a,
0x48, 0x09, 0x93, 0x90, 0xa1, 0xe7, 0x06, 0x6c, 0xe6, 0x8c, 0x1d, 0xbd, 0xd7, 0xfa, 0xa2, 0x5a, 0x98, 0xf8, 0x0c, 0x3d, 0xd7, 0x60, 0x23, 0x67, 0xec, 0x24, 0x7b, 0x6d, 0x2c, 0xaa, 0x45, 0xe5,
0x54, 0x6e, 0xb6, 0xa5, 0x37, 0xdb, 0xfa, 0x50, 0x39, 0xd8, 0x07, 0x6a, 0xd1, 0xdb, 0x13, 0x8b, 0x66, 0xdb, 0xc9, 0x66, 0xdb, 0x1f, 0x2b, 0x07, 0xf3, 0x40, 0x2d, 0x7a, 0x7b, 0x62, 0xd1, 0x14,
0xa6, 0x20, 0x53, 0x56, 0xcf, 0x6c, 0x2f, 0xfe, 0x30, 0x0d, 0x8c, 0x32, 0x2a, 0x1a, 0x18, 0x0d, 0x64, 0xca, 0xea, 0x99, 0xed, 0xc5, 0x9f, 0xba, 0x86, 0x51, 0x46, 0x25, 0x01, 0x46, 0x31, 0xac,
0x60, 0xc3, 0x19, 0xb0, 0x93, 0x28, 0xa6, 0x6c, 0x28, 0x13, 0x50, 0x99, 0x97, 0x80, 0x3d, 0xc5, 0x5b, 0x31, 0x3b, 0x0d, 0x42, 0xca, 0x86, 0x32, 0x01, 0x95, 0x79, 0x09, 0xd8, 0x53, 0x5c, 0x6e,
0xe5, 0x86, 0xe4, 0x52, 0x0c, 0xd7, 0x2c, 0x4a, 0x5a, 0xbc, 0x9e, 0x2a, 0x44, 0x26, 0x7e, 0x34, 0x48, 0x2e, 0xc5, 0xf0, 0x84, 0x45, 0x49, 0x8b, 0xd7, 0x52, 0x85, 0xc8, 0xc4, 0x4f, 0x1a, 0x5c,
0xe0, 0x52, 0xd1, 0x25, 0x4b, 0xc6, 0xd2, 0xbc, 0x64, 0x1c, 0x29, 0x02, 0x1f, 0x4c, 0x23, 0x30, 0x2a, 0xba, 0x64, 0xc9, 0x58, 0x9a, 0x97, 0x8c, 0x63, 0x45, 0xe0, 0xa3, 0x69, 0x04, 0x26, 0xf2,
0x91, 0x8f, 0x59, 0x66, 0x91, 0x92, 0x0b, 0x05, 0x5a, 0x69, 0x56, 0x5e, 0x18, 0x70, 0x31, 0x8b, 0x31, 0xcb, 0x2c, 0x52, 0x72, 0xa1, 0x40, 0x2b, 0xcd, 0xca, 0x0b, 0x0d, 0x2e, 0x66, 0x71, 0xdd,
0xeb, 0xc6, 0x8e, 0x47, 0x3a, 0x7d, 0x12, 0xd3, 0xc8, 0xaf, 0x2f, 0xcf, 0x63, 0x77, 0xa8, 0xd8, 0xd0, 0x72, 0x48, 0xa7, 0x4f, 0x42, 0x1a, 0xb8, 0x8d, 0xe5, 0x79, 0xec, 0x8e, 0x14, 0xbb, 0x7b,
0xdd, 0x2b, 0xb3, 0xcb, 0xc3, 0x4c, 0x92, 0x2b, 0x58, 0x05, 0xb7, 0xcd, 0xd4, 0x78, 0xc8, 0x6d, 0x65, 0x76, 0x79, 0x98, 0x49, 0x72, 0x05, 0xab, 0xe0, 0xb6, 0x91, 0x1a, 0x8f, 0xb8, 0xed, 0xa1,
0x8f, 0x84, 0x09, 0x7d, 0x6b, 0xc0, 0x56, 0x16, 0xe5, 0x0c, 0x3c, 0xbe, 0x68, 0x87, 0x84, 0x8e, 0x30, 0xa1, 0xef, 0x34, 0xd8, 0xcc, 0xa2, 0xac, 0xd8, 0xe1, 0x8b, 0x76, 0x88, 0x6f, 0xd9, 0x3d,
0xdb, 0x23, 0x7e, 0xbd, 0xba, 0x63, 0x5c, 0x5b, 0xb5, 0xef, 0x8f, 0x47, 0xe6, 0x7e, 0x79, 0xf9, 0xe2, 0x36, 0xaa, 0xdb, 0xda, 0xb5, 0x55, 0xf3, 0x70, 0x3c, 0xd2, 0xf7, 0xcb, 0xcb, 0x97, 0x5c,
0x92, 0xeb, 0x24, 0x83, 0xb2, 0x03, 0xce, 0x4e, 0x68, 0x5f, 0x9a, 0xee, 0x4b, 0x0b, 0xfa, 0xd5, 0x27, 0x19, 0x94, 0x1d, 0x70, 0x76, 0x42, 0xfb, 0xd2, 0x74, 0x28, 0x2d, 0xe8, 0x37, 0x0d, 0xa6,
0x80, 0x29, 0x71, 0x5e, 0x14, 0x04, 0x94, 0x25, 0xd9, 0x41, 0xae, 0xcc, 0x4b, 0x55, 0x47, 0xa5, 0xc4, 0x39, 0x81, 0xe7, 0x51, 0x16, 0x65, 0x07, 0xb9, 0x32, 0x2f, 0x55, 0x1d, 0x95, 0xaa, 0x93,
0xea, 0x78, 0x16, 0xd7, 0x32, 0xe4, 0x6c, 0xd2, 0x13, 0x9e, 0x22, 0x85, 0x66, 0x79, 0x07, 0x07, 0x59, 0x5c, 0xcb, 0x90, 0xb3, 0x49, 0x4f, 0x78, 0x8a, 0x14, 0xea, 0xe5, 0x1d, 0x1c, 0x48, 0xb7,
0xd2, 0x2d, 0x3d, 0xe8, 0xe9, 0x3b, 0x89, 0xc9, 0x29, 0x71, 0x7a, 0xb9, 0x9d, 0xac, 0xbe, 0xf5, 0xf4, 0xa0, 0xa7, 0xef, 0x24, 0x24, 0x03, 0x62, 0xf5, 0x72, 0x3b, 0x59, 0x7d, 0xeb, 0x9d, 0x94,
0x4e, 0xca, 0x90, 0xb3, 0x77, 0x32, 0xe1, 0x39, 0x7d, 0x27, 0x58, 0xba, 0xa5, 0x3b, 0xf9, 0xc9, 0x21, 0x67, 0xef, 0x64, 0xc2, 0x73, 0xfa, 0x4e, 0xb0, 0x74, 0x4b, 0x77, 0xf2, 0xb3, 0x06, 0x97,
0x80, 0xcb, 0xb3, 0xd2, 0xd2, 0x79, 0x42, 0x48, 0xbd, 0x36, 0xaf, 0xaf, 0x3f, 0x55, 0x7b, 0x38, 0x67, 0xa5, 0xa5, 0xf3, 0x84, 0x90, 0x46, 0x6d, 0x5e, 0x5f, 0x7f, 0xae, 0xf6, 0x70, 0xf4, 0xe6,
0x7c, 0xf3, 0x69, 0x70, 0xb0, 0x79, 0xe7, 0x20, 0x7c, 0xf0, 0xd6, 0xf4, 0xec, 0x3f, 0x20, 0x64, 0xd3, 0xe0, 0x60, 0xf3, 0xce, 0x41, 0xf8, 0xe0, 0xcd, 0xe9, 0xd9, 0xbf, 0x4f, 0xc8, 0x0c, 0xb6,
0x06, 0x5b, 0xb9, 0x75, 0xc1, 0x16, 0xde, 0x9a, 0x6d, 0x06, 0x36, 0x2f, 0xd7, 0x33, 0xd8, 0xca, 0x72, 0xeb, 0x82, 0x2d, 0xbc, 0x35, 0xdb, 0x0c, 0x6c, 0x5e, 0xae, 0x67, 0xb0, 0x95, 0x19, 0xe6,
0x0c, 0x73, 0xb6, 0x3f, 0x1b, 0x70, 0x65, 0x32, 0x38, 0xa0, 0x21, 0x0d, 0x06, 0x41, 0xc7, 0xa5, 0x6c, 0x7f, 0xd1, 0xe0, 0xca, 0x64, 0xb0, 0x47, 0x7d, 0xea, 0xc5, 0x5e, 0xc7, 0xa6, 0x6e, 0xa3,
0x7e, 0x7d, 0x6d, 0x1e, 0xdd, 0xcf, 0x14, 0xdd, 0xa3, 0x59, 0x74, 0x73, 0x68, 0xb3, 0xf9, 0xe6, 0x3e, 0x8f, 0xee, 0x23, 0x45, 0xf7, 0x78, 0x16, 0xdd, 0x1c, 0xda, 0x6c, 0xbe, 0x79, 0x27, 0xbc,
0x9d, 0xf0, 0x76, 0x99, 0xf0, 0xc7, 0xd2, 0x6a, 0x53, 0xbf, 0xf9, 0xc3, 0x12, 0x54, 0xb1, 0x98, 0x55, 0x26, 0xfc, 0xa9, 0xb4, 0x9a, 0xd4, 0x6d, 0xfd, 0xb8, 0x04, 0x55, 0x2c, 0xa6, 0x3d, 0xda,
0xf6, 0x68, 0x17, 0x16, 0xa9, 0x2f, 0xae, 0xb5, 0x9a, 0x7d, 0x69, 0x3c, 0x32, 0xff, 0x2f, 0x19, 0x81, 0x45, 0xea, 0x8a, 0x6b, 0xad, 0x66, 0x5e, 0x1a, 0x8f, 0xf4, 0x77, 0x25, 0x83, 0x6c, 0x19,
0x64, 0xcb, 0x70, 0xac, 0x45, 0xea, 0xa3, 0xbb, 0xb0, 0xe2, 0x46, 0xa1, 0xdf, 0xa1, 0xbe, 0xb8, 0x8e, 0xb5, 0x48, 0x5d, 0x74, 0x17, 0x56, 0xec, 0xc0, 0x77, 0x3b, 0xd4, 0x15, 0xf7, 0x51, 0xcd,
0x8f, 0x6a, 0xf6, 0xd5, 0xf1, 0xc8, 0xbc, 0x22, 0xbd, 0x95, 0x41, 0x87, 0x68, 0x11, 0x57, 0xf9, 0xbc, 0x3a, 0x1e, 0xe9, 0x57, 0xa4, 0xb7, 0x32, 0x24, 0x21, 0x89, 0x88, 0xab, 0xfc, 0xeb, 0xd8,
0xd7, 0x91, 0x8f, 0x3e, 0x82, 0x35, 0x2f, 0x26, 0x0e, 0x23, 0x1d, 0x7e, 0x3f, 0x8b, 0x3b, 0xa4, 0x45, 0x9f, 0x40, 0xdd, 0x09, 0x89, 0xc5, 0x48, 0x87, 0xdf, 0xcf, 0xe2, 0x0e, 0xa9, 0x99, 0xd7,
0x66, 0x5f, 0xcf, 0x6e, 0xc9, 0x9c, 0x51, 0x63, 0xe4, 0x55, 0x18, 0xa4, 0xf4, 0x98, 0x06, 0x84, 0xb3, 0x5b, 0x32, 0x67, 0x4c, 0x30, 0xf2, 0x2a, 0x0c, 0x52, 0x7a, 0x4c, 0x3d, 0xc2, 0xb1, 0xc8,
0x63, 0x91, 0x67, 0x7d, 0x1a, 0x0f, 0x25, 0xd6, 0x52, 0x19, 0x2b, 0x67, 0xd4, 0x58, 0x79, 0x15, 0xb3, 0x3e, 0x0d, 0x87, 0x12, 0x6b, 0xa9, 0x8c, 0x95, 0x33, 0x26, 0x58, 0x79, 0x15, 0x06, 0x29,
0x06, 0x29, 0x09, 0xac, 0x3a, 0xac, 0xf8, 0xa4, 0x47, 0x18, 0x91, 0x83, 0x7b, 0x15, 0x6b, 0x11, 0x09, 0xac, 0x06, 0xac, 0xb8, 0xa4, 0x47, 0x18, 0x91, 0x83, 0x7b, 0x15, 0x27, 0x22, 0xba, 0x0d,
0xdd, 0x86, 0x6a, 0xf4, 0x4d, 0x48, 0xe2, 0xa4, 0x5e, 0xdd, 0xa9, 0x5c, 0xab, 0xd9, 0xe6, 0x78, 0xd5, 0xe0, 0x5b, 0x9f, 0x84, 0x51, 0xa3, 0xba, 0x5d, 0xb9, 0x56, 0x33, 0xf5, 0xf1, 0x48, 0x7f,
0x64, 0xbe, 0x23, 0x17, 0x90, 0x7a, 0x8d, 0xad, 0x24, 0xac, 0xdc, 0xd1, 0x21, 0x80, 0xc3, 0x58, 0x4f, 0x2e, 0x20, 0xf5, 0x09, 0xb6, 0x92, 0xb0, 0x72, 0x47, 0x47, 0x00, 0x16, 0x63, 0x21, 0xb5,
0x4c, 0xdd, 0x01, 0x23, 0x89, 0x98, 0x71, 0xe7, 0xec, 0xdd, 0xf1, 0xc8, 0x7c, 0x57, 0x9d, 0x6c, 0x63, 0x46, 0x22, 0x31, 0xe3, 0xce, 0x99, 0x3b, 0xe3, 0x91, 0xfe, 0xbe, 0x3a, 0xd9, 0xd4, 0x96,
0x6a, 0x4b, 0x8f, 0x31, 0xd3, 0xe0, 0x5c, 0x28, 0xda, 0x83, 0xe5, 0xd0, 0x09, 0x48, 0x52, 0x5f, 0x1e, 0x63, 0xa6, 0xc1, 0xb9, 0x50, 0xb4, 0x07, 0xcb, 0xbe, 0xe5, 0x91, 0xa8, 0xb1, 0x2a, 0x08,
0x15, 0x04, 0xae, 0x8c, 0x47, 0xe6, 0x96, 0xc4, 0x10, 0x6a, 0x1d, 0x2e, 0x05, 0x2c, 0x7d, 0x51, 0x5c, 0x19, 0x8f, 0xf4, 0x4d, 0x89, 0x21, 0xd4, 0x49, 0xb8, 0x14, 0xb0, 0xf4, 0x45, 0xbb, 0xb0,
0x1b, 0x96, 0xd8, 0xb0, 0x2f, 0xbb, 0xb9, 0x10, 0xc3, 0xb5, 0x69, 0x8c, 0x14, 0xb0, 0x70, 0x6d, 0xc4, 0x86, 0x7d, 0xd9, 0xcd, 0x85, 0x18, 0xae, 0x4d, 0x63, 0xa4, 0x80, 0x85, 0x6b, 0xeb, 0x2b,
0x7e, 0x09, 0x1b, 0xfb, 0xba, 0x52, 0xee, 0x87, 0x2c, 0x1e, 0x22, 0x04, 0x4b, 0x1c, 0x4d, 0x16, 0x58, 0xdf, 0x4f, 0x2a, 0xe5, 0xd0, 0x67, 0xe1, 0x10, 0x21, 0x58, 0xe2, 0x68, 0xb2, 0x28, 0xb0,
0x05, 0x16, 0xdf, 0xe8, 0x7d, 0x58, 0x26, 0xdc, 0xa8, 0xde, 0x22, 0x66, 0xab, 0xfc, 0x54, 0x6b, 0xf8, 0x46, 0x1f, 0xc2, 0x32, 0xe1, 0x46, 0xf5, 0x16, 0xd1, 0xdb, 0xe5, 0xa7, 0x5a, 0xfb, 0x33,
0x7d, 0xe2, 0x04, 0x24, 0x05, 0xc2, 0xd2, 0xbb, 0xf9, 0x57, 0x05, 0xd6, 0x0b, 0x06, 0xf4, 0x15, 0xcb, 0x23, 0x29, 0x10, 0x96, 0xde, 0xad, 0xbf, 0x2b, 0xb0, 0x56, 0x30, 0xa0, 0xaf, 0xe1, 0xbc,
0x9c, 0x17, 0x99, 0xea, 0xf4, 0x07, 0x6e, 0x8f, 0x7a, 0x9d, 0xa7, 0x64, 0xa8, 0xaa, 0x6f, 0x6f, 0xc8, 0x54, 0xa7, 0x1f, 0xdb, 0x3d, 0xea, 0x74, 0x9e, 0x92, 0xa1, 0xaa, 0xbe, 0xbd, 0xf1, 0x48,
0x3c, 0x32, 0xad, 0x5c, 0x8a, 0x73, 0x1e, 0x85, 0x64, 0xe7, 0xf5, 0x78, 0x43, 0xa8, 0x1e, 0x09, 0x37, 0x72, 0x29, 0xce, 0x79, 0x14, 0x92, 0x9d, 0xd7, 0xe3, 0x75, 0xa1, 0x7a, 0x28, 0x34, 0x0f,
0xcd, 0x43, 0x32, 0x44, 0x18, 0xd6, 0xa5, 0x93, 0xe3, 0xfb, 0x31, 0x49, 0x12, 0x55, 0xab, 0x37, 0xc8, 0x10, 0x61, 0x58, 0x93, 0x4e, 0x96, 0xeb, 0x86, 0x24, 0x8a, 0x54, 0xad, 0xde, 0x1c, 0x8f,
0xc7, 0x23, 0xf3, 0x7a, 0x1e, 0x5b, 0x99, 0x8b, 0xc0, 0x5a, 0x89, 0xcf, 0x09, 0x79, 0x5f, 0x8a, 0xf4, 0xeb, 0x79, 0x6c, 0x65, 0x2e, 0x02, 0x27, 0x4a, 0x7c, 0x4e, 0xc8, 0xfb, 0x52, 0x44, 0x17,
0xe8, 0x22, 0x54, 0x4f, 0x08, 0xed, 0x9e, 0xc8, 0xc7, 0xcf, 0x12, 0x56, 0x12, 0xd7, 0x27, 0xcc, 0xa1, 0x7a, 0x4a, 0x68, 0xf7, 0x54, 0x3e, 0x7e, 0x96, 0xb0, 0x92, 0xb8, 0x3e, 0x62, 0x16, 0x8b,
0x61, 0x83, 0x44, 0x16, 0x21, 0x56, 0x12, 0x7a, 0x00, 0xa0, 0x3b, 0x92, 0xca, 0xc2, 0xaa, 0x15, 0x23, 0x59, 0x84, 0x58, 0x49, 0xe8, 0x3e, 0x40, 0xd2, 0x91, 0x54, 0x16, 0x56, 0xad, 0x50, 0x02,
0x4a, 0x20, 0xb5, 0x65, 0x9d, 0x9c, 0x6a, 0x70, 0x4d, 0x09, 0x47, 0x85, 0x8e, 0xab, 0xfe, 0xdb, 0xa9, 0x2d, 0xeb, 0xe4, 0x54, 0x83, 0x6b, 0x4a, 0x38, 0x2e, 0x74, 0x5c, 0xf5, 0xbf, 0x76, 0x9c,
0x8e, 0x0b, 0x8b, 0x5d, 0x22, 0xef, 0xda, 0xed, 0x89, 0x1b, 0xea, 0xb1, 0x7e, 0x2e, 0xdb, 0xed, 0x5f, 0xec, 0x12, 0x79, 0xd7, 0x6e, 0x4d, 0xdc, 0x50, 0x8f, 0x93, 0xe7, 0xb2, 0xb9, 0x5b, 0x7c,
0xe2, 0xbb, 0x75, 0x4e, 0x17, 0x3d, 0xe7, 0x97, 0x4e, 0xae, 0x93, 0x9a, 0xc7, 0x50, 0xe3, 0xe7, 0xb7, 0xce, 0xe9, 0xa2, 0xe7, 0xfc, 0xd2, 0xc9, 0x75, 0x52, 0xeb, 0x04, 0x6a, 0xfc, 0x9c, 0x67,
0x3c, 0xbb, 0x80, 0x6e, 0x15, 0x0b, 0xe8, 0xf2, 0xf4, 0x02, 0x92, 0x43, 0x49, 0x57, 0xcf, 0x77, 0x17, 0xd0, 0xad, 0x62, 0x01, 0x5d, 0x9e, 0x5e, 0x40, 0x72, 0x28, 0x25, 0xd5, 0xf3, 0xbd, 0x06,
0x06, 0x40, 0xa6, 0x45, 0x77, 0xa0, 0xda, 0x73, 0x18, 0x49, 0xf4, 0x2b, 0xfc, 0xea, 0x9b, 0x30, 0x90, 0x69, 0xd1, 0x1d, 0xa8, 0xf6, 0x2c, 0x46, 0xa2, 0xe4, 0x15, 0x7e, 0xf5, 0x4d, 0x18, 0x82,
0x04, 0x13, 0xac, 0x02, 0xd0, 0x3d, 0x58, 0x39, 0xa1, 0x09, 0x8b, 0xc4, 0xfa, 0x95, 0x7f, 0x16, 0x09, 0x56, 0x01, 0xe8, 0x1e, 0xac, 0x9c, 0xd2, 0x88, 0x05, 0x62, 0xfd, 0xca, 0xbf, 0x8b, 0x4d,
0xab, 0x23, 0x9a, 0x77, 0xe0, 0x7f, 0x25, 0x1b, 0xda, 0xc8, 0xa6, 0xa6, 0x18, 0x8e, 0x59, 0x89, 0x22, 0x5a, 0x77, 0xe0, 0x9d, 0x92, 0x0d, 0xad, 0x67, 0x53, 0x53, 0x0c, 0xc7, 0xac, 0x44, 0x16,
0x2c, 0xe6, 0x4b, 0xa4, 0xc9, 0xa0, 0x76, 0x4c, 0xbb, 0xa1, 0xc3, 0x06, 0x31, 0x41, 0x37, 0xa0, 0xf3, 0x25, 0xd2, 0x62, 0x50, 0x3b, 0xa1, 0x5d, 0xdf, 0x62, 0x71, 0x48, 0xd0, 0x0d, 0xa8, 0x44,
0x92, 0xd0, 0xae, 0xaa, 0xf6, 0xad, 0xf1, 0xc8, 0xbc, 0x20, 0x73, 0x9d, 0xd0, 0xae, 0xce, 0x31, 0xb4, 0xab, 0xaa, 0x7d, 0x73, 0x3c, 0xd2, 0x2f, 0xc8, 0x5c, 0x47, 0xb4, 0x9b, 0xe4, 0x98, 0x7f,
0xff, 0xc4, 0xdc, 0x8b, 0x1f, 0x7e, 0x7f, 0xe0, 0x8a, 0xf6, 0x98, 0x18, 0xb7, 0xca, 0xa0, 0x83, 0x62, 0xee, 0xc5, 0x0f, 0xbf, 0x1f, 0xdb, 0xa2, 0x3d, 0x26, 0xc6, 0xad, 0x32, 0x24, 0x41, 0x89,
0xb4, 0x88, 0xab, 0xfd, 0x81, 0xfb, 0x90, 0x0c, 0x9b, 0xdf, 0x2f, 0xc2, 0x86, 0xdd, 0x8b, 0xbc, 0x88, 0xab, 0xfd, 0xd8, 0x7e, 0x40, 0x86, 0xad, 0x1f, 0x16, 0x61, 0xdd, 0xec, 0x05, 0xce, 0xd3,
0xa7, 0x07, 0x27, 0x4e, 0xd8, 0x25, 0xc7, 0x84, 0xe5, 0x08, 0xf2, 0xe5, 0x2b, 0x69, 0x0d, 0xd7, 0x83, 0x53, 0xcb, 0xef, 0x92, 0x13, 0xc2, 0x72, 0x04, 0xf9, 0xf2, 0x95, 0xb4, 0x86, 0x1b, 0xb0,
0x61, 0x45, 0x3e, 0xfb, 0x13, 0x91, 0x98, 0x1a, 0xd6, 0x22, 0xda, 0x86, 0x55, 0x55, 0x8a, 0x49, 0x22, 0x9f, 0xfd, 0x91, 0x48, 0x4c, 0x0d, 0x27, 0x22, 0xda, 0x82, 0x55, 0x55, 0x8a, 0x51, 0xa3,
0xbd, 0x22, 0x4c, 0xa9, 0x8c, 0xfa, 0x70, 0x4e, 0xd7, 0xac, 0x4b, 0x7d, 0x5e, 0xff, 0x3c, 0xa7, 0x22, 0x4c, 0xa9, 0x8c, 0xfa, 0x70, 0x2e, 0xa9, 0x59, 0x9b, 0xba, 0xbc, 0xfe, 0x79, 0x4e, 0xb7,
0x3b, 0x93, 0x39, 0x55, 0x57, 0x8f, 0x4d, 0xfd, 0xa3, 0xf0, 0x49, 0x64, 0xdf, 0x18, 0x8f, 0xcc, 0x27, 0x73, 0xaa, 0xae, 0x1e, 0x93, 0xba, 0xc7, 0xfe, 0x93, 0xc0, 0xbc, 0x31, 0x1e, 0xe9, 0x3b,
0xdd, 0x62, 0x17, 0xf0, 0xf8, 0x72, 0x1f, 0x08, 0x1d, 0x5e, 0x73, 0xd2, 0xe0, 0x04, 0xed, 0xc0, 0xc5, 0x2e, 0xe0, 0xf1, 0xe5, 0x3e, 0x10, 0x3a, 0x5c, 0xb7, 0xd2, 0xe0, 0x08, 0x6d, 0x43, 0x3d,
0x9a, 0xbe, 0xcf, 0x28, 0x49, 0xea, 0xcb, 0x82, 0x50, 0x5e, 0x85, 0x36, 0xf5, 0xbc, 0x14, 0x03, 0xb9, 0xcf, 0x28, 0x89, 0x1a, 0xcb, 0x82, 0x50, 0x5e, 0x85, 0x36, 0x92, 0x79, 0x29, 0x06, 0xb6,
0x5b, 0x0d, 0xc4, 0xe6, 0x2f, 0x06, 0x1f, 0x6f, 0x79, 0x12, 0xa5, 0xf6, 0x34, 0xfe, 0x73, 0x7b, 0x1a, 0x88, 0xad, 0x5f, 0x35, 0x3e, 0xde, 0xf2, 0x24, 0x4a, 0xed, 0xa9, 0xfd, 0xef, 0xf6, 0xfc,
0x7e, 0x0e, 0x1b, 0x2e, 0xf5, 0xfd, 0x89, 0x59, 0x63, 0x65, 0x3f, 0x3f, 0x45, 0x7b, 0xda, 0xac, 0x02, 0xd6, 0x6d, 0xea, 0xba, 0x13, 0xb3, 0xc6, 0xc8, 0x7e, 0x7e, 0x8a, 0xf6, 0xb4, 0x59, 0x8b,
0x45, 0x2d, 0x5e, 0x97, 0x0a, 0x35, 0x6e, 0xec, 0xfd, 0x97, 0xaf, 0x1b, 0xc6, 0xab, 0xd7, 0x0d, 0x5a, 0xbc, 0x26, 0x15, 0x6a, 0xdc, 0xb4, 0xf6, 0xa0, 0x7e, 0x28, 0x1a, 0xeb, 0x51, 0x4c, 0x62,
0xe3, 0xcf, 0xd7, 0x0d, 0xe3, 0xf9, 0x59, 0x63, 0xe1, 0xd5, 0x59, 0x63, 0xe1, 0xb7, 0xb3, 0xc6, 0x32, 0x51, 0x6a, 0x1b, 0xb0, 0x3c, 0xb0, 0x7a, 0x31, 0x51, 0xe7, 0x25, 0x05, 0x73, 0xff, 0xe5,
0xc2, 0x17, 0xbb, 0x5d, 0xca, 0x5a, 0xa7, 0xbe, 0xdb, 0x62, 0x91, 0xc5, 0x53, 0x7d, 0x93, 0x46, 0xeb, 0xa6, 0xf6, 0xea, 0x75, 0x53, 0xfb, 0xeb, 0x75, 0x53, 0x7b, 0x7e, 0xd6, 0x5c, 0x78, 0x75,
0x56, 0xcf, 0xf1, 0xa2, 0x90, 0x7a, 0xb7, 0x7c, 0xeb, 0x59, 0xfa, 0x3b, 0xed, 0x56, 0x45, 0x83, 0xd6, 0x5c, 0xf8, 0xfd, 0xac, 0xb9, 0xf0, 0xe5, 0x4e, 0x97, 0xb2, 0xf6, 0xc0, 0xb5, 0xdb, 0x2c,
0xef, 0xfd, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x12, 0xe3, 0x33, 0x72, 0x0f, 0x00, 0x00, 0x30, 0xf8, 0xf9, 0xdc, 0xa4, 0x81, 0xd1, 0xb3, 0x9c, 0xc0, 0xa7, 0xce, 0x2d, 0xd7, 0x78, 0x96,
0xfe, 0x83, 0xdb, 0x55, 0x31, 0x15, 0xf6, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x85, 0xe1,
0xaf, 0xa7, 0x0f, 0x00, 0x00,
} }
func (m *Params) Marshal() (dAtA []byte, err error) { func (m *Params) Marshal() (dAtA []byte, err error) {
@ -1472,6 +1530,45 @@ func (m *AuctionBidInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil return len(dAtA) - i, nil
} }
func (m *ExpiryQueue) 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 *ExpiryQueue) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *ExpiryQueue) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.Value) > 0 {
for iNdEx := len(m.Value) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Value[iNdEx])
copy(dAtA[i:], m.Value[iNdEx])
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Value[iNdEx])))
i--
dAtA[i] = 0x12
}
}
if len(m.Id) > 0 {
i -= len(m.Id)
copy(dAtA[i:], m.Id)
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Id)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func encodeVarintRegistry(dAtA []byte, offset int, v uint64) int { func encodeVarintRegistry(dAtA []byte, offset int, v uint64) int {
offset -= sovRegistry(v) offset -= sovRegistry(v)
base := offset base := offset
@ -1742,6 +1839,25 @@ func (m *AuctionBidInfo) Size() (n int) {
return n return n
} }
func (m *ExpiryQueue) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Id)
if l > 0 {
n += 1 + l + sovRegistry(uint64(l))
}
if len(m.Value) > 0 {
for _, s := range m.Value {
l = len(s)
n += 1 + l + sovRegistry(uint64(l))
}
}
return n
}
func sovRegistry(x uint64) (n int) { func sovRegistry(x uint64) (n int) {
return (math_bits.Len64(x|1) + 6) / 7 return (math_bits.Len64(x|1) + 6) / 7
} }
@ -3654,6 +3770,120 @@ func (m *AuctionBidInfo) Unmarshal(dAtA []byte) error {
} }
return nil return nil
} }
func (m *ExpiryQueue) 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 ErrIntOverflowRegistry
}
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: ExpiryQueue: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: ExpiryQueue: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
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 ErrInvalidLengthRegistry
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Id = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
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 ErrInvalidLengthRegistry
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Value = append(m.Value, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipRegistry(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthRegistry
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipRegistry(dAtA []byte) (n int, err error) { func skipRegistry(dAtA []byte) (n int, err error) {
l := len(dAtA) l := len(dAtA)
iNdEx := 0 iNdEx := 0